netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next v2] neighbor: fix proxy_delay usage when it is zero
@ 2023-01-25 19:51 Brian Haley
  2023-01-27  7:37 ` Jakub Kicinski
  0 siblings, 1 reply; 3+ messages in thread
From: Brian Haley @ 2023-01-25 19:51 UTC (permalink / raw)
  To: davem, edumazet, kuba, pabeni; +Cc: netdev

When set to zero, the neighbor sysctl proxy_delay value
does not cause an immediate reply for ARP/ND requests
as expected, it instead causes a random delay between
[0, U32_MAX]. Looking at this comment from
__get_random_u32_below() explains the reason:

/*
 * This function is technically undefined for ceil == 0, and in fact
 * for the non-underscored constant version in the header, we build bug
 * on that. But for the non-constant case, it's convenient to have that
 * evaluate to being a straight call to get_random_u32(), so that
 * get_random_u32_inclusive() can work over its whole range without
 * undefined behavior.
 */

Added helper function that does not call get_random_u32_below()
if proxy_delay is zero and just uses the current value of
jiffies instead, causing pneigh_enqueue() to respond
immediately.

Also added definition of proxy_delay to ip-sysctl.txt since
it was missing.

Signed-off-by: Brian Haley <haleyb.dev@gmail.com>
---
 Documentation/networking/ip-sysctl.rst |  8 ++++++++
 net/core/neighbour.c                   | 14 ++++++++++++--
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/Documentation/networking/ip-sysctl.rst b/Documentation/networking/ip-sysctl.rst
index 7fbd060d6047..58f74051e07b 100644
--- a/Documentation/networking/ip-sysctl.rst
+++ b/Documentation/networking/ip-sysctl.rst
@@ -1589,6 +1589,14 @@ proxy_arp_pvlan - BOOLEAN
 	  Hewlett-Packard call it Source-Port filtering or port-isolation.
 	  Ericsson call it MAC-Forced Forwarding (RFC Draft).
 
+proxy_delay - INTEGER
+	Delay proxy response.
+
+	Delay response to a neighbor solicitation when proxy_arp
+	or proxy_ndp is enabled. A random value between [0, proxy_delay]
+	will be chosen, setting to zero means reply with no delay.
+	Value in jiffies. Defaults to 80.
+
 shared_media - BOOLEAN
 	Send(router) or accept(host) RFC1620 shared media redirects.
 	Overrides secure_redirects.
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index f00a79fc301b..57258110bccd 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -1662,11 +1662,21 @@ static void neigh_proxy_process(struct timer_list *t)
 	spin_unlock(&tbl->proxy_queue.lock);
 }
 
+static unsigned long neigh_proxy_delay(struct neigh_parms *p)
+{
+	/* If proxy_delay is zero, do not call get_random_u32_below()
+	 * as it is undefined behavior.
+	 */
+	unsigned long proxy_delay = NEIGH_VAR(p, PROXY_DELAY);
+
+	return proxy_delay ?
+	       jiffies + get_random_u32_below(proxy_delay) : jiffies;
+}
+
 void pneigh_enqueue(struct neigh_table *tbl, struct neigh_parms *p,
 		    struct sk_buff *skb)
 {
-	unsigned long sched_next = jiffies +
-			get_random_u32_below(NEIGH_VAR(p, PROXY_DELAY));
+	unsigned long sched_next = neigh_proxy_delay(p);
 
 	if (p->qlen > NEIGH_VAR(p, PROXY_QLEN)) {
 		kfree_skb(skb);
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH net-next v2] neighbor: fix proxy_delay usage when it is zero
  2023-01-25 19:51 [PATCH net-next v2] neighbor: fix proxy_delay usage when it is zero Brian Haley
@ 2023-01-27  7:37 ` Jakub Kicinski
  2023-01-30 17:13   ` Brian Haley
  0 siblings, 1 reply; 3+ messages in thread
From: Jakub Kicinski @ 2023-01-27  7:37 UTC (permalink / raw)
  To: Brian Haley; +Cc: davem, edumazet, pabeni, netdev

On Wed, 25 Jan 2023 14:51:14 -0500 Brian Haley wrote:
> +	or proxy_ndp is enabled. A random value between [0, proxy_delay]

Do you mean: [0, proxy_delay) or there's something that can give us an
extra jiffy (IOW shouldn't the upper limit be open) ?

it's 
  random() % MAX - (1 - noise)

where (1 - noise) is the fraction of jiffy which already passed since
the tick.

Sorry if I'm slow to get it..

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH net-next v2] neighbor: fix proxy_delay usage when it is zero
  2023-01-27  7:37 ` Jakub Kicinski
@ 2023-01-30 17:13   ` Brian Haley
  0 siblings, 0 replies; 3+ messages in thread
From: Brian Haley @ 2023-01-30 17:13 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: davem, edumazet, pabeni, netdev

On 1/27/23 2:37 AM, Jakub Kicinski wrote:
> On Wed, 25 Jan 2023 14:51:14 -0500 Brian Haley wrote:
>> +	or proxy_ndp is enabled. A random value between [0, proxy_delay]
> 
> Do you mean: [0, proxy_delay) or there's something that can give us an
> extra jiffy (IOW shouldn't the upper limit be open) ?
> 
> it's
>    random() % MAX - (1 - noise)
> 
> where (1 - noise) is the fraction of jiffy which already passed since
> the tick.
> 
> Sorry if I'm slow to get it..

Yes, it's [0, proxy_delay), should have just copied that right from the 
get_random_u32_below() definition. I'll send a v3 fixing the commit 
message and sysctl doc.

-Brian

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-01-30 17:13 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-25 19:51 [PATCH net-next v2] neighbor: fix proxy_delay usage when it is zero Brian Haley
2023-01-27  7:37 ` Jakub Kicinski
2023-01-30 17:13   ` Brian Haley

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).