Skip to content

Commit

Permalink
ipv6: unify logic evaluating inet6_dev's accept_ra property
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Shmulik Ladkani authored and David S. Miller committed Dec 1, 2012
1 parent fd90b29 commit aeaf6e9
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 16 deletions.
9 changes: 9 additions & 0 deletions include/net/ipv6.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
3 changes: 1 addition & 2 deletions net/ipv6/addrconf.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)) {
Expand Down
16 changes: 2 additions & 14 deletions net/ipv6/ndisc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1032,18 +1032,6 @@ static void ndisc_ra_useropt(struct sk_buff *ra, struct nd_opt_hdr *opt)
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);
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -1247,7 +1235,7 @@ static void ndisc_router_discovery(struct sk_buff *skb)
NEIGH_UPDATE_F_ISROUTER);
}

if (!accept_ra(in6_dev))
if (!ipv6_accept_ra(in6_dev))
goto out;

#ifdef CONFIG_IPV6_ROUTE_INFO
Expand Down

0 comments on commit aeaf6e9

Please sign in to comment.