Patch 1/3 ("net/skbuff: Introduce skb_mac_offset()") adds a utility function to
get mac header offset.
Patch 2/3 ("net/act_pedit: Support using offset relative to the conventional
network headers") extends pedit to enable the user to set offset relative to
MAC/IPv4/IPv6/TCP network headers.
This would enable to work with more complex header schemes (vs the simple IPv4
case) where setting a fixed offset relative to the network header is not
enough. It is also forward looking to enable hardware offloading of pedit more
The header type is embedded in the 8 MSB of the u32 key->shift which
were never used till now. Therefore backward compatibility is being
Patch 3/3 ("net/act_pedit: Introduce 'add' operation") add a new operation to
increase the value of a header field. The operation is passed on another free
8bit in the key->shift.
$ tc filter add dev enp0s9 protocol ip parent ffff: \
ip_proto tcp \
src_port 80 \
pedit munge ip ttl add 0xff \
pedit munge tcp dport set 8080 \
pipe action mirred egress redirect dev veth0
Will forward traffic with tcp dport 80, and modify the destination port to
8080, and decrease the ttl by 1.
I've uploaded a draft for the userspace  to make it easier to review and
test the patchset.
The patchset will conflict if already accepted patch  from net is missing.
It was applied and tested with  on top of commit 93ba22225504 ("hv_netvsc:
remove excessive logging on MTU change").
 - 95c2027bfeda ("net/sched: pedit: make sure that offset is valid")
 - git: https://bitbucket.org/av42/iproute2.git
Amir Vadai (3):
net/skbuff: Introduce skb_mac_offset()
net/act_pedit: Support using offset relative to the conventional
net/act_pedit: Introduce 'add' operation
include/linux/skbuff.h | 5 +++
include/uapi/linux/tc_act/tc_pedit.h | 27 ++++++++++++
net/sched/act_pedit.c | 81 ++++++++++++++++++++++++++++++------
3 files changed, 100 insertions(+), 13 deletions(-)