On Wed, 30 Jan 2013 11:29:37 +0900 Isaku Yamahata <[email protected]> wrote:
> > > On Wed, Jan 30, 2013 at 10:54:54AM +0900, FUJITA Tomonori wrote: >> Better way to fix this? > > Oops, sorry for this. In fact I included several same issue. > How about this? > >>From cef0fb64167857b0231ae751cd3be401ed3fbd6e Mon Sep 17 00:00:00 2001 > Message-Id: > <cef0fb64167857b0231ae751cd3be401ed3fbd6e.1359512904.git.yamah...@valinux.co.jp> > From: Isaku Yamahata <[email protected]> > Date: Tue, 25 Dec 2012 13:40:04 +0900 > Subject: [PATCH] controller/ofp_handler: improve version negotiation > > - fix string concatenation. Needs surrounding paren. > - more version checks > - make hello_failed private. (adding "_" prefix) > > Signed-off-by: Isaku Yamahata <[email protected]> > --- > ryu/controller/ofp_handler.py | 84 > +++++++++++++++++++++++++++++++++-------- > 1 file changed, 68 insertions(+), 16 deletions(-) > > diff --git a/ryu/controller/ofp_handler.py b/ryu/controller/ofp_handler.py > index add0301..05ac79b 100644 > --- a/ryu/controller/ofp_handler.py > +++ b/ryu/controller/ofp_handler.py > @@ -44,7 +44,7 @@ class OFPHandler(app_manager.RyuApp): > super(OFPHandler, self).__init__(*args, **kwargs) > > @staticmethod > - def hello_failed(datapath, error_desc): > + def _hello_failed(datapath, error_desc): > LOG.error(error_desc) > error_msg = datapath.ofproto_parser.OFPErrorMsg(datapath) > error_msg.type = datapath.ofproto.OFPET_HELLO_FAILED > @@ -62,13 +62,63 @@ class OFPHandler(app_manager.RyuApp): > # pre 1.0 is not supported > elements = getattr(msg, 'elements', None) > if elements: > - usable_versions = [] > + switch_versions = [] > for elem in elements: > - usable_versions += elem.versions or [] > + switch_versions += elem.versions or [] > + switch_versions = sorted(set(switch_versions)) For what the above is necessary? > + usable_versions = [ > + version for version in switch_versions > + if version in datapath.supported_ofp_version] > + > + # We didn't send our supported versions for interoperability as > + # most switches would not understand elements At the moment. > + # So the switch would think that the negotiated version would > + # be max(negotiated_versions), but actual usable version is > + # max(usable_versions). > + negotiated_versions = [ > + version for version in switch_versions > + if version <= max(datapath.supported_ofp_version)] > + if negotiated_versions and not usable_versions: > + # e.g. > + # versions of OF 1.0 and 1.1 from switch > + # max of OF 1.2 from Ryu and supported_ofp_version = (1.2, ) > + # negotiated version = 1.1 > + # usable version = None > + error_desc = ( > + 'no compatible version found: ' > + 'switch versions 0x%x controller version 0x%x, ' > + 'the negotiated version is 0x%x, ' > + 'but no usable version found. ' > + 'If possible, set the switch to use one of OF version %s' > + % (switch_versions, max(datapath.supported_ofp_version), > + max(negotiated_versions), > + datapath.supported_ofp_version)) > + self._hello_failed(datapath, error_desc) > + return > + if (negotiated_versions and usable_versions and > + max(negotiated_versions) != max(usable_versions)): > + # e.g. > + # versions of OF 1.0 and 1.1 from switch > + # max of OF 1.2 from Ryu and supported_ofp_version = (1.0, > 1.2) > + # negotiated version = 1.1 > + # usable version = 1.0 > + # > + # TODO: In order to get the version 1.0, Ryu need to send > + # supported verions. > + error_desc = ( > + 'no compatible version found: ' > + 'switch versions 0x%x controller version 0x%x, ' > + 'the negotiated version is 0x%x but found usable 0x%x. ' > + 'If possible, set the switch to use one of OF version %s' % ( > + switch_versions, max(datapath.supported_ofp_version), > + max(negotiated_versions), sorted(usable_versions), > + usable_versions)) > + self._hello_failed(datapath, error_desc) > + return > else: > - usable_versions = [version for version > - in datapath.supported_ofp_version > - if version <= msg.version] > + usable_versions = sorted(set(version for version > + in datapath.supported_ofp_version > + if version <= msg.version)) > if (usable_versions and > max(usable_versions) != min(msg.version, > datapath.ofproto.OFP_VERSION)): > @@ -99,19 +149,21 @@ class OFPHandler(app_manager.RyuApp): > # and optionally an ASCII string explaining the situation > # in data, and then terminate the connection. > version = max(usable_versions) > - error_desc = 'no compatible version found: ' > - 'switch 0x%x controller 0x%x, but found usable 0x%x. ' > - 'If possible, set the switch to use OF version 0x%x' % ( > - msg.version, datapath.ofproto.OFP_VERSION, > - version, version) > - self.hello_failed(error_desc) > + error_desc = ( > + 'no compatible version found: ' > + 'switch 0x%x controller 0x%x, but found usable 0x%x. ' > + 'If possible, set the switch to use OF version 0x%x' % ( > + msg.version, datapath.ofproto.OFP_VERSION, > + version, version)) > + self._hello_failed(datapath, error_desc) > return > > if not usable_versions: > - error_desc = 'unsupported version 0x%x. ' > - 'If possible, set the switch to use one of the versions %s' % ( > - msg.version, datapath.supported_ofp_version.keys()) > - self.hello_failed(error_desc) > + error_desc = ( > + 'unsupported version 0x%x. ' > + 'If possible, set the switch to use one of the versions %s' > % ( > + msg.version, datapath.supported_ofp_version.keys())) > + self._hello_failed(datapath, error_desc) > return > datapath.set_version(max(usable_versions)) > > -- > 1.7.10.4 > > > >> >> = >> >From 0a2e8b4e287e24b272597bf1d2b5dfcce4d2db2e Mon Sep 17 00:00:00 2001 >> From: FUJITA Tomonori <[email protected]> >> Date: Wed, 30 Jan 2013 10:51:36 +0900 >> Subject: [PATCH] of: fix hello version error printing >> >> Fix the following error: >> >> Traceback (most recent call last): >> File "/Users/fujita/git/ryu/ryu/controller/controller.py", line 94, in >> deactivate >> method(self) >> File "/Users/fujita/git/ryu/ryu/controller/controller.py", line 172, in >> _recv_loop >> self.ev_q.queue(ofp_event.ofp_msg_to_ev(msg)) >> File "/Users/fujita/git/ryu/ryu/controller/dispatcher.py", line 109, in >> queue >> self._dispatcher(ev) >> File "/Users/fujita/git/ryu/ryu/controller/dispatcher.py", line 174, in >> __call__ >> self.dispatch(ev) >> File "/Users/fujita/git/ryu/ryu/controller/dispatcher.py", line 191, in >> dispatch >> handled = self._dispatch(ev, self.events.get(ev.__class__, [])) >> File "/Users/fujita/git/ryu/ryu/controller/dispatcher.py", line 182, in >> _dispatch >> ret = h(ev) >> File "/Users/fujita/git/ryu/ryu/controller/ofp_handler.py", line 113, in >> hello_handler >> msg.version, datapath.supported_ofp_version.keys()) >> TypeError: not all arguments converted during string formatting >> >> Signed-off-by: FUJITA Tomonori <[email protected]> >> --- >> ryu/controller/ofp_handler.py | 6 +++--- >> 1 files changed, 3 insertions(+), 3 deletions(-) >> >> diff --git a/ryu/controller/ofp_handler.py b/ryu/controller/ofp_handler.py >> index add0301..216848c 100644 >> --- a/ryu/controller/ofp_handler.py >> +++ b/ryu/controller/ofp_handler.py >> @@ -108,10 +108,10 @@ class OFPHandler(app_manager.RyuApp): >> return >> >> if not usable_versions: >> - error_desc = 'unsupported version 0x%x. ' >> - 'If possible, set the switch to use one of the versions %s' % ( >> + error_desc = 'unsupported version 0x%x. ' \ >> + 'If possible, set the switch to use one of the versions %s' >> % ( >> msg.version, datapath.supported_ofp_version.keys()) >> - self.hello_failed(error_desc) >> + self.hello_failed(datapath, error_desc) >> return >> datapath.set_version(max(usable_versions)) >> >> -- >> 1.7.4.4 >> >> >> ------------------------------------------------------------------------------ >> Everyone hates slow websites. So do we. >> Make your web apps faster with AppDynamics >> Download AppDynamics Lite for free today: >> http://p.sf.net/sfu/appdyn_d2d_jan >> _______________________________________________ >> Ryu-devel mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/ryu-devel >> > > -- > yamahata > > ------------------------------------------------------------------------------ > Everyone hates slow websites. So do we. > Make your web apps faster with AppDynamics > Download AppDynamics Lite for free today: > http://p.sf.net/sfu/appdyn_d2d_jan > _______________________________________________ > Ryu-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/ryu-devel ------------------------------------------------------------------------------ Free Next-Gen Firewall Hardware Offer Buy your Sophos next-gen firewall before the end March 2013 and get the hardware for free! Learn more. http://p.sf.net/sfu/sophos-d2d-feb _______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
