[PATCH net-next v2 0/6] netlink: add lwtunnel encap sub-message support to rt-route
From: Hangbin Liu <hidden>
Date: 2026-09-20 10:06:46
Also in:
bpf, lkml
This series adds YNL sub-message support for lwtunnel encap data in the rt-route netlink family, and describes the tunnel-specific attribute sets that were previously opaque binary blobs. The kernel currently emits encap_type after the encap payload nest, but YNL sub-message parsing needs the selector (encap_type) first to dispatch on the correct attribute set. Patch 1 reorders the kernel output, and patch 2 teaches the YNL C code generator to convert enum selectors to their string form for sub-message dispatch. Patches 3-6 extend the rt-route YAML spec. Tested with ynl selftest and checked with following cmds # modprobe ila # modprobe xfrm_interface # ip addr add 10.1.0.1/24 dev lo # ip route add 10.1.0.0/24 dev lo encap mpls 100 via 10.1.0.254 # ip route add 10.2.0.0/24 dev lo encap ip id 1 dst 127.0.0.1 src 127.0.0.1 # ip route add 2001:db8:3::/64 dev lo encap ila 1:2:3:4 csum-mode no-action ident-type luid hook-type output # ip route add 2001:db8:4::/64 dev lo encap ip6 id 1 dst 2001:db8::5 src 2001:db8::1 hoplimit 64 # ip route add 2001:db8:5::/64 dev lo encap seg6 mode inline segs 2001:db8::1 # ip route add 2001:db8:6::/65 dev lo encap seg6local action End # ip route add 2001:db8:7::/65 dev lo encap bpf in ob /tmp/kself/net/lib/xdp_dummy.bpf.o sec xdp # ip route add 2001:db8:8::/64 dev lo encap rpl segs 2001:db8::1 # ip route add 2001:db8:9::/64 encap ioam6 trace prealloc type 0x800000 ns 0 size 4 dev lo # ip route add 2001:db8:10::/64 dev lo encap xfrm if_id 100 # ip route show 10.1.0.0/24 encap mpls 100 via 10.1.0.254 dev lo 10.2.0.0/24 encap ip id 1 src 127.0.0.1 dst 127.0.0.1 ttl 0 tos 0 dev lo scope link # ip -6 route show 2001:db8:3::/64 encap ila 1:2:3:4 csum-mode no-action ident-type luid hook-type output dev lo metric 1024 pref medium 2001:db8:4::/64 encap ip6 id 1 src 2001:db8::1 dst 2001:db8::5 hoplimit 64 tc 0 dev lo metric 1024 pref medium 2001:db8:5::/64 encap seg6 mode inline segs 2 [ 2001:db8::1 :: ] dev lo metric 1024 pref medium 2001:db8:6::/65 encap seg6local action End dev lo metric 1024 pref medium 2001:db8:7::/65 encap bpf in xdp_dummy.bpf.o:[xdp] dev lo metric 1024 pref medium 2001:db8:8::/64 encap rpl segs 1 [ 2001:db8::1 ] dev lo metric 1024 pref medium 2001:db8:9::/64 encap ioam6 freq 1/1 mode inline trace prealloc type 0x800000 ns 0 size 4 dev lo metric 1024 pref medium 2001:db8:10::/64 encap xfrm if_id 100 dev lo metric 1024 pref medium # ./tools/net/ynl/pyynl/cli.py --family rt-route --dump getroute > /tmp/route_dump.json All the result looks good. Signed-off-by: Hangbin Liu <redacted> --- Changes in v2: - Patch 1: Check ops->fill_encap before setting encap_type_attr - Patch 2: Get string in generated sub-message parser and check it before reference - Patch 3-4: set byte-orders and max-len - Patch 5: include lwtunnel.h - Link to v1: https://lore.kernel.org/r/20260917-ynl_rt_encap-v1-0-fbbe6e680571@kylinos.cn (local) --- Hangbin Liu (6): net: lwtunnel: change encap fill order tools: ynl: convert enum selector to string for sub-message parsing netlink: specs: rt-route: add lwtunnel encap sub-message support netlink: specs: rt-route: describe lwtunnel IP options netlink: specs: rt-route: describe lwt BPF program options netlink: specs: rt-route: describe seg6-local actions, counters and flavors Documentation/netlink/specs/rt-route.yaml | 413 +++++++++++++++++++++++++++++- net/core/lwtunnel.c | 35 +-- tools/net/ynl/Makefile.deps | 9 +- tools/net/ynl/pyynl/ynl_gen_c.py | 20 +- 4 files changed, 454 insertions(+), 23 deletions(-) --- base-commit: 8830e65ed46de41f849eefb8ba227d4852c460f6 change-id: 20260908-ynl_rt_encap-3140103b368a Best regards, -- Hangbin Liu [off-list ref]