summaryrefslogtreecommitdiff
path: root/net/dccp
diff options
context:
space:
mode:
authorGerrit Renker <gerrit@erg.abdn.ac.uk>2007-03-20 18:27:17 (GMT)
committerDavid S. Miller <davem@sunset.davemloft.net>2007-04-26 05:27:02 (GMT)
commit89560b53b92a07c529e13a462aa7fd87a844f1f5 (patch)
tree89409bee68da1ee44b7945315efecd779d7fe60a /net/dccp
parent7dfee1a9c07f80a82aa5fbad340146f2b5c794b4 (diff)
downloadlinux-89560b53b92a07c529e13a462aa7fd87a844f1f5.tar.xz
[DCCP]: Sample RTT from SYN exchange
Function:
Diffstat (limited to 'net/dccp')
-rw-r--r--net/dccp/input.c8
-rw-r--r--net/dccp/options.c8
2 files changed, 16 insertions, 0 deletions
diff --git a/net/dccp/input.c b/net/dccp/input.c
index bd578c8..da6ec18 100644
--- a/net/dccp/input.c
+++ b/net/dccp/input.c
@@ -300,6 +300,14 @@ static int dccp_rcv_request_sent_state_process(struct sock *sk,
if (dccp_parse_options(sk, skb))
goto out_invalid_packet;
+ /* Obtain RTT sample from SYN exchange (used by CCID 3) */
+ if (dp->dccps_options_received.dccpor_timestamp_echo) {
+ struct timeval now;
+
+ dccp_timestamp(sk, &now);
+ dp->dccps_syn_rtt = dccp_sample_rtt(sk, &now, NULL);
+ }
+
if (dccp_msk(sk)->dccpms_send_ack_vector &&
dccp_ackvec_add(dp->dccps_hc_rx_ackvec, sk,
DCCP_SKB_CB(skb)->dccpd_seq,
diff --git a/net/dccp/options.c b/net/dccp/options.c
index 9074ca7..14b6212 100644
--- a/net/dccp/options.c
+++ b/net/dccp/options.c
@@ -563,6 +563,14 @@ int dccp_insert_options(struct sock *sk, struct sk_buff *skb)
dccp_insert_options_feat(sk, skb))
return -1;
+ /*
+ * Obtain RTT sample from Request/Response exchange.
+ * This is currently used in CCID 3 initialisation.
+ */
+ if (DCCP_SKB_CB(skb)->dccpd_type == DCCP_PKT_REQUEST &&
+ dccp_insert_option_timestamp(sk, skb))
+ return -1;
+
/* XXX: insert other options when appropriate */
if (DCCP_SKB_CB(skb)->dccpd_opt_len != 0) {