ipv6: unify logic evaluating inet6_dev's accept_ra property
authorShmulik Ladkani <shmulik.ladkani@gmail.com>
Fri, 30 Nov 2012 10:25:59 +0000 (10:25 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sat, 1 Dec 2012 16:36:37 +0000 (11:36 -0500)
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>
include/net/ipv6.h
net/ipv6/addrconf.c
net/ipv6/ndisc.c

index acbd8e0343100c751794f46e13e79fce9b6db4a6..5af66b26ebdd6379ce34ae1a914c3c71a2ce5f32 100644 (file)
@@ -271,6 +271,15 @@ struct ipv6_txoptions *ipv6_fixup_options(struct ipv6_txoptions *opt_space,
 
 extern bool ipv6_opt_accepted(const struct sock *sk, const struct sk_buff *skb);
 
+static inline bool ipv6_accept_ra(struct inet6_dev *idev)
+{
+       /* If forwarding is enabled, RA are not accepted unless the special
+        * hybrid mode (accept_ra=2) is enabled.
+        */
+       return idev->cnf.forwarding ? idev->cnf.accept_ra == 2 :
+           idev->cnf.accept_ra;
+}
+
 #if IS_ENABLED(CONFIG_IPV6)
 static inline int ip6_frag_nqueues(struct net *net)
 {
index fc0e13ad6337f7da2969f3cd65541935da03d67a..4b644f656c41bc116211aec0af657b7870526f13 100644 (file)
@@ -3150,8 +3150,7 @@ static void addrconf_dad_completed(struct inet6_ifaddr *ifp)
           router advertisements, start sending router solicitations.
         */
 
-       if (((ifp->idev->cnf.accept_ra == 1 && !ifp->idev->cnf.forwarding) ||
-            ifp->idev->cnf.accept_ra == 2) &&
+       if (ipv6_accept_ra(ifp->idev) &&
            ifp->idev->cnf.rtr_solicits > 0 &&
            (dev->flags&IFF_LOOPBACK) == 0 &&
            (ipv6_addr_type(&ifp->addr) & IPV6_ADDR_LINKLOCAL)) {
index f41853bca4289faebe21133084bd829953891611..cf43b6550f5b062ddfaa67964b4502460566c642 100644 (file)
@@ -1032,18 +1032,6 @@ errout:
        rtnl_set_sk_err(net, RTNLGRP_ND_USEROPT, err);
 }
 
-static inline int accept_ra(struct inet6_dev *in6_dev)
-{
-       /*
-        * If forwarding is enabled, RA are not accepted unless the special
-        * hybrid mode (accept_ra=2) is enabled.
-        */
-       if (in6_dev->cnf.forwarding && in6_dev->cnf.accept_ra < 2)
-               return 0;
-
-       return in6_dev->cnf.accept_ra;
-}
-
 static void ndisc_router_discovery(struct sk_buff *skb)
 {
        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)
                return;
        }
 
-       if (!accept_ra(in6_dev))
+       if (!ipv6_accept_ra(in6_dev))
                goto skip_linkparms;
 
 #ifdef CONFIG_IPV6_NDISC_NODETYPE
@@ -1247,7 +1235,7 @@ skip_linkparms:
                             NEIGH_UPDATE_F_ISROUTER);
        }
 
-       if (!accept_ra(in6_dev))
+       if (!ipv6_accept_ra(in6_dev))
                goto out;
 
 #ifdef CONFIG_IPV6_ROUTE_INFO