[prev in list] [next in list] [prev in thread] [next in thread]
List: openvswitch-discuss
Subject: [ovs-discuss] Frames are dropped if its input port and output port are the same
From: chy019 () eng ! ucsd ! edu (Hans Yu)
Date: 2015-10-31 20:34:44
Message-ID: CAPZMhkJ5neEBFKGkO_DPDQo69KsdtEqH=A=EJaqYC5A7XrhoQA () mail ! gmail ! com
[Download RAW message or body]
Hi Justin,
Thanks for the reply. Now I configured my controller to set output port
as OFPP_IN_PORT to take care of these frames and it worked.
Best,
Hans
On Thu, Oct 22, 2015 at 4:15 PM, Justin Pettit <jpettit at nicira.com> wrote:
>
> > On Oct 22, 2015, at 4:07 PM, Hans Yu <chy019 at eng.ucsd.edu> wrote:
> >
> > Hi,
> >
> > I noticed that my Ethernet frames are dropped when their input ports are
> the same as their output ports. Even though I have the right rule installed
> on to Open vSwitch bridge from my controller, they still get dropped.
>
> From the FAQ:
>
> ### 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[]
>
> --Justin
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://openvswitch.org/pipermail/discuss/attachments/20151031/1a26028d/attachment-0001.html>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic