From patchwork Thu Nov 29 09:26:19 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shmulik Ladkani X-Patchwork-Id: 202690 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3CEEC2C008F for ; Thu, 29 Nov 2012 20:26:44 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752859Ab2K2J0e (ORCPT ); Thu, 29 Nov 2012 04:26:34 -0500 Received: from mail-ee0-f46.google.com ([74.125.83.46]:49837 "EHLO mail-ee0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751392Ab2K2J0b (ORCPT ); Thu, 29 Nov 2012 04:26:31 -0500 Received: by mail-ee0-f46.google.com with SMTP id e53so6259653eek.19 for ; Thu, 29 Nov 2012 01:26:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer; bh=AFYUOjMEScl9kQ3LIg6brvsNGZDLELLAoJm5d8HubbU=; b=W3dvcW5j6mtqRc+xKI3d8S6Vp0RBIyh+h2IapzL/jmJpq/xzZw3qxlZ8NeqvsKk4C9 /KhJPhbP8A8lO2DOkBzdqevEMWEbpVTUU2H5hEJAwg/smZsXbSHC4AAGUaVQj3M1l2Ev P/u2dylT7fr22xDi1oqrxJ7eOmQ3EIhB4gtIV5w78DcRaKzRsX9SkTeOuPbM5cGGlhZW dwM/uX3GV89Us6YrqZcmcCWiXxDLKlGtKnN2S6Ls8M4WPH7/XOvqjmbhMpsG3kgxSfgc A2/eshBq7nlrwjn/XmCrcEJmrMOZ4+drEJeL1YUvHBPi3qSvikaUYfdKdE6HAL6WS41j ldLg== Received: by 10.14.223.200 with SMTP id v48mr80161864eep.24.1354181190217; Thu, 29 Nov 2012 01:26:30 -0800 (PST) Received: from pixies.home.jungo.com ([212.150.239.254]) by mx.google.com with ESMTPS id z8sm2379498eeo.11.2012.11.29.01.26.28 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 29 Nov 2012 01:26:29 -0800 (PST) From: Shmulik Ladkani To: "David S. Miller" Cc: netdev@vger.kernel.org, Hideaki YOSHIFUJI , Thomas Graf , Tore Anderson , shmulik.ladkani@gmail.com Subject: [PATCH] ipv6: unify logic evaluating inet6_dev's accept_ra property Date: Thu, 29 Nov 2012 11:26:19 +0200 Message-Id: <1354181179-16294-1-git-send-email-shmulik.ladkani@gmail.com> X-Mailer: git-send-email 1.7.9 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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 --- Not sure about the proper header to place the 'ipv6_accept_ra' accessor. Currently placed in include/net/ipv6.h. Other candidates were if_inet6.h and addrconf.h. include/net/ipv6.h | 10 ++++++++++ net/ipv6/addrconf.c | 3 +-- net/ipv6/ndisc.c | 16 ++-------------- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/include/net/ipv6.h b/include/net/ipv6.h index 979bf6c..cd15585 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h @@ -271,6 +271,16 @@ 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) { diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 0424e4e..ca1ed8a 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -3005,8 +3005,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)) { diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index 2edce30..980cdc3 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c @@ -1033,18 +1033,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); @@ -1092,7 +1080,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 @@ -1248,7 +1236,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