aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShmulik Ladkani <shmulik.ladkani@gmail.com>2012-11-30 05:25:59 -0500
committerDavid S. Miller <davem@davemloft.net>2012-12-01 11:36:37 -0500
commitaeaf6e9d2f49d793d3eb8c1af4095cf25e061b94 (patch)
treef668b46359bfa50f83563fb3ee0247f55f451760
parentfd90b29d757827ab12d6669292612308ec249532 (diff)
ipv6: unify logic evaluating inet6_dev's accept_ra property
As of 026359b [ipv6: Send ICMPv6 RSes only when RAs are accepted], the logic determining whether to send Router Solicitations is identical to the logic determining whether kernel accepts Router Advertisements. However the condition itself is repeated in several code locations. Unify it by introducing 'ipv6_accept_ra()' accessor. Also, simplify the condition expression, making it more readable. No semantic change. Signed-off-by: Shmulik Ladkani <shmulik.ladkani@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--include/net/ipv6.h9
-rw-r--r--net/ipv6/addrconf.c3
-rw-r--r--net/ipv6/ndisc.c16
3 files changed, 12 insertions, 16 deletions
diff --git a/include/net/ipv6.h b/include/net/ipv6.h
index acbd8e034310..5af66b26ebdd 100644
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
@@ -271,6 +271,15 @@ struct ipv6_txoptions *ipv6_fixup_options(struct ipv6_txoptions *opt_space,
271 271
272extern bool ipv6_opt_accepted(const struct sock *sk, const struct sk_buff *skb); 272extern bool ipv6_opt_accepted(const struct sock *sk, const struct sk_buff *skb);
273 273
274static inline bool ipv6_accept_ra(struct inet6_dev *idev)
275{
276 /* If forwarding is enabled, RA are not accepted unless the special
277 * hybrid mode (accept_ra=2) is enabled.
278 */
279 return idev->cnf.forwarding ? idev->cnf.accept_ra == 2 :
280 idev->cnf.accept_ra;
281}
282
274#if IS_ENABLED(CONFIG_IPV6) 283#if IS_ENABLED(CONFIG_IPV6)
275static inline int ip6_frag_nqueues(struct net *net) 284static inline int ip6_frag_nqueues(struct net *net)
276{ 285{
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index fc0e13ad6337..4b644f656c41 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -3150,8 +3150,7 @@ static void addrconf_dad_completed(struct inet6_ifaddr *ifp)
3150 router advertisements, start sending router solicitations. 3150 router advertisements, start sending router solicitations.
3151 */ 3151 */
3152 3152
3153 if (((ifp->idev->cnf.accept_ra == 1 && !ifp->idev->cnf.forwarding) || 3153 if (ipv6_accept_ra(ifp->idev) &&
3154 ifp->idev->cnf.accept_ra == 2) &&
3155 ifp->idev->cnf.rtr_solicits > 0 && 3154 ifp->idev->cnf.rtr_solicits > 0 &&
3156 (dev->flags&IFF_LOOPBACK) == 0 && 3155 (dev->flags&IFF_LOOPBACK) == 0 &&
3157 (ipv6_addr_type(&ifp->addr) & IPV6_ADDR_LINKLOCAL)) { 3156 (ipv6_addr_type(&ifp->addr) & IPV6_ADDR_LINKLOCAL)) {
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
index f41853bca428..cf43b6550f5b 100644
--- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c
@@ -1032,18 +1032,6 @@ errout:
1032 rtnl_set_sk_err(net, RTNLGRP_ND_USEROPT, err); 1032 rtnl_set_sk_err(net, RTNLGRP_ND_USEROPT, err);
1033} 1033}
1034 1034
1035static inline int accept_ra(struct inet6_dev *in6_dev)
1036{
1037 /*
1038 * If forwarding is enabled, RA are not accepted unless the special
1039 * hybrid mode (accept_ra=2) is enabled.
1040 */
1041 if (in6_dev->cnf.forwarding && in6_dev->cnf.accept_ra < 2)
1042 return 0;
1043
1044 return in6_dev->cnf.accept_ra;
1045}
1046
1047static void ndisc_router_discovery(struct sk_buff *skb) 1035static void ndisc_router_discovery(struct sk_buff *skb)
1048{ 1036{
1049 struct ra_msg *ra_msg = (struct ra_msg *)skb_transport_header(skb); 1037 struct ra_msg *ra_msg = (struct ra_msg *)skb_transport_header(skb);
@@ -1091,7 +1079,7 @@ static void ndisc_router_discovery(struct sk_buff *skb)
1091 return; 1079 return;
1092 } 1080 }
1093 1081
1094 if (!accept_ra(in6_dev)) 1082 if (!ipv6_accept_ra(in6_dev))
1095 goto skip_linkparms; 1083 goto skip_linkparms;
1096 1084
1097#ifdef CONFIG_IPV6_NDISC_NODETYPE 1085#ifdef CONFIG_IPV6_NDISC_NODETYPE
@@ -1247,7 +1235,7 @@ skip_linkparms:
1247 NEIGH_UPDATE_F_ISROUTER); 1235 NEIGH_UPDATE_F_ISROUTER);
1248 } 1236 }
1249 1237
1250 if (!accept_ra(in6_dev)) 1238 if (!ipv6_accept_ra(in6_dev))
1251 goto out; 1239 goto out;
1252 1240
1253#ifdef CONFIG_IPV6_ROUTE_INFO 1241#ifdef CONFIG_IPV6_ROUTE_INFO