It's just a bug.

On Tue, Feb 07, 2012 at 10:29:27PM -0800, Ethan Jackson wrote:
> We already do these checks in ofproto-dpif at the callers of
> compose_output_action() see the xlate_output_action__() function.  The
> issue you're running into is that we skip this check for and explicit
> OFPP_LOCAL output.  I'm not sure if this is an oversight or by design,
> someone more familiar with the specification will have to chime in.
> 
> To verify this theory, you can try using the flood action instead
> which should not flood to the local port.  If it turns out to be an
> oversight that we aren't performing this check, the appropriate place
> to fix the behavior would be in xlate_output_action__().
> 
> Ethan
> 
> On Tue, Feb 7, 2012 at 17:53, Aaron Rosen <[email protected]> wrote:
> > Or it might be better to just reject this packet?
> >
> > Aaron
> >
> > On Tue, Feb 7, 2012 at 8:22 PM, Aaron Rosen <[email protected]> wrote:
> >> Hello,
> >>
> >> This patch corrects the behavior when an OFPAT_PACKET_OUT is received
> >> and the in_port is in the output action list. In these cases packets
> >> should not be sent to the corresponding output if it matches the
> >> in_port (i.e just like in the case with action=OFPP_FLOOD, the packet
> >> is not also sent to in_port).
> >>
> >> Example:
> >>  OFPT_PACKET_OUT (xid=0x0): in_port=LOCAL actions_len=16
> >> actions=output:1,LOCAL data_len=60
> >>
> >> This packet is output to ports 1 and LOCAL,but should just output to port 
> >> 1.
> >>
> >> Thanks,
> >>
> >> Aaron
> >>
> >> Signed-off-by: Aaron Rosen <[email protected]>
> >> ---
> >>  ofproto/ofproto-dpif.c |    5 +++++
> >>  1 files changed, 5 insertions(+), 0 deletions(-)
> >>
> >> diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
> >> index 28f0434..2fe7a8a 100644
> >> --- a/ofproto/ofproto-dpif.c
> >> +++ b/ofproto/ofproto-dpif.c
> >> @@ -4304,6 +4304,11 @@ compose_output_action__(struct action_xlate_ctx
> >> *ctx, uint16_t ofp_port,
> >>     uint8_t flow_nw_tos = ctx->flow.nw_tos;
> >>     uint16_t out_port;
> >>
> >> +    /* If ofp_port equals in_port packet should not be forwarded.
> >> +     * Only output to OFPP_IN_PORT should output to the in_port. */
> >> +    if(ofp_port == ctx->flow.in_port) {
> >> +        return;
> >> +    }
> >>     if (ofport) {
> >>         struct priority_to_dscp *pdscp;
> >>
> >> --
> >> 1.7.3.4
> >>
> >>
> >>
> >> --
> >> Aaron O. Rosen
> >> Masters Student - Network Communication
> >> 306B Fluor Daniel
> >
> >
> >
> > --
> > Aaron O. Rosen
> > Masters Student - Network Communication
> > 306B Fluor Daniel
> > _______________________________________________
> > discuss mailing list
> > [email protected]
> > http://openvswitch.org/mailman/listinfo/discuss
> _______________________________________________
> discuss mailing list
> [email protected]
> http://openvswitch.org/mailman/listinfo/discuss
_______________________________________________
discuss mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/discuss

Reply via email to