mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 12:11:40 +00:00
net: ipv6/addrconf: introduce a regen_min_advance sysctl
In RFC 8981, REGEN_ADVANCE cannot be less than 2 seconds, and the RFC does not permit the creation of temporary addresses with lifetimes shorter than that: > When processing a Router Advertisement with a > Prefix Information option carrying a prefix for the purposes of > address autoconfiguration (i.e., the A bit is set), the host MUST > perform the following steps: > 5. A temporary address is created only if this calculated preferred > lifetime is greater than REGEN_ADVANCE time units. However, some users want to change their IPv6 address as frequently as possible regardless of the RFC's arbitrary minimum lifetime. For the benefit of those users, add a regen_min_advance sysctl parameter that can be set to below or above 2 seconds. Link: https://datatracker.ietf.org/doc/html/rfc8981 Signed-off-by: Alex Henrie <alexhenrie24@gmail.com> Reviewed-by: David Ahern <dsahern@kernel.org> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
2aa8f155b0
commit
a5fcea2d2f
@ -2535,6 +2535,16 @@ max_desync_factor - INTEGER
|
||||
|
||||
Default: 600
|
||||
|
||||
regen_min_advance - INTEGER
|
||||
How far in advance (in seconds), at minimum, to create a new temporary
|
||||
address before the current one is deprecated. This value is added to
|
||||
the amount of time that may be required for duplicate address detection
|
||||
to determine when to create a new address. Linux permits setting this
|
||||
value to less than the default of 2 seconds, but a value less than 2
|
||||
does not conform to RFC 8981.
|
||||
|
||||
Default: 2
|
||||
|
||||
regen_max_retry - INTEGER
|
||||
Number of attempts before give up attempting to generate
|
||||
valid temporary addresses.
|
||||
|
@ -27,6 +27,7 @@ struct ipv6_devconf {
|
||||
__s32 use_tempaddr;
|
||||
__s32 temp_valid_lft;
|
||||
__s32 temp_prefered_lft;
|
||||
__s32 regen_min_advance;
|
||||
__s32 regen_max_retry;
|
||||
__s32 max_desync_factor;
|
||||
__s32 max_addresses;
|
||||
|
@ -8,8 +8,9 @@
|
||||
|
||||
#define MIN_VALID_LIFETIME (2*3600) /* 2 hours */
|
||||
|
||||
#define TEMP_VALID_LIFETIME (7*86400)
|
||||
#define TEMP_PREFERRED_LIFETIME (86400)
|
||||
#define TEMP_VALID_LIFETIME (7*86400) /* 1 week */
|
||||
#define TEMP_PREFERRED_LIFETIME (86400) /* 24 hours */
|
||||
#define REGEN_MIN_ADVANCE (2) /* 2 seconds */
|
||||
#define REGEN_MAX_RETRY (3)
|
||||
#define MAX_DESYNC_FACTOR (600)
|
||||
|
||||
|
@ -195,6 +195,7 @@ static struct ipv6_devconf ipv6_devconf __read_mostly = {
|
||||
.use_tempaddr = 0,
|
||||
.temp_valid_lft = TEMP_VALID_LIFETIME,
|
||||
.temp_prefered_lft = TEMP_PREFERRED_LIFETIME,
|
||||
.regen_min_advance = REGEN_MIN_ADVANCE,
|
||||
.regen_max_retry = REGEN_MAX_RETRY,
|
||||
.max_desync_factor = MAX_DESYNC_FACTOR,
|
||||
.max_addresses = IPV6_MAX_ADDRESSES,
|
||||
@ -257,6 +258,7 @@ static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
|
||||
.use_tempaddr = 0,
|
||||
.temp_valid_lft = TEMP_VALID_LIFETIME,
|
||||
.temp_prefered_lft = TEMP_PREFERRED_LIFETIME,
|
||||
.regen_min_advance = REGEN_MIN_ADVANCE,
|
||||
.regen_max_retry = REGEN_MAX_RETRY,
|
||||
.max_desync_factor = MAX_DESYNC_FACTOR,
|
||||
.max_addresses = IPV6_MAX_ADDRESSES,
|
||||
@ -1341,7 +1343,7 @@ out:
|
||||
|
||||
static unsigned long ipv6_get_regen_advance(struct inet6_dev *idev)
|
||||
{
|
||||
return 2 + idev->cnf.regen_max_retry *
|
||||
return idev->cnf.regen_min_advance + idev->cnf.regen_max_retry *
|
||||
idev->cnf.dad_transmits *
|
||||
max(NEIGH_VAR(idev->nd_parms, RETRANS_TIME), HZ/100) / HZ;
|
||||
}
|
||||
@ -6819,6 +6821,13 @@ static const struct ctl_table addrconf_sysctl[] = {
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
{
|
||||
.procname = "regen_min_advance",
|
||||
.data = &ipv6_devconf.regen_min_advance,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
{
|
||||
.procname = "regen_max_retry",
|
||||
.data = &ipv6_devconf.regen_max_retry,
|
||||
|
Loading…
Reference in New Issue
Block a user