[dpdk-dev] [PATCH v3] net/vmxnet3: Added mtu_set() function to allow setting MTU.

Myers, Charles Charles.Myers at spirent.com
Wed Aug 21 07:19:22 CEST 2019

MTU change is currently only allowed when device is stopped.

Current code in master branch already sets MTU in shared data correctly when starting the device:

static int
vmxnet3_setup_driver_shared(struct rte_eth_dev *dev)
        struct rte_eth_conf port_conf = dev->data->dev_conf;
        struct vmxnet3_hw *hw = dev->data->dev_private;
        uint32_t mtu = dev->data->mtu;
        devRead->misc.mtu = rte_le_to_cpu_32(mtu);

However current code in master branch does not implement a mtu_set() function so MTU in the dev->data is never changed from default of 1500:

rte_eth_dev_set_mtu(uint16_t port_id, uint16_t mtu)
        int ret;
        struct rte_eth_dev_info dev_info;
        struct rte_eth_dev *dev;

        dev = &rte_eth_devices[port_id];
        RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->mtu_set, -ENOTSUP);

         * Check if the device supports dev_infos_get, if it does not
         * skip min_mtu/max_mtu validation here as this requires values
         * that are populated within the call to rte_eth_dev_info_get()
         * which relies on dev->dev_ops->dev_infos_get.
        if (*dev->dev_ops->dev_infos_get != NULL) {
                rte_eth_dev_info_get(port_id, &dev_info);
                if (mtu < dev_info.min_mtu || mtu > dev_info.max_mtu)
                        return -EINVAL;

        ret = (*dev->dev_ops->mtu_set)(dev, mtu);
        if (!ret)
                dev->data->mtu = mtu;

        return eth_err(port_id, ret);

The vmxnet3 driver just needs to implement mtu_set() so that rte_eth_dev_set_mtu() allows changing the MTU and puts the value in dev->data->mtu .

-----Original Message-----
From: Stephen Hemminger <stephen at networkplumber.org> 
Sent: Tuesday, August 20, 2019 6:43 PM
To: Myers, Charles <Charles.Myers at spirent.com>
Cc: Yong Wang <yongwang at vmware.com>; dev at dpdk.org
Subject: Re: [PATCH v3] net/vmxnet3: Added mtu_set() function to allow setting MTU.

On Wed, 21 Aug 2019 02:16:58 +0000
"Myers, Charles" <Charles.Myers at spirent.com> wrote:

>  static int
> +vmxnet3_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu) {
> +	if (dev->data->dev_started) {
> +		PMD_DRV_LOG(ERR, "Port %d must be stopped to configure MTU",
> +			    dev->data->port_id);
> +		return -EBUSY;
> +	}
> +
> +	return 0;
> +}
> +

Don't you need to reset the rx ring to change mtu on the fly?
At a minimum you need to communicate this value to host through the shared driver page.

More information about the dev mailing list