Acked-by: Jarno Rajahalme <jrajaha...@nicira.com> On Sep 11, 2013, at 10:02 AM, Ben Pfaff <b...@nicira.com> wrote:
> Reported-by: Aws Auger <ovshel...@gmail.com> > Signed-off-by: Ben Pfaff <b...@nicira.com> > --- > FAQ | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 50 insertions(+) > > diff --git a/FAQ b/FAQ > index 7181484..20a3e3b 100644 > --- a/FAQ > +++ b/FAQ > @@ -1249,6 +1249,56 @@ A: An empty set of actions causes a packet to be > dropped. You can > > ovs-ofctl add-flow br0 priority=65535,actions=drop > > +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. > + 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[] > + > > Contact > ------- > -- > 1.7.10.4 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev