Hi, I guess there some syntax errors in your switch_multipart_reply_handler().
Here is my code which works well on my environment. $ git diff diff --git a/ryu/app/simple_switch_13.py b/ryu/app/simple_switch_13.py index 3e7c598..7d08658 100644 --- a/ryu/app/simple_switch_13.py +++ b/ryu/app/simple_switch_13.py @@ -117,3 +117,28 @@ class SimpleSwitch13(app_manager.RyuApp): out = parser.OFPPacketOut(datapath=datapath, buffer_id=msg.buffer_id, in_port=in_port, actions=actions, data=data) datapath.send_msg(out) + + @set_ev_cls([ofp_event.EventOFPStatsReply, + ofp_event.EventOFPDescStatsReply, + ofp_event.EventOFPFlowStatsReply, + ofp_event.EventOFPAggregateStatsReply, + ofp_event.EventOFPTableStatsReply, + ofp_event.EventOFPTableFeaturesStatsReply, + ofp_event.EventOFPPortStatsReply, + ofp_event.EventOFPQueueStatsReply, + ofp_event.EventOFPQueueDescStatsReply, + ofp_event.EventOFPMeterStatsReply, + ofp_event.EventOFPMeterFeaturesStatsReply, + ofp_event.EventOFPMeterConfigStatsReply, + ofp_event.EventOFPGroupStatsReply, + ofp_event.EventOFPGroupFeaturesStatsReply, + ofp_event.EventOFPGroupDescStatsReply, + ofp_event.EventOFPPortDescStatsReply + ], MAIN_DISPATCHER) + def switch_multipart_reply_handler(self, ev): + multipart_reply = ev.msg + datapath = ev.msg.datapath + self.logger.info( + '>>> OpenFlow 0x%x MultipartReply message (type 0x%x) has been ' + 'received from switch %d', + multipart_reply.version, multipart_reply.type, datapath.id) $ ryu-manager ryu.app.simple_switch_13 ryu.app.ofctl_rest loading app ryu.app.simple_switch_13 loading app ryu.app.ofctl_rest loading app ryu.controller.ofp_handler instantiating app None of DPSet creating context dpset creating context wsgi instantiating app ryu.controller.ofp_handler of OFPHandler instantiating app ryu.app.ofctl_rest of RestStatsApi instantiating app ryu.app.simple_switch_13 of SimpleSwitch13 (7945) wsgi starting up on http://0.0.0.0:8080 ...(snip) # I executed the below command here ...(snip) (7945) accepted ('127.0.0.1', 59734) >>> OpenFlow 0x4 MultipartReply message (type 0x1) has been received from >>> switch 1 127.0.0.1 - - [16/Dec/2016 13:15:45] "GET /stats/flow/1 HTTP/1.1" 200 359 0.019278 $ curl -X GET http://localhost:8080/stats/flow/1 ... Thanks, Iwase On 2016年12月16日 05:59, helcio wagner wrote: > Hi, Iwase. Thanks for answering. > > Actually, I've explicitly added the types of MultipartReply messages as > the code you shown. Unfortunately, I still don't see any of them (even though > they exist). The trace below shows what I'm talking about: > --- > helcio@ojuara:~/ryu/bin$ ./ryu-manager --verbose > ../ryu/app/simple_switch_13.py > ../../Dropbox/EXA0186/Python/switch_commander.py > loading app ../ryu/app/simple_switch_13.py > loading app ../../Dropbox/EXA0186/Python/switch_commander.py > loading app ryu.controller.ofp_handler > instantiating app ../../Dropbox/EXA0186/Python/switch_commander.py of > SwitchCommander > instantiating app ../ryu/app/simple_switch_13.py of SimpleSwitch13 > instantiating app ryu.controller.ofp_handler of OFPHandler > BRICK SimpleSwitch13 > CONSUMES EventOFPSwitchFeatures > CONSUMES EventOFPPacketIn > BRICK SwitchCommander > CONSUMES EventOFPSwitchFeatures > CONSUMES EventOFPStatsReply > CONSUMES EventOFPQueueDescStatsReply > CONSUMES EventOFPMeterStatsReply > CONSUMES EventOFPPortStatsReply > CONSUMES EventOFPAggregateStatsReply > CONSUMES EventOFPFlowStatsReply > CONSUMES EventOFPMeterFeaturesStatsReply > CONSUMES EventOFPGroupDescStatsReply > CONSUMES EventOFPGroupFeaturesStatsReply > CONSUMES EventOFPMeterConfigStatsReply > CONSUMES EventOFPTableFeaturesStatsReply > CONSUMES EventOFPGroupStatsReply > CONSUMES EventOFPHello > CONSUMES EventOFPEchoRequest > CONSUMES EventOFPQueueStatsReply > CONSUMES EventOFPPortDescStatsReply > CONSUMES EventOFPTableStatsReply > CONSUMES EventOFPDescStatsReply > BRICK ofp_event > PROVIDES EventOFPSwitchFeatures TO {'SimpleSwitch13': set(['config']), > 'SwitchCommander': set(['config'])} > PROVIDES EventOFPStatsReply TO {'SwitchCommander': set(['main'])} > PROVIDES EventOFPQueueDescStatsReply TO {'SwitchCommander': set(['main'])} > PROVIDES EventOFPHello TO {'SwitchCommander': set(['handshake'])} > PROVIDES EventOFPPortStatsReply TO {'SwitchCommander': set(['main'])} > PROVIDES EventOFPAggregateStatsReply TO {'SwitchCommander': set(['main'])} > PROVIDES EventOFPMeterStatsReply TO {'SwitchCommander': set(['main'])} > PROVIDES EventOFPMeterFeaturesStatsReply TO {'SwitchCommander': > set(['main'])} > PROVIDES EventOFPPortDescStatsReply TO {'SwitchCommander': set(['main'])} > PROVIDES EventOFPGroupDescStatsReply TO {'SwitchCommander': set(['main'])} > PROVIDES EventOFPGroupFeaturesStatsReply TO {'SwitchCommander': > set(['main'])} > PROVIDES EventOFPMeterConfigStatsReply TO {'SwitchCommander': set(['main'])} > PROVIDES EventOFPTableFeaturesStatsReply TO {'SwitchCommander': > set(['main'])} > PROVIDES EventOFPGroupStatsReply TO {'SwitchCommander': set(['main'])} > PROVIDES EventOFPEchoRequest TO {'SwitchCommander': set(['main'])} > PROVIDES EventOFPQueueStatsReply TO {'SwitchCommander': set(['main'])} > PROVIDES EventOFPDescStatsReply TO {'SwitchCommander': set(['main'])} > PROVIDES EventOFPFlowStatsReply TO {'SwitchCommander': set(['main'])} > PROVIDES EventOFPTableStatsReply TO {'SwitchCommander': set(['main'])} > PROVIDES EventOFPPacketIn TO {'SimpleSwitch13': set(['main'])} > CONSUMES EventOFPHello > CONSUMES EventOFPSwitchFeatures > CONSUMES EventOFPPortStatus > CONSUMES EventOFPErrorMsg > CONSUMES EventOFPEchoRequest > CONSUMES EventOFPEchoReply > CONSUMES EventOFPPortDescStatsReply > connected socket:<eventlet.greenio.base.GreenSocket object at 0xa8d748c> > address:('127.0.0.1', 46673) > EVENT ofp_event->SwitchCommander EventOFPHello > hello ev <ryu.controller.ofp_event.EventOFPHello object at 0xa8bb9cc> > move onto config mode > connected socket:<eventlet.greenio.base.GreenSocket object at 0xa8d75ec> > address:('127.0.0.1', 46674) > EVENT ofp_event->SwitchCommander EventOFPHello > hello ev <ryu.controller.ofp_event.EventOFPHello object at 0xa8bb56c> > move onto config mode >>>> openflow v1.3 Hello message has been received >>>> openflow v1.3 Hello message has been received > EVENT ofp_event->SimpleSwitch13 EventOFPSwitchFeatures > EVENT ofp_event->SwitchCommander EventOFPSwitchFeatures > switch features ev > version=0x4,msg_type=0x6,msg_len=0x20,xid=0xf18d8275L,OFPSwitchFeatures(auxiliary_id=0,capabilities=79,datapath_id=1,n_buffers=256,n_tables=254) >>>> openflow v1.3 FeaturesReply message has been received from switch 1 > move onto main mode > EVENT ofp_event->SimpleSwitch13 EventOFPSwitchFeatures > EVENT ofp_event->SwitchCommander EventOFPSwitchFeatures > switch features ev > version=0x4,msg_type=0x6,msg_len=0x20,xid=0xfe9e7591L,OFPSwitchFeatures(auxiliary_id=0,capabilities=79,datapath_id=2,n_buffers=256,n_tables=254) >>>> openflow v1.3 FeaturesReply message has been received from switch 2 > move onto main mode > EVENT ofp_event->SwitchCommander EventOFPEchoRequest >>>> openflow v1.3 EchoRequest message has been received from swich 1 > EVENT ofp_event->SwitchCommander EventOFPEchoRequest >>>> openflow v1.3 EchoRequest message has been received from swich 2 > EVENT ofp_event->SwitchCommander EventOFPEchoRequest >>>> openflow v1.3 EchoRequest message has been received from swich 1 > EVENT ofp_event->SwitchCommander EventOFPEchoRequest >>>> openflow v1.3 EchoRequest message has been received from swich 2 > EVENT ofp_event->SimpleSwitch13 EventOFPPacketIn > packet in 1 9a:1e:65:66:82:6b 33:33:00:00:00:fb 3 > EVENT ofp_event->SimpleSwitch13 EventOFPPacketIn > packet in 2 0a:da:e5:fe:b9:c9 33:33:00:00:00:fb 3 > EVENT ofp_event->SimpleSwitch13 EventOFPPacketIn > packet in 1 9a:1e:65:66:82:6b 33:33:00:00:00:fb 3 > EVENT ofp_event->SimpleSwitch13 EventOFPPacketIn > packet in 2 0a:da:e5:fe:b9:c9 33:33:00:00:00:fb 3 > EVENT ofp_event->SimpleSwitch13 EventOFPPacketIn > packet in 1 9a:1e:65:66:82:6b 33:33:00:00:00:fb 3 > EVENT ofp_event->SimpleSwitch13 EventOFPPacketIn > packet in 2 0a:da:e5:fe:b9:c9 33:33:00:00:00:fb 3 > EVENT ofp_event->SwitchCommander EventOFPEchoRequest >>>> openflow v1.3 EchoRequest message has been received from swich 1 > EVENT ofp_event->SwitchCommander EventOFPEchoRequest >>>> openflow v1.3 EchoRequest message has been received from swich 2 > EVENT ofp_event->SwitchCommander EventOFPEchoRequest >>>> openflow v1.3 EchoRequest message has been received from swich 1 > EVENT ofp_event->SwitchCommander EventOFPEchoRequest >>>> openflow v1.3 EchoRequest message has been received from swich 2 > EVENT ofp_event->SwitchCommander EventOFPEchoRequest >>>> openflow v1.3 EchoRequest message has been received from swich 1 > EVENT ofp_event->SwitchCommander EventOFPEchoRequest >>>> openflow v1.3 EchoRequest message has been received from swich 2 > --- > As a final point, here is the event handler: > --- > @set_ev_cls([ofp_event.EventOFPStatsReply, > ofp_event.EventOFPDescStatsReply, > ofp_event.EventOFPFlowStatsReply, > ofp_event.EventOFPAggregateStatsReply, > ofp_event.EventOFPTableStatsReply, > ofp_event.EventOFPTableFeaturesStatsReply, > ofp_event.EventOFPPortStatsReply, > ofp_event.EventOFPQueueStatsReply, > ofp_event.EventOFPQueueDescStatsReply, > ofp_event.EventOFPMeterStatsReply, > ofp_event.EventOFPMeterFeaturesStatsReply, > ofp_event.EventOFPMeterConfigStatsReply, > ofp_event.EventOFPGroupStatsReply, > ofp_event.EventOFPGroupFeaturesStatsReply, > ofp_event.EventOFPGroupDescStatsReply, > ofp_event.EventOFPPortDescStatsReply > ], MAIN_DISPATCHER) > def switch_multipart_reply_handler(self, ev): > multipart_reply = ev.msg > datapath = ev.msg.datapath > print '>>> openflow %s MultipartReply message has been received from swich > %i' %(self.print_version(echo_request.version), datapath.id > <http://datapath.id>) > --- > Best regards. > > Helcio > > 2016-12-15 2:50 GMT-03:00 Iwase Yusuke <iwase.yusu...@gmail.com > <mailto:iwase.yusu...@gmail.com>>: > > Hi, > > Which multipart message type or types you want to catch? > > I guess you need to specify multipart message type explicitly. > The following sample app specifies each multipart message to catch. > https://github.com/osrg/ryu/blob/master/ryu/app/ofctl_rest.py#L713-L730 > <https://github.com/osrg/ryu/blob/master/ryu/app/ofctl_rest.py#L713-L730> > > Thanks, > Iwase > > > On 2016年12月15日 05:40, helcio wagner wrote: > > Hi everybody. > > > > I can't receive MultipartReply messages from switches, even though I > had defined the handler below and watched those messages using wireshark. > > > > Does anybody have any idea about what is going on? > > > > --- > > @set_ev_cls(ofp_event.EventOFPMultipartReply, [HANDSHAKE_DISPATCHER, > CONFIG_DISPATCHER, MAIN_DISPATCHER]) > > def switch_multipart_reply_handler(self, ev): > > multipart_reply = ev.msg > > datapath = ev.msg.datapath > > print '>>> openflow %s MultipartReply message has been received from > swich %i' %(self.print_version(echo_request.version), datapath.id > <http://datapath.id> <http://datapath.id>) > > --- > > > > Here is the trace of execution of ryu using the 'SwitchCommander', > an application built to watch some of the OpenFlow messages received by the > controller. > > > > --- > > helcio@ojuara:~/ryu/bin$ ./ryu-manager --verbose > ../ryu/app/simple_switch_13.py > ../../Dropbox/EXA0186/Python/switch_commander.py > > loading app ../ryu/app/simple_switch_13.py > > loading app ../../Dropbox/EXA0186/Python/switch_commander.py > > loading app ryu.controller.ofp_handler > > instantiating app ../../Dropbox/EXA0186/Python/switch_commander.py of > SwitchCommander > > instantiating app ../ryu/app/simple_switch_13.py of SimpleSwitch13 > > instantiating app ryu.controller.ofp_handler of OFPHandler > > BRICK SimpleSwitch13 > > CONSUMES EventOFPPacketIn > > CONSUMES EventOFPSwitchFeatures > > BRICK SwitchCommander > > CONSUMES EventOFPHello > > CONSUMES EventOFPMultipartReply > > CONSUMES EventOFPEchoRequest > > CONSUMES EventOFPSwitchFeatures > > BRICK ofp_event > > PROVIDES EventOFPHello TO {'SwitchCommander': set(['handshake'])} > > PROVIDES EventOFPMultipartReply TO {'SwitchCommander': > set(['handshake', 'main', 'config'])} > > PROVIDES EventOFPPacketIn TO {'SimpleSwitch13': set(['main'])} > > PROVIDES EventOFPEchoRequest TO {'SwitchCommander': set(['main'])} > > PROVIDES EventOFPSwitchFeatures TO {'SimpleSwitch13': > set(['config']), 'SwitchCommander': set(['config'])} > > CONSUMES EventOFPPortStatus > > CONSUMES EventOFPErrorMsg > > CONSUMES EventOFPEchoRequest > > CONSUMES EventOFPEchoReply > > CONSUMES EventOFPPortDescStatsReply > > CONSUMES EventOFPSwitchFeatures > > CONSUMES EventOFPHello > > connected socket:<eventlet.greenio.base.GreenSocket object at > 0xa2efbec> address:('192.168.56.101', 57014) > > EVENT ofp_event->SwitchCommander EventOFPHello > > hello ev <ryu.controller.ofp_event.EventOFPHello object at 0xa2ea92c> > > move onto config mode > > connected socket:<eventlet.greenio.base.GreenSocket object at > 0xa2efd2c> address:('192.168.56.101', 57015) > > EVENT ofp_event->SwitchCommander EventOFPHello > > hello ev <ryu.controller.ofp_event.EventOFPHello object at 0xa2d654c> > > move onto config mode > >>>> openflow v1.3 Hello message has been received > >>>> openflow v1.3 Hello message has been received > > EVENT ofp_event->SimpleSwitch13 EventOFPSwitchFeatures > > EVENT ofp_event->SwitchCommander EventOFPSwitchFeatures > > switch features ev > version=0x4,msg_type=0x6,msg_len=0x20,xid=0x3c009c3a,OFPSwitchFeatures(auxiliary_id=0,capabilities=71,datapath_id=2,n_buffers=256,n_tables=254) > >>>> openflow v1.3 FeaturesReply message has been received from switch 2 > > EVENT ofp_event->SimpleSwitch13 EventOFPSwitchFeatures > > EVENT ofp_event->SwitchCommander EventOFPSwitchFeatures > > switch features ev > version=0x4,msg_type=0x6,msg_len=0x20,xid=0x9685eb96L,OFPSwitchFeatures(auxiliary_id=0,capabilities=71,datapath_id=1,n_buffers=256,n_tables=254) > >>>> openflow v1.3 FeaturesReply message has been received from switch 1 > > move onto main mode > > move onto main mode > > EVENT ofp_event->SwitchCommander EventOFPEchoRequest > >>>> openflow v1.3 EchoRequest message has been received from swich 2 > > EVENT ofp_event->SwitchCommander EventOFPEchoRequest > >>>> openflow v1.3 EchoRequest message has been received from swich 1 > > EVENT ofp_event->SwitchCommander EventOFPEchoRequest > >>>> openflow v1.3 EchoRequest message has been received from swich 2 > > EVENT ofp_event->SwitchCommander EventOFPEchoRequest > >>>> openflow v1.3 EchoRequest message has been received from swich 1 > > EVENT ofp_event->SwitchCommander EventOFPEchoRequest > >>>> openflow v1.3 EchoRequest message has been received from swich 2 > > EVENT ofp_event->SwitchCommander EventOFPEchoRequest > >>>> openflow v1.3 EchoRequest message has been received from swich 1 > > EVENT ofp_event->SwitchCommander EventOFPEchoRequest > >>>> openflow v1.3 EchoRequest message has been received from swich 2 > > EVENT ofp_event->SwitchCommander EventOFPEchoRequest > >>>> openflow v1.3 EchoRequest message has been received from swich 1 > > --- > > > > Thanks in advance. > > > > Helcio > > > > > > > ------------------------------------------------------------------------------ > > Check out the vibrant tech community on one of the world's most > > engaging tech sites, SlashDot.org! http://sdm.link/slashdot > > > > > > > > _______________________________________________ > > Ryu-devel mailing list > > Ryu-devel@lists.sourceforge.net <mailto:Ryu-devel@lists.sourceforge.net> > > https://lists.sourceforge.net/lists/listinfo/ryu-devel > <https://lists.sourceforge.net/lists/listinfo/ryu-devel> > > > > > > > ------------------------------------------------------------------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, SlashDot.org! http://sdm.link/slashdot > > > > _______________________________________________ > Ryu-devel mailing list > Ryu-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/ryu-devel > ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Ryu-devel mailing list Ryu-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ryu-devel