Work around broken virtio drivers in 2.6.26
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
@@ -120,6 +120,9 @@ static uint32_t virtio_net_get_features(VirtIODevice *vdev)
if (tap_has_vnet_hdr(host)) {
tap_using_vnet_hdr(host, 1);
+#if 0
+ /* Stop advertising advanced features until we work around the fact
+ * that this is totally broken in 2.6.26 kernels */
features |= (1 << VIRTIO_NET_F_CSUM);
features |= (1 << VIRTIO_NET_F_GUEST_CSUM);
features |= (1 << VIRTIO_NET_F_GUEST_TSO4);
@@ -130,6 +133,7 @@ static uint32_t virtio_net_get_features(VirtIODevice *vdev)
features |= (1 << VIRTIO_NET_F_HOST_ECN);
features |= (1 << VIRTIO_NET_F_MRG_RXBUF);
/* Kernel can't actually handle UFO in software currently. */
+#endif
}
#endif
@@ -374,8 +378,14 @@ static int receive_header(VirtIONet *n, struct iovec *iov, int iovcnt,
struct virtio_net_hdr *hdr = iov[0].iov_base;
int offset = 0;
+#if 0
hdr->flags = 0;
hdr->gso_type = VIRTIO_NET_HDR_GSO_NONE;
+#else
+ /* we need to clear out the whole header, including any garbage that may be
+ */
+ memset(hdr, 0, sizeof(*hdr));
+#endif
#ifdef TAP_VNET_HDR
if (tap_has_vnet_hdr(n->vc->vlan->first_client)) {