[ovs-dev] [PATCH] [RFC] flow: Do not clear L3+ fields of flow in flow_push_mpls()

Simon Horman horms at verge.net.au
Fri Mar 14 07:19:52 UTC 2014


When creating a flow in the datapath as the result of an upcall
the match itself is the match supplied in the upcall while
the mask of the match, if supplied, is generated based on the
flow and mask composed during action translation.

In the case of, for example a UDP packet, the match will include
of L2, L3 and L4 fields. However, if the flow is cleared in
flow_push_mpls() then the mask that is synthesised from it will
not include L3 and L4 fields. This seems incorrect and the kernel
datapath complains about this mismatch.

Signed-off-by: Simon Horman <horms at verge.net.au>
---
 lib/flow.c | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/lib/flow.c b/lib/flow.c
index 82d6729..a0194f7 100644
--- a/lib/flow.c
+++ b/lib/flow.c
@@ -1175,11 +1175,6 @@ flow_push_mpls(struct flow *flow, int n, ovs_be16 mpls_eth_type,
         }
 
         flow->mpls_lse[0] = set_mpls_lse_values(ttl, tc, 1, htonl(label));
-
-        /* Clear all L3 and L4 fields. */
-        BUILD_ASSERT(FLOW_WC_SEQ == 24);
-        memset((char *) flow + FLOW_SEGMENT_2_ENDS_AT, 0,
-               sizeof(struct flow) - FLOW_SEGMENT_2_ENDS_AT);
     }
     flow->dl_type = mpls_eth_type;
 }
-- 
1.8.5.2




More information about the dev mailing list