aboutsummaryrefslogtreecommitdiffstats
path: root/net/dccp/dccp.h
diff options
context:
space:
mode:
authorGerrit Renker <gerrit@erg.abdn.ac.uk>2008-09-04 01:30:19 -0400
committerGerrit Renker <gerrit@erg.abdn.ac.uk>2008-09-04 01:45:31 -0400
commitb235dc4abbc1356284bd0dc730efa711f394e0e2 (patch)
treec8adf34d1904c04ab0bee54e3d60f743822a8e9f /net/dccp/dccp.h
parent68e074bfcef269bc61006c2740d7f89ccbbd93d7 (diff)
dccp ccid-2: Phase out the use of boolean Ack Vector sysctl
This removes the use of the sysctl and the minisock variable for the Send Ack Vector feature, which is now handled fully dynamically via feature negotiation; i.e. when CCID2 is enabled, Ack Vectors are automatically enabled (as per RFC 4341, 4.). Using a sysctl in parallel to this implementation would open the door to crashes, since much of the code relies on tests of the boolean minisock / sysctl variable. Thus, this patch replaces all tests of type if (dccp_msk(sk)->dccpms_send_ack_vector) /* ... */ with if (dp->dccps_hc_rx_ackvec != NULL) /* ... */ The dccps_hc_rx_ackvec is allocated by the dccp_hdlr_ackvec() when feature negotiation concluded that Ack Vectors are to be used on the half-connection. Otherwise, it is NULL (due to dccp_init_sock/dccp_create_openreq_child), so that the test is a valid one. The activation handler for Ack Vectors is called as soon as the feature negotiation has concluded at the * server when the Ack marking the transition RESPOND => OPEN arrives; * client after it has sent its ACK, marking the transition REQUEST => PARTOPEN. Adding the sequence number of the Response packet to the Ack Vector has been removed, since (a) connection establishment implies that the Response has been received; (b) the CCIDs only look at packets received in the (PART)OPEN state, i.e. this entry will always be ignored; (c) it can not be used for anything useful - to detect loss for instance, only packets received after the loss can serve as pseudo-dupacks. Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk> Acked-by: Ian McDonald <ian.mcdonald@jandi.co.nz>
Diffstat (limited to 'net/dccp/dccp.h')
-rw-r--r--net/dccp/dccp.h3
1 files changed, 1 insertions, 2 deletions
diff --git a/net/dccp/dccp.h b/net/dccp/dccp.h
index 51436c825655..3fd16e82c003 100644
--- a/net/dccp/dccp.h
+++ b/net/dccp/dccp.h
@@ -98,7 +98,6 @@ extern int sysctl_dccp_retries2;
98extern int sysctl_dccp_feat_sequence_window; 98extern 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;
102extern int sysctl_dccp_tx_qlen; 101extern int sysctl_dccp_tx_qlen;
103extern int sysctl_dccp_sync_ratelimit; 102extern int sysctl_dccp_sync_ratelimit;
104 103
@@ -434,7 +433,7 @@ static inline int dccp_ack_pending(const struct sock *sk)
434 const struct dccp_sock *dp = dccp_sk(sk); 433 const struct dccp_sock *dp = dccp_sk(sk);
435 return dp->dccps_timestamp_echo != 0 || 434 return dp->dccps_timestamp_echo != 0 ||
436#ifdef CONFIG_IP_DCCP_ACKVEC 435#ifdef CONFIG_IP_DCCP_ACKVEC
437 (dccp_msk(sk)->dccpms_send_ack_vector && 436 (dp->dccps_hc_rx_ackvec != NULL &&
438 dccp_ackvec_pending(dp->dccps_hc_rx_ackvec)) || 437 dccp_ackvec_pending(dp->dccps_hc_rx_ackvec)) ||
439#endif 438#endif
440 inet_csk_ack_scheduled(sk); 439 inet_csk_ack_scheduled(sk);