[dpdk-dev] [PATCH 1/2] net/tap: fix setting speed by argument
Ferruh Yigit
ferruh.yigit at intel.com
Mon Sep 18 20:47:34 CEST 2017
From: Vipin Varghese <vipin.varghese at intel.com>
tap speed argument is not working without generating any error.
This patch sets the configured speed during device start.
Fixes: 02f96a0a82d1 ("net/tap: add TUN/TAP device PMD")
Cc: stable at dpdk.org
Signed-off-by: Vipin Varghese <vipin.varghese at intel.com>
---
drivers/net/tap/rte_eth_tap.c | 27 +++++++++++++++++++++++++++
drivers/net/tap/rte_eth_tap.h | 2 ++
2 files changed, 29 insertions(+)
diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
index 01cba0fa1..00dad167f 100644
--- a/drivers/net/tap/rte_eth_tap.c
+++ b/drivers/net/tap/rte_eth_tap.c
@@ -545,6 +545,7 @@ tap_ioctl(struct pmd_internals *pmd, unsigned long request,
case SIOCGIFHWADDR:
case SIOCSIFHWADDR:
case SIOCSIFMTU:
+ case SIOCETHTOOL:
break;
default:
RTE_ASSERT(!"unsupported request type: must not happen");
@@ -585,6 +586,32 @@ static int
tap_dev_start(struct rte_eth_dev *dev)
{
int err;
+ struct ifreq ifr;
+ struct ethtool_cmd edata = {0};
+ struct pmd_internals *pmd = dev->data->dev_private;
+
+ /*set & get speed to device*/
+ edata.speed = pmd_link.link_speed;
+ edata.cmd = ETHTOOL_SSET;
+ ifr.ifr_data = (caddr_t)&edata;
+ if (tap_ioctl(pmd, SIOCETHTOOL, &ifr, 0, LOCAL_ONLY) < 0) {
+ RTE_LOG(WARNING, PMD,
+ "Could not set param speed %d for ifindex for %s.\n",
+ pmd_link.link_speed,
+ pmd->name);
+
+ /* fetch current speed of created device */
+ edata.cmd = ETHTOOL_GSET;
+ ifr.ifr_data = (caddr_t)&edata;
+ if (tap_ioctl(pmd, SIOCETHTOOL, &ifr, 0, LOCAL_ONLY) < 0)
+ return 0;
+
+ pmd_link.link_speed = edata.speed;
+ RTE_LOG(INFO, PMD, "get speed %d for ifindex for %s.\n",
+ pmd_link.link_speed,
+ pmd->name);
+ }
+ dev->data->dev_link = pmd_link;
err = tap_intr_handle_set(dev, 1);
if (err)
diff --git a/drivers/net/tap/rte_eth_tap.h b/drivers/net/tap/rte_eth_tap.h
index 928a0454e..3e91db4ae 100644
--- a/drivers/net/tap/rte_eth_tap.h
+++ b/drivers/net/tap/rte_eth_tap.h
@@ -40,6 +40,8 @@
#include <net/if.h>
#include <linux/if_tun.h>
+#include <linux/ethtool.h>
+#include <linux/sockios.h>
#include <rte_ethdev.h>
#include <rte_ether.h>
--
2.13.5
More information about the dev
mailing list