[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190906145019.2bggchaq43tcqdyc@salvia>
Date: Fri, 6 Sep 2019 16:50:19 +0200
From: Pablo Neira Ayuso <pablo@...filter.org>
To: Edward Cree <ecree@...arflare.com>
Cc: netfilter-devel@...r.kernel.org, davem@...emloft.net,
netdev@...r.kernel.org, jakub.kicinski@...ronome.com,
jiri@...nulli.us, saeedm@...lanox.com, vishal@...lsio.com,
vladbu@...lanox.com
Subject: Re: [PATCH net-next,v3 0/4] flow_offload: update mangle action
representation
On Fri, Sep 06, 2019 at 02:37:16PM +0100, Edward Cree wrote:
> On 06/09/2019 14:14, Pablo Neira Ayuso wrote:
> > OK, I can document this semantics, I need just _time_ to write that
> > documentation. I was expecting this patch description is enough by now
> > until I can get to finish that documentation.
>
> I think for two structs with apparently the same contents but different
> semantics (one has the mask bitwise complemented) it's best to hold up
> the code change until the comment is ready to come with it, because
> until then it's a dangerously confusing situation.
The idea is that flow rule API != tc front-end anymore. So the flow
rule API can evolve regardless the front-end requirements. Before this
update there was no other choice than using the tc pedit layout since
it was exposed to the drivers, this is not the case anymore.
> >> And you can't just coalesce all consecutive mangles, because if you
> >> mangle two consecutive fields (e.g. UDP sport and dport) the driver
> >> still needs to disentangle that if it works on a 'fields' (rather
> >> than 'u32s') level.
> >
> > This infrastructure is _not_ coalescing two consecutive field, e.g.
> > UDP sport and dport is _not_ coalesced. The coalesce routine does
> > _not_ handle multiple tc pedit ex actions.
>
> So an IPv6 address mangle only comes as a single action if it's from
> netfilter, not if it's coming from TC pedit.
Driver gets one single action from tc/netfilter (and potentially
ethtool if it would support for this), it comes as a single action
from both subsystems:
front-end -----> flow_rule API -----> drivers
Front-end need to translate their representation to this
FLOW_ACTION_MANGLE layout.
By front-end, I refer to ethtool/netfilter/tc.
> Therefore drivers still need to handle an IPv6 or MAC address
> mangle coming in multiple actions, therefore your driver
> simplifications are invalid. No?
No. IPv6 and MAC come as a single action. All subsystems use the same
flow_rule API, they use the same layout.
> > The model you propose would still need this code for tc pedit to
> > adjust offset/length and coalesce u32 fields.
>
> Yes, but we don't add code/features to the kernel based on what we
> *could* use it for later
This is already useful: Look at the cxgb driver in particular, it's
way easier to read.
Other existing drivers do not need to do things like:
case round_down(offsetof(struct iphdr, tos), 4):
and the play with masks to infer if the user wants to mangle the TOS
field, they can just do:
case offsetof(struct iphdr, tos):
which is way more natural representation.
Powered by blists - more mailing lists