POX及组件启动分析

这里写图片描述

Pox.py 里面除了一堆的注释以外,真正有用的只有几句会运行的:
pox教程1

boot()函数在/pox/boot.py里,内容如下:

把pox和ext两个文件夹的路径加入系统path中
_do_launch去启动各个模块,启动pox
_do_import()函数将相关组件模块导入
定义Options和POXoptions两个类,用于定义选项
定义了其他预启动项,如写日记等等。

这里写图片描述
核心的启动代码是以下的代码:
pox教程4

_do_launch()启动了pox及相关组件。之后通过_post_startup()启动openflow.of_01。core.goUp则启动了core里面的登记Debug信息和事件机制。

core.py里面最后一句:core=POXCore(),使得整个类有了实例化,在外部调用时,直接使用core。

组件加载

在启动pox的时候,相应会启动pox的许多组件,而不是单一的仅仅启动一个pox的主程序。启动了相关组件之后,才能去管理各个组件,并通过handler去管理消息队列中的不同的事件,实现事件的管理。组件的加载与初始化在boot()文件里的_do_launch()函数里,代码如下:

这里写图片描述

首先创建component_order的列表,用于存放组件的名称。然后再逐个启动,初始化。
第162行,将名字分为两部分;163行则决定了启动的默认顺序:
这里写图片描述

使用_do_import()函数将相关组件模块引入。

if launch in sys.modules[name].__dict__:检查launch是否属于sys.modules这个字典。而dict是python里面的特性字典,,用于存放类的实例的所有特性。

下一行 f = sys.modules[name].__dict__[launch]从模块中,实例化函数。

最后,f(**params) 初始化函数


组件启动:
这里写图片描述

去看一看core.registerNew()这个函数:

这里写图片描述

可执行语句很少,基本上注释已经完全涵盖了这个函数的作用。主要是在pox注册一个新的线程,如果已存在名字则重载,返回新的实例。同时我们看到在这个函数里面使用到了register()函数,register()实现了在初始化的时候,将相关组件加入到了pox.core.core之中。Core raise了一个ComponentRegistered事件,接着进入等待阶段。

进行到这里,我们需要做的还有一件事,就是将组件的event_handler与相应的events绑定到一起。


事件绑定

这里写图片描述

在每一个组件里面都会有初始函数,而每一个初始函数里面多包含事件绑定的开始们那就是listenTo()函数:
这里写图片描述

listenTo()函数在哪里出现呢?寻找之后,你会发现他出现在一个非常重要的文件——revent.py里面。

这里写图片描述

继续调用autoBindEvents()函数实现绑定。

这里写图片描述

我们可以看出这个函数的作用:handler端的sink和event的source连接起来,方式为:
这里写图片描述


事件处理

事件处理的函数主要有:raiseEventsNoErrors()和raiseEvents()函数。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值