diff options
Diffstat (limited to 'net/ipv6/ndisc.c')
-rw-r--r-- | net/ipv6/ndisc.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index 58841c4ae947..69a0051cea67 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c | |||
@@ -1105,6 +1105,18 @@ errout: | |||
1105 | rtnl_set_sk_err(net, RTNLGRP_ND_USEROPT, err); | 1105 | rtnl_set_sk_err(net, RTNLGRP_ND_USEROPT, err); |
1106 | } | 1106 | } |
1107 | 1107 | ||
1108 | static inline int accept_ra(struct inet6_dev *in6_dev) | ||
1109 | { | ||
1110 | /* | ||
1111 | * If forwarding is enabled, RA are not accepted unless the special | ||
1112 | * hybrid mode (accept_ra=2) is enabled. | ||
1113 | */ | ||
1114 | if (in6_dev->cnf.forwarding && in6_dev->cnf.accept_ra < 2) | ||
1115 | return 0; | ||
1116 | |||
1117 | return in6_dev->cnf.accept_ra; | ||
1118 | } | ||
1119 | |||
1108 | static void ndisc_router_discovery(struct sk_buff *skb) | 1120 | static void ndisc_router_discovery(struct sk_buff *skb) |
1109 | { | 1121 | { |
1110 | struct ra_msg *ra_msg = (struct ra_msg *)skb_transport_header(skb); | 1122 | struct ra_msg *ra_msg = (struct ra_msg *)skb_transport_header(skb); |
@@ -1158,8 +1170,7 @@ static void ndisc_router_discovery(struct sk_buff *skb) | |||
1158 | return; | 1170 | return; |
1159 | } | 1171 | } |
1160 | 1172 | ||
1161 | /* skip route and link configuration on routers */ | 1173 | if (!accept_ra(in6_dev)) |
1162 | if (in6_dev->cnf.forwarding || !in6_dev->cnf.accept_ra) | ||
1163 | goto skip_linkparms; | 1174 | goto skip_linkparms; |
1164 | 1175 | ||
1165 | #ifdef CONFIG_IPV6_NDISC_NODETYPE | 1176 | #ifdef CONFIG_IPV6_NDISC_NODETYPE |
@@ -1309,8 +1320,7 @@ skip_linkparms: | |||
1309 | NEIGH_UPDATE_F_ISROUTER); | 1320 | NEIGH_UPDATE_F_ISROUTER); |
1310 | } | 1321 | } |
1311 | 1322 | ||
1312 | /* skip route and link configuration on routers */ | 1323 | if (!accept_ra(in6_dev)) |
1313 | if (in6_dev->cnf.forwarding || !in6_dev->cnf.accept_ra) | ||
1314 | goto out; | 1324 | goto out; |
1315 | 1325 | ||
1316 | #ifdef CONFIG_IPV6_ROUTE_INFO | 1326 | #ifdef CONFIG_IPV6_ROUTE_INFO |