[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] virtio-net: Do not filter VLANs without F_CTRL_VLAN
From: |
Stefan Fritsch |
Subject: |
[Qemu-devel] [PATCH] virtio-net: Do not filter VLANs without F_CTRL_VLAN |
Date: |
Wed, 12 Feb 2014 22:46:28 +0100 (CET) |
User-agent: |
Alpine 2.02 (DEB 1266 2009-07-14) |
If VIRTIO_NET_F_CTRL_VLAN is not negotiated, do not filter out all
VLAN-tagged packets but send them to the guest.
Signed-off-by: Stefan Fritsch <address@hidden>
---
This time CCing the maintainers.
This fixes VLANs with OpenBSD guests (and probably NetBSD, too, because
the OpenBSD driver started as a port from NetBSD).
hw/net/virtio-net.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
index 3626608..0ae9a91 100644
--- a/hw/net/virtio-net.c
+++ b/hw/net/virtio-net.c
@@ -315,7 +315,11 @@ static void virtio_net_reset(VirtIODevice *vdev)
memset(n->mac_table.macs, 0, MAC_TABLE_ENTRIES * ETH_ALEN);
memcpy(&n->mac[0], &n->nic->conf->macaddr, sizeof(n->mac));
qemu_format_nic_info_str(qemu_get_queue(n->nic), n->mac);
- memset(n->vlans, 0, MAX_VLAN >> 3);
+ if (vdev->guest_features & (1 << VIRTIO_NET_F_CTRL_VLAN)) {
+ memset(n->vlans, 0, MAX_VLAN >> 3);
+ } else {
+ memset(n->vlans, 0xff, MAX_VLAN >> 3);
+ }
}
static void peer_test_vnet_hdr(VirtIONet *n)
@@ -515,6 +519,12 @@ static void virtio_net_set_features(VirtIODevice *vdev,
uint32_t features)
}
vhost_net_ack_features(tap_get_vhost_net(nc->peer), features);
}
+
+ if (vdev->guest_features & (1 << VIRTIO_NET_F_CTRL_VLAN)) {
+ memset(n->vlans, 0, MAX_VLAN >> 3);
+ } else {
+ memset(n->vlans, 0xff, MAX_VLAN >> 3);
+ }
}
static int virtio_net_handle_rx_mode(VirtIONet *n, uint8_t cmd,
--
1.7.10.4