* [PATCH net-next] net: ipv4: allow directed broadcast routes to use dst hint
@ 2025-07-24 12:49 Oscar Maes
2025-07-24 12:52 ` kernel test robot
2025-07-25 21:42 ` Jakub Kicinski
0 siblings, 2 replies; 3+ messages in thread
From: Oscar Maes @ 2025-07-24 12:49 UTC (permalink / raw)
To: netdev
Cc: davem, dsahern, edumazet, kuba, pabeni, horms, stable,
linux-kernel, Oscar Maes
Currently, ip_extract_route_hint uses RTN_BROADCAST to decide
whether to use the route dst hint mechanism.
This check is too strict, as it prevents directed broadcast
routes from using the hint, resulting in poor performance
during bursts of directed broadcast traffic.
Fix this in ip_extract_route_hint and modify ip_route_use_hint
to preserve the intended behaviour.
Signed-off-by: Oscar Maes <oscmaes92@gmail.com>
---
net/ipv4/ip_input.c | 6 ++++--
net/ipv4/route.c | 2 +-
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c
index fc323994b..1581b98bc 100644
--- a/net/ipv4/ip_input.c
+++ b/net/ipv4/ip_input.c
@@ -589,8 +589,10 @@ static void ip_sublist_rcv_finish(struct list_head *head)
static struct sk_buff *ip_extract_route_hint(const struct net *net,
struct sk_buff *skb, int rt_type)
{
- if (fib4_has_custom_rules(net) || rt_type == RTN_BROADCAST ||
- IPCB(skb)->flags & IPSKB_MULTIPATH)
+ const struct iphdr *iph = ip_hdr(skb);
+
+ if (fib4_has_custom_rules(net) || ipv4_is_lbcast(iph->daddr) ||
+ (iph->daddr == 0 && iph->saddr == 0) || IPCB(skb)->flags & IPSKB_MULTIPATH)
return NULL;
return skb;
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index f639a2ae8..1f212b2ce 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -2210,7 +2210,7 @@ ip_route_use_hint(struct sk_buff *skb, __be32 daddr, __be32 saddr,
goto martian_source;
}
- if (rt->rt_type != RTN_LOCAL)
+ if (!(rt->rt_flags & RTCF_LOCAL))
goto skip_validate_source;
reason = fib_validate_source_reason(skb, saddr, daddr, dscp, 0, dev,
--
2.39.5
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH net-next] net: ipv4: allow directed broadcast routes to use dst hint
2025-07-24 12:49 [PATCH net-next] net: ipv4: allow directed broadcast routes to use dst hint Oscar Maes
@ 2025-07-24 12:52 ` kernel test robot
2025-07-25 21:42 ` Jakub Kicinski
1 sibling, 0 replies; 3+ messages in thread
From: kernel test robot @ 2025-07-24 12:52 UTC (permalink / raw)
To: Oscar Maes; +Cc: stable, oe-kbuild-all
Hi,
Thanks for your patch.
FYI: kernel test robot notices the stable kernel rule is not satisfied.
The check is based on https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html#option-1
Rule: add the tag "Cc: stable@vger.kernel.org" in the sign-off area to have the patch automatically included in the stable tree.
Subject: [PATCH net-next] net: ipv4: allow directed broadcast routes to use dst hint
Link: https://lore.kernel.org/stable/20250724124942.6895-1-oscmaes92%40gmail.com
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH net-next] net: ipv4: allow directed broadcast routes to use dst hint
2025-07-24 12:49 [PATCH net-next] net: ipv4: allow directed broadcast routes to use dst hint Oscar Maes
2025-07-24 12:52 ` kernel test robot
@ 2025-07-25 21:42 ` Jakub Kicinski
1 sibling, 0 replies; 3+ messages in thread
From: Jakub Kicinski @ 2025-07-25 21:42 UTC (permalink / raw)
To: Oscar Maes
Cc: netdev, davem, dsahern, edumazet, pabeni, horms, stable,
linux-kernel
On Thu, 24 Jul 2025 14:49:42 +0200 Oscar Maes wrote:
> Currently, ip_extract_route_hint uses RTN_BROADCAST to decide
> whether to use the route dst hint mechanism.
>
> This check is too strict, as it prevents directed broadcast
> routes from using the hint, resulting in poor performance
> during bursts of directed broadcast traffic.
>
> Fix this in ip_extract_route_hint and modify ip_route_use_hint
> to preserve the intended behaviour.
We are wrapping up our 6.17 material, I think this will need
to wait for 6.18. In the meantime, would it make sense to add
a selftest? Sounds like a relatively rare use case, easy to
regress.
> diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c
> index fc323994b..1581b98bc 100644
> --- a/net/ipv4/ip_input.c
> +++ b/net/ipv4/ip_input.c
> @@ -589,8 +589,10 @@ static void ip_sublist_rcv_finish(struct list_head *head)
> static struct sk_buff *ip_extract_route_hint(const struct net *net,
> struct sk_buff *skb, int rt_type)
> {
> - if (fib4_has_custom_rules(net) || rt_type == RTN_BROADCAST ||
> - IPCB(skb)->flags & IPSKB_MULTIPATH)
> + const struct iphdr *iph = ip_hdr(skb);
> +
> + if (fib4_has_custom_rules(net) || ipv4_is_lbcast(iph->daddr) ||
> + (iph->daddr == 0 && iph->saddr == 0) || IPCB(skb)->flags & IPSKB_MULTIPATH)
nit: we still prefer to wrap lines at 80 chars in networking
--
pw-bot: cr
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-07-25 21:42 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-24 12:49 [PATCH net-next] net: ipv4: allow directed broadcast routes to use dst hint Oscar Maes
2025-07-24 12:52 ` kernel test robot
2025-07-25 21:42 ` Jakub Kicinski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox