Commit 89560b53 authored by Gerrit Renker's avatar Gerrit Renker Committed by David S. Miller

[DCCP]: Sample RTT from SYN exchange

Function:
parent 7dfee1a9
...@@ -481,10 +481,12 @@ struct dccp_ackvec; ...@@ -481,10 +481,12 @@ struct dccp_ackvec;
* @dccps_hc_rx_insert_options - * @dccps_hc_rx_insert_options -
* @dccps_hc_tx_insert_options - * @dccps_hc_tx_insert_options -
* @dccps_xmit_timer - timer for when CCID is not ready to send * @dccps_xmit_timer - timer for when CCID is not ready to send
* @dccps_syn_rtt - RTT sample from Request/Response exchange (in usecs)
*/ */
struct dccp_sock { struct dccp_sock {
/* inet_connection_sock has to be the first member of dccp_sock */ /* inet_connection_sock has to be the first member of dccp_sock */
struct inet_connection_sock dccps_inet_connection; struct inet_connection_sock dccps_inet_connection;
#define dccps_syn_rtt dccps_inet_connection.icsk_ack.lrcvtime
__u64 dccps_swl; __u64 dccps_swl;
__u64 dccps_swh; __u64 dccps_swh;
__u64 dccps_awl; __u64 dccps_awl;
......
...@@ -300,6 +300,14 @@ static int dccp_rcv_request_sent_state_process(struct sock *sk, ...@@ -300,6 +300,14 @@ static int dccp_rcv_request_sent_state_process(struct sock *sk,
if (dccp_parse_options(sk, skb)) if (dccp_parse_options(sk, skb))
goto out_invalid_packet; 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 && if (dccp_msk(sk)->dccpms_send_ack_vector &&
dccp_ackvec_add(dp->dccps_hc_rx_ackvec, sk, dccp_ackvec_add(dp->dccps_hc_rx_ackvec, sk,
DCCP_SKB_CB(skb)->dccpd_seq, DCCP_SKB_CB(skb)->dccpd_seq,
......
...@@ -563,6 +563,14 @@ int dccp_insert_options(struct sock *sk, struct sk_buff *skb) ...@@ -563,6 +563,14 @@ int dccp_insert_options(struct sock *sk, struct sk_buff *skb)
dccp_insert_options_feat(sk, skb)) dccp_insert_options_feat(sk, skb))
return -1; 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 */ /* XXX: insert other options when appropriate */
if (DCCP_SKB_CB(skb)->dccpd_opt_len != 0) { if (DCCP_SKB_CB(skb)->dccpd_opt_len != 0) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment