[dpdk-dev] [PATCH 6/7] net/virtio: Add MTU feature support

Maxime Coquelin maxime.coquelin at redhat.com
Thu Feb 16 22:17:02 CET 2017


Hi Aaron,

On 02/16/2017 08:31 PM, Aaron Conole wrote:
> Maxime Coquelin <maxime.coquelin at redhat.com> writes:
>
>> This patch implements support for the Virtio MTU feature.
>> When negotiated, the host shares its maximum supported MTU,
>> which is used as initial MTU and as maximum MTU the application
>> can set.
>>
>> Signed-off-by: Maxime Coquelin <maxime.coquelin at redhat.com>
>> ---
>>  doc/guides/nics/features/virtio.ini |  1 +
>>  drivers/net/virtio/virtio_ethdev.c  | 22 ++++++++++++++++++++--
>>  drivers/net/virtio/virtio_ethdev.h  |  3 ++-
>>  drivers/net/virtio/virtio_pci.h     |  3 +++
>>  4 files changed, 26 insertions(+), 3 deletions(-)
>>
>> diff --git a/doc/guides/nics/features/virtio.ini b/doc/guides/nics/features/virtio.ini
>> index 5164937..7bea075 100644
>> --- a/doc/guides/nics/features/virtio.ini
>> +++ b/doc/guides/nics/features/virtio.ini
>> @@ -24,3 +24,4 @@ ARMv8                = Y
>>  x86-32               = Y
>>  x86-64               = Y
>>  Usage doc            = Y
>> +MTU update           = Y
>> diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
>> index d1ff234..ad3e6e1 100644
>> --- a/drivers/net/virtio/virtio_ethdev.c
>> +++ b/drivers/net/virtio/virtio_ethdev.c
>> @@ -721,10 +721,13 @@ virtio_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
>>  	uint32_t ether_hdr_len = ETHER_HDR_LEN + VLAN_TAG_LEN +
>>  				 hw->vtnet_hdr_size;
>>  	uint32_t frame_size = mtu + ether_hdr_len;
>> +	uint32_t max_frame_size = hw->max_mtu + ether_hdr_len;
>>
>> -	if (mtu < ETHER_MIN_MTU || frame_size > VIRTIO_MAX_RX_PKTLEN) {
>> +	max_frame_size = RTE_MIN(max_frame_size, VIRTIO_MAX_RX_PKTLEN);
>> +
>> +	if (mtu < ETHER_MIN_MTU || frame_size > max_frame_size) {
>>  		PMD_INIT_LOG(ERR, "MTU should be between %d and %d",
>> -			ETHER_MIN_MTU, VIRTIO_MAX_RX_PKTLEN - ether_hdr_len);
>> +			ETHER_MIN_MTU, max_frame_size - ether_hdr_len);
>>  		return -EINVAL;
>>  	}
>>  	return 0;
>> @@ -1392,6 +1395,21 @@ virtio_init_device(struct rte_eth_dev *eth_dev, uint64_t req_features)
>>
>>  		hw->max_queue_pairs = config->max_virtqueue_pairs;
>>
>> +		if (vtpci_with_feature(hw, VIRTIO_NET_F_MTU)) {
>> +			vtpci_read_dev_config(hw,
>> +				offsetof(struct virtio_net_config, mtu),
>> +				&config->mtu,
>> +				sizeof(config->mtu));
>
> I think we need to check the value here against the min mtu, right?
Right. Moreover, we don't check it in Qemu.
I need to add the check both DPDK and Qemu.

Thanks,
Maxime


More information about the dev mailing list