aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTravis Kemen <thepeople@openwrt.org>2011-05-08 17:08:06 +0000
committerTravis Kemen <thepeople@openwrt.org>2011-05-08 17:08:06 +0000
commitbc121d5706ca745b516cf481e45644c14920c54e (patch)
tree8c73992aa18cbe5aefcf6728dc6c93c4c8dca5df
parenteb4109ba7840525f7932b763cacef160d6cfb661 (diff)
downloadupstream-bc121d5706ca745b516cf481e45644c14920c54e.tar.gz
upstream-bc121d5706ca745b516cf481e45644c14920c54e.tar.bz2
upstream-bc121d5706ca745b516cf481e45644c14920c54e.zip
ipv6: restore correct ECN handling on TCP xmit Thanks Dave Taht
SVN-Revision: 26858
-rw-r--r--target/linux/generic/patches-2.6.37/110_fix_ecn_marking_ipv6.patch25
-rw-r--r--target/linux/generic/patches-2.6.38/110_fix_ecn_marking_ipv6.patch25
2 files changed, 50 insertions, 0 deletions
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
index 0000000000..442e5e3c32
--- /dev/null
+++ b/target/linux/generic/patches-2.6.37/110_fix_ecn_marking_ipv6.patch
@@ -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
index 0000000000..442e5e3c32
--- /dev/null
+++ b/target/linux/generic/patches-2.6.38/110_fix_ecn_marking_ipv6.patch
@@ -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); \