diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2008-02-04 23:50:01 -0500 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2008-02-04 07:50:02 -0500 |
commit | 50c8ea8080700014872f2bbd7466d31ce0476290 (patch) | |
tree | 8c863eb9ed295758a585e8f8f865faf9f6ba9302 /drivers | |
parent | 24a5ae5d0340d5a45df840b24a10d62aa9516116 (diff) |
virtio: Net header needs hdr_len
It's far easier to deal with packets if we don't have to parse the
packet to figure out the header length to know how much to pull into
the skb data. Add the field to the virtio_net_hdr struct (and fix the
spaces that somehow crept in there).
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/virtio_net.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 7b0059f0f5d4..3492ae0951de 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c | |||
@@ -242,6 +242,7 @@ static int start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
242 | } | 242 | } |
243 | 243 | ||
244 | if (skb_is_gso(skb)) { | 244 | if (skb_is_gso(skb)) { |
245 | hdr->hdr_len = skb_transport_header(skb) - skb->data; | ||
245 | hdr->gso_size = skb_shinfo(skb)->gso_size; | 246 | hdr->gso_size = skb_shinfo(skb)->gso_size; |
246 | if (skb_shinfo(skb)->gso_type & SKB_GSO_TCP_ECN) | 247 | if (skb_shinfo(skb)->gso_type & SKB_GSO_TCP_ECN) |
247 | hdr->gso_type = VIRTIO_NET_HDR_GSO_TCPV4_ECN; | 248 | 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) | |||
255 | BUG(); | 256 | BUG(); |
256 | } else { | 257 | } else { |
257 | hdr->gso_type = VIRTIO_NET_HDR_GSO_NONE; | 258 | hdr->gso_type = VIRTIO_NET_HDR_GSO_NONE; |
258 | hdr->gso_size = 0; | 259 | hdr->gso_size = hdr->hdr_len = 0; |
259 | } | 260 | } |
260 | 261 | ||
261 | vnet_hdr_to_sg(sg, skb); | 262 | vnet_hdr_to_sg(sg, skb); |