From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from proxy.6wind.com (host.76.145.23.62.rev.coltfrance.com [62.23.145.76]) by dpdk.org (Postfix) with ESMTP id 5324C2C1A for ; Wed, 15 Mar 2017 15:51:09 +0100 (CET) Received: from 6wind.com (unknown [10.16.0.184]) by proxy.6wind.com (Postfix) with SMTP id 79F0C286B9; Wed, 15 Mar 2017 15:51:03 +0100 (CET) Received: by 6wind.com (sSMTP sendmail emulation); Wed, 15 Mar 2017 15:49:55 +0100 From: Pascal Mazon To: keith.wiles@intel.com, ferruh.yigit@intel.com Cc: dev@dpdk.org, Pascal Mazon Date: Wed, 15 Mar 2017 15:48:14 +0100 Message-Id: <869fb3ba9da08763fe0fdbb82e9083a0adceab48.1489589167.git.pascal.mazon@6wind.com> X-Mailer: git-send-email 2.8.0.rc0 In-Reply-To: References: <1488904298-31395-1-git-send-email-pascal.mazon@6wind.com> Subject: [dpdk-dev] [PATCH v5 3/8] net/tap: add MAC address management X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Mar 2017 14:51:09 -0000 As soon as the netdevice is created, update pmd->mac_addr with its actual MAC address. Signed-off-by: Pascal Mazon Reviewed-by: Ferruh Yigit --- doc/guides/nics/features/tap.ini | 1 + drivers/net/tap/rte_eth_tap.c | 39 +++++++++++++++++++++++++++++++++------ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/doc/guides/nics/features/tap.ini b/doc/guides/nics/features/tap.ini index f4aca6921ddc..d9b47a003654 100644 --- a/doc/guides/nics/features/tap.ini +++ b/doc/guides/nics/features/tap.ini @@ -9,6 +9,7 @@ Jumbo frame = Y Promiscuous mode = Y Allmulticast mode = Y Basic stats = Y +Unicast MAC filter = Y Other kdrv = Y ARMv7 = Y ARMv8 = Y diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c index 50a07249dff2..2cf8203ba24e 100644 --- a/drivers/net/tap/rte_eth_tap.c +++ b/drivers/net/tap/rte_eth_tap.c @@ -127,6 +127,10 @@ tap_trigger_cb(int sig __rte_unused) tap_trigger = (tap_trigger + 1) | 0x80000000; } +static int +tap_ioctl(struct pmd_internals *pmd, unsigned long request, + struct ifreq *ifr, int set); + /* Tun/Tap allocation routine * * name is the number of the interface to use, unless NULL to take the host @@ -229,13 +233,12 @@ tun_alloc(struct pmd_internals *pmd, uint16_t qid) } if (qid == 0) { - if (ioctl(fd, SIOCGIFHWADDR, &ifr) == -1) { - RTE_LOG(ERR, PMD, "ioctl failed (SIOCGIFHWADDR) (%s)\n", - ifr.ifr_name); - goto error; - } + struct ifreq ifr; - rte_memcpy(&pmd->eth_addr, ifr.ifr_hwaddr.sa_data, ETH_ALEN); + if (tap_ioctl(pmd, SIOCGIFHWADDR, &ifr, 0) < 0) + goto error; + rte_memcpy(&pmd->eth_addr, ifr.ifr_hwaddr.sa_data, + ETHER_ADDR_LEN); } return fd; @@ -345,6 +348,9 @@ tap_ioctl(struct pmd_internals *pmd, unsigned long request, else ifr->ifr_flags &= ~req_flags; break; + case SIOCGIFHWADDR: + case SIOCSIFHWADDR: + break; default: RTE_LOG(WARNING, PMD, "%s: ioctl() called with wrong arg\n", pmd->name); @@ -547,6 +553,26 @@ tap_allmulti_disable(struct rte_eth_dev *dev) tap_ioctl(pmd, SIOCSIFFLAGS, &ifr, 0); } + +static void +tap_mac_set(struct rte_eth_dev *dev, struct ether_addr *mac_addr) +{ + struct pmd_internals *pmd = dev->data->dev_private; + struct ifreq ifr; + + if (is_zero_ether_addr(mac_addr)) { + RTE_LOG(ERR, PMD, "%s: can't set an empty MAC address\n", + dev->data->name); + return; + } + + ifr.ifr_hwaddr.sa_family = AF_LOCAL; + rte_memcpy(ifr.ifr_hwaddr.sa_data, mac_addr, ETHER_ADDR_LEN); + if (tap_ioctl(pmd, SIOCSIFHWADDR, &ifr, 1) < 0) + return; + rte_memcpy(&pmd->eth_addr, mac_addr, ETHER_ADDR_LEN); +} + static int tap_setup_queue(struct rte_eth_dev *dev, struct pmd_internals *internals, @@ -682,6 +708,7 @@ static const struct eth_dev_ops ops = { .promiscuous_disable = tap_promisc_disable, .allmulticast_enable = tap_allmulti_enable, .allmulticast_disable = tap_allmulti_disable, + .mac_addr_set = tap_mac_set, .stats_get = tap_stats_get, .stats_reset = tap_stats_reset, }; -- 2.8.0.rc0