[ovs-dev] Threaded userspace datapath

Ed Maste carpeddiem at gmail.com
Wed Aug 15 14:01:01 UTC 2012


On 14 August 2012 21:21, Ed Maste <emaste at freebsd.org> 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);



More information about the dev mailing list