On Thu, Dec 13, 2012 at 11:41:28AM +0900, FUJITA Tomonori wrote:
> On Thu, 13 Dec 2012 11:34:36 +0900
> Isaku Yamahata <[email protected]> wrote:
> 
> > Hi. Does the following patch help? (it is totally untested yet).
> 
> Hmm, if an application specifies the OF versions, then Ryu sends the
> highest version of these specified versions. The version negotication
> failure should not happen...

The issues is that switch may send the version higher than the one Ryu sends.
In this case
  4 = OF1.3 from switch
  3 = OF1.2 from Ryu
  datapath.supported_ofp_version = (3 = OF1.2)
In such cases, we should use OF1.2 instead of error.

thanks,


> 
> > ---------------------------------------------------------------------------
> > diff --git a/ryu/controller/ofp_handler.py b/ryu/controller/ofp_handler.py
> > index 63f888a..92d7e01 100644
> > --- a/ryu/controller/ofp_handler.py
> > +++ b/ryu/controller/ofp_handler.py
> > @@ -52,20 +52,35 @@ class OFPHandler(app_manager.RyuApp):
> >  
> >          # TODO: check if received version is supported.
> >          #       pre 1.0 is not supported
> > -        if msg.version not in datapath.supported_ofp_version:
> > -            # send the error
> > -            error_msg = datapath.ofproto_parser.OFPErrorMsg(datapath)
> > -            error_msg.type = datapath.ofproto.OFPET_HELLO_FAILED
> > -            error_msg.code = datapath.ofproto.OFPHFC_INCOMPATIBLE
> > -            error_msg.data = 'unsupported version 0x%x' % msg.version
> > -            datapath.send_msg(error_msg)
> > -            return
> > -
> > -        # should we again send HELLO with the version that the switch
> > -        # supports?
> > -        # msg.version != datapath.ofproto.OFP_VERSION:
> > -
> > -        datapath.set_version(msg.version)
> > +        if hasattr(msg, 'elements'):
> > +            # TODO: OFPHET_VERSIONBITMAP
> > +            pass
> > +        else:
> > +            usable_versions = [version for version
> > +                               in datapath.supported_ofp_version
> > +                               if version <= msg.version]
> > +            if not usable_versions:
> > +                # send the error
> > +                error_msg = datapath.ofproto_parser.OFPErrorMsg(datapath)
> > +                error_msg.type = datapath.ofproto.OFPET_HELLO_FAILED
> > +                error_msg.code = datapath.ofproto.OFPHFC_INCOMPATIBLE
> > +                error_msg.data = 'unsupported version 0x%x' % msg.version
> > +                datapath.send_msg(error_msg)
> > +                return
> > +            version = max(usable_versions)
> > +            if version != max(msg.version, 
> > ev.datapath.ofproto.OFP_VERSION):
> > +                # What to do?
> > +                # should we again send HELLO with this version again?
> > +                error_msg = datapath.ofproto_parser.OFPErrorMsg(datapath)
> > +                error_msg.type = datapath.ofproto.OFPET_HELLO_FAILED
> > +                error_msg.code = datapath.ofproto.OFPHFC_INCOMPATIBLE
> > +                error_msg.data = 'no compatible version found: '
> > +                'controller 0x%x switch 0x%x' % (
> > +                    ev.datapath.ofproto.OFP_VERSION, msg.version)
> > +                datapath.send_msg(error_msg)
> > +                return
> > +
> > +        datapath.set_version(version)
> >  
> >          # now send feature
> >          features_reqeust = 
> > datapath.ofproto_parser.OFPFeaturesRequest(datapath)
> > ---------------------------------------------------------------------------
> > 
> > On Wed, Dec 12, 2012 at 05:47:10PM -0800, Shivaram Mysore wrote:
> >> Thanks.  But, that did not help.  Here is the code
> >> 
> >> import logging
> >> import struct
> >> import array
> >> 
> >> from ryu.controller import handler
> >> from ryu.controller import ofp_event
> >> from ryu.ofproto import ofproto_v1_2
> >> from ryu.ofproto import ofproto_v1_2_parser
> >> from ryu.base import app_manager
> >> 
> >> LOG = logging.getLogger('ryu.app.packettest')
> >> 
> >> class PacketTest(app_manager.RyuApp):
> >>     OFP_VERSIONS = [ofproto_v1_2.OFP_VERSION]
> >> 
> >>     def __init__(self, *args, **kwargs):
> >>         pass
> >> 
> >>     @handler.set_ev_cls(ofp_event.EventOFPPacketIn, 
> >> handler.MAIN_DISPATCHER)
> >>     def packet_in_handler(self, ev):
> >>         msg = ev.msg
> >>         dp = msg.datapath
> >>         for f in msg.match.fields:
> >>             if f.header == ofproto_v1_2.OXM_OF_IN_PORT:
> >>                 in_port = f.value
> >> 
> >>         actions = [dp.ofproto_parser.OFPActionOutput(dp.ofproto.OFPP_ALL, 
> >> 0)]
> >>         out = dp.ofproto_parser.OFPPacketOut(
> >>             datapath=dp, buffer_id=msg.buffer_id, in_port=in_port,
> >>             actions=actions)
> >>         LOG.debug("Sending message out %s", out)
> >>         dp.send_msg(out)
> >> 
> >> 
> >> On the switch side, I see:
> >> Connection to controller closed because of {"localhost",6633,0,
> >> {unsupported_version,4}}
> >> 
> >> 
> >> On Wed, Dec 12, 2012 at 5:40 PM, FUJITA Tomonori 
> >> <[email protected]
> >> > wrote:
> >> 
> >>     class PacketTest(app_manager.RyuApp):
> >>         OFP_VERSIONS = [ofproto_v1_2.OFP_VERSION]
> >> 
> >>         def __init__(self, *args, **kwargs):
> >>             pass
> >> 
> >> 
> >> 
> >> 
> > 
> >> ------------------------------------------------------------------------------
> >> LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
> >> Remotely access PCs and mobile devices and provide instant support
> >> Improve your efficiency, and focus on delivering more value-add services
> >> Discover what IT Professionals Know. Rescue delivers
> >> http://p.sf.net/sfu/logmein_12329d2d
> >> _______________________________________________
> >> Ryu-devel mailing list
> >> [email protected]
> >> https://lists.sourceforge.net/lists/listinfo/ryu-devel
> > 
> > 
> > -- 
> > yamahata
> > 
> > ------------------------------------------------------------------------------
> > LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
> > Remotely access PCs and mobile devices and provide instant support
> > Improve your efficiency, and focus on delivering more value-add services
> > Discover what IT Professionals Know. Rescue delivers
> > http://p.sf.net/sfu/logmein_12329d2d
> > _______________________________________________
> > Ryu-devel mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/ryu-devel
> 
> ------------------------------------------------------------------------------
> LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
> Remotely access PCs and mobile devices and provide instant support
> Improve your efficiency, and focus on delivering more value-add services
> Discover what IT Professionals Know. Rescue delivers
> http://p.sf.net/sfu/logmein_12329d2d
> _______________________________________________
> Ryu-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ryu-devel
> 

-- 
yamahata

------------------------------------------------------------------------------
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to