aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/dccp.h1
-rw-r--r--net/dccp/ccids/ccid3.c27
-rw-r--r--net/dccp/ccids/ccid3.h2
-rw-r--r--net/dccp/ccids/lib/packet_history.h3
-rw-r--r--net/dccp/dccp.h16
-rw-r--r--net/dccp/input.c4
-rw-r--r--net/dccp/ipv4.c1
-rw-r--r--net/dccp/minisocks.c1
-rw-r--r--net/dccp/options.c45
9 files changed, 61 insertions, 39 deletions
diff --git a/include/linux/dccp.h b/include/linux/dccp.h
index 5e0af0d08a93..8bf4bacb5051 100644
--- a/include/linux/dccp.h
+++ b/include/linux/dccp.h
@@ -432,6 +432,7 @@ struct dccp_sock {
432 struct ccid *dccps_hc_rx_ccid; 432 struct ccid *dccps_hc_rx_ccid;
433 struct ccid *dccps_hc_tx_ccid; 433 struct ccid *dccps_hc_tx_ccid;
434 struct dccp_options_received dccps_options_received; 434 struct dccp_options_received dccps_options_received;
435 struct timeval dccps_epoch;
435 enum dccp_role dccps_role:2; 436 enum dccp_role dccps_role:2;
436 __u8 dccps_hc_rx_insert_options:1; 437 __u8 dccps_hc_rx_insert_options:1;
437 __u8 dccps_hc_tx_insert_options:1; 438 __u8 dccps_hc_tx_insert_options:1;
diff --git a/net/dccp/ccids/ccid3.c b/net/dccp/ccids/ccid3.c
index 145aafafe4e2..348e6fb262c3 100644
--- a/net/dccp/ccids/ccid3.c
+++ b/net/dccp/ccids/ccid3.c
@@ -169,7 +169,7 @@ static void ccid3_hc_tx_update_x(struct sock *sk)
169 } else { 169 } else {
170 struct timeval now; 170 struct timeval now;
171 171
172 do_gettimeofday(&now); 172 dccp_timestamp(sk, &now);
173 if (timeval_delta(&now, &hctx->ccid3hctx_t_ld) >= 173 if (timeval_delta(&now, &hctx->ccid3hctx_t_ld) >=
174 hctx->ccid3hctx_rtt) { 174 hctx->ccid3hctx_rtt) {
175 hctx->ccid3hctx_x = max_t(u32, min_t(u32, hctx->ccid3hctx_x_recv, 175 hctx->ccid3hctx_x = max_t(u32, min_t(u32, hctx->ccid3hctx_x_recv,
@@ -317,7 +317,7 @@ static int ccid3_hc_tx_send_packet(struct sock *sk,
317 dccp_tx_hist_add_entry(&hctx->ccid3hctx_hist, new_packet); 317 dccp_tx_hist_add_entry(&hctx->ccid3hctx_hist, new_packet);
318 } 318 }
319 319
320 do_gettimeofday(&now); 320 dccp_timestamp(sk, &now);
321 321
322 switch (hctx->ccid3hctx_state) { 322 switch (hctx->ccid3hctx_state) {
323 case TFRC_SSTATE_NO_SENT: 323 case TFRC_SSTATE_NO_SENT:
@@ -382,7 +382,7 @@ static void ccid3_hc_tx_packet_sent(struct sock *sk, int more, int len)
382 return; 382 return;
383 } 383 }
384 384
385 do_gettimeofday(&now); 385 dccp_timestamp(sk, &now);
386 386
387 /* check if we have sent a data packet */ 387 /* check if we have sent a data packet */
388 if (len > 0) { 388 if (len > 0) {
@@ -461,6 +461,7 @@ static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
461 struct ccid3_hc_tx_sock *hctx = dp->dccps_hc_tx_ccid_private; 461 struct ccid3_hc_tx_sock *hctx = dp->dccps_hc_tx_ccid_private;
462 struct ccid3_options_received *opt_recv; 462 struct ccid3_options_received *opt_recv;
463 struct dccp_tx_hist_entry *packet; 463 struct dccp_tx_hist_entry *packet;
464 struct timeval now;
464 unsigned long next_tmout; 465 unsigned long next_tmout;
465 u32 t_elapsed; 466 u32 t_elapsed;
466 u32 pinv; 467 u32 pinv;
@@ -508,7 +509,8 @@ static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
508 } 509 }
509 510
510 /* Update RTT */ 511 /* Update RTT */
511 r_sample = timeval_now_delta(&packet->dccphtx_tstamp); 512 dccp_timestamp(sk, &now);
513 r_sample = timeval_delta(&now, &packet->dccphtx_tstamp);
512 if (unlikely(r_sample <= t_elapsed)) 514 if (unlikely(r_sample <= t_elapsed))
513 LIMIT_NETDEBUG(KERN_WARNING 515 LIMIT_NETDEBUG(KERN_WARNING
514 "%s: r_sample=%uus, t_elapsed=%uus\n", 516 "%s: r_sample=%uus, t_elapsed=%uus\n",
@@ -774,7 +776,7 @@ static void ccid3_hc_rx_send_feedback(struct sock *sk)
774 776
775 ccid3_pr_debug("%s, sk=%p\n", dccp_role(sk), sk); 777 ccid3_pr_debug("%s, sk=%p\n", dccp_role(sk), sk);
776 778
777 do_gettimeofday(&now); 779 dccp_timestamp(sk, &now);
778 780
779 switch (hcrx->ccid3hcrx_state) { 781 switch (hcrx->ccid3hcrx_state) {
780 case TFRC_RSTATE_NO_DATA: 782 case TFRC_RSTATE_NO_DATA:
@@ -903,10 +905,9 @@ found:
903 if (rtt == 0) 905 if (rtt == 0)
904 rtt = 1; 906 rtt = 1;
905 907
906 delta = timeval_now_delta(&hcrx->ccid3hcrx_tstamp_last_feedback); 908 dccp_timestamp(sk, &tstamp);
907 x_recv = hcrx->ccid3hcrx_bytes_recv * USEC_PER_SEC; 909 delta = timeval_delta(&tstamp, &hcrx->ccid3hcrx_tstamp_last_feedback);
908 if (likely(delta > 1)) 910 x_recv = usecs_div(hcrx->ccid3hcrx_bytes_recv, delta);
909 x_recv /= delta;
910 911
911 tmp1 = (u64)x_recv * (u64)rtt; 912 tmp1 = (u64)x_recv * (u64)rtt;
912 do_div(tmp1,10000000); 913 do_div(tmp1,10000000);
@@ -981,7 +982,7 @@ static void ccid3_hc_rx_packet_recv(struct sock *sk, struct sk_buff *skb)
981 if (opt_recv->dccpor_timestamp_echo == 0) 982 if (opt_recv->dccpor_timestamp_echo == 0)
982 break; 983 break;
983 p_prev = hcrx->ccid3hcrx_rtt; 984 p_prev = hcrx->ccid3hcrx_rtt;
984 do_gettimeofday(&now); 985 dccp_timestamp(sk, &now);
985 timeval_sub_usecs(&now, opt_recv->dccpor_timestamp_echo * 10); 986 timeval_sub_usecs(&now, opt_recv->dccpor_timestamp_echo * 10);
986 r_sample = timeval_usecs(&now); 987 r_sample = timeval_usecs(&now);
987 t_elapsed = opt_recv->dccpor_elapsed_time * 10; 988 t_elapsed = opt_recv->dccpor_elapsed_time * 10;
@@ -1013,7 +1014,7 @@ static void ccid3_hc_rx_packet_recv(struct sock *sk, struct sk_buff *skb)
1013 return; 1014 return;
1014 } 1015 }
1015 1016
1016 packet = dccp_rx_hist_entry_new(ccid3_rx_hist, opt_recv->dccpor_ndp, 1017 packet = dccp_rx_hist_entry_new(ccid3_rx_hist, sk, opt_recv->dccpor_ndp,
1017 skb, SLAB_ATOMIC); 1018 skb, SLAB_ATOMIC);
1018 if (packet == NULL) { 1019 if (packet == NULL) {
1019 ccid3_pr_debug("%s, sk=%p, Not enough mem to add rx packet " 1020 ccid3_pr_debug("%s, sk=%p, Not enough mem to add rx packet "
@@ -1045,7 +1046,7 @@ static void ccid3_hc_rx_packet_recv(struct sock *sk, struct sk_buff *skb)
1045 if (ins != 0) 1046 if (ins != 0)
1046 break; 1047 break;
1047 1048
1048 do_gettimeofday(&now); 1049 dccp_timestamp(sk, &now);
1049 if (timeval_delta(&now, &hcrx->ccid3hcrx_tstamp_last_ack) >= 1050 if (timeval_delta(&now, &hcrx->ccid3hcrx_tstamp_last_ack) >=
1050 hcrx->ccid3hcrx_rtt) { 1051 hcrx->ccid3hcrx_rtt) {
1051 hcrx->ccid3hcrx_tstamp_last_ack = now; 1052 hcrx->ccid3hcrx_tstamp_last_ack = now;
@@ -1100,7 +1101,7 @@ static int ccid3_hc_rx_init(struct sock *sk)
1100 hcrx->ccid3hcrx_state = TFRC_RSTATE_NO_DATA; 1101 hcrx->ccid3hcrx_state = TFRC_RSTATE_NO_DATA;
1101 INIT_LIST_HEAD(&hcrx->ccid3hcrx_hist); 1102 INIT_LIST_HEAD(&hcrx->ccid3hcrx_hist);
1102 INIT_LIST_HEAD(&hcrx->ccid3hcrx_li_hist); 1103 INIT_LIST_HEAD(&hcrx->ccid3hcrx_li_hist);
1103 do_gettimeofday(&hcrx->ccid3hcrx_tstamp_last_ack); 1104 dccp_timestamp(sk, &hcrx->ccid3hcrx_tstamp_last_ack);
1104 hcrx->ccid3hcrx_tstamp_last_feedback = hcrx->ccid3hcrx_tstamp_last_ack; 1105 hcrx->ccid3hcrx_tstamp_last_feedback = hcrx->ccid3hcrx_tstamp_last_ack;
1105 hcrx->ccid3hcrx_rtt = 5000; /* XXX 5ms for now... */ 1106 hcrx->ccid3hcrx_rtt = 5000; /* XXX 5ms for now... */
1106 return 0; 1107 return 0;
diff --git a/net/dccp/ccids/ccid3.h b/net/dccp/ccids/ccid3.h
index ee8cbace6630..58be6125b695 100644
--- a/net/dccp/ccids/ccid3.h
+++ b/net/dccp/ccids/ccid3.h
@@ -115,7 +115,7 @@ struct ccid3_hc_rx_sock {
115 u64 ccid3hcrx_seqno_last_counter:48, 115 u64 ccid3hcrx_seqno_last_counter:48,
116 ccid3hcrx_state:8, 116 ccid3hcrx_state:8,
117 ccid3hcrx_last_counter:4; 117 ccid3hcrx_last_counter:4;
118 unsigned long ccid3hcrx_rtt; 118 u32 ccid3hcrx_rtt;
119 u32 ccid3hcrx_p; 119 u32 ccid3hcrx_p;
120 u32 ccid3hcrx_bytes_recv; 120 u32 ccid3hcrx_bytes_recv;
121 struct timeval ccid3hcrx_tstamp_last_feedback; 121 struct timeval ccid3hcrx_tstamp_last_feedback;
diff --git a/net/dccp/ccids/lib/packet_history.h b/net/dccp/ccids/lib/packet_history.h
index fb90a91aa93d..b375ebdb7dcf 100644
--- a/net/dccp/ccids/lib/packet_history.h
+++ b/net/dccp/ccids/lib/packet_history.h
@@ -134,6 +134,7 @@ static inline struct dccp_tx_hist_entry *
134 134
135static inline struct dccp_rx_hist_entry * 135static inline struct dccp_rx_hist_entry *
136 dccp_rx_hist_entry_new(struct dccp_rx_hist *hist, 136 dccp_rx_hist_entry_new(struct dccp_rx_hist *hist,
137 const struct sock *sk,
137 const u32 ndp, 138 const u32 ndp,
138 const struct sk_buff *skb, 139 const struct sk_buff *skb,
139 const unsigned int __nocast prio) 140 const unsigned int __nocast prio)
@@ -148,7 +149,7 @@ static inline struct dccp_rx_hist_entry *
148 entry->dccphrx_ccval = dh->dccph_ccval; 149 entry->dccphrx_ccval = dh->dccph_ccval;
149 entry->dccphrx_type = dh->dccph_type; 150 entry->dccphrx_type = dh->dccph_type;
150 entry->dccphrx_ndp = ndp; 151 entry->dccphrx_ndp = ndp;
151 do_gettimeofday(&(entry->dccphrx_tstamp)); 152 dccp_timestamp(sk, &entry->dccphrx_tstamp);
152 } 153 }
153 154
154 return entry; 155 return entry;
diff --git a/net/dccp/dccp.h b/net/dccp/dccp.h
index 33456c0d5937..95c4630b3b18 100644
--- a/net/dccp/dccp.h
+++ b/net/dccp/dccp.h
@@ -426,10 +426,13 @@ extern struct dccp_ackpkts *
426 dccp_ackpkts_alloc(unsigned int len, 426 dccp_ackpkts_alloc(unsigned int len,
427 const unsigned int __nocast priority); 427 const unsigned int __nocast priority);
428extern void dccp_ackpkts_free(struct dccp_ackpkts *ap); 428extern void dccp_ackpkts_free(struct dccp_ackpkts *ap);
429extern int dccp_ackpkts_add(struct dccp_ackpkts *ap, u64 ackno, u8 state); 429extern int dccp_ackpkts_add(struct dccp_ackpkts *ap, const struct sock *sk,
430 u64 ackno, u8 state);
430extern void dccp_ackpkts_check_rcv_ackno(struct dccp_ackpkts *ap, 431extern void dccp_ackpkts_check_rcv_ackno(struct dccp_ackpkts *ap,
431 struct sock *sk, u64 ackno); 432 struct sock *sk, u64 ackno);
432 433
434extern void dccp_timestamp(const struct sock *sk, struct timeval *tv);
435
433static inline suseconds_t timeval_usecs(const struct timeval *tv) 436static inline suseconds_t timeval_usecs(const struct timeval *tv)
434{ 437{
435 return tv->tv_sec * USEC_PER_SEC + tv->tv_usec; 438 return tv->tv_sec * USEC_PER_SEC + tv->tv_usec;
@@ -468,17 +471,6 @@ static inline void timeval_sub_usecs(struct timeval *tv,
468 } 471 }
469} 472}
470 473
471/*
472 * Returns the difference in usecs between timeval
473 * passed in and current time
474 */
475static inline suseconds_t timeval_now_delta(const struct timeval *tv)
476{
477 struct timeval now;
478 do_gettimeofday(&now);
479 return timeval_delta(&now, tv);
480}
481
482#ifdef CONFIG_IP_DCCP_DEBUG 474#ifdef CONFIG_IP_DCCP_DEBUG
483extern void dccp_ackvector_print(const u64 ackno, 475extern void dccp_ackvector_print(const u64 ackno,
484 const unsigned char *vector, int len); 476 const unsigned char *vector, int len);
diff --git a/net/dccp/input.c b/net/dccp/input.c
index ef29cef1dafe..c60bc3433f5e 100644
--- a/net/dccp/input.c
+++ b/net/dccp/input.c
@@ -170,7 +170,7 @@ int dccp_rcv_established(struct sock *sk, struct sk_buff *skb,
170 if (dp->dccps_options.dccpo_send_ack_vector) { 170 if (dp->dccps_options.dccpo_send_ack_vector) {
171 struct dccp_ackpkts *ap = dp->dccps_hc_rx_ackpkts; 171 struct dccp_ackpkts *ap = dp->dccps_hc_rx_ackpkts;
172 172
173 if (dccp_ackpkts_add(dp->dccps_hc_rx_ackpkts, 173 if (dccp_ackpkts_add(dp->dccps_hc_rx_ackpkts, sk,
174 DCCP_SKB_CB(skb)->dccpd_seq, 174 DCCP_SKB_CB(skb)->dccpd_seq,
175 DCCP_ACKPKTS_STATE_RECEIVED)) { 175 DCCP_ACKPKTS_STATE_RECEIVED)) {
176 LIMIT_NETDEBUG(KERN_WARNING "DCCP: acknowledgeable " 176 LIMIT_NETDEBUG(KERN_WARNING "DCCP: acknowledgeable "
@@ -498,7 +498,7 @@ int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
498 * DCCP_ACKPKTS_STATE_ECN_MARKED 498 * DCCP_ACKPKTS_STATE_ECN_MARKED
499 */ 499 */
500 if (dp->dccps_options.dccpo_send_ack_vector) { 500 if (dp->dccps_options.dccpo_send_ack_vector) {
501 if (dccp_ackpkts_add(dp->dccps_hc_rx_ackpkts, 501 if (dccp_ackpkts_add(dp->dccps_hc_rx_ackpkts, sk,
502 DCCP_SKB_CB(skb)->dccpd_seq, 502 DCCP_SKB_CB(skb)->dccpd_seq,
503 DCCP_ACKPKTS_STATE_RECEIVED)) 503 DCCP_ACKPKTS_STATE_RECEIVED))
504 goto discard; 504 goto discard;
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c
index 3fc75dbee4b8..fee9a8c3777b 100644
--- a/net/dccp/ipv4.c
+++ b/net/dccp/ipv4.c
@@ -1243,6 +1243,7 @@ static int dccp_v4_init_sock(struct sock *sk)
1243 static int dccp_ctl_socket_init = 1; 1243 static int dccp_ctl_socket_init = 1;
1244 1244
1245 dccp_options_init(&dp->dccps_options); 1245 dccp_options_init(&dp->dccps_options);
1246 do_gettimeofday(&dp->dccps_epoch);
1246 1247
1247 if (dp->dccps_options.dccpo_send_ack_vector) { 1248 if (dp->dccps_options.dccpo_send_ack_vector) {
1248 dp->dccps_hc_rx_ackpkts = 1249 dp->dccps_hc_rx_ackpkts =
diff --git a/net/dccp/minisocks.c b/net/dccp/minisocks.c
index ce5dff4ac22e..18461bc04cbe 100644
--- a/net/dccp/minisocks.c
+++ b/net/dccp/minisocks.c
@@ -96,6 +96,7 @@ struct sock *dccp_create_openreq_child(struct sock *sk,
96 newdp->dccps_hc_rx_ackpkts = NULL; 96 newdp->dccps_hc_rx_ackpkts = NULL;
97 newdp->dccps_role = DCCP_ROLE_SERVER; 97 newdp->dccps_role = DCCP_ROLE_SERVER;
98 newicsk->icsk_rto = DCCP_TIMEOUT_INIT; 98 newicsk->icsk_rto = DCCP_TIMEOUT_INIT;
99 do_gettimeofday(&newdp->dccps_epoch);
99 100
100 if (newdp->dccps_options.dccpo_send_ack_vector) { 101 if (newdp->dccps_options.dccpo_send_ack_vector) {
101 newdp->dccps_hc_rx_ackpkts = 102 newdp->dccps_hc_rx_ackpkts =
diff --git a/net/dccp/options.c b/net/dccp/options.c
index 34b230a00875..d4c4242d8dd7 100644
--- a/net/dccp/options.c
+++ b/net/dccp/options.c
@@ -140,7 +140,7 @@ int dccp_parse_options(struct sock *sk, struct sk_buff *skb)
140 opt_recv->dccpor_timestamp = ntohl(*(u32 *)value); 140 opt_recv->dccpor_timestamp = ntohl(*(u32 *)value);
141 141
142 dp->dccps_timestamp_echo = opt_recv->dccpor_timestamp; 142 dp->dccps_timestamp_echo = opt_recv->dccpor_timestamp;
143 do_gettimeofday(&dp->dccps_timestamp_time); 143 dccp_timestamp(sk, &dp->dccps_timestamp_time);
144 144
145 dccp_pr_debug("%sTIMESTAMP=%u, ackno=%llu\n", 145 dccp_pr_debug("%sTIMESTAMP=%u, ackno=%llu\n",
146 debug_prefix, opt_recv->dccpor_timestamp, 146 debug_prefix, opt_recv->dccpor_timestamp,
@@ -361,9 +361,13 @@ static void dccp_insert_option_ack_vector(struct sock *sk, struct sk_buff *skb)
361#endif 361#endif
362 struct dccp_ackpkts *ap = dp->dccps_hc_rx_ackpkts; 362 struct dccp_ackpkts *ap = dp->dccps_hc_rx_ackpkts;
363 int len = ap->dccpap_buf_vector_len + 2; 363 int len = ap->dccpap_buf_vector_len + 2;
364 const u32 elapsed_time = timeval_now_delta(&ap->dccpap_time) / 10; 364 struct timeval now;
365 u32 elapsed_time;
365 unsigned char *to, *from; 366 unsigned char *to, *from;
366 367
368 dccp_timestamp(sk, &now);
369 elapsed_time = timeval_delta(&now, &ap->dccpap_time) / 10;
370
367 if (elapsed_time != 0) 371 if (elapsed_time != 0)
368 dccp_insert_option_elapsed_time(sk, skb, elapsed_time); 372 dccp_insert_option_elapsed_time(sk, skb, elapsed_time);
369 373
@@ -428,13 +432,29 @@ static void dccp_insert_option_ack_vector(struct sock *sk, struct sk_buff *skb)
428 (unsigned long long) ap->dccpap_ack_ackno); 432 (unsigned long long) ap->dccpap_ack_ackno);
429} 433}
430 434
435void dccp_timestamp(const struct sock *sk, struct timeval *tv)
436{
437 const struct dccp_sock *dp = dccp_sk(sk);
438
439 do_gettimeofday(tv);
440 tv->tv_sec -= dp->dccps_epoch.tv_sec;
441 tv->tv_usec -= dp->dccps_epoch.tv_usec;
442
443 while (tv->tv_usec < 0) {
444 tv->tv_sec--;
445 tv->tv_usec += USEC_PER_SEC;
446 }
447}
448
449EXPORT_SYMBOL_GPL(dccp_timestamp);
450
431void dccp_insert_option_timestamp(struct sock *sk, struct sk_buff *skb) 451void dccp_insert_option_timestamp(struct sock *sk, struct sk_buff *skb)
432{ 452{
433 struct timeval tv; 453 struct timeval tv;
434 u32 now; 454 u32 now;
435 455
436 do_gettimeofday(&tv); 456 dccp_timestamp(sk, &tv);
437 now = (tv.tv_sec * USEC_PER_SEC + tv.tv_usec) / 10; 457 now = timeval_usecs(&tv) / 10;
438 /* yes this will overflow but that is the point as we want a 458 /* yes this will overflow but that is the point as we want a
439 * 10 usec 32 bit timer which mean it wraps every 11.9 hours */ 459 * 10 usec 32 bit timer which mean it wraps every 11.9 hours */
440 460
@@ -452,13 +472,17 @@ static void dccp_insert_option_timestamp_echo(struct sock *sk,
452 const char *debug_prefix = dp->dccps_role == DCCP_ROLE_CLIENT ? 472 const char *debug_prefix = dp->dccps_role == DCCP_ROLE_CLIENT ?
453 "CLIENT TX opt: " : "server TX opt: "; 473 "CLIENT TX opt: " : "server TX opt: ";
454#endif 474#endif
475 struct timeval now;
455 u32 tstamp_echo; 476 u32 tstamp_echo;
456 const u32 elapsed_time = 477 u32 elapsed_time;
457 timeval_now_delta(&dp->dccps_timestamp_time) / 10; 478 int len, elapsed_time_len;
458 const int elapsed_time_len = dccp_elapsed_time_len(elapsed_time);
459 const int len = 6 + elapsed_time_len;
460 unsigned char *to; 479 unsigned char *to;
461 480
481 dccp_timestamp(sk, &now);
482 elapsed_time = timeval_delta(&now, &dp->dccps_timestamp_time) / 10;
483 elapsed_time_len = dccp_elapsed_time_len(elapsed_time);
484 len = 6 + elapsed_time_len;
485
462 if (DCCP_SKB_CB(skb)->dccpd_opt_len + len > DCCP_MAX_OPT_LEN) { 486 if (DCCP_SKB_CB(skb)->dccpd_opt_len + len > DCCP_MAX_OPT_LEN) {
463 LIMIT_NETDEBUG(KERN_INFO "DCCP: packet too small to insert " 487 LIMIT_NETDEBUG(KERN_INFO "DCCP: packet too small to insert "
464 "timestamp echo!\n"); 488 "timestamp echo!\n");
@@ -623,7 +647,8 @@ static inline int dccp_ackpkts_set_buf_head_state(struct dccp_ackpkts *ap,
623/* 647/*
624 * Implements the draft-ietf-dccp-spec-11.txt Appendix A 648 * Implements the draft-ietf-dccp-spec-11.txt Appendix A
625 */ 649 */
626int dccp_ackpkts_add(struct dccp_ackpkts *ap, u64 ackno, u8 state) 650int dccp_ackpkts_add(struct dccp_ackpkts *ap, const struct sock *sk,
651 u64 ackno, u8 state)
627{ 652{
628 /* 653 /*
629 * Check at the right places if the buffer is full, if it is, tell the 654 * Check at the right places if the buffer is full, if it is, tell the
@@ -704,7 +729,7 @@ int dccp_ackpkts_add(struct dccp_ackpkts *ap, u64 ackno, u8 state)
704 } 729 }
705 730
706 ap->dccpap_buf_ackno = ackno; 731 ap->dccpap_buf_ackno = ackno;
707 do_gettimeofday(&ap->dccpap_time); 732 dccp_timestamp(sk, &ap->dccpap_time);
708out: 733out:
709 dccp_pr_debug(""); 734 dccp_pr_debug("");
710 dccp_ackpkts_print(ap); 735 dccp_ackpkts_print(ap);