aboutsummaryrefslogtreecommitdiffstats
path: root/net/dccp
diff options
context:
space:
mode:
Diffstat (limited to 'net/dccp')
-rw-r--r--net/dccp/dccp.h16
-rw-r--r--net/dccp/feat.c13
-rw-r--r--net/dccp/minisocks.c11
-rw-r--r--net/dccp/proto.c2
4 files changed, 18 insertions, 24 deletions
diff --git a/net/dccp/dccp.h b/net/dccp/dccp.h
index 3fd16e82c003..6101ecdb85b6 100644
--- a/net/dccp/dccp.h
+++ b/net/dccp/dccp.h
@@ -409,23 +409,21 @@ static inline void dccp_hdr_set_ack(struct dccp_hdr_ack_bits *dhack,
409static inline void dccp_update_gsr(struct sock *sk, u64 seq) 409static inline void dccp_update_gsr(struct sock *sk, u64 seq)
410{ 410{
411 struct dccp_sock *dp = dccp_sk(sk); 411 struct dccp_sock *dp = dccp_sk(sk);
412 const struct dccp_minisock *dmsk = dccp_msk(sk);
413 412
414 dp->dccps_gsr = seq; 413 dp->dccps_gsr = seq;
415 dccp_set_seqno(&dp->dccps_swl, 414 /* Sequence validity window depends on remote Sequence Window (7.5.1) */
416 dp->dccps_gsr + 1 - (dmsk->dccpms_sequence_window / 4)); 415 dp->dccps_swl = SUB48(ADD48(dp->dccps_gsr, 1), dp->dccps_r_seq_win / 4);
417 dccp_set_seqno(&dp->dccps_swh, 416 dp->dccps_swh = ADD48(dp->dccps_gsr, (3 * dp->dccps_r_seq_win) / 4);
418 dp->dccps_gsr + (3 * dmsk->dccpms_sequence_window) / 4);
419} 417}
420 418
421static inline void dccp_update_gss(struct sock *sk, u64 seq) 419static inline void dccp_update_gss(struct sock *sk, u64 seq)
422{ 420{
423 struct dccp_sock *dp = dccp_sk(sk); 421 struct dccp_sock *dp = dccp_sk(sk);
424 422
425 dp->dccps_awh = dp->dccps_gss = seq; 423 dp->dccps_gss = seq;
426 dccp_set_seqno(&dp->dccps_awl, 424 /* Ack validity window depends on local Sequence Window value (7.5.1) */
427 (dp->dccps_gss - 425 dp->dccps_awl = SUB48(ADD48(dp->dccps_gss, 1), dp->dccps_l_seq_win);
428 dccp_msk(sk)->dccpms_sequence_window + 1)); 426 dp->dccps_awh = dp->dccps_gss;
429} 427}
430 428
431static inline int dccp_ack_pending(const struct sock *sk) 429static inline int dccp_ack_pending(const struct sock *sk)
diff --git a/net/dccp/feat.c b/net/dccp/feat.c
index 9a4938092783..843465999854 100644
--- a/net/dccp/feat.c
+++ b/net/dccp/feat.c
@@ -52,8 +52,17 @@ static int dccp_hdlr_ccid(struct sock *sk, u64 ccid, bool rx)
52 52
53static int dccp_hdlr_seq_win(struct sock *sk, u64 seq_win, bool rx) 53static int dccp_hdlr_seq_win(struct sock *sk, u64 seq_win, bool rx)
54{ 54{
55 if (!rx) 55 struct dccp_sock *dp = dccp_sk(sk);
56 dccp_msk(sk)->dccpms_sequence_window = seq_win; 56
57 if (rx) {
58 dp->dccps_r_seq_win = seq_win;
59 /* propagate changes to update SWL/SWH */
60 dccp_update_gsr(sk, dp->dccps_gsr);
61 } else {
62 dp->dccps_l_seq_win = seq_win;
63 /* propagate changes to update AWL */
64 dccp_update_gss(sk, dp->dccps_gss);
65 }
57 return 0; 66 return 0;
58} 67}
59 68
diff --git a/net/dccp/minisocks.c b/net/dccp/minisocks.c
index 0ebf8ebcf3de..0ecb19c5e8ce 100644
--- a/net/dccp/minisocks.c
+++ b/net/dccp/minisocks.c
@@ -42,11 +42,6 @@ struct inet_timewait_death_row dccp_death_row = {
42 42
43EXPORT_SYMBOL_GPL(dccp_death_row); 43EXPORT_SYMBOL_GPL(dccp_death_row);
44 44
45void dccp_minisock_init(struct dccp_minisock *dmsk)
46{
47 dmsk->dccpms_sequence_window = sysctl_dccp_feat_sequence_window;
48}
49
50void dccp_time_wait(struct sock *sk, int state, int timeo) 45void dccp_time_wait(struct sock *sk, int state, int timeo)
51{ 46{
52 struct inet_timewait_sock *tw = NULL; 47 struct inet_timewait_sock *tw = NULL;
@@ -110,7 +105,6 @@ struct sock *dccp_create_openreq_child(struct sock *sk,
110 struct dccp_request_sock *dreq = dccp_rsk(req); 105 struct dccp_request_sock *dreq = dccp_rsk(req);
111 struct inet_connection_sock *newicsk = inet_csk(newsk); 106 struct inet_connection_sock *newicsk = inet_csk(newsk);
112 struct dccp_sock *newdp = dccp_sk(newsk); 107 struct dccp_sock *newdp = dccp_sk(newsk);
113 struct dccp_minisock *newdmsk = dccp_msk(newsk);
114 108
115 newdp->dccps_role = DCCP_ROLE_SERVER; 109 newdp->dccps_role = DCCP_ROLE_SERVER;
116 newdp->dccps_hc_rx_ackvec = NULL; 110 newdp->dccps_hc_rx_ackvec = NULL;
@@ -128,10 +122,6 @@ struct sock *dccp_create_openreq_child(struct sock *sk,
128 * Initialize S.GAR := S.ISS 122 * Initialize S.GAR := S.ISS
129 * Set S.ISR, S.GSR, S.SWL, S.SWH from packet or Init Cookies 123 * Set S.ISR, S.GSR, S.SWL, S.SWH from packet or Init Cookies
130 */ 124 */
131
132 /* See dccp_v4_conn_request */
133 newdmsk->dccpms_sequence_window = req->rcv_wnd;
134
135 newdp->dccps_gar = newdp->dccps_iss = dreq->dreq_iss; 125 newdp->dccps_gar = newdp->dccps_iss = dreq->dreq_iss;
136 dccp_update_gss(newsk, dreq->dreq_iss); 126 dccp_update_gss(newsk, dreq->dreq_iss);
137 127
@@ -289,7 +279,6 @@ int dccp_reqsk_init(struct request_sock *req,
289 279
290 inet_rsk(req)->rmt_port = dccp_hdr(skb)->dccph_sport; 280 inet_rsk(req)->rmt_port = dccp_hdr(skb)->dccph_sport;
291 inet_rsk(req)->acked = 0; 281 inet_rsk(req)->acked = 0;
292 req->rcv_wnd = sysctl_dccp_feat_sequence_window;
293 dreq->dreq_timestamp_echo = 0; 282 dreq->dreq_timestamp_echo = 0;
294 283
295 /* inherit feature negotiation options from listening socket */ 284 /* inherit feature negotiation options from listening socket */
diff --git a/net/dccp/proto.c b/net/dccp/proto.c
index 775eaa3d0c49..392a5d822b33 100644
--- a/net/dccp/proto.c
+++ b/net/dccp/proto.c
@@ -180,8 +180,6 @@ int dccp_init_sock(struct sock *sk, const __u8 ctl_sock_initialized)
180 struct dccp_sock *dp = dccp_sk(sk); 180 struct dccp_sock *dp = dccp_sk(sk);
181 struct inet_connection_sock *icsk = inet_csk(sk); 181 struct inet_connection_sock *icsk = inet_csk(sk);
182 182
183 dccp_minisock_init(&dp->dccps_minisock);
184
185 icsk->icsk_rto = DCCP_TIMEOUT_INIT; 183 icsk->icsk_rto = DCCP_TIMEOUT_INIT;
186 icsk->icsk_syn_retries = sysctl_dccp_request_retries; 184 icsk->icsk_syn_retries = sysctl_dccp_request_retries;
187 sk->sk_state = DCCP_CLOSED; 185 sk->sk_state = DCCP_CLOSED;