pox事件系统

当pox运行了一个转发app时,pox是怎么通过事件系统来运行这个app的,下面我们以l2_learning.py为例来分析下这个事件系统:

l2_learning.py文件定义了两个类:LearningSwitch、l2_learning,LearningSwitch类中的handle_PacketIn函数定义了交换机自学习的能力,l2_learning类实现了交换机一旦连接了就使其成为一个自学习交换机。启动pox时,组件中的launch函数会执行,下面看看l2_learninglaunch函数:


launch函数中最重要的一句话:core.registerNew(l2.learning,str_to_bool(transparent))

registerNew函数调用了register函数,register函数中会触发ComponentRegistered事件,

也就是说core.registerNew(l2.learning,str_to_bool(transparent))这句代码会使得core触发一个事件:ComponentRegistered事件。下面给出代码:


core触发了一个事件,那么事件处理函数在哪里?事件是怎样绑定到一个handler函数的?

每个组件中的初始化函数_init_中会有listenTo函数或者addListener函数:


istenTo函数和addListener函数定义在pox/pox/lib/revent/revent.py中:


listenTo函数从注释上可以看出功能:将self上的所有的handler函数绑定到source产生的events上。

而addListener函数是将sink(监听者)的所有handler函数绑定到self上(ps:self是当前对象)。

具体怎么绑定可以看autoBindEvents函数:



现在,我们大致知道了事件会和handler函数绑定,下面我们来找找事件ComponentRegistered绑定了哪个handler函数:见pox/pox/lib/revent/revent.py


这样,我们的l2_learning.py就注册到了core中.......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值