Hi Sergey > -----Original Message----- > From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Sergey Balabanov > Sent: Friday, August 28, 2015 9:06 PM > To: dev at dpdk.org > Subject: [dpdk-dev] [PATCH] kni: set kni mac on ioctl_create > > There is a situation when ioctl returns zero mac address (00:00:00:00:00:00) > for just created kni. The situation happens because kni mac is set on > 'ipconfig > up' event (kni_net_open callback) not on kni creation (kni_ioctl_create). Could you help to clarify a bit of the real issue? What's wrong there?
> > Signed-off-by: Sergey Balabanov <balabanovsv at ecotelecom.ru> > --- > lib/librte_eal/linuxapp/kni/kni_misc.c | 10 ++++++++++ > lib/librte_eal/linuxapp/kni/kni_net.c | 9 --------- > 2 files changed, 10 insertions(+), 9 deletions(-) > > diff --git a/lib/librte_eal/linuxapp/kni/kni_misc.c > b/lib/librte_eal/linuxapp/kni/kni_misc.c > index 2e9fa89..61f83a0 100644 > --- a/lib/librte_eal/linuxapp/kni/kni_misc.c > +++ b/lib/librte_eal/linuxapp/kni/kni_misc.c > @@ -28,6 +28,7 @@ > #include <linux/pci.h> > #include <linux/kthread.h> > #include <linux/rwsem.h> > +#include <linux/etherdevice.h> /* eth_type_trans */ > > #include <exec-env/rte_kni_common.h> > #include "kni_dev.h" > @@ -465,6 +466,15 @@ kni_ioctl_create(unsigned int ioctl_num, unsigned > long ioctl_param) > 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); > + A rebase is needed, as a lot of changes after that. Thanks! Helin > ret = register_netdev(net_dev); > if (ret) { > KNI_ERR("error %i registering device \"%s\"\n", diff --git > a/lib/librte_eal/linuxapp/kni/kni_net.c > b/lib/librte_eal/linuxapp/kni/kni_net.c > index ab5add4..b50b4cf 100644 > --- a/lib/librte_eal/linuxapp/kni/kni_net.c > +++ b/lib/librte_eal/linuxapp/kni/kni_net.c > @@ -70,15 +70,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)); > -- > 2.1.4