From Jérôme Duval <jerome.duval@xxxxxxxxx>:
Jérôme Duval has uploaded this change for review. (
https://review.haiku-os.org/c/haiku/+/2384 ;)
Change subject: virtio_net: add VIRTIO_NET_F_MTU support
......................................................................
virtio_net: add VIRTIO_NET_F_MTU support
---
M src/add-ons/kernel/drivers/network/virtio/virtio_net.cpp
M src/add-ons/kernel/drivers/network/virtio/virtio_net.h
2 files changed, 20 insertions(+), 1 deletion(-)
git pull ssh://git.haiku-os.org:22/haiku refs/changes/84/2384/1
diff --git a/src/add-ons/kernel/drivers/network/virtio/virtio_net.cpp
b/src/add-ons/kernel/drivers/network/virtio/virtio_net.cpp
index d6af769..6bc1007 100644
--- a/src/add-ons/kernel/drivers/network/virtio/virtio_net.cpp
+++ b/src/add-ons/kernel/drivers/network/virtio/virtio_net.cpp
@@ -125,6 +125,8 @@
return "host checksum";
case VIRTIO_NET_F_GUEST_CSUM:
return "guest checksum";
+ case VIRTIO_NET_F_MTU:
+ return "mtu";
case VIRTIO_NET_F_MAC:
return "macaddress";
case VIRTIO_NET_F_GSO:
@@ -224,7 +226,7 @@
sDeviceManager->put_node(parent);
info->virtio->negotiate_features(info->virtio_device,
- VIRTIO_NET_F_STATUS | VIRTIO_NET_F_MAC
+ VIRTIO_NET_F_STATUS | VIRTIO_NET_F_MAC | VIRTIO_NET_F_MTU
/* VIRTIO_NET_F_CTRL_VQ | VIRTIO_NET_F_MQ */,
&info->features, &get_feature_name);
@@ -474,6 +476,21 @@
&info->macaddr, sizeof(info->macaddr));
}
+ if ((info->features & VIRTIO_NET_F_MTU) != 0) {
+ dprintf("mtu feature\n");
+ uint16 mtu;
+ info->virtio->read_device_config(info->virtio_device,
+ offsetof(struct virtio_net_config, mtu),
+ &mtu, sizeof(mtu));
+ // check against minimum MTU
+ if (mtu > 68)
+ info->maxframesize = mtu;
+ else
+ info->virtio->clear_feature(info->virtio_device,
VIRTIO_NET_F_MTU);
+ } else {
+ dprintf("no mtu feature\n");
+ }
+
for (int i = 0; i < info->rxSizes[0]; i++)
virtio_net_rx_enqueue_buf(info, info->rxBufInfos[i]);
diff --git a/src/add-ons/kernel/drivers/network/virtio/virtio_net.h
b/src/add-ons/kernel/drivers/network/virtio/virtio_net.h
index 315b730..a7f8f70 100644
--- a/src/add-ons/kernel/drivers/network/virtio/virtio_net.h
+++ b/src/add-ons/kernel/drivers/network/virtio/virtio_net.h
@@ -34,6 +34,7 @@
/* The feature bitmap for virtio net */
#define VIRTIO_NET_F_CSUM 0x00001 /* Host handles pkts w/ partial csum */
#define VIRTIO_NET_F_GUEST_CSUM 0x00002 /* Guest handles pkts w/ partial csum*/
+#define VIRTIO_NET_F_MTU 0x00008 /* Initial MTU advice. */
#define VIRTIO_NET_F_MAC 0x00020 /* Host has given MAC address. */
#define VIRTIO_NET_F_GSO 0x00040 /* Host handles pkts w/ any GSO type */
#define VIRTIO_NET_F_GUEST_TSO4 0x00080 /* Guest can handle TSOv4 in. */
@@ -66,6 +67,7 @@
* Legal values are between 1 and 0x8000.
*/
uint16_t max_virtqueue_pairs;
+ uint16_t mtu;
} _PACKED;
/*
--
To view, visit https://review.haiku-os.org/c/haiku/+/2384
To unsubscribe, or for help writing mail filters, visit
https://review.haiku-os.org/settings
Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: Ie61fa0e0fe13a63d5b0ebde08303a1df836b1b52
Gerrit-Change-Number: 2384
Gerrit-PatchSet: 1
Gerrit-Owner: Jérôme Duval <jerome.duval@xxxxxxxxx>
Gerrit-MessageType: newchange