kni: keep ethernet MAC address when interface goes up
authorIgor Ryzhov <iryzhov@nfware.com>
Thu, 21 Apr 2016 16:27:30 +0000 (19:27 +0300)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Mon, 2 May 2016 10:37:48 +0000 (12:37 +0200)
Currently every time a KNI interface goes up, its ethernet address
is reassigned.
After this patch ethernet address is assigned only once,
at initialization time.

Suggested-by: Sergey Balabanov <balabanovsv@ecotelecom.ru>
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
Acked-by: Helin Zhang <helin.zhang@intel.com>
lib/librte_eal/linuxapp/kni/kni_misc.c
lib/librte_eal/linuxapp/kni/kni_net.c

index ae8133f..871437f 100644 (file)
@@ -26,6 +26,7 @@
 #include <linux/module.h>
 #include <linux/miscdevice.h>
 #include <linux/netdevice.h>
+#include <linux/etherdevice.h>
 #include <linux/pci.h>
 #include <linux/kthread.h>
 #include <linux/rwsem.h>
@@ -542,6 +543,15 @@ kni_ioctl_create(struct net *net,
        if (pci)
                pci_dev_put(pci);
 
+       if (kni->lad_dev)
+               memcpy(net_dev->dev_addr, kni->lad_dev->dev_addr, ETH_ALEN);
+       else
+               /*
+                * Generate random mac address. eth_random_addr() is the newer
+                * version of generating mac address in linux kernel.
+                */
+               random_ether_addr(net_dev->dev_addr);
+
        ret = register_netdev(net_dev);
        if (ret) {
                KNI_ERR("error %i registering device \"%s\"\n",
index cfa8339..3d2d246 100644 (file)
@@ -69,15 +69,6 @@ kni_net_open(struct net_device *dev)
        struct rte_kni_request req;
        struct kni_dev *kni = netdev_priv(dev);
 
-       if (kni->lad_dev)
-               memcpy(dev->dev_addr, kni->lad_dev->dev_addr, ETH_ALEN);
-       else
-               /*
-                * Generate random mac address. eth_random_addr() is the newer
-                * version of generating mac address in linux kernel.
-                */
-               random_ether_addr(dev->dev_addr);
-
        netif_start_queue(dev);
 
        memset(&req, 0, sizeof(req));