On Wed, Aug 15, 2012 at 01:16:58PM -0400, Ed Maste wrote:
> >>> There may be some confusion about numbering. OpenFlow says that the
> >>> port number of the "local port" is 65534 (OFPP_LOCAL). The datapaths,
> >>> on the other hand, use port number 0 for the "local port". There is
> >>> supposed to be translation going on at the interface between the
> >>> datapath and the OpenFlow implementation, but mistakes can creep in,
> >>> especially in new code.
> >>
> >> Indeed this is the case here - I compared the key for the packet being
> >> looked up and the otherwise-matching entry in the hash, and see 0 vs
> >> 65534 for the port.
> >>
> >> -Ed
> >
> > This fixes it for me, but I'm not certain this is the right place to
> > do the translation:
> >
> > diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c
> > index 60fae5f..7112149 100644
> > --- a/lib/dpif-netdev.c
> > +++ b/lib/dpif-netdev.c
> > @@ -1011,7 +1011,7 @@ dp_netdev_port_input(struct dp_netdev *dp,
> > struct dp_netdev_port *port,
> > if (packet->size < ETH_HEADER_LEN) {
> > return;
> > }
> > - flow_extract(packet, 0, 0, port->port_no, &key);
> > + flow_extract(packet, 0, 0, ofp_port_to_odp_port(port->port_no), &key);
> > flow = dp_netdev_lookup_flow(dp, &key);
> > if (flow) {
> > dp_netdev_flow_used(flow, &key, packet);
>
> Oops, I had it backwards in the version I posted - thanks Giuseppe for
> pointing it out off-list.
>
> This is the version that I tested and pushed to my threaded patch
> repo, and Giuseppe confirmed it fixes it for him as well. It looks
> like this bug affects the userspace datapath in general and isn't
> specific to the threaded patch or the FreeBSD netdev implementation.
>
> +++ b/lib/dpif-netdev.c
> @@ -1011,7 +1011,7 @@ dp_netdev_port_input(struct dp_netdev *dp,
> struct dp_netdev_port *port,
> if (packet->size < ETH_HEADER_LEN) {
> return;
> }
> - flow_extract(packet, 0, 0, port->port_no, &key);
> + flow_extract(packet, 0, 0, odp_port_to_ofp_port(port->port_no), &key);
> flow = dp_netdev_lookup_flow(dp, &key);
> if (flow) {
> dp_netdev_flow_used(flow, &key, packet);
I agree that this is correct.
If you will send me a signed-off version, I'll apply the fix.
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev