[haiku-commits] Change in haiku[master]: virtio_net: add VIRTIO_NET_F_MTU support

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 21 Mar 2020 09:10:29 +0000

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

Other related posts:

  • » [haiku-commits] Change in haiku[master]: virtio_net: add VIRTIO_NET_F_MTU support - Gerrit