[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