From patchwork Mon Jul 14 14:37:25 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Gundersen X-Patchwork-Id: 369660 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 F162A14008B for ; Tue, 15 Jul 2014 00:38:42 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756068AbaGNOij (ORCPT ); Mon, 14 Jul 2014 10:38:39 -0400 Received: from mail-wg0-f45.google.com ([74.125.82.45]:39064 "EHLO mail-wg0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753497AbaGNOht (ORCPT ); Mon, 14 Jul 2014 10:37:49 -0400 Received: by mail-wg0-f45.google.com with SMTP id x12so4250867wgg.16 for ; Mon, 14 Jul 2014 07:37:47 -0700 (PDT) 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=dp0UyHZTQI3PnXTYynagzhCIuf+eJqY9OBYeyTRY8qM=; b=OZM6SQ+zZan8aZYzdlGVm2iokV0XL3kVrcxcjX5s5osE9hCDUy8bBylQe7zPqSLFAO CQyfRyQpGB+0C3lQHuJXltTiCnH4wIdUNWMYmrD4GkTCq4e+3427VmNtTpDWuivndNhM 20Ok31RjGsqwGdpzeHAEThq2h63UQv7SISKxa3iPs5LJ01bDs9QnkiSOjt4Y6BEixe3z LhpNhMQVSKbS3NT1sPyOIxfg03izbGowWHB9svhNbG1ceU8uvsd8oHfoRF/MnV0uxoQw m7RS20EOqNXYKsDTfhNDK5ADBCLchhxaAmrPbTzPYPqT+7zCUEBKjOVevUib4e4v8ZHV IX0w== X-Gm-Message-State: ALoCoQngk4jSRoy0Dn6YpP34oo2oIPlonPbUKZ5Vz/84PUGWvu15D8xzWm7fYbIA15MttFEksT2N X-Received: by 10.194.222.230 with SMTP id qp6mr19971165wjc.23.1405348667514; Mon, 14 Jul 2014 07:37:47 -0700 (PDT) Received: from tomegun-x240.localdomain (cm-84.208.72.173.getinternet.no. [84.208.72.173]) by mx.google.com with ESMTPSA id de6sm25893225wjc.16.2014.07.14.07.37.46 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 14 Jul 2014 07:37:46 -0700 (PDT) From: Tom Gundersen To: netdev@vger.kernel.org Cc: David Miller , linux-kernel@vger.kernel.org, Tom Gundersen Subject: [PATCH v9 4/4] net: rtnetlink - make create_link take name_assign_type Date: Mon, 14 Jul 2014 16:37:25 +0200 Message-Id: <1405348645-1995-4-git-send-email-teg@jklm.no> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1405348645-1995-1-git-send-email-teg@jklm.no> References: <1405348645-1995-1-git-send-email-teg@jklm.no> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This passes down NET_NAME_USER (or NET_NAME_ENUM) to alloc_netdev(), for any device created over rtnetlink. v9: restore reverse-christmas-tree order of local variables Signed-off-by: Tom Gundersen --- drivers/net/veth.c | 11 ++++++++--- include/net/rtnetlink.h | 1 + net/core/rtnetlink.c | 12 ++++++++---- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/drivers/net/veth.c b/drivers/net/veth.c index b4a10bc..157c567 100644 --- a/drivers/net/veth.c +++ b/drivers/net/veth.c @@ -317,6 +317,7 @@ static int veth_newlink(struct net *src_net, struct net_device *dev, struct veth_priv *priv; char ifname[IFNAMSIZ]; struct nlattr *peer_tb[IFLA_MAX + 1], **tbp; + unsigned char name_assign_type; struct ifinfomsg *ifmp; struct net *net; @@ -344,16 +345,20 @@ static int veth_newlink(struct net *src_net, struct net_device *dev, tbp = tb; } - if (tbp[IFLA_IFNAME]) + if (tbp[IFLA_IFNAME]) { nla_strlcpy(ifname, tbp[IFLA_IFNAME], IFNAMSIZ); - else + name_assign_type = NET_NAME_USER; + } else { snprintf(ifname, IFNAMSIZ, DRV_NAME "%%d"); + name_assign_type = NET_NAME_ENUM; + } net = rtnl_link_get_net(src_net, tbp); if (IS_ERR(net)) return PTR_ERR(net); - peer = rtnl_create_link(net, ifname, &veth_link_ops, tbp); + peer = rtnl_create_link(net, ifname, name_assign_type, + &veth_link_ops, tbp); if (IS_ERR(peer)) { put_net(net); return PTR_ERR(peer); diff --git a/include/net/rtnetlink.h b/include/net/rtnetlink.h index 72240e5..e21b9f9 100644 --- a/include/net/rtnetlink.h +++ b/include/net/rtnetlink.h @@ -136,6 +136,7 @@ void rtnl_af_unregister(struct rtnl_af_ops *ops); struct net *rtnl_link_get_net(struct net *src_net, struct nlattr *tb[]); struct net_device *rtnl_create_link(struct net *net, char *ifname, + unsigned char name_assign_type, const struct rtnl_link_ops *ops, struct nlattr *tb[]); int rtnl_configure_link(struct net_device *dev, const struct ifinfomsg *ifm); diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 899de40..09456ff 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -1805,7 +1805,8 @@ int rtnl_configure_link(struct net_device *dev, const struct ifinfomsg *ifm) EXPORT_SYMBOL(rtnl_configure_link); struct net_device *rtnl_create_link(struct net *net, - char *ifname, const struct rtnl_link_ops *ops, struct nlattr *tb[]) + char *ifname, unsigned char name_assign_type, + const struct rtnl_link_ops *ops, struct nlattr *tb[]) { int err; struct net_device *dev; @@ -1823,7 +1824,7 @@ struct net_device *rtnl_create_link(struct net *net, num_rx_queues = ops->get_num_rx_queues(); err = -ENOMEM; - dev = alloc_netdev_mqs(ops->priv_size, ifname, NET_NAME_UNKNOWN, + dev = alloc_netdev_mqs(ops->priv_size, ifname, name_assign_type, ops->setup, num_tx_queues, num_rx_queues); if (!dev) goto err; @@ -1889,6 +1890,7 @@ static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh) char ifname[IFNAMSIZ]; struct nlattr *tb[IFLA_MAX+1]; struct nlattr *linkinfo[IFLA_INFO_MAX+1]; + unsigned char name_assign_type = NET_NAME_USER; int err; #ifdef CONFIG_MODULES @@ -2038,14 +2040,16 @@ replay: return -EOPNOTSUPP; } - if (!ifname[0]) + if (!ifname[0]) { snprintf(ifname, IFNAMSIZ, "%s%%d", ops->kind); + name_assign_type = NET_NAME_ENUM; + } dest_net = rtnl_link_get_net(net, tb); if (IS_ERR(dest_net)) return PTR_ERR(dest_net); - dev = rtnl_create_link(dest_net, ifname, ops, tb); + dev = rtnl_create_link(dest_net, ifname, name_assign_type, ops, tb); if (IS_ERR(dev)) { err = PTR_ERR(dev); goto out;