From: Vipin Varghese <vipin.vargh...@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: sta...@dpdk.org Signed-off-by: Vipin Varghese <vipin.vargh...@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