@@ -4440,7 +4440,8 @@ int bond_create(struct net *net, const char *name)
rtnl_lock();
bond_dev = alloc_netdev_mq(sizeof(struct bonding),
- name ? name : "bond%d", NET_NAME_UNKNOWN,
+ name ? name : "bond%d",
+ name ? NET_NAME_USER : NET_NAME_ENUM,
bond_setup, tx_queues);
if (!bond_dev) {
pr_err("%s: eek! can't alloc netdev!\n", name);
@@ -1607,6 +1607,7 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr)
}
else {
char *name;
+ unsigned char name_assign_type = NET_NAME_ENUM;
unsigned long flags = 0;
int queues = ifr->ifr_flags & IFF_MULTI_QUEUE ?
MAX_TAP_QUEUES : 1;
@@ -1629,12 +1630,14 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr)
} else
return -EINVAL;
- if (*ifr->ifr_name)
+ if (*ifr->ifr_name) {
name = ifr->ifr_name;
+ name_assign_type = NET_NAME_USER;
+ }
dev = alloc_netdev_mqs(sizeof(struct tun_struct), name,
- NET_NAME_UNKNOWN, tun_setup, queues,
- queues);
+ name_assign_type, tun_setup,
+ queues, queues);
if (!dev)
return -ENOMEM;
@@ -2767,6 +2767,7 @@ static void gsm_destroy_network(struct gsm_dlci *dlci)
static int gsm_create_network(struct gsm_dlci *dlci, struct gsm_netconfig *nc)
{
char *netname;
+ unsigned char name_assign_type = NET_NAME_ENUM;
int retval = 0;
struct net_device *net;
struct gsm_mux_net *mux_net;
@@ -2787,10 +2788,13 @@ static int gsm_create_network(struct gsm_dlci *dlci, struct gsm_netconfig *nc)
pr_debug("create network interface");
netname = "gsm%d";
- if (nc->if_name[0] != '\0')
+ if (nc->if_name[0] != '\0') {
netname = nc->if_name;
- net = alloc_netdev(sizeof(struct gsm_mux_net), netname,
- NET_NAME_UNKNOWN, gsm_mux_net_init);
+ name_assign_type = NET_NAME_USER;
+ }
+ net = alloc_netdev(sizeof(struct gsm_mux_net),
+ netname, name_assign_type,
+ gsm_mux_net_init);
if (!net) {
pr_err("alloc_netdev failed");
return -ENOMEM;
@@ -682,8 +682,9 @@ static int br2684_create(void __user *arg)
netdev = alloc_netdev(sizeof(struct br2684_dev),
ni.ifname[0] ? ni.ifname : "nas%d",
- NET_NAME_UNKNOWN,
- (payload == p_routed) ? br2684_setup_routed : br2684_setup);
+ ni.ifname[0] ? NET_NAME_USER : NET_NAME_ENUM,
+ (payload == p_routed) ?
+ br2684_setup_routed : br2684_setup);
if (!netdev)
return -ENOMEM;
@@ -539,7 +539,7 @@ int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock)
/* session struct allocated as private part of net_device */
dev = alloc_netdev(sizeof(struct bnep_session),
(*req->device) ? req->device : "bnep%d",
- NET_NAME_UNKNOWN,
+ (*req->device) ? NET_NAME_USER : NET_NAME_ENUM,
bnep_net_setup);
if (!dev)
return -ENOMEM;
@@ -339,13 +339,14 @@ static struct net_bridge_port *new_nbp(struct net_bridge *br,
return p;
}
-int br_add_bridge(struct net *net, const char *name)
+int br_add_bridge(struct net *net, const char *name,
+ unsigned char name_assign_type)
{
struct net_device *dev;
int res;
- dev = alloc_netdev(sizeof(struct net_bridge), name, NET_NAME_UNKNOWN,
- br_dev_setup);
+ dev = alloc_netdev(sizeof(struct net_bridge), name,
+ name_assign_type, br_dev_setup);
if (!dev)
return -ENOMEM;
@@ -340,7 +340,7 @@ static int old_deviceless(struct net *net, void __user *uarg)
buf[IFNAMSIZ-1] = 0;
if (args[0] == BRCTL_ADD_BRIDGE)
- return br_add_bridge(net, buf);
+ return br_add_bridge(net, buf, NET_NAME_USER);
return br_del_bridge(net, buf);
}
@@ -369,7 +369,7 @@ int br_ioctl_deviceless_stub(struct net *net, unsigned int cmd, void __user *uar
buf[IFNAMSIZ-1] = 0;
if (cmd == SIOCBRADDBR)
- return br_add_bridge(net, buf);
+ return br_add_bridge(net, buf, NET_NAME_USER);
return br_del_bridge(net, buf);
}
@@ -415,7 +415,7 @@ void br_flood_forward(struct net_bridge *br, struct sk_buff *skb,
/* br_if.c */
void br_port_carrier_check(struct net_bridge_port *p);
-int br_add_bridge(struct net *net, const char *name);
+int br_add_bridge(struct net *net, const char *name, unsigned char name_assign_type);
int br_del_bridge(struct net *net, const char *name);
int br_add_if(struct net_bridge *br, struct net_device *dev);
int br_del_if(struct net_bridge *br, struct net_device *dev);
@@ -288,20 +288,23 @@ static struct net_device *__ip_tunnel_create(struct net *net,
struct ip_tunnel *tunnel;
struct net_device *dev;
char name[IFNAMSIZ];
+ unsigned char name_assign_type;
- if (parms->name[0])
+ if (parms->name[0]) {
strlcpy(name, parms->name, IFNAMSIZ);
- else {
+ name_assign_type = NET_NAME_USER;
+ } else {
if (strlen(ops->kind) > (IFNAMSIZ - 3)) {
err = -E2BIG;
goto failed;
}
strlcpy(name, ops->kind, IFNAMSIZ);
strncat(name, "%d", 2);
+ name_assign_type = NET_NAME_ENUM;
}
ASSERT_RTNL();
- dev = alloc_netdev(ops->priv_size, name, NET_NAME_UNKNOWN, ops->setup);
+ dev = alloc_netdev(ops->priv_size, name, name_assign_type, ops->setup);
if (!dev) {
err = -ENOMEM;
goto failed;
@@ -311,18 +311,22 @@ static struct ip6_tnl *ip6gre_tunnel_locate(struct net *net,
struct ip6_tnl *t, *nt;
struct net_device *dev;
char name[IFNAMSIZ];
+ unsigned char name_assign_type;
struct ip6gre_net *ign = net_generic(net, ip6gre_net_id);
t = ip6gre_tunnel_find(net, parms, ARPHRD_IP6GRE);
if (t || !create)
return t;
- if (parms->name[0])
+ if (parms->name[0]) {
strlcpy(name, parms->name, IFNAMSIZ);
- else
+ name_assign_type = NET_NAME_USER;
+ } else {
strcpy(name, "ip6gre%d");
+ name_assign_type = NET_NAME_ENUM;
+ }
- dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN,
+ dev = alloc_netdev(sizeof(*t), name, name_assign_type,
ip6gre_tunnel_setup);
if (!dev)
return NULL;
@@ -308,14 +308,18 @@ static struct ip6_tnl *ip6_tnl_create(struct net *net, struct __ip6_tnl_parm *p)
struct net_device *dev;
struct ip6_tnl *t;
char name[IFNAMSIZ];
+ unsigned char name_assign_type;
int err;
- if (p->name[0])
+ if (p->name[0]) {
strlcpy(name, p->name, IFNAMSIZ);
- else
+ name_assign_type = NET_NAME_USER;
+ } else {
sprintf(name, "ip6tnl%%d");
+ name_assign_type = NET_NAME_ENUM;
+ }
- dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN,
+ dev = alloc_netdev(sizeof (*t), name, name_assign_type,
ip6_tnl_dev_setup);
if (dev == NULL)
goto failed;
@@ -197,14 +197,18 @@ static struct ip6_tnl *vti6_tnl_create(struct net *net, struct __ip6_tnl_parm *p
struct net_device *dev;
struct ip6_tnl *t;
char name[IFNAMSIZ];
+ char name_assign_type;
int err;
- if (p->name[0])
+ if (p->name[0]) {
strlcpy(name, p->name, IFNAMSIZ);
- else
+ name_assign_type = NET_NAME_USER;
+ } else {
sprintf(name, "ip6_vti%%d");
+ name_assign_type = NET_NAME_ENUM;
+ }
- dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN, vti6_dev_setup);
+ dev = alloc_netdev(sizeof(*t), name, name_assign_type, vti6_dev_setup);
if (dev == NULL)
goto failed;
@@ -228,6 +228,7 @@ static struct ip_tunnel *ipip6_tunnel_locate(struct net *net,
struct ip_tunnel __rcu **tp;
struct net_device *dev;
char name[IFNAMSIZ];
+ unsigned char name_assign_type;
struct sit_net *sitn = net_generic(net, sit_net_id);
for (tp = __ipip6_bucket(sitn, parms);
@@ -245,12 +246,15 @@ static struct ip_tunnel *ipip6_tunnel_locate(struct net *net,
if (!create)
goto failed;
- if (parms->name[0])
+ if (parms->name[0]) {
strlcpy(name, parms->name, IFNAMSIZ);
- else
+ name_assign_type = NET_NAME_USER;
+ } else {
strcpy(name, "sit%d");
+ name_assign_type = NET_NAME_ENUM;
+ }
- dev = alloc_netdev(sizeof(*t), name, NET_NAME_UNKNOWN,
+ dev = alloc_netdev(sizeof(*t), name, name_assign_type,
ipip6_tunnel_setup);
if (dev == NULL)
return NULL;
@@ -209,6 +209,7 @@ static int l2tp_eth_create(struct net *net, u32 tunnel_id, u32 session_id, u32 p
{
struct net_device *dev;
char name[IFNAMSIZ];
+ unsigned char name_assign_type;
struct l2tp_tunnel *tunnel;
struct l2tp_session *session;
struct l2tp_eth *priv;
@@ -236,8 +237,11 @@ static int l2tp_eth_create(struct net *net, u32 tunnel_id, u32 session_id, u32 p
goto out;
}
strlcpy(name, cfg->ifname, IFNAMSIZ);
- } else
+ name_assign_type = NET_NAME_USER;
+ } else {
strcpy(name, L2TP_ETH_DEV_NAME);
+ name_assign_type = NET_NAME_ENUM;
+ }
session = l2tp_session_create(sizeof(*spriv), tunnel, session_id,
peer_session_id, cfg);
@@ -246,7 +250,7 @@ static int l2tp_eth_create(struct net *net, u32 tunnel_id, u32 session_id, u32 p
goto out;
}
- dev = alloc_netdev(sizeof(*priv), name, NET_NAME_UNKNOWN,
+ dev = alloc_netdev(sizeof(*priv), name, name_assign_type,
l2tp_eth_dev_setup);
if (!dev) {
rc = -ENOMEM;
Such names should be NET_NAME_USER, in case the emptystring is given we fallback to an enumerated name. Signed-off-by: Tom Gundersen <teg@jklm.no> --- drivers/net/bonding/bond_main.c | 3 ++- drivers/net/tun.c | 9 ++++++--- drivers/tty/n_gsm.c | 10 +++++++--- net/atm/br2684.c | 5 +++-- net/bluetooth/bnep/core.c | 2 +- net/bridge/br_if.c | 7 ++++--- net/bridge/br_ioctl.c | 4 ++-- net/bridge/br_private.h | 2 +- net/ipv4/ip_tunnel.c | 9 ++++++--- net/ipv6/ip6_gre.c | 10 +++++++--- net/ipv6/ip6_tunnel.c | 10 +++++++--- net/ipv6/ip6_vti.c | 10 +++++++--- net/ipv6/sit.c | 10 +++++++--- net/l2tp/l2tp_eth.c | 8 ++++++-- 14 files changed, 66 insertions(+), 33 deletions(-)