Hi, The patch looks mainly ok to me.
I'll put some comments inline. On 18/09/2017 20:47, Ferruh Yigit wrote: > From: Vipin Varghese <vipin.vargh...@intel.com> > > tap speed argument is not working without generating any error. Can you describe the error, paste the log? > > 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) { I think it would be best to also try setting the speed on the remote (tap_ioctl(REMOTE_ONLY)), but continue execution even if that fails. > + 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", I would say "got". > + 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> These includes are only useful inside rte_eth_tap.c, I would put them there only.