[ovs-dev] [PATCH/RFC] ofproto-dpif-upcall: Filter translated mask using flow

Simon Horman horms at verge.net.au
Sat Mar 29 23:01:35 UTC 2014


On Thu, Mar 20, 2014 at 09:37:14AM -0700, Ben Pfaff wrote:
> On Thu, Mar 20, 2014 at 05:34:23PM +0900, Simon Horman wrote:
> > When revalidating a flow convert xout.wc.masks, the mask calculated by
> > translation, to a key that relates to the flow present in the datapath.  Only
> > mask elements that relate to the flow will be included in the resulting key.
> > This has the effect of filtering the mask based on 'flow'.
> > 
> > In particular this filters out mpls_lse mask bits set on non-MPLS flows.
> > 
> > This avoids flows being premeturely evicted from the datapath
> > because their calculated mask is too specific.
> 
> I agree that that is a good thing to do, which has been a real problem
> in some cases, but I don't yet understand why there would be mpls_lse
> mask bits set on non-MPLS flows.  Can you explain why (when?) that
> happens?

Hi Ben,

I'm not sure if there are other cases but one that I have isolated
is if a non-MPLS packet becomes an MPLS packet through a push MPLS action.

In this case the mpls_lse mask bits are all set to 1 in flow_push_mpls()
during translation.  This is in contrast to a mask produced based on the
original (non-MPLS flow) by odp_flow_key_to_mask(), where the mpls_lse bits
are all 0.

And my analysis is that in the case of revalidate_ukey() the mask
comparison fails because of this miss-match, causing unnecessary eviction
of facets from the datapath.



More information about the dev mailing list