vmd(8): support variable length vionet rx descriptor chains
authordv <dv@openbsd.org>
Mon, 21 Jun 2021 02:38:18 +0000 (02:38 +0000)
committerdv <dv@openbsd.org>
Mon, 21 Jun 2021 02:38:18 +0000 (02:38 +0000)
commit6c31e103a2a6d1ce5c80059b30a4becd40d1b3bb
tree87bf6ac92dfc26882f23d95e33521d08e89ec8d9
parent95e8765c866608e2321b2ad4f5b0c7eba30d19c2
vmd(8): support variable length vionet rx descriptor chains

The original implementation of the virtio network device assumed a
driver would only provide a 2-descriptor chain for receiving packets.
The virtio spec allows for variable length chains and drivers, in
practice, construct them when they use a sufficiently large MTU.

This change lets the device use variable length chains provided by
the driver, thus allowing for drivers to set an MTU up to the
underlying host-side tap(4)'s limit of TUNMRU (16384).

Size limitations are now enforced on both tx and rx-side dropping
anything violating the underlying tap(4) min and max limits.

More work is needed to increase the read(2) buffer in use by vmd
to prevent packet truncation.

OK mlarkin@
usr.sbin/vmd/virtio.c
usr.sbin/vmd/virtio.h