In addition I suggest, Section 5.1.6.4 (Processing of Incoming Packets) should be changed from:
"
1. num_buffers indicates how many descriptors this packet is spread over (including this one): this will always be 1 if VIRTIO_NET_F_MRG_RXBUF was not
negotiated. This allows receipt of large packets without having to allocate large buffers: a packet that does not fit in a single buffer can flow over to the next buffer, and so on. In this case, there will be at least num_buffers
used buffers in the virtqueue, and the device chains them together to form a single packet in a way similar to how it would store it in a single buffer spread over multiple descriptors. The other buffers will not begin with a struct virtio_net_hdr.
2. If num_buffers is one, then the entire packet will be contained within this buffer, immediately following the struct virtio_net_hdr.
"
to
"
1. num_buffers indicates how many descriptor-chains this packet is spread over (including this one): this will always be 1 if VIRTIO_NET_F_MRG_RXBUF was
not negotiated. This allows receipt of large packets without having to allocate large buffers: a packet that does not fit in a single buffer can flow over to the next buffer, and so on. In this case, there will be at least num_buffers
used buffers in the virtqueue, and the device merge them together to form a single packet. The other buffers will not begin with a struct virtio_net_hdr.
2. If num_buffers is one, then the entire packet will be contained within this descriptors-chain, immediately following the struct virtio_net_hdr.
"
This, in order to prevent more confusion, caused by the use of the word “descriptor” interchanging as between descriptor and descriptor-chain.
Thanks,
Gil
-----Original Message-----
From: Savir, Gil
Sent: Tuesday, 9 July, 2019 09:35
To: virtio-comment@lists.oasis-open.org
Subject: VIRTIO_NET_F_MRG_RXBUF number of descriptors
Hi,
v1.1 states at Section 5.1.6.3.2 (Device Requirements: Setting Up Receive Buffers):
”The device MUST use only a single descriptor if VIRTIO_NET_F_MRG_RXBUF was not negotiated.”
That's a mistake, since the device can, and should be able to use multiple descriptors, pertaining to the same descriptors chain.
Therefore I suggest to change it to:
" The device MUST use only a single descriptor-chain if VIRTIO_NET_F_MRG_RXBUF was not negotiated."
BTW, as result of this wrongly formulated sentence, I came across many people (including my-past-self) that confuse MRG_RXBUF feature with descriptors-chain support.
Fixing it will help avoiding this confusion.
Thanks,
Gil