|
@@ -403,6 +403,17 @@ static int veth_newlink(struct net *src_net, struct net_device *dev,
|
|
|
if (tb[IFLA_ADDRESS] == NULL)
|
|
|
random_ether_addr(dev->dev_addr);
|
|
|
|
|
|
+ if (tb[IFLA_IFNAME])
|
|
|
+ nla_strlcpy(dev->name, tb[IFLA_IFNAME], IFNAMSIZ);
|
|
|
+ else
|
|
|
+ snprintf(dev->name, IFNAMSIZ, DRV_NAME "%%d");
|
|
|
+
|
|
|
+ if (strchr(dev->name, '%')) {
|
|
|
+ err = dev_alloc_name(dev, dev->name);
|
|
|
+ if (err < 0)
|
|
|
+ goto err_alloc_name;
|
|
|
+ }
|
|
|
+
|
|
|
err = register_netdevice(dev);
|
|
|
if (err < 0)
|
|
|
goto err_register_dev;
|
|
@@ -422,6 +433,7 @@ static int veth_newlink(struct net *src_net, struct net_device *dev,
|
|
|
|
|
|
err_register_dev:
|
|
|
/* nothing to do */
|
|
|
+err_alloc_name:
|
|
|
err_configure_peer:
|
|
|
unregister_netdevice(peer);
|
|
|
return err;
|