[PATCH] ipv6: restore correct ECN handling on TCP xmit
authorTravis Kemen <thepeople@openwrt.org>
Sun, 8 May 2011 17:08:06 +0000 (17:08 +0000)
committerTravis Kemen <thepeople@openwrt.org>
Sun, 8 May 2011 17:08:06 +0000 (17:08 +0000)
Thanks Dave Taht

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@26858 3c298f89-4303-0410-b956-a3cf2f4a3e73

target/linux/generic/patches-2.6.37/110_fix_ecn_marking_ipv6.patch [new file with mode: 0644]
target/linux/generic/patches-2.6.38/110_fix_ecn_marking_ipv6.patch [new file with mode: 0644]

diff --git a/target/linux/generic/patches-2.6.37/110_fix_ecn_marking_ipv6.patch b/target/linux/generic/patches-2.6.37/110_fix_ecn_marking_ipv6.patch
new file mode 100644 (file)
index 0000000..442e5e3
--- /dev/null
@@ -0,0 +1,25 @@
+--- a/include/net/inet_ecn.h
++++ b/include/net/inet_ecn.h
+@@ -38,9 +38,19 @@ static inline __u8 INET_ECN_encapsulate(__u8 outer, __u8 inner)
+       return outer;
+ }
+-#define       INET_ECN_xmit(sk) do { inet_sk(sk)->tos |= INET_ECN_ECT_0; } while (0)
+-#define       INET_ECN_dontxmit(sk) \
+-      do { inet_sk(sk)->tos &= ~INET_ECN_MASK; } while (0)
++static inline void INET_ECN_xmit(struct sock *sk)
++{
++      inet_sk(sk)->tos |= INET_ECN_ECT_0;
++      if (inet6_sk(sk) != NULL)
++              inet6_sk(sk)->tclass |= INET_ECN_ECT_0;
++}
++
++static inline void INET_ECN_dontxmit(struct sock *sk)
++{
++      inet_sk(sk)->tos &= ~INET_ECN_MASK;
++      if (inet6_sk(sk) != NULL)
++              inet6_sk(sk)->tclass &= ~INET_ECN_MASK;
++}
+ #define IP6_ECN_flow_init(label) do {         \
+       (label) &= ~htonl(INET_ECN_MASK << 20); \
diff --git a/target/linux/generic/patches-2.6.38/110_fix_ecn_marking_ipv6.patch b/target/linux/generic/patches-2.6.38/110_fix_ecn_marking_ipv6.patch
new file mode 100644 (file)
index 0000000..442e5e3
--- /dev/null
@@ -0,0 +1,25 @@
+--- a/include/net/inet_ecn.h
++++ b/include/net/inet_ecn.h
+@@ -38,9 +38,19 @@ static inline __u8 INET_ECN_encapsulate(__u8 outer, __u8 inner)
+       return outer;
+ }
+-#define       INET_ECN_xmit(sk) do { inet_sk(sk)->tos |= INET_ECN_ECT_0; } while (0)
+-#define       INET_ECN_dontxmit(sk) \
+-      do { inet_sk(sk)->tos &= ~INET_ECN_MASK; } while (0)
++static inline void INET_ECN_xmit(struct sock *sk)
++{
++      inet_sk(sk)->tos |= INET_ECN_ECT_0;
++      if (inet6_sk(sk) != NULL)
++              inet6_sk(sk)->tclass |= INET_ECN_ECT_0;
++}
++
++static inline void INET_ECN_dontxmit(struct sock *sk)
++{
++      inet_sk(sk)->tos &= ~INET_ECN_MASK;
++      if (inet6_sk(sk) != NULL)
++              inet6_sk(sk)->tclass &= ~INET_ECN_MASK;
++}
+ #define IP6_ECN_flow_init(label) do {         \
+       (label) &= ~htonl(INET_ECN_MASK << 20); \