Introduce 'skb_set_tunnel_opt_dynptr' to allow setting tunnel options of dynamic length. v2: - Place test_tunnel's local route in a custom table, to ensure the IP isn't considered assigned to a device. v3: - Avoid 'inline' for the __bpf_skb_set_tunopt helper function v4: - change API to be based on bpf_dynptr, suggested by John Fastabend <john.fastabend@xxxxxxxxx> v5: - fix bpf_dynptr_get_data's incorrect usage of bpf_dynptr_kern's size spotted by Joanne Koong <joannelkoong@xxxxxxxxx> v6: - Simplify bpf_dynptr_get_data's interface and make it inline suggested by John Fastabend <john.fastabend@xxxxxxxxx> - Simplify bpf_skb_set_tunnel_opt_dynptr's interface, removing the superfluous 'len' parameter suggested by Andrii Nakryiko <andrii.nakryiko@xxxxxxxxx> - Fix missing retcodes in progs/test_tunnel_kern.c spotted by John Fastabend <john.fastabend@xxxxxxxxx> v7: - Fix undefined reference to `bpf_dynptr_get_size' when CONFIG_BPF_SYSCALL is unset, Reported-by: kernel test robot <lkp@xxxxxxxxx> Shmulik Ladkani (4): bpf: Export 'bpf_dynptr_get_data, bpf_dynptr_get_size' helpers bpf: Support setting variable-length tunnel options selftests/bpf: Simplify test_tunnel setup for allowing non-local tunnel traffic selftests/bpf: Add geneve with bpf_skb_set_tunnel_opt_dynptr test-case to test_progs include/linux/bpf.h | 13 ++ include/uapi/linux/bpf.h | 11 + kernel/bpf/helpers.c | 2 +- net/core/filter.c | 31 ++- tools/include/uapi/linux/bpf.h | 11 + .../selftests/bpf/prog_tests/test_tunnel.c | 131 +++++++++-- .../selftests/bpf/progs/test_tunnel_kern.c | 212 ++++++++++++------ 7 files changed, 325 insertions(+), 86 deletions(-) -- 2.37.3