ipv4: Unmask upper DSCP bits when constructing the Record Route option
authorIdo Schimmel <idosch@nvidia.com>
Wed, 21 Aug 2024 12:52:42 +0000 (15:52 +0300)
committerJakub Kicinski <kuba@kernel.org>
Thu, 22 Aug 2024 23:59:57 +0000 (16:59 -0700)
The Record Route IP option records the addresses of the routers that
routed the packet. In the case of forwarded packets, the kernel performs
a route lookup via fib_lookup() and fills in the preferred source
address of the matched route.

Unmask the upper DSCP bits when performing the lookup so that in the
future the lookup could be performed according to the full DSCP value.

No functional changes intended since the upper DSCP bits are masked when
comparing against the TOS selectors in FIB rules and routes.

Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Guillaume Nault <gnault@redhat.com>
Acked-by: Florian Westphal <fw@strlen.de>
Reviewed-by: David Ahern <dsahern@kernel.org>
Link: https://patch.msgid.link/20240821125251.1571445-4-idosch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv4/route.c

index 13c0f1d455f3325541d33c0cc34f59fa1607f591..9b6528b7b5629b8caee4b96636e33253143b79dc 100644 (file)
@@ -1263,7 +1263,7 @@ void ip_rt_get_source(u8 *addr, struct sk_buff *skb, struct rtable *rt)
                struct flowi4 fl4 = {
                        .daddr = iph->daddr,
                        .saddr = iph->saddr,
-                       .flowi4_tos = iph->tos & IPTOS_RT_MASK,
+                       .flowi4_tos = iph->tos & INET_DSCP_MASK,
                        .flowi4_oif = rt->dst.dev->ifindex,
                        .flowi4_iif = skb->dev->ifindex,
                        .flowi4_mark = skb->mark,