aboutsummaryrefslogtreecommitdiffstats
path: root/net/dccp
diff options
context:
space:
mode:
authorJames Bottomley <jejb@mulgrave.il.steeleye.com>2006-11-22 13:06:44 -0500
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>2006-11-22 13:06:44 -0500
commit0bd2af46839ad6262d25714a6ec0365db9d6b98f (patch)
treedcced72d230d69fd0c5816ac6dd03ab84799a93e /net/dccp
parente138a5d2356729b8752e88520cc1525fae9794ac (diff)
parentf26b90440cd74c78fe10c9bd5160809704a9627c (diff)
Merge ../scsi-rc-fixes-2.6
Diffstat (limited to 'net/dccp')
-rw-r--r--net/dccp/Kconfig6
-rw-r--r--net/dccp/ackvec.c12
-rw-r--r--net/dccp/ackvec.h3
-rw-r--r--net/dccp/ccids/Kconfig17
-rw-r--r--net/dccp/ccids/ccid2.c20
-rw-r--r--net/dccp/ccids/ccid3.c3
-rw-r--r--net/dccp/dccp.h2
-rw-r--r--net/dccp/input.c4
-rw-r--r--net/dccp/ipv4.c14
-rw-r--r--net/dccp/ipv6.c22
-rw-r--r--net/dccp/options.c2
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)"
4config IP_DCCP 4config 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 */
229int dccp_ackvec_add(struct dccp_ackvec *av, const struct sock *sk, 229int 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
452static struct request_sock_ops dccp_request_sock_ops;
453
452int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb) 454int 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
982do_time_wait: 984do_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
673static int dccp_v6_conn_request(struct sock *sk, struct sk_buff *skb) 673static 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
1026reset: 1032reset:
@@ -1109,7 +1115,7 @@ discard_and_relse:
1109 goto discard_it; 1115 goto discard_it;
1110 1116
1111do_time_wait: 1117do_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