On Fri, Aug 02, 2013 at 09:33:27PM -0700, Justin Pettit wrote: > The ODP library has an optimization to not set a header if the field was > not changed, regardless of whether an action to set the field was > present. That library is also responsible for un-wildcarding fields > that are bieng modified. This leads to a problem where a packet matches > a flow that updates a field, but that particular packet's field already > has that value. As such, an overly loose megaflow will be generated > that doesn't match on that field and the actions won't update it. A > second packet that should have the field set will match that flow and > will not be modified. > > This commit changes the behavior to always un-wildcard fields that are > being modified. Since the ODP library updates the entire header if a > field in it is modified, and all those fields will be un-wildcarded, the > generated flows may be different. However, they should be correct. > > Bug #18946. > > Reported-by: Jesse Gross <je...@nicira.com> > Signed-off-by: Justin Pettit <jpet...@nicira.com>
I think that OFPACT_STRIP_VLAN and OFPACT_PUSH_VLAN also need updated treatment. Does nxm_execute_reg_move() need to un-wildcard the dest field too? Seems so. How about nxm_execute_stack_pop()? How about compose_mpls_push_action(), compose_mpls_pop_action(), and compose_set_mpls_ttl_action)? nxm_reg_load(), used by OFPACT_MULTIPATH and OFPACT_BUNDLE? In the case where we do emit a "set" action, we un-wildcard not just the single field but all the fields that have to be set in the datapath in one go. Is that necessary here? My initial thought is "no" but I want to make sure that you have also considered that. Thanks, Ben. _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev