aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/net/request_sock.h5
-rw-r--r--include/net/sock.h14
-rw-r--r--net/ipv4/syncookies.c4
-rw-r--r--net/ipv4/tcp_input.c2
-rw-r--r--net/ipv4/tcp_ipv4.c2
-rw-r--r--net/ipv4/tcp_minisocks.c18
-rw-r--r--net/ipv4/tcp_output.c2
-rw-r--r--net/ipv6/syncookies.c4
-rw-r--r--net/ipv6/tcp_ipv6.c2
9 files changed, 28 insertions, 25 deletions
diff --git a/include/net/request_sock.h b/include/net/request_sock.h
index 6b818b77d5e5..2e73748956d5 100644
--- a/include/net/request_sock.h
+++ b/include/net/request_sock.h
@@ -51,15 +51,14 @@ struct request_sock {
51#define rsk_refcnt __req_common.skc_refcnt 51#define rsk_refcnt __req_common.skc_refcnt
52#define rsk_hash __req_common.skc_hash 52#define rsk_hash __req_common.skc_hash
53#define rsk_listener __req_common.skc_listener 53#define rsk_listener __req_common.skc_listener
54#define rsk_window_clamp __req_common.skc_window_clamp
55#define rsk_rcv_wnd __req_common.skc_rcv_wnd
54 56
55 struct request_sock *dl_next; 57 struct request_sock *dl_next;
56 u16 mss; 58 u16 mss;
57 u8 num_retrans; /* number of retransmits */ 59 u8 num_retrans; /* number of retransmits */
58 u8 cookie_ts:1; /* syncookie: encode tcpopts in timestamp */ 60 u8 cookie_ts:1; /* syncookie: encode tcpopts in timestamp */
59 u8 num_timeout:7; /* number of timeouts */ 61 u8 num_timeout:7; /* number of timeouts */
60 /* The following two fields can be easily recomputed I think -AK */
61 u32 window_clamp; /* window clamp at creation time */
62 u32 rcv_wnd; /* rcv_wnd offered first time */
63 u32 ts_recent; 62 u32 ts_recent;
64 struct timer_list rsk_timer; 63 struct timer_list rsk_timer;
65 const struct request_sock_ops *rsk_ops; 64 const struct request_sock_ops *rsk_ops;
diff --git a/include/net/sock.h b/include/net/sock.h
index 65712409464b..19cfe1fc911c 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -226,11 +226,18 @@ struct sock_common {
226 struct hlist_nulls_node skc_nulls_node; 226 struct hlist_nulls_node skc_nulls_node;
227 }; 227 };
228 int skc_tx_queue_mapping; 228 int skc_tx_queue_mapping;
229 int skc_incoming_cpu; 229 union {
230 int skc_incoming_cpu;
231 u32 skc_rcv_wnd;
232 };
230 233
231 atomic_t skc_refcnt; 234 atomic_t skc_refcnt;
232 /* private: */ 235 /* private: */
233 int skc_dontcopy_end[0]; 236 int skc_dontcopy_end[0];
237 union {
238 u32 skc_rxhash;
239 u32 skc_window_clamp;
240 };
234 /* public: */ 241 /* public: */
235}; 242};
236 243
@@ -287,7 +294,6 @@ struct cg_proto;
287 * @sk_rcvlowat: %SO_RCVLOWAT setting 294 * @sk_rcvlowat: %SO_RCVLOWAT setting
288 * @sk_rcvtimeo: %SO_RCVTIMEO setting 295 * @sk_rcvtimeo: %SO_RCVTIMEO setting
289 * @sk_sndtimeo: %SO_SNDTIMEO setting 296 * @sk_sndtimeo: %SO_SNDTIMEO setting
290 * @sk_rxhash: flow hash received from netif layer
291 * @sk_txhash: computed flow hash for use on transmit 297 * @sk_txhash: computed flow hash for use on transmit
292 * @sk_filter: socket filtering instructions 298 * @sk_filter: socket filtering instructions
293 * @sk_timer: sock cleanup timer 299 * @sk_timer: sock cleanup timer
@@ -346,6 +352,7 @@ struct sock {
346#define sk_cookie __sk_common.skc_cookie 352#define sk_cookie __sk_common.skc_cookie
347#define sk_incoming_cpu __sk_common.skc_incoming_cpu 353#define sk_incoming_cpu __sk_common.skc_incoming_cpu
348#define sk_flags __sk_common.skc_flags 354#define sk_flags __sk_common.skc_flags
355#define sk_rxhash __sk_common.skc_rxhash
349 356
350 socket_lock_t sk_lock; 357 socket_lock_t sk_lock;
351 struct sk_buff_head sk_receive_queue; 358 struct sk_buff_head sk_receive_queue;
@@ -365,9 +372,6 @@ struct sock {
365 } sk_backlog; 372 } sk_backlog;
366#define sk_rmem_alloc sk_backlog.rmem_alloc 373#define sk_rmem_alloc sk_backlog.rmem_alloc
367 int sk_forward_alloc; 374 int sk_forward_alloc;
368#ifdef CONFIG_RPS
369 __u32 sk_rxhash;
370#endif
371 375
372 __u32 sk_txhash; 376 __u32 sk_txhash;
373#ifdef CONFIG_NET_RX_BUSY_POLL 377#ifdef CONFIG_NET_RX_BUSY_POLL
diff --git a/net/ipv4/syncookies.c b/net/ipv4/syncookies.c
index 2dbb11331f6c..4c0892badb8b 100644
--- a/net/ipv4/syncookies.c
+++ b/net/ipv4/syncookies.c
@@ -382,10 +382,10 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb)
382 } 382 }
383 383
384 /* Try to redo what tcp_v4_send_synack did. */ 384 /* Try to redo what tcp_v4_send_synack did. */
385 req->window_clamp = tp->window_clamp ? :dst_metric(&rt->dst, RTAX_WINDOW); 385 req->rsk_window_clamp = tp->window_clamp ? :dst_metric(&rt->dst, RTAX_WINDOW);
386 386
387 tcp_select_initial_window(tcp_full_space(sk), req->mss, 387 tcp_select_initial_window(tcp_full_space(sk), req->mss,
388 &req->rcv_wnd, &req->window_clamp, 388 &req->rsk_rcv_wnd, &req->rsk_window_clamp,
389 ireq->wscale_ok, &rcv_wscale, 389 ireq->wscale_ok, &rcv_wscale,
390 dst_metric(&rt->dst, RTAX_INITRWND)); 390 dst_metric(&rt->dst, RTAX_INITRWND));
391 391
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index ddadb318e850..3b35c3f4d268 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -6022,7 +6022,7 @@ static void tcp_openreq_init(struct request_sock *req,
6022{ 6022{
6023 struct inet_request_sock *ireq = inet_rsk(req); 6023 struct inet_request_sock *ireq = inet_rsk(req);
6024 6024
6025 req->rcv_wnd = 0; /* So that tcp_send_synack() knows! */ 6025 req->rsk_rcv_wnd = 0; /* So that tcp_send_synack() knows! */
6026 req->cookie_ts = 0; 6026 req->cookie_ts = 0;
6027 tcp_rsk(req)->rcv_isn = TCP_SKB_CB(skb)->seq; 6027 tcp_rsk(req)->rcv_isn = TCP_SKB_CB(skb)->seq;
6028 tcp_rsk(req)->rcv_nxt = TCP_SKB_CB(skb)->seq + 1; 6028 tcp_rsk(req)->rcv_nxt = TCP_SKB_CB(skb)->seq + 1;
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 34310748a365..ddb198392c7f 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -803,7 +803,7 @@ static void tcp_v4_reqsk_send_ack(const struct sock *sk, struct sk_buff *skb,
803 */ 803 */
804 tcp_v4_send_ack(skb, (sk->sk_state == TCP_LISTEN) ? 804 tcp_v4_send_ack(skb, (sk->sk_state == TCP_LISTEN) ?
805 tcp_rsk(req)->snt_isn + 1 : tcp_sk(sk)->snd_nxt, 805 tcp_rsk(req)->snt_isn + 1 : tcp_sk(sk)->snd_nxt,
806 tcp_rsk(req)->rcv_nxt, req->rcv_wnd, 806 tcp_rsk(req)->rcv_nxt, req->rsk_rcv_wnd,
807 tcp_time_stamp, 807 tcp_time_stamp,
808 req->ts_recent, 808 req->ts_recent,
809 0, 809 0,
diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c
index 1079e6ad77fe..41828bdc5d32 100644
--- a/net/ipv4/tcp_minisocks.c
+++ b/net/ipv4/tcp_minisocks.c
@@ -381,18 +381,18 @@ void tcp_openreq_init_rwin(struct request_sock *req,
381 381
382 window_clamp = READ_ONCE(tp->window_clamp); 382 window_clamp = READ_ONCE(tp->window_clamp);
383 /* Set this up on the first call only */ 383 /* Set this up on the first call only */
384 req->window_clamp = window_clamp ? : dst_metric(dst, RTAX_WINDOW); 384 req->rsk_window_clamp = window_clamp ? : dst_metric(dst, RTAX_WINDOW);
385 385
386 /* limit the window selection if the user enforce a smaller rx buffer */ 386 /* limit the window selection if the user enforce a smaller rx buffer */
387 if (sk_listener->sk_userlocks & SOCK_RCVBUF_LOCK && 387 if (sk_listener->sk_userlocks & SOCK_RCVBUF_LOCK &&
388 (req->window_clamp > full_space || req->window_clamp == 0)) 388 (req->rsk_window_clamp > full_space || req->rsk_window_clamp == 0))
389 req->window_clamp = full_space; 389 req->rsk_window_clamp = full_space;
390 390
391 /* tcp_full_space because it is guaranteed to be the first packet */ 391 /* tcp_full_space because it is guaranteed to be the first packet */
392 tcp_select_initial_window(full_space, 392 tcp_select_initial_window(full_space,
393 mss - (ireq->tstamp_ok ? TCPOLEN_TSTAMP_ALIGNED : 0), 393 mss - (ireq->tstamp_ok ? TCPOLEN_TSTAMP_ALIGNED : 0),
394 &req->rcv_wnd, 394 &req->rsk_rcv_wnd,
395 &req->window_clamp, 395 &req->rsk_window_clamp,
396 ireq->wscale_ok, 396 ireq->wscale_ok,
397 &rcv_wscale, 397 &rcv_wscale,
398 dst_metric(dst, RTAX_INITRWND)); 398 dst_metric(dst, RTAX_INITRWND));
@@ -512,9 +512,9 @@ struct sock *tcp_create_openreq_child(const struct sock *sk,
512 if (sysctl_tcp_fack) 512 if (sysctl_tcp_fack)
513 tcp_enable_fack(newtp); 513 tcp_enable_fack(newtp);
514 } 514 }
515 newtp->window_clamp = req->window_clamp; 515 newtp->window_clamp = req->rsk_window_clamp;
516 newtp->rcv_ssthresh = req->rcv_wnd; 516 newtp->rcv_ssthresh = req->rsk_rcv_wnd;
517 newtp->rcv_wnd = req->rcv_wnd; 517 newtp->rcv_wnd = req->rsk_rcv_wnd;
518 newtp->rx_opt.wscale_ok = ireq->wscale_ok; 518 newtp->rx_opt.wscale_ok = ireq->wscale_ok;
519 if (newtp->rx_opt.wscale_ok) { 519 if (newtp->rx_opt.wscale_ok) {
520 newtp->rx_opt.snd_wscale = ireq->snd_wscale; 520 newtp->rx_opt.snd_wscale = ireq->snd_wscale;
@@ -707,7 +707,7 @@ struct sock *tcp_check_req(struct sock *sk, struct sk_buff *skb,
707 /* RFC793: "first check sequence number". */ 707 /* RFC793: "first check sequence number". */
708 708
709 if (paws_reject || !tcp_in_window(TCP_SKB_CB(skb)->seq, TCP_SKB_CB(skb)->end_seq, 709 if (paws_reject || !tcp_in_window(TCP_SKB_CB(skb)->seq, TCP_SKB_CB(skb)->end_seq,
710 tcp_rsk(req)->rcv_nxt, tcp_rsk(req)->rcv_nxt + req->rcv_wnd)) { 710 tcp_rsk(req)->rcv_nxt, tcp_rsk(req)->rcv_nxt + req->rsk_rcv_wnd)) {
711 /* Out of window: send ACK and drop. */ 711 /* Out of window: send ACK and drop. */
712 if (!(flg & TCP_FLAG_RST)) 712 if (!(flg & TCP_FLAG_RST))
713 req->rsk_ops->send_ack(sk, skb, req); 713 req->rsk_ops->send_ack(sk, skb, req);
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 55ed3266b05f..6e79fcb0addb 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -3023,7 +3023,7 @@ struct sk_buff *tcp_make_synack(const struct sock *sk, struct dst_entry *dst,
3023 th->ack_seq = htonl(tcp_rsk(req)->rcv_nxt); 3023 th->ack_seq = htonl(tcp_rsk(req)->rcv_nxt);
3024 3024
3025 /* RFC1323: The window in SYN & SYN/ACK segments is never scaled. */ 3025 /* RFC1323: The window in SYN & SYN/ACK segments is never scaled. */
3026 th->window = htons(min(req->rcv_wnd, 65535U)); 3026 th->window = htons(min(req->rsk_rcv_wnd, 65535U));
3027 tcp_options_write((__be32 *)(th + 1), NULL, &opts); 3027 tcp_options_write((__be32 *)(th + 1), NULL, &opts);
3028 th->doff = (tcp_header_size >> 2); 3028 th->doff = (tcp_header_size >> 2);
3029 TCP_INC_STATS_BH(sock_net(sk), TCP_MIB_OUTSEGS); 3029 TCP_INC_STATS_BH(sock_net(sk), TCP_MIB_OUTSEGS);
diff --git a/net/ipv6/syncookies.c b/net/ipv6/syncookies.c
index f610b5310b17..bb8f2fa1c7fb 100644
--- a/net/ipv6/syncookies.c
+++ b/net/ipv6/syncookies.c
@@ -235,9 +235,9 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb)
235 goto out_free; 235 goto out_free;
236 } 236 }
237 237
238 req->window_clamp = tp->window_clamp ? :dst_metric(dst, RTAX_WINDOW); 238 req->rsk_window_clamp = tp->window_clamp ? :dst_metric(dst, RTAX_WINDOW);
239 tcp_select_initial_window(tcp_full_space(sk), req->mss, 239 tcp_select_initial_window(tcp_full_space(sk), req->mss,
240 &req->rcv_wnd, &req->window_clamp, 240 &req->rsk_rcv_wnd, &req->rsk_window_clamp,
241 ireq->wscale_ok, &rcv_wscale, 241 ireq->wscale_ok, &rcv_wscale,
242 dst_metric(dst, RTAX_INITRWND)); 242 dst_metric(dst, RTAX_INITRWND));
243 243
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index 33334f0c217d..2887c8474b65 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -931,7 +931,7 @@ static void tcp_v6_reqsk_send_ack(const struct sock *sk, struct sk_buff *skb,
931 */ 931 */
932 tcp_v6_send_ack(sk, skb, (sk->sk_state == TCP_LISTEN) ? 932 tcp_v6_send_ack(sk, skb, (sk->sk_state == TCP_LISTEN) ?
933 tcp_rsk(req)->snt_isn + 1 : tcp_sk(sk)->snd_nxt, 933 tcp_rsk(req)->snt_isn + 1 : tcp_sk(sk)->snd_nxt,
934 tcp_rsk(req)->rcv_nxt, req->rcv_wnd, 934 tcp_rsk(req)->rcv_nxt, req->rsk_rcv_wnd,
935 tcp_time_stamp, req->ts_recent, sk->sk_bound_dev_if, 935 tcp_time_stamp, req->ts_recent, sk->sk_bound_dev_if,
936 tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->daddr), 936 tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->daddr),
937 0, 0); 937 0, 0);