diff options
| author | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-11-22 13:06:44 -0500 |
|---|---|---|
| committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-11-22 13:06:44 -0500 |
| commit | 0bd2af46839ad6262d25714a6ec0365db9d6b98f (patch) | |
| tree | dcced72d230d69fd0c5816ac6dd03ab84799a93e /net/dccp | |
| parent | e138a5d2356729b8752e88520cc1525fae9794ac (diff) | |
| parent | f26b90440cd74c78fe10c9bd5160809704a9627c (diff) | |
Merge ../scsi-rc-fixes-2.6
Diffstat (limited to 'net/dccp')
| -rw-r--r-- | net/dccp/Kconfig | 6 | ||||
| -rw-r--r-- | net/dccp/ackvec.c | 12 | ||||
| -rw-r--r-- | net/dccp/ackvec.h | 3 | ||||
| -rw-r--r-- | net/dccp/ccids/Kconfig | 17 | ||||
| -rw-r--r-- | net/dccp/ccids/ccid2.c | 20 | ||||
| -rw-r--r-- | net/dccp/ccids/ccid3.c | 3 | ||||
| -rw-r--r-- | net/dccp/dccp.h | 2 | ||||
| -rw-r--r-- | net/dccp/input.c | 4 | ||||
| -rw-r--r-- | net/dccp/ipv4.c | 14 | ||||
| -rw-r--r-- | net/dccp/ipv6.c | 22 | ||||
| -rw-r--r-- | net/dccp/options.c | 2 |
11 files changed, 56 insertions, 49 deletions
diff --git a/net/dccp/Kconfig b/net/dccp/Kconfig index e2a095d0fd80..ef8919cca74b 100644 --- a/net/dccp/Kconfig +++ b/net/dccp/Kconfig | |||
| @@ -4,15 +4,15 @@ menu "DCCP Configuration (EXPERIMENTAL)" | |||
| 4 | config IP_DCCP | 4 | config IP_DCCP |
| 5 | tristate "The DCCP Protocol (EXPERIMENTAL)" | 5 | tristate "The DCCP Protocol (EXPERIMENTAL)" |
| 6 | ---help--- | 6 | ---help--- |
| 7 | Datagram Congestion Control Protocol | 7 | Datagram Congestion Control Protocol (RFC 4340) |
| 8 | 8 | ||
| 9 | From draft-ietf-dccp-spec-11 <http://www.icir.org/kohler/dcp/draft-ietf-dccp-spec-11.txt>. | 9 | From http://www.ietf.org/rfc/rfc4340.txt: |
| 10 | 10 | ||
| 11 | The Datagram Congestion Control Protocol (DCCP) is a transport | 11 | The Datagram Congestion Control Protocol (DCCP) is a transport |
| 12 | protocol that implements bidirectional, unicast connections of | 12 | protocol that implements bidirectional, unicast connections of |
| 13 | congestion-controlled, unreliable datagrams. It should be suitable | 13 | congestion-controlled, unreliable datagrams. It should be suitable |
| 14 | for use by applications such as streaming media, Internet telephony, | 14 | for use by applications such as streaming media, Internet telephony, |
| 15 | and on-line games | 15 | and on-line games. |
| 16 | 16 | ||
| 17 | To compile this protocol support as a module, choose M here: the | 17 | To compile this protocol support as a module, choose M here: the |
| 18 | module will be called dccp. | 18 | module will be called dccp. |
diff --git a/net/dccp/ackvec.c b/net/dccp/ackvec.c index 4d176d33983f..f8208874ac7d 100644 --- a/net/dccp/ackvec.c +++ b/net/dccp/ackvec.c | |||
| @@ -113,7 +113,7 @@ int dccp_insert_option_ackvec(struct sock *sk, struct sk_buff *skb) | |||
| 113 | 113 | ||
| 114 | memcpy(to, from, len); | 114 | memcpy(to, from, len); |
| 115 | /* | 115 | /* |
| 116 | * From draft-ietf-dccp-spec-11.txt: | 116 | * From RFC 4340, A.2: |
| 117 | * | 117 | * |
| 118 | * For each acknowledgement it sends, the HC-Receiver will add an | 118 | * For each acknowledgement it sends, the HC-Receiver will add an |
| 119 | * acknowledgement record. ack_seqno will equal the HC-Receiver | 119 | * acknowledgement record. ack_seqno will equal the HC-Receiver |
| @@ -224,7 +224,7 @@ static inline int dccp_ackvec_set_buf_head_state(struct dccp_ackvec *av, | |||
| 224 | } | 224 | } |
| 225 | 225 | ||
| 226 | /* | 226 | /* |
| 227 | * Implements the draft-ietf-dccp-spec-11.txt Appendix A | 227 | * Implements the RFC 4340, Appendix A |
| 228 | */ | 228 | */ |
| 229 | int dccp_ackvec_add(struct dccp_ackvec *av, const struct sock *sk, | 229 | int dccp_ackvec_add(struct dccp_ackvec *av, const struct sock *sk, |
| 230 | const u64 ackno, const u8 state) | 230 | const u64 ackno, const u8 state) |
| @@ -237,7 +237,7 @@ int dccp_ackvec_add(struct dccp_ackvec *av, const struct sock *sk, | |||
| 237 | * We may well decide to do buffer compression, etc, but for now lets | 237 | * We may well decide to do buffer compression, etc, but for now lets |
| 238 | * just drop. | 238 | * just drop. |
| 239 | * | 239 | * |
| 240 | * From Appendix A: | 240 | * From Appendix A.1.1 (`New Packets'): |
| 241 | * | 241 | * |
| 242 | * Of course, the circular buffer may overflow, either when the | 242 | * Of course, the circular buffer may overflow, either when the |
| 243 | * HC-Sender is sending data at a very high rate, when the | 243 | * HC-Sender is sending data at a very high rate, when the |
| @@ -274,9 +274,9 @@ int dccp_ackvec_add(struct dccp_ackvec *av, const struct sock *sk, | |||
| 274 | /* | 274 | /* |
| 275 | * A.1.2. Old Packets | 275 | * A.1.2. Old Packets |
| 276 | * | 276 | * |
| 277 | * When a packet with Sequence Number S arrives, and | 277 | * When a packet with Sequence Number S <= buf_ackno |
| 278 | * S <= buf_ackno, the HC-Receiver will scan the table | 278 | * arrives, the HC-Receiver will scan the table for |
| 279 | * for the byte corresponding to S. (Indexing structures | 279 | * the byte corresponding to S. (Indexing structures |
| 280 | * could reduce the complexity of this scan.) | 280 | * could reduce the complexity of this scan.) |
| 281 | */ | 281 | */ |
| 282 | u64 delta = dccp_delta_seqno(ackno, av->dccpav_buf_ackno); | 282 | u64 delta = dccp_delta_seqno(ackno, av->dccpav_buf_ackno); |
diff --git a/net/dccp/ackvec.h b/net/dccp/ackvec.h index 2424effac7f6..cf8f20ce23a9 100644 --- a/net/dccp/ackvec.h +++ b/net/dccp/ackvec.h | |||
| @@ -28,8 +28,7 @@ | |||
| 28 | 28 | ||
| 29 | /** struct dccp_ackvec - ack vector | 29 | /** struct dccp_ackvec - ack vector |
| 30 | * | 30 | * |
| 31 | * This data structure is the one defined in the DCCP draft | 31 | * This data structure is the one defined in RFC 4340, Appendix A. |
| 32 | * Appendix A. | ||
| 33 | * | 32 | * |
| 34 | * @dccpav_buf_head - circular buffer head | 33 | * @dccpav_buf_head - circular buffer head |
| 35 | * @dccpav_buf_tail - circular buffer tail | 34 | * @dccpav_buf_tail - circular buffer tail |
diff --git a/net/dccp/ccids/Kconfig b/net/dccp/ccids/Kconfig index 32752f750447..8533dabfb9f8 100644 --- a/net/dccp/ccids/Kconfig +++ b/net/dccp/ccids/Kconfig | |||
| @@ -22,11 +22,11 @@ config IP_DCCP_CCID2 | |||
| 22 | for lost packets, would prefer CCID 2 to CCID 3. On-line games may | 22 | for lost packets, would prefer CCID 2 to CCID 3. On-line games may |
| 23 | also prefer CCID 2. | 23 | also prefer CCID 2. |
| 24 | 24 | ||
| 25 | CCID 2 is further described in: | 25 | CCID 2 is further described in RFC 4341, |
| 26 | http://www.icir.org/kohler/dccp/draft-ietf-dccp-ccid2-10.txt | 26 | http://www.ietf.org/rfc/rfc4341.txt |
| 27 | 27 | ||
| 28 | This text was extracted from: | 28 | This text was extracted from RFC 4340 (sec. 10.1), |
| 29 | http://www.icir.org/kohler/dccp/draft-ietf-dccp-spec-13.txt | 29 | http://www.ietf.org/rfc/rfc4340.txt |
| 30 | 30 | ||
| 31 | If in doubt, say M. | 31 | If in doubt, say M. |
| 32 | 32 | ||
| @@ -53,15 +53,14 @@ config IP_DCCP_CCID3 | |||
| 53 | suitable than CCID 2 for applications such streaming media where a | 53 | suitable than CCID 2 for applications such streaming media where a |
| 54 | relatively smooth sending rate is of importance. | 54 | relatively smooth sending rate is of importance. |
| 55 | 55 | ||
| 56 | CCID 3 is further described in: | 56 | CCID 3 is further described in RFC 4342, |
| 57 | 57 | http://www.ietf.org/rfc/rfc4342.txt | |
| 58 | http://www.icir.org/kohler/dccp/draft-ietf-dccp-ccid3-11.txt. | ||
| 59 | 58 | ||
| 60 | The TFRC congestion control algorithms were initially described in | 59 | The TFRC congestion control algorithms were initially described in |
| 61 | RFC 3448. | 60 | RFC 3448. |
| 62 | 61 | ||
| 63 | This text was extracted from: | 62 | This text was extracted from RFC 4340 (sec. 10.2), |
| 64 | http://www.icir.org/kohler/dccp/draft-ietf-dccp-spec-13.txt | 63 | http://www.ietf.org/rfc/rfc4340.txt |
| 65 | 64 | ||
| 66 | If in doubt, say M. | 65 | If in doubt, say M. |
| 67 | 66 | ||
diff --git a/net/dccp/ccids/ccid2.c b/net/dccp/ccids/ccid2.c index 2efb505aeb35..162032baeac0 100644 --- a/net/dccp/ccids/ccid2.c +++ b/net/dccp/ccids/ccid2.c | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | */ | 23 | */ |
| 24 | 24 | ||
| 25 | /* | 25 | /* |
| 26 | * This implementation should follow: draft-ietf-dccp-ccid2-10.txt | 26 | * This implementation should follow RFC 4341 |
| 27 | * | 27 | * |
| 28 | * BUGS: | 28 | * BUGS: |
| 29 | * - sequence number wrapping | 29 | * - sequence number wrapping |
| @@ -352,14 +352,14 @@ static void ccid2_hc_tx_packet_sent(struct sock *sk, int more, int len) | |||
| 352 | 352 | ||
| 353 | #ifdef CONFIG_IP_DCCP_CCID2_DEBUG | 353 | #ifdef CONFIG_IP_DCCP_CCID2_DEBUG |
| 354 | ccid2_pr_debug("pipe=%d\n", hctx->ccid2hctx_pipe); | 354 | ccid2_pr_debug("pipe=%d\n", hctx->ccid2hctx_pipe); |
| 355 | ccid2_pr_debug("Sent: seq=%llu\n", seq); | 355 | ccid2_pr_debug("Sent: seq=%llu\n", (unsigned long long)seq); |
| 356 | do { | 356 | do { |
| 357 | struct ccid2_seq *seqp = hctx->ccid2hctx_seqt; | 357 | struct ccid2_seq *seqp = hctx->ccid2hctx_seqt; |
| 358 | 358 | ||
| 359 | while (seqp != hctx->ccid2hctx_seqh) { | 359 | while (seqp != hctx->ccid2hctx_seqh) { |
| 360 | ccid2_pr_debug("out seq=%llu acked=%d time=%lu\n", | 360 | ccid2_pr_debug("out seq=%llu acked=%d time=%lu\n", |
| 361 | seqp->ccid2s_seq, seqp->ccid2s_acked, | 361 | (unsigned long long)seqp->ccid2s_seq, |
| 362 | seqp->ccid2s_sent); | 362 | seqp->ccid2s_acked, seqp->ccid2s_sent); |
| 363 | seqp = seqp->ccid2s_next; | 363 | seqp = seqp->ccid2s_next; |
| 364 | } | 364 | } |
| 365 | } while (0); | 365 | } while (0); |
| @@ -480,7 +480,8 @@ static inline void ccid2_new_ack(struct sock *sk, | |||
| 480 | /* first measurement */ | 480 | /* first measurement */ |
| 481 | if (hctx->ccid2hctx_srtt == -1) { | 481 | if (hctx->ccid2hctx_srtt == -1) { |
| 482 | ccid2_pr_debug("R: %lu Time=%lu seq=%llu\n", | 482 | ccid2_pr_debug("R: %lu Time=%lu seq=%llu\n", |
| 483 | r, jiffies, seqp->ccid2s_seq); | 483 | r, jiffies, |
| 484 | (unsigned long long)seqp->ccid2s_seq); | ||
| 484 | ccid2_change_srtt(hctx, r); | 485 | ccid2_change_srtt(hctx, r); |
| 485 | hctx->ccid2hctx_rttvar = r >> 1; | 486 | hctx->ccid2hctx_rttvar = r >> 1; |
| 486 | } else { | 487 | } else { |
| @@ -636,8 +637,9 @@ static void ccid2_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb) | |||
| 636 | u64 ackno_end_rl; | 637 | u64 ackno_end_rl; |
| 637 | 638 | ||
| 638 | dccp_set_seqno(&ackno_end_rl, ackno - rl); | 639 | dccp_set_seqno(&ackno_end_rl, ackno - rl); |
| 639 | ccid2_pr_debug("ackvec start:%llu end:%llu\n", ackno, | 640 | ccid2_pr_debug("ackvec start:%llu end:%llu\n", |
| 640 | ackno_end_rl); | 641 | (unsigned long long)ackno, |
| 642 | (unsigned long long)ackno_end_rl); | ||
| 641 | /* if the seqno we are analyzing is larger than the | 643 | /* if the seqno we are analyzing is larger than the |
| 642 | * current ackno, then move towards the tail of our | 644 | * current ackno, then move towards the tail of our |
| 643 | * seqnos. | 645 | * seqnos. |
| @@ -672,7 +674,7 @@ static void ccid2_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb) | |||
| 672 | 674 | ||
| 673 | seqp->ccid2s_acked = 1; | 675 | seqp->ccid2s_acked = 1; |
| 674 | ccid2_pr_debug("Got ack for %llu\n", | 676 | ccid2_pr_debug("Got ack for %llu\n", |
| 675 | seqp->ccid2s_seq); | 677 | (unsigned long long)seqp->ccid2s_seq); |
| 676 | ccid2_hc_tx_dec_pipe(sk); | 678 | ccid2_hc_tx_dec_pipe(sk); |
| 677 | } | 679 | } |
| 678 | if (seqp == hctx->ccid2hctx_seqt) { | 680 | if (seqp == hctx->ccid2hctx_seqt) { |
| @@ -718,7 +720,7 @@ static void ccid2_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb) | |||
| 718 | while (1) { | 720 | while (1) { |
| 719 | if (!seqp->ccid2s_acked) { | 721 | if (!seqp->ccid2s_acked) { |
| 720 | ccid2_pr_debug("Packet lost: %llu\n", | 722 | ccid2_pr_debug("Packet lost: %llu\n", |
| 721 | seqp->ccid2s_seq); | 723 | (unsigned long long)seqp->ccid2s_seq); |
| 722 | /* XXX need to traverse from tail -> head in | 724 | /* XXX need to traverse from tail -> head in |
| 723 | * order to detect multiple congestion events in | 725 | * order to detect multiple congestion events in |
| 724 | * one ack vector. | 726 | * one ack vector. |
diff --git a/net/dccp/ccids/ccid3.c b/net/dccp/ccids/ccid3.c index 67d2dc0e7c67..cec23ad286de 100644 --- a/net/dccp/ccids/ccid3.c +++ b/net/dccp/ccids/ccid3.c | |||
| @@ -379,8 +379,7 @@ static void ccid3_hc_tx_packet_sent(struct sock *sk, int more, int len) | |||
| 379 | packet->dccphtx_seqno = dp->dccps_gss; | 379 | packet->dccphtx_seqno = dp->dccps_gss; |
| 380 | /* | 380 | /* |
| 381 | * Check if win_count have changed | 381 | * Check if win_count have changed |
| 382 | * Algorithm in "8.1. Window Counter Valuer" in | 382 | * Algorithm in "8.1. Window Counter Value" in RFC 4342. |
| 383 | * draft-ietf-dccp-ccid3-11.txt | ||
| 384 | */ | 383 | */ |
| 385 | quarter_rtt = timeval_delta(&now, &hctx->ccid3hctx_t_last_win_count); | 384 | quarter_rtt = timeval_delta(&now, &hctx->ccid3hctx_t_last_win_count); |
| 386 | if (likely(hctx->ccid3hctx_rtt > 8)) | 385 | if (likely(hctx->ccid3hctx_rtt > 8)) |
diff --git a/net/dccp/dccp.h b/net/dccp/dccp.h index 0a21be437ed3..272e8584564e 100644 --- a/net/dccp/dccp.h +++ b/net/dccp/dccp.h | |||
| @@ -50,7 +50,7 @@ extern void dccp_time_wait(struct sock *sk, int state, int timeo); | |||
| 50 | #define DCCP_TIMEWAIT_LEN (60 * HZ) /* how long to wait to destroy TIME-WAIT | 50 | #define DCCP_TIMEWAIT_LEN (60 * HZ) /* how long to wait to destroy TIME-WAIT |
| 51 | * state, about 60 seconds */ | 51 | * state, about 60 seconds */ |
| 52 | 52 | ||
| 53 | /* draft-ietf-dccp-spec-11.txt initial RTO value */ | 53 | /* RFC 1122, 4.2.3.1 initial RTO value */ |
| 54 | #define DCCP_TIMEOUT_INIT ((unsigned)(3 * HZ)) | 54 | #define DCCP_TIMEOUT_INIT ((unsigned)(3 * HZ)) |
| 55 | 55 | ||
| 56 | /* Maximal interval between probes for local resources. */ | 56 | /* Maximal interval between probes for local resources. */ |
diff --git a/net/dccp/input.c b/net/dccp/input.c index 7f9dc6ac58c9..1d24881ac0ab 100644 --- a/net/dccp/input.c +++ b/net/dccp/input.c | |||
| @@ -216,11 +216,11 @@ send_sync: | |||
| 216 | dccp_send_sync(sk, DCCP_SKB_CB(skb)->dccpd_seq, | 216 | dccp_send_sync(sk, DCCP_SKB_CB(skb)->dccpd_seq, |
| 217 | DCCP_PKT_SYNCACK); | 217 | DCCP_PKT_SYNCACK); |
| 218 | /* | 218 | /* |
| 219 | * From the draft: | 219 | * From RFC 4340, sec. 5.7 |
| 220 | * | 220 | * |
| 221 | * As with DCCP-Ack packets, DCCP-Sync and DCCP-SyncAck packets | 221 | * As with DCCP-Ack packets, DCCP-Sync and DCCP-SyncAck packets |
| 222 | * MAY have non-zero-length application data areas, whose | 222 | * MAY have non-zero-length application data areas, whose |
| 223 | * contents * receivers MUST ignore. | 223 | * contents receivers MUST ignore. |
| 224 | */ | 224 | */ |
| 225 | goto discard; | 225 | goto discard; |
| 226 | } | 226 | } |
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c index bf692c1c116f..e08e7688a263 100644 --- a/net/dccp/ipv4.c +++ b/net/dccp/ipv4.c | |||
| @@ -183,7 +183,7 @@ static inline void dccp_do_pmtu_discovery(struct sock *sk, | |||
| 183 | dccp_sync_mss(sk, mtu); | 183 | dccp_sync_mss(sk, mtu); |
| 184 | 184 | ||
| 185 | /* | 185 | /* |
| 186 | * From: draft-ietf-dccp-spec-11.txt | 186 | * From RFC 4340, sec. 14.1: |
| 187 | * | 187 | * |
| 188 | * DCCP-Sync packets are the best choice for upward | 188 | * DCCP-Sync packets are the best choice for upward |
| 189 | * probing, since DCCP-Sync probes do not risk application | 189 | * probing, since DCCP-Sync probes do not risk application |
| @@ -311,7 +311,7 @@ static void dccp_v4_err(struct sk_buff *skb, u32 info) | |||
| 311 | } | 311 | } |
| 312 | 312 | ||
| 313 | if (sk->sk_state == DCCP_TIME_WAIT) { | 313 | if (sk->sk_state == DCCP_TIME_WAIT) { |
| 314 | inet_twsk_put((struct inet_timewait_sock *)sk); | 314 | inet_twsk_put(inet_twsk(sk)); |
| 315 | return; | 315 | return; |
| 316 | } | 316 | } |
| 317 | 317 | ||
| @@ -449,6 +449,8 @@ static inline u64 dccp_v4_init_sequence(const struct sock *sk, | |||
| 449 | dccp_hdr(skb)->dccph_sport); | 449 | dccp_hdr(skb)->dccph_sport); |
| 450 | } | 450 | } |
| 451 | 451 | ||
| 452 | static struct request_sock_ops dccp_request_sock_ops; | ||
| 453 | |||
| 452 | int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb) | 454 | int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb) |
| 453 | { | 455 | { |
| 454 | struct inet_request_sock *ireq; | 456 | struct inet_request_sock *ireq; |
| @@ -489,7 +491,7 @@ int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb) | |||
| 489 | if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1) | 491 | if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1) |
| 490 | goto drop; | 492 | goto drop; |
| 491 | 493 | ||
| 492 | req = reqsk_alloc(sk->sk_prot->rsk_prot); | 494 | req = reqsk_alloc(&dccp_request_sock_ops); |
| 493 | if (req == NULL) | 495 | if (req == NULL) |
| 494 | goto drop; | 496 | goto drop; |
| 495 | 497 | ||
| @@ -614,7 +616,7 @@ static struct sock *dccp_v4_hnd_req(struct sock *sk, struct sk_buff *skb) | |||
| 614 | bh_lock_sock(nsk); | 616 | bh_lock_sock(nsk); |
| 615 | return nsk; | 617 | return nsk; |
| 616 | } | 618 | } |
| 617 | inet_twsk_put((struct inet_timewait_sock *)nsk); | 619 | inet_twsk_put(inet_twsk(nsk)); |
| 618 | return NULL; | 620 | return NULL; |
| 619 | } | 621 | } |
| 620 | 622 | ||
| @@ -731,7 +733,7 @@ static void dccp_v4_ctl_send_reset(struct sk_buff *rxskb) | |||
| 731 | dccp_hdr_reset(skb)->dccph_reset_code = | 733 | dccp_hdr_reset(skb)->dccph_reset_code = |
| 732 | DCCP_SKB_CB(rxskb)->dccpd_reset_code; | 734 | DCCP_SKB_CB(rxskb)->dccpd_reset_code; |
| 733 | 735 | ||
| 734 | /* See "8.3.1. Abnormal Termination" in draft-ietf-dccp-spec-11 */ | 736 | /* See "8.3.1. Abnormal Termination" in RFC 4340 */ |
| 735 | seqno = 0; | 737 | seqno = 0; |
| 736 | if (DCCP_SKB_CB(rxskb)->dccpd_ack_seq != DCCP_PKT_WITHOUT_ACK_SEQ) | 738 | if (DCCP_SKB_CB(rxskb)->dccpd_ack_seq != DCCP_PKT_WITHOUT_ACK_SEQ) |
| 737 | dccp_set_seqno(&seqno, DCCP_SKB_CB(rxskb)->dccpd_ack_seq + 1); | 739 | dccp_set_seqno(&seqno, DCCP_SKB_CB(rxskb)->dccpd_ack_seq + 1); |
| @@ -980,7 +982,7 @@ discard_and_relse: | |||
| 980 | goto discard_it; | 982 | goto discard_it; |
| 981 | 983 | ||
| 982 | do_time_wait: | 984 | do_time_wait: |
| 983 | inet_twsk_put((struct inet_timewait_sock *)sk); | 985 | inet_twsk_put(inet_twsk(sk)); |
| 984 | goto no_dccp_socket; | 986 | goto no_dccp_socket; |
| 985 | } | 987 | } |
| 986 | 988 | ||
diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c index 7a47399cf31f..fc4242c0767c 100644 --- a/net/dccp/ipv6.c +++ b/net/dccp/ipv6.c | |||
| @@ -277,7 +277,7 @@ static void dccp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, | |||
| 277 | __u64 seq; | 277 | __u64 seq; |
| 278 | 278 | ||
| 279 | sk = inet6_lookup(&dccp_hashinfo, &hdr->daddr, dh->dccph_dport, | 279 | sk = inet6_lookup(&dccp_hashinfo, &hdr->daddr, dh->dccph_dport, |
| 280 | &hdr->saddr, dh->dccph_sport, skb->dev->ifindex); | 280 | &hdr->saddr, dh->dccph_sport, inet6_iif(skb)); |
| 281 | 281 | ||
| 282 | if (sk == NULL) { | 282 | if (sk == NULL) { |
| 283 | ICMP6_INC_STATS_BH(__in6_dev_get(skb->dev), ICMP6_MIB_INERRORS); | 283 | ICMP6_INC_STATS_BH(__in6_dev_get(skb->dev), ICMP6_MIB_INERRORS); |
| @@ -285,7 +285,7 @@ static void dccp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, | |||
| 285 | } | 285 | } |
| 286 | 286 | ||
| 287 | if (sk->sk_state == DCCP_TIME_WAIT) { | 287 | if (sk->sk_state == DCCP_TIME_WAIT) { |
| 288 | inet_twsk_put((struct inet_timewait_sock *)sk); | 288 | inet_twsk_put(inet_twsk(sk)); |
| 289 | return; | 289 | return; |
| 290 | } | 290 | } |
| 291 | 291 | ||
| @@ -550,7 +550,7 @@ static void dccp_v6_ctl_send_reset(struct sk_buff *rxskb) | |||
| 550 | dccp_hdr_reset(skb)->dccph_reset_code = | 550 | dccp_hdr_reset(skb)->dccph_reset_code = |
| 551 | DCCP_SKB_CB(rxskb)->dccpd_reset_code; | 551 | DCCP_SKB_CB(rxskb)->dccpd_reset_code; |
| 552 | 552 | ||
| 553 | /* See "8.3.1. Abnormal Termination" in draft-ietf-dccp-spec-11 */ | 553 | /* See "8.3.1. Abnormal Termination" in RFC 4340 */ |
| 554 | seqno = 0; | 554 | seqno = 0; |
| 555 | if (DCCP_SKB_CB(rxskb)->dccpd_ack_seq != DCCP_PKT_WITHOUT_ACK_SEQ) | 555 | if (DCCP_SKB_CB(rxskb)->dccpd_ack_seq != DCCP_PKT_WITHOUT_ACK_SEQ) |
| 556 | dccp_set_seqno(&seqno, DCCP_SKB_CB(rxskb)->dccpd_ack_seq + 1); | 556 | dccp_set_seqno(&seqno, DCCP_SKB_CB(rxskb)->dccpd_ack_seq + 1); |
| @@ -663,7 +663,7 @@ static struct sock *dccp_v6_hnd_req(struct sock *sk,struct sk_buff *skb) | |||
| 663 | bh_lock_sock(nsk); | 663 | bh_lock_sock(nsk); |
| 664 | return nsk; | 664 | return nsk; |
| 665 | } | 665 | } |
| 666 | inet_twsk_put((struct inet_timewait_sock *)nsk); | 666 | inet_twsk_put(inet_twsk(nsk)); |
| 667 | return NULL; | 667 | return NULL; |
| 668 | } | 668 | } |
| 669 | 669 | ||
| @@ -672,7 +672,6 @@ static struct sock *dccp_v6_hnd_req(struct sock *sk,struct sk_buff *skb) | |||
| 672 | 672 | ||
| 673 | static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb) | 673 | static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb) |
| 674 | { | 674 | { |
| 675 | struct inet_request_sock *ireq; | ||
| 676 | struct dccp_sock dp; | 675 | struct dccp_sock dp; |
| 677 | struct request_sock *req; | 676 | struct request_sock *req; |
| 678 | struct dccp_request_sock *dreq; | 677 | struct dccp_request_sock *dreq; |
| @@ -701,7 +700,7 @@ static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb) | |||
| 701 | if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1) | 700 | if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1) |
| 702 | goto drop; | 701 | goto drop; |
| 703 | 702 | ||
| 704 | req = inet6_reqsk_alloc(sk->sk_prot->rsk_prot); | 703 | req = inet6_reqsk_alloc(&dccp6_request_sock_ops); |
| 705 | if (req == NULL) | 704 | if (req == NULL) |
| 706 | goto drop; | 705 | goto drop; |
| 707 | 706 | ||
| @@ -713,7 +712,6 @@ static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb) | |||
| 713 | goto drop_and_free; | 712 | goto drop_and_free; |
| 714 | 713 | ||
| 715 | ireq6 = inet6_rsk(req); | 714 | ireq6 = inet6_rsk(req); |
| 716 | ireq = inet_rsk(req); | ||
| 717 | ipv6_addr_copy(&ireq6->rmt_addr, &skb->nh.ipv6h->saddr); | 715 | ipv6_addr_copy(&ireq6->rmt_addr, &skb->nh.ipv6h->saddr); |
| 718 | ipv6_addr_copy(&ireq6->loc_addr, &skb->nh.ipv6h->daddr); | 716 | ipv6_addr_copy(&ireq6->loc_addr, &skb->nh.ipv6h->daddr); |
| 719 | req->rcv_wnd = dccp_feat_default_sequence_window; | 717 | req->rcv_wnd = dccp_feat_default_sequence_window; |
| @@ -997,6 +995,10 @@ static int dccp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) | |||
| 997 | if (sk->sk_state == DCCP_OPEN) { /* Fast path */ | 995 | if (sk->sk_state == DCCP_OPEN) { /* Fast path */ |
| 998 | if (dccp_rcv_established(sk, skb, dccp_hdr(skb), skb->len)) | 996 | if (dccp_rcv_established(sk, skb, dccp_hdr(skb), skb->len)) |
| 999 | goto reset; | 997 | goto reset; |
| 998 | if (opt_skb) { | ||
| 999 | /* This is where we would goto ipv6_pktoptions. */ | ||
| 1000 | __kfree_skb(opt_skb); | ||
| 1001 | } | ||
| 1000 | return 0; | 1002 | return 0; |
| 1001 | } | 1003 | } |
| 1002 | 1004 | ||
| @@ -1021,6 +1023,10 @@ static int dccp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) | |||
| 1021 | 1023 | ||
| 1022 | if (dccp_rcv_state_process(sk, skb, dccp_hdr(skb), skb->len)) | 1024 | if (dccp_rcv_state_process(sk, skb, dccp_hdr(skb), skb->len)) |
| 1023 | goto reset; | 1025 | goto reset; |
| 1026 | if (opt_skb) { | ||
| 1027 | /* This is where we would goto ipv6_pktoptions. */ | ||
| 1028 | __kfree_skb(opt_skb); | ||
| 1029 | } | ||
| 1024 | return 0; | 1030 | return 0; |
| 1025 | 1031 | ||
| 1026 | reset: | 1032 | reset: |
| @@ -1109,7 +1115,7 @@ discard_and_relse: | |||
| 1109 | goto discard_it; | 1115 | goto discard_it; |
| 1110 | 1116 | ||
| 1111 | do_time_wait: | 1117 | do_time_wait: |
| 1112 | inet_twsk_put((struct inet_timewait_sock *)sk); | 1118 | inet_twsk_put(inet_twsk(sk)); |
| 1113 | goto no_dccp_socket; | 1119 | goto no_dccp_socket; |
| 1114 | } | 1120 | } |
| 1115 | 1121 | ||
diff --git a/net/dccp/options.c b/net/dccp/options.c index 07a34696ac97..fb0db1f7cd7b 100644 --- a/net/dccp/options.c +++ b/net/dccp/options.c | |||
| @@ -215,7 +215,7 @@ int dccp_parse_options(struct sock *sk, struct sk_buff *skb) | |||
| 215 | elapsed_time); | 215 | elapsed_time); |
| 216 | break; | 216 | break; |
| 217 | /* | 217 | /* |
| 218 | * From draft-ietf-dccp-spec-11.txt: | 218 | * From RFC 4340, sec. 10.3: |
| 219 | * | 219 | * |
| 220 | * Option numbers 128 through 191 are for | 220 | * Option numbers 128 through 191 are for |
| 221 | * options sent from the HC-Sender to the | 221 | * options sent from the HC-Sender to the |
