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
> >

Attachment: smime.p7s
Description: S/MIME cryptographic signature

------------------------------------------------------------------------------
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to