Hi Iwase, that helped ... I have been able to add the multipath flow to my switch!
However, I am resubmitting the packet to another table (in my example it is table_idx=1), into which I need to write the 2nd set of rules (each matching a different value in reg0). Now here is where I fail since the class OFPFlowMod() in v1_0 does not have an argument for the table to write to (which v1_0_parser does). Any idea on how to accomplish this? Thanks much, Ivica > -----Original Message----- > From: EXT Iwase Yusuke [mailto:[email protected]] > Sent: Thursday, April 07, 2016 9:11 AM > To: Rimac, Ivica (Nokia - DE) > Cc: [email protected] > Subject: Re: [Ryu-devel] Using NXActionMultipath for load balancing > > Hi, > > On 2016年04月07日 00:06, Rimac, Ivica (Nokia - DE) wrote: > > Hi, > > > > I have implemented and configured a load balancer on an OVS levering > the nicira multipath extension and using the ovs-ofctl tool. Moving > from local ovs controls to a RYU app leaves me wondering about some > details. Following are my ofctl instructions with related questions: > > > > 1. Multipath action > > > > $> ovs-ofctl add-flow ovsbr > > > ip,nw_dst=${VIP},actions=multipath(symmetric_l4,1024,hrw,${NUM_LINKS}, > > 0,NXM_NX_REG0[0..3]),resubmit(,1) > > > > Q1) The multipath extension is only supported in ofproto_v1_0_parser, > correct? > > Currently, yes. > the Nicira extensions are not fully ported into > ofproto_v1_[2345]_parser... > > > > > I am trying to use the classes in my ryu-app to create the > > corresponding actions > > > > -> ofproto_v1_0_parser.NXActionMultipath(…) > > > > -> ofproto_v1_0_parser.NXResubmitTable(…) > > > > I found ofproto.NX_HASH_FIELDS_SYMMETRIC_L4 and > ofproto.NX_MP_ALG_HRW > > for the fields and algorithm but wonder > > > > Q2) how to set/address the register NXM_NX_REG0 (and the > corresponding bits) in NXActionMultipath? > > > > Q3) what is the ofs_nbits param used for in ryu MP Action? (There is > > no such argument in the ofctl multipath action.) > > > > 2. Register match > > > > $> ovs-ofctl add-flow ovsbr > > table=1,reg0=0/15,actions=mod_dl_dst=${MAC},output:${OFPORT} > > > > Q4) How do I read the value (hash) previously written into reg0 by > the > > multipath action? (related to Q1) > > For Q2,3,4, please refer to the following snippet. > > $ git diff > diff --git a/ryu/app/simple_switch.py b/ryu/app/simple_switch.py index > 862b830..0666deb 100644 > --- a/ryu/app/simple_switch.py > +++ b/ryu/app/simple_switch.py > @@ -20,7 +20,7 @@ An OpenFlow 1.0 L2 learning switch implementation. > > from ryu.base import app_manager > from ryu.controller import ofp_event > -from ryu.controller.handler import MAIN_DISPATCHER > +from ryu.controller.handler import MAIN_DISPATCHER, CONFIG_DISPATCHER > from ryu.controller.handler import set_ev_cls > from ryu.ofproto import ofproto_v1_0 > from ryu.lib.mac import haddr_to_bin > @@ -28,6 +28,9 @@ from ryu.lib.packet import packet > from ryu.lib.packet import ethernet > from ryu.lib.packet import ether_types > > +from ryu.ofproto import nx_match > +from ryu.ofproto import nicira_ext > + > > class SimpleSwitch(app_manager.RyuApp): > OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION] @@ -36,6 +39,44 @@ > class SimpleSwitch(app_manager.RyuApp): > super(SimpleSwitch, self).__init__(*args, **kwargs) > self.mac_to_port = {} > > + @set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER) > + def switch_features_handler(self, ev): > + datapath = ev.msg.datapath > + ofproto = datapath.ofproto > + parser = datapath.ofproto_parser > + > + # Register match in ovs-ofctl command is corresponding as > follows: > + # format) > + # reg<reg_index>=value/mask > + # nx_match.ClsRule.set_reg_masked(self, reg_idx, value, > mask) > + # e.g.) > + # reg0=0/15 > + rule = nx_match.ClsRule() > + rule.set_reg_masked(0, 0x0, 0x15) > + > + # Multipath action in ovs-ofctl command is corresponding as > follows: > + # format) > + # multipath(fields, basis, algorithm, n_links, arg, > dst[start..end]) > + # NXActionMultipath.__init__( > + # self,fields, basis, algorithm, max_link, arg, > ofs_nbits, dst) > + # * Note: max_link = n_links - 1. > + # ofs_nbits = ((start << 6) | end) > + # e.g.) > + # multipath(symmetric_l4,1024,hrw,6,0,NXM_NX_REG0[0..3]) > + actions = [parser.NXActionMultipath( > + fields=nicira_ext.NX_HASH_FIELDS_SYMMETRIC_L4, > + basis=1024, > + algorithm=nicira_ext.NX_MP_ALG_HRW, > + max_link=5, > + arg=0, > + ofs_nbits=((0 << 6) | 3), > + dst=ofproto.nxm_nx_reg(0))] > + > + # Send nxt_flow_mod by using the utility method of Datapath > class > + datapath.send_flow_mod( > + rule=rule, cookie=0, command=ofproto.OFPFC_ADD, > + idle_timeout=0, hard_timeout=0, actions=actions) > + > def add_flow(self, datapath, in_port, dst, actions): > ofproto = datapath.ofproto > > > $ sudo ovs-ofctl dump-flows s1 > NXST_FLOW reply (xid=0x4): > cookie=0x0, duration=3.228s, table=0, n_packets=2, n_bytes=140, > idle_age=2, reg0=0/0x15 > actions=multipath(symmetric_l4,1024,hrw,6,0,NXM_NX_REG0[0..3]) > > > Thanks, > Iwase > > > > > I appreciate any help since I am new to RYU and don’t seem to find > answers myself by going through the ryu code base. > > > > Ivica > > > > > > > > --------------------------------------------------------------------- > - > > -------- > > > > > > > > _______________________________________________ > > Ryu-devel mailing list > > [email protected] > > https://lists.sourceforge.net/lists/listinfo/ryu-devel > >
smime.p7s
Description: S/MIME cryptographic signature
------------------------------------------------------------------------------
_______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
