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. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev