Hello,
Sorry for the confusion.. As you pointed out i had patched the wrong
file. The ryu was installed in /usr/local/ and patching the corresponding
parser file rectified the issue..
Thanks a lot again.
Regards,
Nitish
On Thu, Apr 18, 2013 at 9:22 PM, Isaku Yamahata <[email protected]>wrote:
> On Thu, Apr 18, 2013 at 10:59:16AM +0530, nitish nagesh wrote:
> > Hello,
> >
> > Thanks for the response.
> >
> > But even after applying the patch i still see the same error.
>
> Thank you for testing. You seem to install Ryu package (/usr/local...),
> can you please make it sure that you're using the patched one?
>
>
> > However please
> > note if the switch sends an error response to the Role Request message
> there is
> > no connection drop or any errors seen.
>
> Can you please send packet capture?
> or can you identify what OF packet caused the exception?
>
> thanks
>
> >
> > Regards,
> > Nitish
> >
> >
> > On Wed, Apr 17, 2013 at 11:56 PM, Isaku Yamahata <[email protected]
> >
> > wrote:
> >
> > Hi. It seems parser bug.
> > Can you please try this patch?
> > If it fixes the issue, I'll pushes this patch.
> >
> > thanks,
> >
> > >From 174ca4ed6504dfd1ed554a895761d6cd0f411f4f Mon Sep 17 00:00:00
> 2001
> > From: Isaku Yamahata <[email protected]>
> > Date: Wed, 17 Apr 2013 11:17:36 -0700
> > Subject: [PATCH] ofproto/ofproto_v1_3_parser: parser should return
> msg, not
> > implicit None
> >
> > Signed-off-by: Isaku Yamahata <[email protected]>
> > ---
> > ryu/ofproto/ofproto_v1_3_parser.py | 13 ++++++++++++-
> > 1 file changed, 12 insertions(+), 1 deletion(-)
> >
> > diff --git a/ryu/ofproto/ofproto_v1_3_parser.py b/ryu/ofproto/
> > ofproto_v1_3_parser.py
> > index 53b002a..f2580c7 100644
> > --- a/ryu/ofproto/ofproto_v1_3_parser.py
> > +++ b/ryu/ofproto/ofproto_v1_3_parser.py
> > @@ -1,5 +1,5 @@
> > # Copyright (C) 2012 Nippon Telegraph and Telephone Corporation.
> > -# Copyright (C) 2012 Isaku Yamahata <yamahata at valinux co jp>
> > +# Copyright (C) 2012, 2013 Isaku Yamahata <yamahata at valinux co
> jp>
> > #
> > # Licensed under the Apache License, Version 2.0 (the "License");
> > # you may not use this file except in compliance with the License.
> > @@ -2793,6 +2793,8 @@ class OFPRoleRequest(MsgBase):
> > class OFPRoleReply(MsgBase):
> > def __init__(self, datapath):
> > super(OFPRoleReply, self).__init__(datapath)
> > + self.role = None
> > + self.generation_id = None
> >
> > @classmethod
> > def parser(cls, datapath, version, msg_type, msg_len, xid, buf):
> > @@ -2802,6 +2804,7 @@ class OFPRoleReply(MsgBase):
> > (msg.role, msg.generation_id) = struct.unpack_from(
> > ofproto_v1_3.OFP_ROLE_REQUEST_PACK_STR, msg.buf,
> > ofproto_v1_3.OFP_HEADER_SIZE)
> > + return msg
> >
> >
> > @_set_msg_type(ofproto_v1_3.OFPT_GET_ASYNC_REQUEST)
> > @@ -2815,6 +2818,9 @@ class OFPGetAsyncRequest(MsgBase):
> > class OFPGetAsyncReply(MsgBase):
> > def __init__(self, datapath):
> > super(OFPGetAsyncReply, self).__init__(datapath)
> > + self.packet_in_mask = None
> > + self.port_status_mask = None
> > + self.flow_removed_mask = None
> >
> > @classmethod
> > def parser(cls, datapath, version, msg_type, msg_len, xid, buf):
> > @@ -2825,6 +2831,7 @@ class OFPGetAsyncReply(MsgBase):
> > msg.flow_removed_mask)
> = struct.unpack_from(
> > ofproto_v1_3.OFP_ASYNC_CONFIG_PACK_STR, msg.buf,
> > ofproto_v1_3.OFP_HEADER_SIZE)
> > + return msg
> >
> >
> > @_register_parser
> > @@ -2832,6 +2839,9 @@ class OFPGetAsyncReply(MsgBase):
> > class OFPSetAsync(MsgBase):
> > def __init__(self, datapath):
> > super(OFPSetAsync, self).__init__(datapath)
> > + self.packet_in_mask = None
> > + self.port_status_mask = None
> > + self.flow_removed_mask = None
> >
> > @classmethod
> > def parser(cls, datapath, version, msg_type, msg_len, xid, buf):
> > @@ -2842,3 +2852,4 @@ class OFPSetAsync(MsgBase):
> > msg.flow_removed_mask) = struct.unpack_from(
> > ofproto_v1_3.OFP_ASYNC_CONFIG_PACK_STR, msg.buf,
> > ofproto_v1_3.OFP_HEADER_SIZE)
> > + return msg
> > --
> > 1.7.10.4
> >
> >
> >
> > On Wed, Apr 17, 2013 at 02:27:46PM +0530, nitish nagesh wrote:
> > > Hi All,
> > >
> > > I have written a simple controller app to generate a role
> request and
> > > handle the role reply message and I am able to see that the app is
> able
> > to
> > > generate the Role Request message to the controller. Also from
> wireshark
> > i saw
> > > the Role Reply message does come back to the controller. But i see
> some
> > error
> > > messages on the controller console during handling the reply. Also
> post
> > > receiving the Role Reply the controller seems to NOT process any
> further
> > > messages (like OFPT_ECHO_REQUEST etc) and eventually the connection
> > between the
> > > switch and controller tears off. I am attaching my script along
> here also
> > the
> > > controller errors below. Please let me know if there is something
> wrong
> > in the
> > > script?
> > >
> > > Controller error Logs:
> > > #> ryu-manager --ofp-tcp-listen-port 6633 role_msg.py --verbose
> > > loading app role_msg.py
> > > loading app ryu.controller.ofp_handler
> > > instantiating app ryu.controller.ofp_handler
> > > instantiating app role_msg.py
> > > BRICK SndRcvRoleMsg
> > > CONSUMES EventOFPSwitchFeatures
> > > CONSUMES EventOFPRoleReply
> > > BRICK ofp_event
> > > PROVIDES EventOFPSwitchFeatures TO {'SndRcvRoleMsg': ['config']}
> > > PROVIDES EventOFPRoleReply TO {'SndRcvRoleMsg': ['main']}
> > > CONSUMES EventOFPHello
> > > CONSUMES EventOFPSwitchFeatures
> > > CONSUMES EventOFPErrorMsg
> > > CONSUMES EventOFPEchoRequest
> > >
> > > connected socket:<socket fileno=4 sock=20.0.0.2:6633 peer=
> 20.0.0.1:64538>
> > > address:('20.0.0.1', 64538)
> > > hello ev <ryu.controller.ofp_event.EventOFPHello object at
> 0x94b852c>
> > > move onto config mode
> > > connected socket:<socket fileno=4 sock=20.0.0.2:6633 peer=
> 20.0.0.1:56984>
> > > address:('20.0.0.1', 56984)
> > > hello ev <ryu.controller.ofp_event.EventOFPHello object at
> 0x94b860c>
> > > move onto config mode
> > > EVENT ofp_event->SndRcvRoleMsg EventOFPSwitchFeatures
> > > switch features ev version: 0x4 msg_type 0x6 xid 0x3d807786
> > > move onto main mode
> > > Traceback (most recent call last):
> > > File
> "/usr/local/lib/python2.7/dist-packages/ryu-1.8-py2.7.egg/ryu/
> > controller
> > > /controller.py", line 97, in deactivate
> > > method(self)
> > > File
> "/usr/local/lib/python2.7/dist-packages/ryu-1.8-py2.7.egg/ryu/
> > controller
> > > /controller.py", line 172, in _recv_loop
> > > ev = ofp_event.ofp_msg_to_ev(msg)
> > > File
> "/usr/local/lib/python2.7/dist-packages/ryu-1.8-py2.7.egg/ryu/
> > controller
> > > /ofp_event.py", line 42, in ofp_msg_to_ev
> > > return _OFP_MSG_EVENTS[name](msg)
> > > KeyError: 'EventNoneType'
> > > Error in the datapath 1042997282520960 from ('20.0.0.1', 56984)
> > > Traceback (most recent call last):
> > > File "/usr/lib/pymodules/python2.7/gevent/greenlet.py", line
> 405, in
> > run
> > > result = self._run(*self.args, **self.kwargs)
> > > File
> "/usr/local/lib/python2.7/dist-packages/ryu-1.8-py2.7.egg/ryu/
> > controller
> > > /controller.py", line 308, in datapath_connection_factory
> > > datapath.serve()
> > > File
> "/usr/local/lib/python2.7/dist-packages/ryu-1.8-py2.7.egg/ryu/
> > controller
> > > /controller.py", line 228, in serve
> > > self._recv_loop()
> > > File
> "/usr/local/lib/python2.7/dist-packages/ryu-1.8-py2.7.egg/ryu/
> > controller
> > > /controller.py", line 97, in deactivate
> > > method(self)
> > > File
> "/usr/local/lib/python2.7/dist-packages/ryu-1.8-py2.7.egg/ryu/
> > controller
> > > /controller.py", line 172, in _recv_loop
> > > ev = ofp_event.ofp_msg_to_ev(msg)
> > > File
> "/usr/local/lib/python2.7/dist-packages/ryu-1.8-py2.7.egg/ryu/
> > controller
> > > /ofp_event.py", line 42, in ofp_msg_to_ev
> > > return _OFP_MSG_EVENTS[name](msg)
> > > KeyError: 'EventNoneType'
> > > <Greenlet at 0x94b906c: datapath_connection_factory(<socket at
> 0x94b844c
> > fileno
> > > =4 sock=20.0.0.2:6633 p, ('20.0.0.1', 56984))> failed with
> KeyError
> > >
> > > Regards,
> > > Nitish
> >
> > > from struct import *
> > > from nose.tools import *
> > > from ryu.base import app_manager
> > > from ryu.controller import ofp_event
> > > from ryu.controller.handler import MAIN_DISPATCHER
> > > from ryu.controller.handler import CONFIG_DISPATCHER
> > > from ryu.controller.handler import set_ev_cls
> > > from ryu.ofproto import ofproto_v1_0
> > > from ryu.ofproto import ofproto_v1_2
> > > from ryu.ofproto.ofproto_parser import *
> > > from ryu.ofproto.ofproto_v1_2_parser import *
> > > from ryu.ofproto import ofproto_parser
> > > from ryu.ofproto import ofproto_v1_2_parser
> > > from ryu.ofproto.ofproto_parser import MsgBase
> > > from ryu import utils
> > >
> > > LOG = logging.getLogger('testing Role Messages')
> > >
> > > class SndRcvRoleMsg(app_manager.RyuApp):
> > >
> > > role=ofproto_v1_2.OFPCR_ROLE_MASTER
> > > generation_id=2
> > >
> > >
> > > @set_ev_cls(ofp_event.EventOFPSwitchFeatures,
> CONFIG_DISPATCHER)
> > > def generate_role_req_msg(self, ev):
> > > msg = ev.msg
> > > datapath = msg.datapath
> > >
> > > if (self.role == ofproto_v1_2.OFPCR_ROLE_SLAVE) or
> (self.role ==
> > ofproto_v1_2.OFPCR_ROLE_MASTER) or (self.role ==
> > ofproto_v1_2.OFPCR_ROLE_EQUAL):
> > > pass
> > > else:
> > > self.logger.debug('Invalid value for role')
> > > return
> > >
> > > r = OFPRoleRequest(datapath, self.role, self.generation_id)
> > > datapath.send_msg(r)
> > >
> > >
> > >
> > > @set_ev_cls(ofp_event.EventOFPRoleReply, MAIN_DISPATCHER)
> > > def role_reply_msg_handler(self, ev):
> > > msg = ev.msg
> > > datapath = msg.datapath
> > > self.logger.debug('RECEIVED ROLE REPLY MSG')
> >
> > >
> >
> ------------------------------------------------------------------------------
> > > Precog is a next-generation analytics platform capable of advanced
> > > analytics on semi-structured data. The platform includes APIs for
> > building
> > > apps and a phenomenal toolset for data science. Developers can use
> > > our toolset for easy data analysis & visualization. Get a free
> account!
> > > http://www2.precog.com/precogplatform/slashdotnewsletter
> > > _______________________________________________
> > > Ryu-devel mailing list
> > > [email protected]
> > > https://lists.sourceforge.net/lists/listinfo/ryu-devel
> >
> >
> > --
> > yamahata
> >
> >
>
> >
> ------------------------------------------------------------------------------
> > Precog is a next-generation analytics platform capable of advanced
> > analytics on semi-structured data. The platform includes APIs for
> building
> > apps and a phenomenal toolset for data science. Developers can use
> > our toolset for easy data analysis & visualization. Get a free account!
> > http://www2.precog.com/precogplatform/slashdotnewsletter
> > _______________________________________________
> > Ryu-devel mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/ryu-devel
>
>
> --
> yamahata
>
------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel