POX控制器的分析(二)

article/2025/8/23 9:54:48

       在上一篇具体讲述POX有哪些组件,以及各个组件的功能,这篇文章主要理解POX的启动以及组件是如何启动的,以及组件与事件的关系:


由上图知,of_01 主要是运行一个线程,该线程不断与交换机进行TCP连接, 当某交换机送来一个协议消息时,of_01会触发该消息 所对应的事件。openflow则与所有的物理交换机相连,而控制器可以通过openflow控制所有的交换机,任意交换机传上来的消息都会触发openflow的事件,在设计自己的组件时,如果不需要监听特定的交换机,监听openflow肯定没错。

事件组成:

  • source:给组件提供可被监听的事件,通过raise函数触发事件给监听它的组件;
  • sink:监听source的组件。

 启动pox.py:

Pox.py 里面大部分都是注释,真正只有以下几行代码:


调用pox.boot模块中的boot()函数。

这时就想了解boot函数的作用,下面是进入boot.py里查看的代码:



 

可以看出里面的内容包括:

第442~444行代码将pox和ext的两个文件夹的路径加入到了系统的path里;

还有启动了POX以及相关组件。

关键代码是第459行的_do_launch()函数启动了相关组件,其中_post_startup()由下图390~392行启动openflow.of_01,core.goUp则启动了core里面的登记Debug信息和事件机制。

在core.py的代码中,有core = POXCore()。代码中还有这个函数的定义class POXCore() (EventMixin)。可以看出,POXCore这个类是revent.py中class EventMixin的一个子类,是处理事件最高层的模块。另外,如果看后面的代码可以知道,POX的启动是由_do_Launch()函数完成的。

组件启动:

 组件启动函数:pox.boot.do_launch

这些代码完成了模块的加载+初始化工作,其中:

第135~155行代码创建component_order的列表,用于存放组件的名称。然后再逐个启动,初始化;

第157~164行代码通过创建组件的函数名,并定义了组件的加载顺序;

第166~169行代码使用_do_import()函数将相关组件模块引入;

第171行代码检查了类中是否存在相应的launch函数。其中sys.modules 是一个字典,它包含了从Python 开始运行起,被导入的所有模块。用sys.modules[name]可以获取name模块的引用。由于类的实例会有一个__dict__的特性字典,其中是该类的所有特性。

如:

第172行从特性中初始化函数实例;

第189行代码就是执行初始化函数的语句。

 
pox的过程如下: 



组件启动代码:

以l3_learning组件来举例:


我们观察到最后一行需要注册组件,这时就需要查看core.registerNew()这个函数:


可执行语句很少,基本上注释已经完全涵盖了这个函数的作用。主要是在pox注册一个新的线程,如果已存在名字则重载,返回新的实例。同时我们看到在这个函数里面使用到了register()函数,函数定义如下:


Register()实现了在初始化的时候,将相关组件加入到了pox.core.core之中。这时Core raise了一个ComponentRegistered事件,是以组件为参数注册事件。

注册阶段结束了?还没有,有一个问题还没有解决:组件的event_handler是如何与events绑定在一起的呢?

组件与事件的关系:(事件绑定)


上面可以看出:组件通过监听内核core来注册事件。

这时就需要listenTo()函数,经过查找在revent.py里面:


这时接着调用autoBindEvents()函数:


从注释中我们可以看出这个函数的作用:

无非就是讲handler端的sink和event的source连接起来,方式就是先在sink端将所有event的名字放在一个字典中,然后在sink中寻找带有“__handle__event”的函数,最后,如果两边有对应的event和handler,就建立连接。


其中又调用了addListener()函数,这个函数的功能最重要:



建立一个与eventType对应的handlers,将带有handler和eid等信息的entry添加到handlers队列中,priority决定这个handlers在处理时的优先级,若无特殊优先级,则按正常顺序放在队尾

下面还有一个问题:handler在哪?这个问题关系到事件如何被处理。其实,从autoBindEvent的函数定义可以看到,最后addListener函数的执行对象是source。也就是说,handler列表在发起事件的组件中可以看到。因而我们来看source类,即:


第83行代码中使用raiseEvent()函数,其中参数为组件注册。来看raiseEvent函数:


就这样事件就绑定完成了。

POX的过程图如下:


额外的一个小case:在POX中添加新模块,将新模块存入ext文件夹,可以通过参数,直接调用。如:

copy一个模块(forwarding.l2_learning.py)到ext文件夹中,改名为ext/my_component.py,执行新模块为:./pox.py my_component.

以上的学习是在网上看北邮赵伟明的blog,加上自己的理解总结的,看完后发现制定POX控制器团队的优秀,还有就是自己暂时分析到这里,当然还有好多代码也没有看,需要今后边学边看,自己还需要很长的道路需要走,需要更加努力,这样才能在SDN的学习有更多自己的成果。





http://chatgpt.dhexx.cn/article/aBAlnQ09.shtml

相关文章

Maven项目中pox.xml文件报错以及项目编译错误

我用Eclipse开发Maven项目,本来好好的,但是后来莫名其妙的其中pom.xml文件报错,后来执行install命令时又编译不通过报错。我痛苦地摸索了一整天,最后才把问题解决了。虽然问题解决了,但我也不知道问题症结所在&#xf…

Ubuntu18.04 mininet+pox+poxdesk配置

目录 前言关于系统Ubuntu20.04的坑 mininet的安装安装部署测试 poxpoxdesk安装部署 自定义拓扑结构tree.py(自定义拓扑网络)poxpoxdesk加载组件mininet启动命令 总结参考资料 前言 朋友最近在上SDN的课程,Software Defined Network&#x…

5.pox.xml文件

pom文件 即Project Object Model项目对象模型。Maven 把-个项目的结构和内容抽象成一个模型 ,在xml文件中进行声明,以方便进行构建和描述, pom.xml是Maven的灵魂。所以, maven环境搭建好之后,所有的学习和操作都是关于pom.xml的。 1.基本信息 modelVersion Maven模型的版本&am…

CoinEx研究院:PoX=PoW+PoS?一文详述Stacks项目

如果你身处加密领域,那么你应该了解工作量证明PoW(Proof of Work)——它是比特币区块链的共识算法;或许你也知道权益证明PoS(Proof of Stake)。这二者为当今区块链世界的绝大多数主要参与者提供了驱动力。 …

POX控制器的分析(一)

最近刚刚对SDN产生了很大的兴趣,相对之前使用的POX控制器作出一个分析,了解控制器的机制,这样更好的理解SDN。 本文从https://openflow.stanford.edu/display/ONL/POXWiki官方网站中进行学习的。 首先从POX的自带的组件来分析: 其…

pox控制器学习笔记

一、安装pox pox基于python2.7 $ git clone http://github.com/noxrepo/pox $ cd pox ~/pox$ git checkout dart二、调用pox 如果想快速入门 ./pox.py samples.pretty_log Forwarding.l2_learningPOX本身有几个可选的命令行参数,这些参数可以在命令行开始时使用…

【Mininet】基础篇:开源控制器POX

大家好,我是文思月! 每文一言:时间不在于你拥有多少,而在于你如何使用! 本篇文章: 本篇文章主要是基于POX控制器进行的两个实验:一个是使交换机模拟hub(集线器)的功能&a…

浅谈UML的概念和模型之UML视图

目录 UML的视图 UML的九种图UML中类间的关系 相信大家都知道UML的全称,统一建模语言(UML是 Unified Modeling Language的缩写)是用来对软件系统进行可视化建模的一种语言。UML为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准…

【UML】UML基本概念

1、简述 UML全称是Unified Modeling Language,直译是“统一建模语言”,简单理解就是一组有特殊用途的、国际化的“象形文字”。 2、UML图 UML图有好多种,大致分为两类:结构型和行为型,分别对应静态分析和动态分析。…

浅谈UML的概念和模型之UML类图关系

目录 UML的视图 UML的图 UML的类图关系 类与类之间的关系通常有4种,即依赖关系(Dependency)、泛化关系(Generalization)、关联关系(Association)、实现关系(Realization&#xff…

如何画UML图

UML 一,UML概述 什么是uml UML 是 OMG 在1997年1月提出了创建由对象管理组和 UML1.0 规范草案; UML 是一种为面向对象开发系统的产品进行说明、可视化、和编制文档的标准语言;UML 作为一种模型语言,它使开发人员专注于建立产品的模…

UML图简介

文章目录 UML图简介UML中的各个图的功能作用:用例图(Use Case Diagram)类图(Class Diagram)序列图(Sequence Diagram)对象图(Object Diagram)包图(Package Diagram)活动图&#xff0…

UML图

UML图 UML(Unified Modeling Language)是一种标准的面向对象建模语言,用于描述软件系统的设计和开发。UML图包括以下几种类型: 结构图:用于描述系统静态结构,包括类图、对象图、组件图、部署图等。行为图…

UML类图是什么

一、什么是UML类图 先引用一段百度百科的定义 统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。 类图是描述系统中的类,以及各个…

UML介绍及怎么看UML图

最近做毕业设计,用到了libcitygml开源库,获取到一张citygml的UML图,就顺便简单了解一下它! 一、简介 UML(Unified Modeling Language),直接翻译就是统一建模语言。 二、UML的作用 UML可以帮助我…

什么是UML?为什么要用UML?

什么是UML? UML是Unified Model Language的缩写,中文是统一建模语言,是由一整套图表组成的标准化建模语言。 为什么要用UML? 通过使用UML使得在软件开发之前, 对整个软件设计有更好的可读性,可理解性,从而降低开发风险。同时,也能方便各个开发人员之间的交流。 UML…

【UML】UML几种图的绘制

08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/details/7747205 UML几种图的绘制 UML是Unified Modeling Language&…

浅谈UML的概念和模型之UML九种图

目录: UML的视图 UML的九种图 UML中类间的关系 上文我们介绍了,UML的视图,在每一种视图中都包含一个或多种图。本文我们重点讲解UML每种图的细节问题: 1、用例图(use case diagrams) 【概念】描述用户需…

UML——概述(什么是UML?UML有什么作用?面向对象技术)

目录 什么是UML? UML能帮我们做什么? 什么是建模? 为什么要建模? 为什么要可视化建模? 建模的原理(原则) UML的基本构造块 UMl中事物有哪些? 面向对象技术 什么是UML&#…

详细说明UML类图是什么?

作者:亿图图示 链接:https://www.zhihu.com/question/419312525/answer/1535413984 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 UML类图,UML中的一种重要图形,是在…