Thread (7 messages) 7 messages, 4 authors, 2006-06-30

Re: [PATCH 2.6.17] support for TSO over IPv6

From: Herbert Xu <herbert@gondor.apana.org.au>
Date: 2006-06-29 23:33:48

Ananda Raju [off-list ref] wrote:
       This patch enables TSO over IPv6. Currently Linux network stacks
       restricts TSO over IPv6 by clearing of the NETIF_F_TSO bit from
       "dev->features". This patch will remove this restriction.
Thanks, looks good over all.
 
       SKB_GSO_TCPV4 renamed to SKB_GSO_TCP to make it generic GSO packet.
       SKB_GSO_UDPV4 renamed to SKB_GSO_UDP as UFO is not a IPv4 feature.
       UFO is supported over IPv6 also
This bit is wrong though.  TCPv4 and TCPv6 packets can't share the same
GSO feature bit.  The reason is that GSO/TSO is no longer just activated
by dev->features.  Bridges can forward GSO/TSO packets through at any time.
This is why it is crucial that each packet specficies exactly the features
that it requires from the hardware.

For UFO, it's OK to have just SKB_GSO_UDP since IIRC your card is the only
one that supports it and it supports both protocols anyway.
quoted hunk ↗ jump to hunk
diff -upNr netdev.org/include/linux/skbuff.h netdev.ipv6_tso/include/linux/skbuff.h
--- netdev.org/include/linux/skbuff.h   2006-06-27 07:30:36.000000000 -0700
+++ netdev.ipv6_tso/include/linux/skbuff.h      2006-06-27 07:38:48.000000000 -0700
@@ -170,8 +170,9 @@ enum {
};

enum {
-       SKB_GSO_TCPV4 = 1 << 0,
-       SKB_GSO_UDPV4 = 1 << 1,
+       SKB_GSO_TCP = 1 << 0,
+       SKB_GSO_UDP = 1 << 1,
+       SKB_GSO_TCPV6 = 1 << 2,
};
BTW, you should rediff against Dave's current tree which has a few
extra bits there.

You should also leave TCPV4 as is and just add the TCPV6 bit.
 
quoted hunk ↗ jump to hunk
diff -upNr netdev.org/net/ipv4/tcp_output.c netdev.ipv6_tso/net/ipv4/tcp_output.c
--- netdev.org/net/ipv4/tcp_output.c    2006-06-27 07:30:36.000000000 -0700
+++ netdev.ipv6_tso/net/ipv4/tcp_output.c       2006-06-27 07:38:48.000000000 -0700
@@ -525,7 +525,7 @@ static void tcp_set_skb_tso_segs(struct 
               factor /= mss_now;
               skb_shinfo(skb)->gso_segs = factor;
               skb_shinfo(skb)->gso_size = mss_now;
-               skb_shinfo(skb)->gso_type = SKB_GSO_TCPV4;
+               skb_shinfo(skb)->gso_type = SKB_GSO_TCP;
You need to set SKB_GSO_TCPV6 for IPv6 packets here.

Cheers,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} [off-list ref]
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help