On Tue, Aug 20, 2019 at 07:15:10PM +0100, Edward Cree wrote: > On 20/08/2019 18:33, Pablo Neira Ayuso wrote: > > I can update tc pedit to generate one single action for offset > > consecutive packet editions, if that is the concern, I'll send a v2. > IMHO the fix belongs in TC userland (i.e. iproute2), to turn a > single action on the commandline for an ipv6 addr into four pedit > actions before the kernel ever sees it. > Similarly if nftables wants to use this it should generate four > separate pedit actions, probably in the kernel netfilter code as (I > assume) your uAPI talks in terms of named fields rather than the > u32ish offsets and masks of tc pedit. The driver flow_offload API does not necessarily need to map 1:1 to the netlink control plane / UAPI. The driver flow_offload API is detached from UAPI and it is internal to drivers. > The TC (well, flow_offload now I suppose) API should be kept narrow, > not widened for things that can already be expressed adequately. > Your array of words inside a pedit action looks like a kind of loop > unrolling but for data structures, which doesn't look sensible to > me. With one action that says "mangle an IPv6 at offset ip6 daddr field" the driver has more global view on what is going on, rather than having four actions to mangle four 32-bit words at some offset. If this patch adds some loops here is because I did not want to make too smart changes on the drivers. The only reason I can find why mangling is restricted to 32-bits word is tc pedit. The existing flow_offload API was modeled after tc actions, which was exposing tc pedit implementation details to hardware. Please, allow for incremental updates on the flow_offload API to get it better now. Later we'll have way more drivers it will become harder to update this.