1    ./pox/pox.py , Pox入口 ,调用 pox/boot.py.boot()

 

2       实例化core=pox.core.initialize(),即为实例化POXCore类(该类是所有组件的交接点,提供组件注册功能),监听core即可监听以下事件

2.1       声明事件

  _eventMixin_events = set([
UpEvent,
DownEvent,
GoingUpEvent,
GoingDownEvent,
ComponentRegistered
])

 

 

3       _do__launch(argv)

 

 

3.1       分析传入参数

3.2       _pre_startup(), 调用pox.openflow.launch() 加载 openflow 组件,处理openflow连接

3.2.1   注册OpenFlowConnectionArbiter,为连接建立nexus关系

3.2.2   将OpenFlowNexus注册为openflow组件,申明了openflow事件,监听core.openflow 即可监听以下事件

  _eventMixin_events = set([
ConnectionUp,
ConnectionDown,
FeaturesReceived,
PortStatus,
FlowRemoved,
PacketIn,
BarrierIn,
ErrorIn,
RawStatsReply,
SwitchDescReceived,
FlowStatsReceived,
AggregateFlowStatsReceived,
TableStatsReceived,
PortStatsReceived,
QueueStatsReceived,
FlowRemoved,
])

3.3       从参数中加载组件,调用各组件中的launch函数

 

 

4       _post_startup()

4.1       调用pox.openflow.of_01.launch(),注册openflow.of_01 组件

4.1.1   实例化日志接口 core.getLogger('libopenflow_01')

4.1.2   实例化OpenFlow_01_Task

4.1.2.1  监听pox.core.GoingUpEvent,处理函数为_handle_GoingUpEvent

4.1.3   在Core中注册of_01组件,组件任务为OpenFlow_01_Task

 

5       core.goUp(),执行POXCore.goUp()代码,

5.1       产生GoingUpEvent事件,执行of_01._handle_GoingUpEvent(),创建SOCK_STREAM监听TCP数据包

         当有连接请求时,实例化of_01.Connection,声明事件

_eventMixin_events = set([
ConnectionUp,
ConnectionDown,
PortStatus,
FlowRemoved,
PacketIn,
ErrorIn,
BarrierIn,
RawStatsReply,
SwitchDescReceived,
FlowStatsReceived,
AggregateFlowStatsReceived,
TableStatsReceived,
PortStatsReceived,
QueueStatsReceived,
FlowRemoved,
])

5.2       产生UpEvent事件,执行

openflow以及 of_01.connection事件的产生:

of_01.Connection.read() 调用handlerMap类别的handle,raise全局事件触发其他监听组件

handlerMap = {
of.OFPT_HELLO : handle_HELLO,
of.OFPT_ECHO_REQUEST : handle_ECHO_REQUEST,
of.OFPT_ECHO_REPLY : handle_ECHO_REPLY,
of.OFPT_PACKET_IN : handle_PACKET_IN,
of.OFPT_FEATURES_REPLY : handle_FEATURES_REPLY,
of.OFPT_PORT_STATUS : handle_PORT_STATUS,
of.OFPT_ERROR : handle_ERROR_MSG,
of.OFPT_BARRIER_REPLY : handle_BARRIER,
of.OFPT_STATS_REPLY : handle_STATS_REPLY,
of.OFPT_FLOW_REMOVED : handle_FLOW_REMOVED,
of.OFPT_VENDOR : handle_VENDOR,
}

of_01.Connection._incoming_stats_reply()调用statsHandlerMap类别的handle,raise全局事件触发其他监听组件

statsHandlerMap = {
of.OFPST_DESC : handle_OFPST_DESC,
of.OFPST_FLOW : handle_OFPST_FLOW,
of.OFPST_AGGREGATE : handle_OFPST_AGGREGATE,
of.OFPST_TABLE : handle_OFPST_TABLE,
of.OFPST_PORT : handle_OFPST_PORT,
of.OFPST_QUEUE : handle_OFPST_QUEUE,
}

上述的of_01.Connection.read()和_incomming_stats_reply()zai产生事件时均raise两次,首先raise Openflow事件,再raise of_01事件(Thx Lidemin)。

具体raise的细节为:

con.ofnexus产生openflow事件。如

con.ofnexus.raiseEventNoErrors(PacketIn, con, msg)

通过

 core.openflow.addListeners( self)

或者

core.openflow.addListenerByName("PacketIn", __handle__PacketIn)

将能监听到ofnexus产生的事件

con直接产生的of_01事件(即和connection有关事件),如

con.raiseEventNoErrors(PacketIn, con, msg)

监听该事件时必须指定connection,如

connection.addListeners(self)

 

 

强烈推荐lidemin “Pox的框架及启动过程分析“,分析的更到位!

Pox启动及事件产生、监听分析的更多相关文章

  1. 深入理解Spring的容器内事件发布监听机制

    目录 1. 什么是事件监听机制 2. JDK中对事件监听机制的支持 2.1 基于JDK实现对任务执行结果的监听 3.Spring容器对事件监听机制的支持 3.1 基于Spring实现对任务执行结果的监 ...

  2. Spring Boot(六)自定义事件及监听

    事件及监听并不是SpringBoot的新功能,Spring框架早已提供了完善的事件监听机制,在Spring框架中实现事件监听的流程如下: 自定义事件,继承org.springframework.con ...

  3. Spring笔记(7) - Spring的事件和监听机制

    一.背景 事件机制作为一种编程机制,在很多开发语言中都提供了支持,同时许多开源框架的设计中都使用了事件机制,比如SpringFramework. 在 Java 语言中,Java 的事件机制参与者有3种 ...

  4. asp.net core启动源码以及监听,到处理请求响应的过程

    摘要 asp.net core发布至今已经将近6年了,很多人对于这一块还是有些陌生,或者说没接触过:接触过的,对于asp.net core整个启动过程,监听过程,以及请求过程,响应过程也是一知半解,可 ...

  5. Spring Boot 事件和监听

    Application Events and Listeners 1.自定义事件和监听 1.1.定义事件 package com.cjs.boot.event; import lombok.Data; ...

  6. uniapp仿h5+fire自定义事件触发监听

    仿h5+fire自定义事件触发监听 uni-app调用 event.js 源码记录(点击查看) 1.js下载地址 [event.js](https://ext.dcloud.net.cn/plugin ...

  7. 最优-scroll事件的监听实现

    1. 背景和目标 前端在监听scroll这类高频率触发事件时,常常需要一个监听函数来实现监听和回调处理.传统写法上利用setInterval或setTimeout来实现. 为了减小 CPU 开支,往往 ...

  8. 事件的监听是由awt完成的

    学swing 之前先学awt ,因为awt 是Java实现图形界面的基础. 它能够完成编写界面的基本功能,最重要的是,事件的监听是由awt完成的. 而swing是在awt基础上提供的新的界面工具包,它 ...

  9. MVC框架入门准备(三)事件类 - 事件的监听和触发

    在mvc框架中可以看到事件类,实现事件的监听和触发. 举例: <?php /** * 事件类 */ class Event { // 事件绑定记录 private static $events; ...

随机推荐

  1. Lua垃圾收集

    Lua使用基于被内置在Lua某些算法的垃圾收集自动内存管理.可以自动内存管理的结果,作为一个开发者: 没有必要担心的对象分配内存. 无需释放他们时,不再需要可将其设置为nil. Lua使用运行不时收集 ...

  2. Update DN with Procedure

    Update DN )) LANGUAGE SQL MODIFIES SQL DATA BEGIN -- Step 1 UPDATE DNRITM A SET (DNITTQTY, DNIREQTY) ...

  3. linux高可用集群(HA)原理详解(转载)

    一.什么是高可用集群 高可用集群就是当某一个节点或服务器发生故障时,另一个 节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服务.高可用 ...

  4. 机器学习之AdaBoost

    Adaboost是一种组合学习的提升算法,能将多个弱学习算法(甚至只比随机猜测好一点)组合起来,构成一个足够强大的学习模型. 组合学习 组合学习是将多个假说组合起来,并集成它们的预测.比如对于一个问题 ...

  5. 【线性结构上的动态规划】UVa 11400 - Lighting System Design

    Problem F Lighting System Design Input: Standard Input Output: Standard Output You are given the tas ...

  6. DisableExplicitGC和Direct ByteBuffer

    直接堆外内存请参见:http://blog.csdn.net/lantian0802/article/details/39257087 JVM调优请参见:http://hllvm.group.itey ...

  7. Angular2 从0到1 (二)

    第一节:Angular2 从0到1 (一)第三节:Angular2 从0到1 (三)第四节:Angular2 从0到1 (四) 作者:王芃 wpcfan@gmail.com 第二节:用Form表单做一 ...

  8. li颜色特效

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head>    < ...

  9. Android 中的图像特效(Matrix)

    以前在线性代数中学习了矩阵,对矩阵的基本运算有一些了解,现在在Android中有一个Matrix类,它的中文意思就是矩阵.Matrix主要是用于图像的缩放.平移.旋转.扭曲等操作.图像处理,主要用到的 ...

  10. 日入过百优质消除手游数据分享—萌萌哒包子脸爱消除(游戏开发引擎:libgdx)

    从2014年开始,消除游戏异常火爆,从消除小星星到腾讯的天天消除都赢得了海量用户.目前,各大市场上开心消消乐等游戏依旧火爆.消除游戏一直持续保持着女性和孩子的主流游戏地位.虽然市场上消除游戏种类很多, ...