Reapply "net: add sysctl accept_ra_min_rtr_lft"
This reverts commit c8da9c614c
.
Bug: 320243175
Change-Id: Ia31692230f2f5cbd2ac349edcb2be320497c52f3
Signed-off-by: Carlos Llamas <cmllamas@google.com>
This commit is contained in:
parent
fc6c1b3acb
commit
a8053aadca
@ -2148,6 +2148,14 @@ accept_ra_min_hop_limit - INTEGER
|
||||
|
||||
Default: 1
|
||||
|
||||
accept_ra_min_rtr_lft - INTEGER
|
||||
Minimum acceptable router lifetime in Router Advertisement.
|
||||
|
||||
RAs with a router lifetime less than this value shall be
|
||||
ignored. RAs with a router lifetime of 0 are unaffected.
|
||||
|
||||
Default: 0
|
||||
|
||||
accept_ra_pinfo - BOOLEAN
|
||||
Learn Prefix Information in Router Advertisement.
|
||||
|
||||
|
@ -34,6 +34,7 @@ struct ipv6_devconf {
|
||||
__s32 accept_ra_defrtr;
|
||||
__u32 ra_defrtr_metric;
|
||||
__s32 accept_ra_min_hop_limit;
|
||||
__s32 accept_ra_min_rtr_lft;
|
||||
__s32 accept_ra_pinfo;
|
||||
__s32 ignore_routes_with_linkdown;
|
||||
#ifdef CONFIG_IPV6_ROUTER_PREF
|
||||
|
@ -198,6 +198,7 @@ enum {
|
||||
DEVCONF_IOAM6_ID_WIDE,
|
||||
DEVCONF_NDISC_EVICT_NOCARRIER,
|
||||
DEVCONF_ACCEPT_UNTRACKED_NA,
|
||||
DEVCONF_ACCEPT_RA_MIN_RTR_LFT,
|
||||
DEVCONF_MAX
|
||||
};
|
||||
|
||||
|
@ -202,6 +202,7 @@ static struct ipv6_devconf ipv6_devconf __read_mostly = {
|
||||
.ra_defrtr_metric = IP6_RT_PRIO_USER,
|
||||
.accept_ra_from_local = 0,
|
||||
.accept_ra_min_hop_limit= 1,
|
||||
.accept_ra_min_rtr_lft = 0,
|
||||
.accept_ra_pinfo = 1,
|
||||
#ifdef CONFIG_IPV6_ROUTER_PREF
|
||||
.accept_ra_rtr_pref = 1,
|
||||
@ -263,6 +264,7 @@ static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
|
||||
.ra_defrtr_metric = IP6_RT_PRIO_USER,
|
||||
.accept_ra_from_local = 0,
|
||||
.accept_ra_min_hop_limit= 1,
|
||||
.accept_ra_min_rtr_lft = 0,
|
||||
.accept_ra_pinfo = 1,
|
||||
#ifdef CONFIG_IPV6_ROUTER_PREF
|
||||
.accept_ra_rtr_pref = 1,
|
||||
@ -5623,6 +5625,7 @@ static inline void ipv6_store_devconf(struct ipv6_devconf *cnf,
|
||||
array[DEVCONF_IOAM6_ID_WIDE] = cnf->ioam6_id_wide;
|
||||
array[DEVCONF_NDISC_EVICT_NOCARRIER] = cnf->ndisc_evict_nocarrier;
|
||||
array[DEVCONF_ACCEPT_UNTRACKED_NA] = cnf->accept_untracked_na;
|
||||
array[DEVCONF_ACCEPT_RA_MIN_RTR_LFT] = cnf->accept_ra_min_rtr_lft;
|
||||
}
|
||||
|
||||
static inline size_t inet6_ifla6_size(void)
|
||||
@ -6816,6 +6819,13 @@ static const struct ctl_table addrconf_sysctl[] = {
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
{
|
||||
.procname = "accept_ra_min_rtr_lft",
|
||||
.data = &ipv6_devconf.accept_ra_min_rtr_lft,
|
||||
.maxlen = sizeof(int),
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
{
|
||||
.procname = "accept_ra_pinfo",
|
||||
.data = &ipv6_devconf.accept_ra_pinfo,
|
||||
|
@ -1284,6 +1284,8 @@ static void ndisc_router_discovery(struct sk_buff *skb)
|
||||
return;
|
||||
}
|
||||
|
||||
lifetime = ntohs(ra_msg->icmph.icmp6_rt_lifetime);
|
||||
|
||||
if (!ipv6_accept_ra(in6_dev)) {
|
||||
ND_PRINTK(2, info,
|
||||
"RA: %s, did not accept ra for dev: %s\n",
|
||||
@ -1291,6 +1293,13 @@ static void ndisc_router_discovery(struct sk_buff *skb)
|
||||
goto skip_linkparms;
|
||||
}
|
||||
|
||||
if (lifetime != 0 && lifetime < in6_dev->cnf.accept_ra_min_rtr_lft) {
|
||||
ND_PRINTK(2, info,
|
||||
"RA: router lifetime (%ds) is too short: %s\n",
|
||||
lifetime, skb->dev->name);
|
||||
goto skip_linkparms;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_IPV6_NDISC_NODETYPE
|
||||
/* skip link-specific parameters from interior routers */
|
||||
if (skb->ndisc_nodetype == NDISC_NODETYPE_NODEFAULT) {
|
||||
@ -1343,8 +1352,6 @@ static void ndisc_router_discovery(struct sk_buff *skb)
|
||||
goto skip_defrtr;
|
||||
}
|
||||
|
||||
lifetime = ntohs(ra_msg->icmph.icmp6_rt_lifetime);
|
||||
|
||||
#ifdef CONFIG_IPV6_ROUTER_PREF
|
||||
pref = ra_msg->icmph.icmp6_router_pref;
|
||||
/* 10b is handled as if it were 00b (medium) */
|
||||
@ -1495,6 +1502,13 @@ static void ndisc_router_discovery(struct sk_buff *skb)
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (lifetime != 0 && lifetime < in6_dev->cnf.accept_ra_min_rtr_lft) {
|
||||
ND_PRINTK(2, info,
|
||||
"RA: router lifetime (%ds) is too short: %s\n",
|
||||
lifetime, skb->dev->name);
|
||||
goto out;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_IPV6_ROUTE_INFO
|
||||
if (!in6_dev->cnf.accept_ra_from_local &&
|
||||
ipv6_chk_addr(dev_net(in6_dev->dev), &ipv6_hdr(skb)->saddr,
|
||||
|
Loading…
Reference in New Issue
Block a user