neighbor: fix proxy_delay usage when it is zero
authorBrian Haley <haleyb.dev@gmail.com>
Mon, 30 Jan 2023 17:14:28 +0000 (12:14 -0500)
committerJakub Kicinski <kuba@kernel.org>
Thu, 2 Feb 2023 05:02:54 +0000 (21:02 -0800)
commit62e395f82d04510b0f86e5e603e29412be88596f
tree0389f920c74480c2b9d32661450987891fa7f979
parent983f507c3043e90b2c6429cd67903c4ca8208b5c
neighbor: fix proxy_delay usage when it is zero

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>
Link: https://lore.kernel.org/r/20230130171428.367111-1-haleyb.dev@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Documentation/networking/ip-sysctl.rst
net/core/neighbour.c