aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerrit Renker <gerrit@erg.abdn.ac.uk>2008-12-08 04:18:37 -0500
committerDavid S. Miller <davem@davemloft.net>2008-12-08 04:18:37 -0500
commit4098dce5be537a157eed4a326efd464109825b8b (patch)
treef7116e98853d805eb874c4f2345c3cce2acbfaa7
parent0049bab5e765aa74cf767a834fa336e19453fc5e (diff)
dccp: Remove manual influence on NDP Count feature
Updating the NDP count feature is handled automatically now: * for CCID-2 it is disabled, since the code does not use NDP counts; * for CCID-3 it is enabled, as NDP counts are used to determine loss lengths. Allowing the user to change NDP values leads to unpredictable and failing behaviour, since it is then possible to disable NDP counts even when they are needed (e.g. in CCID-3). This means that only those user settings are sensible that agree with the values for Send NDP Count implied by the choice of CCID. But those settings are already activated by the feature negotiation (CCID dependency tracking), hence this form of support is redundant. At startup the initialisation of the NDP count feature uses the default value of 0, which is done implicitly by the zeroing-out of the socket when it is allocated. If the choice of CCID or feature negotiation enables NDP count, this will then be updated via the NDP activation handler. Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk> Acked-by: Ian McDonald <ian.mcdonald@jandi.co.nz> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--Documentation/networking/dccp.txt3
-rw-r--r--include/linux/dccp.h4
-rw-r--r--net/dccp/dccp.h1
-rw-r--r--net/dccp/feat.c2
-rw-r--r--net/dccp/minisocks.c1
-rw-r--r--net/dccp/options.c4
-rw-r--r--net/dccp/sysctl.c7
7 files changed, 4 insertions, 18 deletions
diff --git a/Documentation/networking/dccp.txt b/Documentation/networking/dccp.txt
index a203d132dbef..1403745ab406 100644
--- a/Documentation/networking/dccp.txt
+++ b/Documentation/networking/dccp.txt
@@ -133,9 +133,6 @@ retries2
133 importance for retransmitted acknowledgments and feature negotiation, 133 importance for retransmitted acknowledgments and feature negotiation,
134 data packets are never retransmitted. Analogue of tcp_retries2. 134 data packets are never retransmitted. Analogue of tcp_retries2.
135 135
136send_ndp = 1
137 Whether or not to send NDP count options (sec. 7.7.2).
138
139send_ackvec = 1 136send_ackvec = 1
140 Whether or not to send Ack Vector options (sec. 11.5). 137 Whether or not to send Ack Vector options (sec. 11.5).
141 138
diff --git a/include/linux/dccp.h b/include/linux/dccp.h
index 46daea312d92..60e94438eadd 100644
--- a/include/linux/dccp.h
+++ b/include/linux/dccp.h
@@ -371,14 +371,12 @@ static inline unsigned int dccp_hdr_len(const struct sk_buff *skb)
371 * 371 *
372 * @dccpms_sequence_window - Sequence Window Feature (section 7.5.2) 372 * @dccpms_sequence_window - Sequence Window Feature (section 7.5.2)
373 * @dccpms_send_ack_vector - Send Ack Vector Feature (section 11.5) 373 * @dccpms_send_ack_vector - Send Ack Vector Feature (section 11.5)
374 * @dccpms_send_ndp_count - Send NDP Count Feature (7.7.2)
375 * @dccpms_pending - List of features being negotiated 374 * @dccpms_pending - List of features being negotiated
376 * @dccpms_conf - 375 * @dccpms_conf -
377 */ 376 */
378struct dccp_minisock { 377struct dccp_minisock {
379 __u64 dccpms_sequence_window; 378 __u64 dccpms_sequence_window;
380 __u8 dccpms_send_ack_vector; 379 __u8 dccpms_send_ack_vector;
381 __u8 dccpms_send_ndp_count;
382 struct list_head dccpms_pending; 380 struct list_head dccpms_pending;
383 struct list_head dccpms_conf; 381 struct list_head dccpms_conf;
384}; 382};
@@ -490,6 +488,7 @@ struct dccp_ackvec;
490 * @dccps_r_ack_ratio - feature-remote Ack Ratio 488 * @dccps_r_ack_ratio - feature-remote Ack Ratio
491 * @dccps_pcslen - sender partial checksum coverage (via sockopt) 489 * @dccps_pcslen - sender partial checksum coverage (via sockopt)
492 * @dccps_pcrlen - receiver partial checksum coverage (via sockopt) 490 * @dccps_pcrlen - receiver partial checksum coverage (via sockopt)
491 * @dccps_send_ndp_count - local Send NDP Count feature (7.7.2)
493 * @dccps_ndp_count - number of Non Data Packets since last data packet 492 * @dccps_ndp_count - number of Non Data Packets since last data packet
494 * @dccps_mss_cache - current value of MSS (path MTU minus header sizes) 493 * @dccps_mss_cache - current value of MSS (path MTU minus header sizes)
495 * @dccps_rate_last - timestamp for rate-limiting DCCP-Sync (RFC 4340, 7.5.4) 494 * @dccps_rate_last - timestamp for rate-limiting DCCP-Sync (RFC 4340, 7.5.4)
@@ -529,6 +528,7 @@ struct dccp_sock {
529 __u16 dccps_r_ack_ratio; 528 __u16 dccps_r_ack_ratio;
530 __u8 dccps_pcslen:4; 529 __u8 dccps_pcslen:4;
531 __u8 dccps_pcrlen:4; 530 __u8 dccps_pcrlen:4;
531 __u8 dccps_send_ndp_count:1;
532 __u64 dccps_ndp_count:48; 532 __u64 dccps_ndp_count:48;
533 unsigned long dccps_rate_last; 533 unsigned long dccps_rate_last;
534 struct dccp_minisock dccps_minisock; 534 struct dccp_minisock dccps_minisock;
diff --git a/net/dccp/dccp.h b/net/dccp/dccp.h
index 94f6785f81ec..e0759d098b9a 100644
--- a/net/dccp/dccp.h
+++ b/net/dccp/dccp.h
@@ -99,7 +99,6 @@ extern int sysctl_dccp_feat_sequence_window;
99extern int sysctl_dccp_feat_rx_ccid; 99extern int sysctl_dccp_feat_rx_ccid;
100extern int sysctl_dccp_feat_tx_ccid; 100extern int sysctl_dccp_feat_tx_ccid;
101extern int sysctl_dccp_feat_send_ack_vector; 101extern int sysctl_dccp_feat_send_ack_vector;
102extern int sysctl_dccp_feat_send_ndp_count;
103extern int sysctl_dccp_tx_qlen; 102extern int sysctl_dccp_tx_qlen;
104extern int sysctl_dccp_sync_ratelimit; 103extern int sysctl_dccp_sync_ratelimit;
105 104
diff --git a/net/dccp/feat.c b/net/dccp/feat.c
index a0d5891a37bf..30f9fb76b921 100644
--- a/net/dccp/feat.c
+++ b/net/dccp/feat.c
@@ -85,7 +85,7 @@ static int dccp_hdlr_ackvec(struct sock *sk, u64 enable, bool rx)
85static int dccp_hdlr_ndp(struct sock *sk, u64 enable, bool rx) 85static int dccp_hdlr_ndp(struct sock *sk, u64 enable, bool rx)
86{ 86{
87 if (!rx) 87 if (!rx)
88 dccp_msk(sk)->dccpms_send_ndp_count = (enable > 0); 88 dccp_sk(sk)->dccps_send_ndp_count = (enable > 0);
89 return 0; 89 return 0;
90} 90}
91 91
diff --git a/net/dccp/minisocks.c b/net/dccp/minisocks.c
index 210c346899ba..02b14812464a 100644
--- a/net/dccp/minisocks.c
+++ b/net/dccp/minisocks.c
@@ -46,7 +46,6 @@ void dccp_minisock_init(struct dccp_minisock *dmsk)
46{ 46{
47 dmsk->dccpms_sequence_window = sysctl_dccp_feat_sequence_window; 47 dmsk->dccpms_sequence_window = sysctl_dccp_feat_sequence_window;
48 dmsk->dccpms_send_ack_vector = sysctl_dccp_feat_send_ack_vector; 48 dmsk->dccpms_send_ack_vector = sysctl_dccp_feat_send_ack_vector;
49 dmsk->dccpms_send_ndp_count = sysctl_dccp_feat_send_ndp_count;
50} 49}
51 50
52void dccp_time_wait(struct sock *sk, int state, int timeo) 51void dccp_time_wait(struct sock *sk, int state, int timeo)
diff --git a/net/dccp/options.c b/net/dccp/options.c
index debb1008c7ad..e9d674874b4e 100644
--- a/net/dccp/options.c
+++ b/net/dccp/options.c
@@ -27,7 +27,6 @@ int sysctl_dccp_feat_sequence_window = DCCPF_INITIAL_SEQUENCE_WINDOW;
27int sysctl_dccp_feat_rx_ccid = DCCPF_INITIAL_CCID; 27int sysctl_dccp_feat_rx_ccid = DCCPF_INITIAL_CCID;
28int sysctl_dccp_feat_tx_ccid = DCCPF_INITIAL_CCID; 28int sysctl_dccp_feat_tx_ccid = DCCPF_INITIAL_CCID;
29int sysctl_dccp_feat_send_ack_vector = DCCPF_INITIAL_SEND_ACK_VECTOR; 29int sysctl_dccp_feat_send_ack_vector = DCCPF_INITIAL_SEND_ACK_VECTOR;
30int sysctl_dccp_feat_send_ndp_count = DCCPF_INITIAL_SEND_NDP_COUNT;
31 30
32u64 dccp_decode_value_var(const u8 *bf, const u8 len) 31u64 dccp_decode_value_var(const u8 *bf, const u8 len)
33{ 32{
@@ -531,8 +530,7 @@ int dccp_insert_options(struct sock *sk, struct sk_buff *skb)
531 530
532 DCCP_SKB_CB(skb)->dccpd_opt_len = 0; 531 DCCP_SKB_CB(skb)->dccpd_opt_len = 0;
533 532
534 if (dmsk->dccpms_send_ndp_count && 533 if (dp->dccps_send_ndp_count && dccp_insert_option_ndp(sk, skb))
535 dccp_insert_option_ndp(sk, skb))
536 return -1; 534 return -1;
537 535
538 if (DCCP_SKB_CB(skb)->dccpd_type != DCCP_PKT_DATA) { 536 if (DCCP_SKB_CB(skb)->dccpd_type != DCCP_PKT_DATA) {
diff --git a/net/dccp/sysctl.c b/net/dccp/sysctl.c
index f6e54f433e29..587c12f915c1 100644
--- a/net/dccp/sysctl.c
+++ b/net/dccp/sysctl.c
@@ -48,13 +48,6 @@ static struct ctl_table dccp_default_table[] = {
48 .proc_handler = proc_dointvec, 48 .proc_handler = proc_dointvec,
49 }, 49 },
50 { 50 {
51 .procname = "send_ndp",
52 .data = &sysctl_dccp_feat_send_ndp_count,
53 .maxlen = sizeof(sysctl_dccp_feat_send_ndp_count),
54 .mode = 0644,
55 .proc_handler = proc_dointvec,
56 },
57 {
58 .procname = "request_retries", 51 .procname = "request_retries",
59 .data = &sysctl_dccp_request_retries, 52 .data = &sysctl_dccp_request_retries,
60 .maxlen = sizeof(sysctl_dccp_request_retries), 53 .maxlen = sizeof(sysctl_dccp_request_retries),