[ovs-discuss] Fwd: How to modify the in_port field inside a flow in OF13 ?

Nilesh G nilesh.gavaskar at gmail.com
Wed Mar 11 19:07:36 UTC 2015


Hi Ben,

That fixed my problem. Thanks !
Sorry for the repost. I should have read the FAQs first.

By a flow parameter, I meant something like mod_dl_src or mod_dl_dst. I
couldn't find a similar action parameter that I could use.
I tried using the resubmit() action but I was going around in circles.
I had also looked at the OFPACT_SET_FIELD inside ofp-actions.c but I
couldn't figure out how to use it.

For others:
Here is what I used to change the input port num: ( '0' is the new port
number )
ovs-ofctl add-flow br0 in_port=2,actions=load:0->NXM_OF_IN_PORT[],controller

Thanks,
Nilesh


On Wed, Mar 11, 2015 at 2:33 PM, Ben Pfaff <blp at nicira.com> wrote:

> On Wed, Mar 11, 2015 at 02:23:59PM -0400, Nilesh G wrote:
> > Does anyone know of a way to modify the input port field (in_port) for a
> > packet via a flow parameter in OF 1.3 ?
>
> What's a flow parameter?
>
> The FAQ has a possibly relevant Q&A:
>
> ### Q: I added a flow to send packets out the ingress port, like this:
>
>        ovs-ofctl add-flow br0 in_port=2,actions=2
>
>    but OVS drops the packets instead.
>
> A: Yes, OpenFlow requires a switch to ignore attempts to send a packet
>    out its ingress port.  The rationale is that dropping these packets
>    makes it harder to loop the network.  Sometimes this behavior can
>    even be convenient, e.g. it is often the desired behavior in a flow
>    that forwards a packet to several ports ("floods" the packet).
>
>    Sometimes one really needs to send a packet out its ingress port
>    ("hairpin"). In this case, output to OFPP_IN_PORT, which in
>    ovs-ofctl syntax is expressed as just "in_port", e.g.:
>
>        ovs-ofctl add-flow br0 in_port=2,actions=in_port
>
>    This also works in some circumstances where the flow doesn't match
>    on the input port.  For example, if you know that your switch has
>    five ports numbered 2 through 6, then the following will send every
>    received packet out every port, even its ingress port:
>
>        ovs-ofctl add-flow br0 actions=2,3,4,5,6,in_port
>
>    or, equivalently:
>
>        ovs-ofctl add-flow br0 actions=all,in_port
>
>    Sometimes, in complicated flow tables with multiple levels of
>    "resubmit" actions, a flow needs to output to a particular port
>    that may or may not be the ingress port.  It's difficult to take
>    advantage of OFPP_IN_PORT in this situation.  To help, Open vSwitch
>    provides, as an OpenFlow extension, the ability to modify the
>    in_port field.  Whatever value is currently in the in_port field is
>    the port to which outputs will be dropped, as well as the
>    destination for OFPP_IN_PORT.  This means that the following will
>    reliably output to port 2 or to ports 2 through 6, respectively:
>
>        ovs-ofctl add-flow br0 in_port=2,actions=load:0->NXM_OF_IN_PORT[],2
>        ovs-ofctl add-flow br0 actions=load:0->NXM_OF_IN_PORT[],2,3,4,5,6
>
>    If the input port is important, then one may save and restore it on
>    the stack:
>
>         ovs-ofctl add-flow br0 actions=push:NXM_OF_IN_PORT[],\
>                                        load:0->NXM_OF_IN_PORT[],\
>                                        2,3,4,5,6,\
>                                        pop:NXM_OF_IN_PORT[]
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://openvswitch.org/pipermail/ovs-discuss/attachments/20150311/a8d047eb/attachment-0002.html>


More information about the discuss mailing list