From patchwork Sat Nov 21 14:57:32 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikolay Aleksandrov X-Patchwork-Id: 547171 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 D638E14029E for ; Sun, 22 Nov 2015 01:59:49 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=blackwall-org.20150623.gappssmtp.com header.i=@blackwall-org.20150623.gappssmtp.com header.b=cMjVGKdW; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1761248AbbKUO7i (ORCPT ); Sat, 21 Nov 2015 09:59:38 -0500 Received: from mail-wm0-f53.google.com ([74.125.82.53]:38407 "EHLO mail-wm0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1761132AbbKUO7c (ORCPT ); Sat, 21 Nov 2015 09:59:32 -0500 Received: by wmec201 with SMTP id c201so54620491wme.1 for ; Sat, 21 Nov 2015 06:59:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=blackwall-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=qQVDe71rdCP5Pv5R568TFzXmEPMjjTV3aitMEOGEVf4=; b=cMjVGKdW/2SuR+8LZMlhk7P/+vGFgorj8YMf6gmQsn1WK+9q6Ku5Yqqpl+bDGtjW4p G9sYD4wT9CztTSW3A8jrDUTsioOg7WDvd98E+WWgViM1pUptlFq/jT+mZG/L10dHzr2l xpb6dDPxi/HEdBKbDegMyOh1qosYC3nBCYTP9I1+tckK7Or3oDPBIPycYSE/vgKKaFOH qI0BKx5wtRij34NaGGidzbZCAjD85PNVxxcfRvbtj7xYOteUmPH0H1LWi33wFJJ+SsmC PGe/Epn5p+KVuJgiVJnN1HILz2Yt8t9OAWQJOhd+UV/bLD/fugIb6GQjjY0L54nNAhZW jsHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=qQVDe71rdCP5Pv5R568TFzXmEPMjjTV3aitMEOGEVf4=; b=Kkhk6mr3FUmHe/hCWIOnCNo6pbtR8sNuMdVp388gCcPE4jr60aO2nRTJLbgUtPL7we P7TA5e2ksew9tinJDlkwtpIQGtKqdvBnzyjGTqXVLIbABm8z/wdwCpvS/cZwvJiWycbL 2tDSiZDh4gS0AWUgBS33v/HLdWPwqDk+2f1wajGLfYdyHB6zSeHSgK7A56zsUhecuhSh DdXY5Z122ALTzhr2TAiEKV90jLt2CFAev/URyHLVzAd/QZJRyHLq23y00HEFmZ1NS00X vciYarwX3lH9akjX3CBYQ2HydToyDsG1yOuk8CGO8t0UMu7mE76+67y7Hcfpqrr3ENsR TXRQ== X-Gm-Message-State: ALoCoQnWo8OprfsDOT2WKNfplHQwwT51WdZI1ppixqiIuocnlhiVirjog4549Y0kbxHQW+DRCkDW X-Received: by 10.28.90.132 with SMTP id o126mr310629wmb.1.1448117971623; Sat, 21 Nov 2015 06:59:31 -0800 (PST) Received: from debil.localdomain (ip4-62-4-104-109.cust.nbox.cz. [62.4.104.109]) by smtp.gmail.com with ESMTPSA id l1sm4528247wjx.13.2015.11.21.06.59.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 21 Nov 2015 06:59:31 -0800 (PST) From: Nikolay Aleksandrov To: netdev@vger.kernel.org Cc: davem@davemloft.net, eric.dumazet@gmail.com, Nikolay Aleksandrov Subject: [PATCH net-next v2 9/9] net: ipmr: factor out common vif init code Date: Sat, 21 Nov 2015 15:57:32 +0100 Message-Id: <1448117852-4254-10-git-send-email-razor@blackwall.org> X-Mailer: git-send-email 2.4.3 In-Reply-To: <1448117852-4254-1-git-send-email-razor@blackwall.org> References: <1448117852-4254-1-git-send-email-razor@blackwall.org> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Nikolay Aleksandrov Factor out common vif init code used in both tunnel and pimreg initialization and create ipmr_init_vif_indev() function. Signed-off-by: Nikolay Aleksandrov --- net/ipv4/ipmr.c | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c index e384f39202cb..a2d248d9c35c 100644 --- a/net/ipv4/ipmr.c +++ b/net/ipv4/ipmr.c @@ -391,6 +391,23 @@ static void ipmr_del_tunnel(struct net_device *dev, struct vifctl *v) } } +/* Initialize ipmr pimreg/tunnel in_device */ +static bool ipmr_init_vif_indev(const struct net_device *dev) +{ + struct in_device *in_dev; + + ASSERT_RTNL(); + + in_dev = __in_dev_get_rtnl(dev); + if (!in_dev) + return false; + ipv4_devconf_setall(in_dev); + neigh_parms_data_state_setall(in_dev->arp_parms); + IPV4_DEVCONF(in_dev->cnf, RP_FILTER) = 0; + + return true; +} + static struct net_device *ipmr_new_tunnel(struct net *net, struct vifctl *v) { struct net_device *dev; @@ -402,7 +419,6 @@ static struct net_device *ipmr_new_tunnel(struct net *net, struct vifctl *v) int err; struct ifreq ifr; struct ip_tunnel_parm p; - struct in_device *in_dev; memset(&p, 0, sizeof(p)); p.iph.daddr = v->vifc_rmt_addr.s_addr; @@ -427,15 +443,8 @@ static struct net_device *ipmr_new_tunnel(struct net *net, struct vifctl *v) if (err == 0 && (dev = __dev_get_by_name(net, p.name)) != NULL) { dev->flags |= IFF_MULTICAST; - - in_dev = __in_dev_get_rtnl(dev); - if (!in_dev) + if (!ipmr_init_vif_indev(dev)) goto failure; - - ipv4_devconf_setall(in_dev); - neigh_parms_data_state_setall(in_dev->arp_parms); - IPV4_DEVCONF(in_dev->cnf, RP_FILTER) = 0; - if (dev_open(dev)) goto failure; dev_hold(dev); @@ -502,7 +511,6 @@ static void reg_vif_setup(struct net_device *dev) static struct net_device *ipmr_reg_vif(struct net *net, struct mr_table *mrt) { struct net_device *dev; - struct in_device *in_dev; char name[IFNAMSIZ]; if (mrt->id == RT_TABLE_DEFAULT) @@ -522,18 +530,8 @@ static struct net_device *ipmr_reg_vif(struct net *net, struct mr_table *mrt) return NULL; } - rcu_read_lock(); - in_dev = __in_dev_get_rcu(dev); - if (!in_dev) { - rcu_read_unlock(); + if (!ipmr_init_vif_indev(dev)) goto failure; - } - - ipv4_devconf_setall(in_dev); - neigh_parms_data_state_setall(in_dev->arp_parms); - IPV4_DEVCONF(in_dev->cnf, RP_FILTER) = 0; - rcu_read_unlock(); - if (dev_open(dev)) goto failure;