From 79038f0e762be9a46177c610a9927315bb00feaa Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Mon, 4 Feb 2008 23:50:01 -0500 Subject: [PATCH] --- yaml --- r: 82818 b: refs/heads/master c: 50c8ea8080700014872f2bbd7466d31ce0476290 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/net/virtio_net.c | 3 ++- trunk/include/linux/virtio_net.h | 11 ++++++----- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index d957971ff5a8..e4b0664df085 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 24a5ae5d0340d5a45df840b24a10d62aa9516116 +refs/heads/master: 50c8ea8080700014872f2bbd7466d31ce0476290 diff --git a/trunk/drivers/net/virtio_net.c b/trunk/drivers/net/virtio_net.c index 7b0059f0f5d4..3492ae0951de 100644 --- a/trunk/drivers/net/virtio_net.c +++ b/trunk/drivers/net/virtio_net.c @@ -242,6 +242,7 @@ static int start_xmit(struct sk_buff *skb, struct net_device *dev) } if (skb_is_gso(skb)) { + hdr->hdr_len = skb_transport_header(skb) - skb->data; hdr->gso_size = skb_shinfo(skb)->gso_size; if (skb_shinfo(skb)->gso_type & SKB_GSO_TCP_ECN) hdr->gso_type = VIRTIO_NET_HDR_GSO_TCPV4_ECN; @@ -255,7 +256,7 @@ static int start_xmit(struct sk_buff *skb, struct net_device *dev) BUG(); } else { hdr->gso_type = VIRTIO_NET_HDR_GSO_NONE; - hdr->gso_size = 0; + hdr->gso_size = hdr->hdr_len = 0; } vnet_hdr_to_sg(sg, skb); diff --git a/trunk/include/linux/virtio_net.h b/trunk/include/linux/virtio_net.h index 6e8fdfea8cd0..1456f7b936d0 100644 --- a/trunk/include/linux/virtio_net.h +++ b/trunk/include/linux/virtio_net.h @@ -24,16 +24,17 @@ struct virtio_net_config struct virtio_net_hdr { #define VIRTIO_NET_HDR_F_NEEDS_CSUM 1 // Use csum_start, csum_offset - __u8 flags; + __u8 flags; #define VIRTIO_NET_HDR_GSO_NONE 0 // Not a GSO frame #define VIRTIO_NET_HDR_GSO_TCPV4 1 // GSO frame, IPv4 TCP (TSO) /* FIXME: Do we need this? If they said they can handle ECN, do they care? */ #define VIRTIO_NET_HDR_GSO_TCPV4_ECN 2 // GSO frame, IPv4 TCP w/ ECN #define VIRTIO_NET_HDR_GSO_UDP 3 // GSO frame, IPv4 UDP (UFO) #define VIRTIO_NET_HDR_GSO_TCPV6 4 // GSO frame, IPv6 TCP - __u8 gso_type; - __u16 gso_size; - __u16 csum_start; - __u16 csum_offset; + __u8 gso_type; + __u16 hdr_len; /* Ethernet + IP + tcp/udp hdrs */ + __u16 gso_size; /* Bytes to append to gso_hdr_len per frame */ + __u16 csum_start; /* Position to start checksumming from */ + __u16 csum_offset; /* Offset after that to place checksum */ }; #endif /* _LINUX_VIRTIO_NET_H */