On 21 Feb 2022, at 15:53, Eelco Chaudron wrote:
> On 21 Feb 2022, at 14:33, Marcelo Leitner wrote: <SNIP> >>>> Don’t think this is true, it will only print if +trk and any other flags >>>> are set. >>>> Guess this is where the miscommunication is.> >>>>> The message also seems to be a bit aggressive, especially since it will >>>>> almost always be printed. >>> >>> Yeah. I missed the fact that you're checking for zero and >>> flower->key.ct_state >>> will actually mark existence of other flags. So, that is fine. >>> >>> However, I'm still not sure that the condition is fully correct. >>> >>> If we'll take a match on '+est' with all other flags wildcarded, that will >>> trigger the condition, because 'flower->key.ct_state' will contain the >>> 'est' bit, >>> but 'trk' bit will not be set. The point is that even though -trk+est is >>> not >> >> Oh ow. tc flower will reject this combination today, btw. I don't know >> about hw implications for changing that by now. >> >> https://elixir.bootlin.com/linux/latest/C/ident/fl_validate_ct_state >> 'state' parameter in there is the value masked already. >> >> We directly mapped openflow restrictions to the datapath. >> >>> a valid combination and +trk+est is, OVS may in theory produce the match >>> with >>> 'est' bit set and 'trk' bit wildcarded. And that can be a correct >>> configuration. >> >> I guess that means that the only possible parameter validation on >> ct_state at tc level is about its length. Thoughts? >> > > Guess I get it now also :) I was missing the wildcard bit that OVS implies > when not specifying any :) > > I think I can fix this by just adding +trk on the TC side when we get the OVS > wildcard for +trk. Guess this holds true as for TC there is no -trk +flags. > > I’m trying to replicate patch 9 all afternoon, and due to the fact I did not > write down which test was causing the problem, and it taking 20-30 runs, it > has not happened yet :( But will do it later tomorrow, see if it works in all > cases ;) > So I’ve been doing some experiments (and running all system-traffic tests), and I think the following fix will solve the problem by just making sure the +trk flag is set in this case on the TC side. This will not change the behavior compared to the kernel. diff --git a/lib/netdev-offload-tc.c b/lib/netdev-offload-tc.c index 0105d883f..3d2c1d844 100644 --- a/lib/netdev-offload-tc.c +++ b/lib/netdev-offload-tc.c @@ -1541,6 +1541,12 @@ parse_match_ct_state_to_flower(struct tc_flower *flower, struct match *match) flower->key.ct_state &= ~(TCA_FLOWER_KEY_CT_FLAGS_NEW); flower->mask.ct_state &= ~(TCA_FLOWER_KEY_CT_FLAGS_NEW); } + + if (flower->key.ct_state && + !(flower->key.ct_state & TCA_FLOWER_KEY_CT_FLAGS_TRACKED)) { + flower->key.ct_state |= TCA_FLOWER_KEY_CT_FLAGS_TRACKED; + flower->mask.ct_state |= TCA_FLOWER_KEY_CT_FLAGS_TRACKED; + } } I will send out a v3 of this set soon with this change included. //Eelco <SNIP> _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
