Hi, Iwase.

   I've copy-pasted your code. Nothing has happened to me.

   I'm running ryu-manager (version 4.8) with a single script to print the
OF messages Hello, FeaturesReply, MultipartReply and EchoRequest. I can see
all of them in Wireshark, but I still can't log reception of the
MultipartReply message. I think I should assume that this is a bug in ryu
API, because I can't see any reason for that.

   Thanks again for you help.

   Helcio.

2016-12-16 1:22 GMT-03:00 Iwase Yusuke <iwase.yusu...@gmail.com>:

> 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

Reply via email to