I want to add a global counter which will be the sum of specific flows. I want to create a new message when a new switch is connected to notify other switches that a new global counter has to be created (and pass the dpid for identifying this new global counter). I will look at vendor messages tomorrow, can I create this new message with this extension?
Thank you very much! El 16/07/2013 00:00, "Murphy McCauley" <[email protected]> escribió: > The code expects the message type identifiers to be contiguous. In your > case, it looks like you're creating 23 and 24 but there's no 22. > Renumbering your messages to be 22 and 23 may fix the problem. > > However, you should think about whether you have a good reason for > creating new non-standard message types. OpenFlow has an extension > mechanism in the form of vendor messages, and POX has some support for > integrating vendor messages without hacking up libopenflow itself (this is > used for implementing the Nicira/OVS extensions in nicira.py). > > -- Murphy > > On Jul 15, 2013, at 8:42 AM, adria sole wrote: > > > I try to add a message similar to barrier request/reply, but when I add > my code I get this error: > > > > I can't find where is the error, I think it is because of number 23 and > 24 I have put to my adria messages... > > > > Ty in advance! > > > > POX 0.1.0 (betta) / Copyright 2011-2013 James McCauley, et al. > > Traceback (most recent call last): > > File "./pox.py", line 44, in <module> > > from pox.boot import boot > > File "/home/adria/Descargas/pox/pox/boot.py", line 57, in <module> > > import pox.openflow.of_01 > > File "/home/adria/Descargas/pox/pox/openflow/of_01.py", line 43, in > <module> > > unpackers = make_type_to_unpacker_table() > > File "/home/adria/Descargas/pox/pox/openflow/util.py", line 31, in > make_type_to_unpacker_table > > r = [of._message_type_to_class[i].unpack_new for i in range(0, top)] > > KeyError: 22 > > > > In libopenflow_01 I have added: > > @openflow_s_message("OFPT_ADRIA_REPLY", 23, > > reply_to="ofp_adria_request") > > class ofp_adria_reply (ofp_header): > > /*Here same code as Barrier*/ > > > > @openflow_c_message("OFPT_ADRIA_REQUEST", 24, > > request_for="ofp_adria_reply") > > class ofp_adria_request (ofp_header): > > /*Here same code as Barrier*/ > > > > In __init__.py I have added: > > class OpenFlowNexus (EventMixin): > > _eventMixin_events = set([ > > ... > > AdriaIn, > > ... > > ]) > > > > class AdriaIn (Event): > > /*Same code as barrier In*/ > > > > In of_01.py: > > handlerMap = { > > ... > > of.OFTP_ADRIA_REPLY : handle_ADRIA, > > ... > > } > > > > def handle_ADRIA (con, msg): > > e = con.ofnexus.raiseEventNoErrors(AdriaIn, con, msg) > > if e is None or e.halt != True: > > con.raiseEventNoErrors(AdriaIn, con, msg) > > > > In my_component.py (which I run with pox.py): > > when I want on code inside a def of class LearningSwitch (object):: > > adriamsg = of.ofp_adria_request() > > self.connection.send(adriamsg) > > > > In class LearningSwitch (object): > > def _handle_AdriaIn (self, event): > > print "ADRIA: rebut un adria" > >
