POX中创建新的Event
POX的整体结构属于publish–subscribe pattern。在wiki发布/订阅条目[1]上有如下解释:
发布/订阅(Publish/subscribe 或pub/sub)是一种消息范式,消息的发送者(发布者)不是计划发送其消息给特定的接收者(订阅者)。而是发布的消息分为不同的类别,而不需要知道什么样的订阅者订阅。订阅者对一个或多个类别表达兴趣,于是只接收感兴趣的消息,而不需要知道什么样的发布者发布的消息。这种发布者和订阅者的解耦可以允许更好的可扩放性和更为动态的网络拓扑.
创建新的事件,pox wiki[2]上有比较详细的解释。下面是一份可用的代码。
1、事件声明&调用(TestEvent_Generator):
<br />
import pox<br />
import pox.openflow.libopenflow_01 as of<br />
from pox.core import core<br />
from pox.lib.revent import *<br />
from pox.lib.addresses import IPAddr<br />
log = core.getLogger()</p>
<p>class TestEvent (Event):<br />
def __init__ (self, stuff):<br />
Event.__init__(self)<br />
self.stuff = stuff</p>
<p>class TestEvent_Generator (EventMixin):<br />
_eventMixin_events = set([TestEvent,])<br />
def __init__ (self):<br />
self.listenTo(core)</p>
<p> def _handle_GoingUpEvent (self, event):<br />
self.listenTo(core.openflow)<br />
log.debug("Up...")</p>
<p> def foo(self):<br />
stuff = "Content in TESTEVENT"<br />
self.raiseEvent(TestEvent, stuff)</p>
<p> def _handle_PacketIn (self, event):<br />
print "handling PACKETIN event by raising a TESTEVENT:"<br />
self.foo()<br />
return</p>
<p>def launch ():<br />
core.registerNew(TestEvent_Generator)<br />
2、事件监听(TestEvent_Listener):
<br />
import pox<br />
import pox.openflow.libopenflow_01 as of<br />
from pox.core import core<br />
from pox.lib.revent import *<br />
from pox.lib.addresses import IPAddr<br />
log = core.getLogger()</p>
<p>class TestEvent_Listener (EventMixin):<br />
def __init__ (self):<br />
self.listenTo(core)</p>
<p> def _handle_GoingUpEvent (self, event):<br />
self.listenTo(core.TestEvent_Generator)<br />
log.debug("Up...")</p>
<p> def _handle_TestEvent (self, event):<br />
print "TestEvent_Listener is handling TEST EVENT:"<br />
print event.stuff<br />
return</p>
<p>def launch ():<br />
core.registerNew(TestEvent_Listener)<br />
3、运行效果
TestEvent_Generator监听Core.openflow,如果产生了PacketIn事件,则调用TestEvent事件。
运行效果如下:
POX 0.0.0 / Copyright 2011 James McCauley
DEBUG:core:POX 0.0.0 going up…
DEBUG:core:Running on CPython (2.6.6/Sep 15 2010 16:22:56)
DEBUG:ext.TestEvent_Generator:Up…
DEBUG:ext.TestEvent_Listener:Up…
INFO:core:POX 0.0.0 is up.
DEBUG:openflow.of_01:Listening for connections on 0.0.0.0:6633
INFO:openflow.of_01:[Con ID:1/DPID:1] Connected to 00-00-00-00-00-01
TestEvent_Generator is handling PACKETIN event by raising a TESTEVENT:
TestEvent_Listener is handling TEST EVENT:
Content in TESTEVENT
参考:
[1] http://zh.wikipedia.org/wiki/%E5%8F%91%E5%B8%83/%E8%AE%A2%E9%98%85
[2] https://openflow.stanford.edu/display/ONL/POX+Wiki#POXWiki-CreatingYourOwnEventTypes