ipip: reject unsupported configurations in fill_forward_path

The ipip fill_forward_path callback currently does not check for
configurations that cannot be offloaded to hardware:

- Collect metadata (flow-based) tunnels have no fixed destination
  and rely on per-packet tunnel metadata, so the forward path
  cannot be pre-computed.

- TOS inheritance (parms.iph.tos & 0x1) requires copying the outer
  TOS from the inner packet at encapsulation time, which is not
  known during forward path resolution.

Return -EOPNOTSUPP for both cases to fall back to the software
forwarding path.

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://patch.msgid.link/20260725-ipip-fill-forward-path-fix-v1-1-bc69fd3127d5@kernel.org
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
Lorenzo Bianconi
2026-07-25 11:33:45 +02:00
committed by Paolo Abeni
parent 7d34154b64
commit d25c5beea9

View File

@@ -360,6 +360,12 @@ static int ipip_fill_forward_path(struct net_device_path_ctx *ctx,
const struct iphdr *tiph = &tunnel->parms.iph;
struct rtable *rt;
if (tunnel->collect_md)
return -EOPNOTSUPP;
if (tunnel->parms.iph.tos & 0x1)
return -EOPNOTSUPP;
rt = ip_route_output(dev_net(ctx->dev), tiph->daddr, tiph->saddr,
inet_dsfield_to_dscp(tiph->tos),
tunnel->parms.link, RT_SCOPE_UNIVERSE);