aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/tcp.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net/tcp.h')
-rw-r--r--include/net/tcp.h23
1 files changed, 16 insertions, 7 deletions
diff --git a/include/net/tcp.h b/include/net/tcp.h
index c826ed7b007b..92faa6a7ea97 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -367,13 +367,6 @@ static inline void tcp_dec_quickack_mode(struct sock *sk,
367#define TCP_ECN_DEMAND_CWR 4 367#define TCP_ECN_DEMAND_CWR 4
368#define TCP_ECN_SEEN 8 368#define TCP_ECN_SEEN 8
369 369
370static __inline__ void
371TCP_ECN_create_request(struct request_sock *req, struct tcphdr *th)
372{
373 if (sysctl_tcp_ecn && th->ece && th->cwr)
374 inet_rsk(req)->ecn_ok = 1;
375}
376
377enum tcp_tw_status { 370enum tcp_tw_status {
378 TCP_TW_SUCCESS = 0, 371 TCP_TW_SUCCESS = 0,
379 TCP_TW_RST = 1, 372 TCP_TW_RST = 1,
@@ -671,6 +664,22 @@ struct tcp_skb_cb {
671 664
672#define TCP_SKB_CB(__skb) ((struct tcp_skb_cb *)&((__skb)->cb[0])) 665#define TCP_SKB_CB(__skb) ((struct tcp_skb_cb *)&((__skb)->cb[0]))
673 666
667/* RFC3168 : 6.1.1 SYN packets must not have ECT/ECN bits set
668 *
669 * If we receive a SYN packet with these bits set, it means a network is
670 * playing bad games with TOS bits. In order to avoid possible false congestion
671 * notifications, we disable TCP ECN negociation.
672 */
673static inline void
674TCP_ECN_create_request(struct request_sock *req, const struct sk_buff *skb)
675{
676 const struct tcphdr *th = tcp_hdr(skb);
677
678 if (sysctl_tcp_ecn && th->ece && th->cwr &&
679 INET_ECN_is_not_ect(TCP_SKB_CB(skb)->ip_dsfield))
680 inet_rsk(req)->ecn_ok = 1;
681}
682
674/* Due to TSO, an SKB can be composed of multiple actual 683/* Due to TSO, an SKB can be composed of multiple actual
675 * packets. To keep these tracked properly, we use this. 684 * packets. To keep these tracked properly, we use this.
676 */ 685 */