]> git.hungrycats.org Git - linux/commitdiff
[NET]: Device name changing via rtnetlink
authorThomas Graf <tgraf@suug.ch>
Fri, 10 Sep 2004 08:48:29 +0000 (01:48 -0700)
committerDavid S. Miller <davem@nuts.davemloft.net>
Fri, 10 Sep 2004 08:48:29 +0000 (01:48 -0700)
Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/netdevice.h
net/core/dev.c
net/core/rtnetlink.c

index 62d21c00b9cce5dda70da3282271d3a651a404d6..a8a542ca89bff5f29c4e19620f1d2c10815d4d2d 100644 (file)
@@ -677,6 +677,7 @@ extern int          dev_ioctl(unsigned int cmd, void __user *);
 extern int             dev_ethtool(struct ifreq *);
 extern unsigned                dev_get_flags(const struct net_device *);
 extern int             dev_change_flags(struct net_device *, unsigned);
+extern int             dev_change_name(struct net_device *, char *);
 extern int             dev_set_mtu(struct net_device *, int);
 extern void            dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev);
 
index 47b3d8497a5dda01d636073882ff2490fe5f055b..4829caa535ed20d0ccea06fe4d9dd9d06cbef358 100644 (file)
@@ -3347,6 +3347,7 @@ EXPORT_SYMBOL(dev_remove_pack);
 EXPORT_SYMBOL(dev_set_allmulti);
 EXPORT_SYMBOL(dev_set_promiscuity);
 EXPORT_SYMBOL(dev_change_flags);
+EXPORT_SYMBOL(dev_change_name);
 EXPORT_SYMBOL(dev_set_mtu);
 EXPORT_SYMBOL(free_netdev);
 EXPORT_SYMBOL(netdev_boot_setup_check);
index 5e4e2d49a1e348c4e84ac445f9ca240a6a4289cc..41d6c115ed4ae5273dfeb75e2ae2d0c6a2870dc9 100644 (file)
@@ -345,6 +345,23 @@ static int do_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
                dev->weight = *((u32 *) RTA_DATA(ida[IFLA_WEIGHT - 1]));
        }
 
+       if (ida[IFLA_IFNAME - 1]) {
+               char ifname[IFNAMSIZ];
+
+               if (ida[IFLA_IFNAME - 1]->rta_len > RTA_LENGTH(sizeof(ifname)))
+                       goto out;
+
+               memset(ifname, 0, sizeof(ifname));
+               memcpy(ifname, RTA_DATA(ida[IFLA_IFNAME - 1]),
+                       RTA_PAYLOAD(ida[IFLA_IFNAME - 1]));
+               ifname[IFNAMSIZ - 1] = '\0';
+
+               err = dev_change_name(dev, ifname);
+
+               if (err)
+                       goto out;
+       }
+
        err = 0;
 
 out: