diff options
author | Gerrit Renker <gerrit@erg.abdn.ac.uk> | 2007-11-20 15:00:39 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 17:54:42 -0500 |
commit | eb279b79c46be767ecffadaa8ed6be3e3555e93d (patch) | |
tree | f7695df96e2d129beb65263617ac7ed533e1689a /net | |
parent | 6c08b2cf4843788e66a5e69b5512538e686ae3e3 (diff) |
[CCID3]: Ignore trivial amounts of elapsed time
This patch fixes a previously undiscovered bug; the problem is in computing
the elapsed time as the time between `receiving' the packet (i.e. skb enters
CCID module) and sending feedback:
- there is no layer-processing, queueing, or delay involved,
- hence the elapsed time is in the order of 1 function call
- this is in the dimension of maximally 50..100usec
- which renders the use of elapsed time almost entirely useless.
The fix is simply to ignore such trivial amounts of elapsed time.
As a further advantage, the now useless elapsed_time field can be removed from
the socket, which reduces the socket structure by another four bytes.
Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: Ian McDonald <ian.mcdonald@jandi.co.nz>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/dccp/ccids/ccid3.c | 10 | ||||
-rw-r--r-- | net/dccp/ccids/ccid3.h | 2 |
2 files changed, 1 insertions, 11 deletions
diff --git a/net/dccp/ccids/ccid3.c b/net/dccp/ccids/ccid3.c index 5bf110b28abc..c025236ce49b 100644 --- a/net/dccp/ccids/ccid3.c +++ b/net/dccp/ccids/ccid3.c | |||
@@ -744,11 +744,6 @@ static void ccid3_hc_rx_send_feedback(struct sock *sk) | |||
744 | hcrx->ccid3hcrx_ccval_last_counter = packet->dccphrx_ccval; | 744 | hcrx->ccid3hcrx_ccval_last_counter = packet->dccphrx_ccval; |
745 | hcrx->ccid3hcrx_bytes_recv = 0; | 745 | hcrx->ccid3hcrx_bytes_recv = 0; |
746 | 746 | ||
747 | /* Elapsed time information [RFC 4340, 13.2] in units of 10 * usecs */ | ||
748 | delta = ktime_us_delta(now, packet->dccphrx_tstamp); | ||
749 | DCCP_BUG_ON(delta < 0); | ||
750 | hcrx->ccid3hcrx_elapsed_time = delta / 10; | ||
751 | |||
752 | if (hcrx->ccid3hcrx_p == 0) | 747 | if (hcrx->ccid3hcrx_p == 0) |
753 | hcrx->ccid3hcrx_pinv = ~0U; /* see RFC 4342, 8.5 */ | 748 | hcrx->ccid3hcrx_pinv = ~0U; /* see RFC 4342, 8.5 */ |
754 | else if (hcrx->ccid3hcrx_p > 1000000) { | 749 | else if (hcrx->ccid3hcrx_p > 1000000) { |
@@ -778,10 +773,7 @@ static int ccid3_hc_rx_insert_options(struct sock *sk, struct sk_buff *skb) | |||
778 | x_recv = htonl(hcrx->ccid3hcrx_x_recv); | 773 | x_recv = htonl(hcrx->ccid3hcrx_x_recv); |
779 | pinv = htonl(hcrx->ccid3hcrx_pinv); | 774 | pinv = htonl(hcrx->ccid3hcrx_pinv); |
780 | 775 | ||
781 | if ((hcrx->ccid3hcrx_elapsed_time != 0 && | 776 | if (dccp_insert_option_timestamp(sk, skb) || |
782 | dccp_insert_option_elapsed_time(sk, skb, | ||
783 | hcrx->ccid3hcrx_elapsed_time)) || | ||
784 | dccp_insert_option_timestamp(sk, skb) || | ||
785 | dccp_insert_option(sk, skb, TFRC_OPT_LOSS_EVENT_RATE, | 777 | dccp_insert_option(sk, skb, TFRC_OPT_LOSS_EVENT_RATE, |
786 | &pinv, sizeof(pinv)) || | 778 | &pinv, sizeof(pinv)) || |
787 | dccp_insert_option(sk, skb, TFRC_OPT_RECEIVE_RATE, | 779 | dccp_insert_option(sk, skb, TFRC_OPT_RECEIVE_RATE, |
diff --git a/net/dccp/ccids/ccid3.h b/net/dccp/ccids/ccid3.h index 0cdc982cfe47..83467c34ed2b 100644 --- a/net/dccp/ccids/ccid3.h +++ b/net/dccp/ccids/ccid3.h | |||
@@ -147,7 +147,6 @@ enum ccid3_hc_rx_states { | |||
147 | * @ccid3hcrx_li_hist - Loss Interval History | 147 | * @ccid3hcrx_li_hist - Loss Interval History |
148 | * @ccid3hcrx_s - Received packet size in bytes | 148 | * @ccid3hcrx_s - Received packet size in bytes |
149 | * @ccid3hcrx_pinv - Inverse of Loss Event Rate (RFC 4342, sec. 8.5) | 149 | * @ccid3hcrx_pinv - Inverse of Loss Event Rate (RFC 4342, sec. 8.5) |
150 | * @ccid3hcrx_elapsed_time - Time since packet reception | ||
151 | */ | 150 | */ |
152 | struct ccid3_hc_rx_sock { | 151 | struct ccid3_hc_rx_sock { |
153 | struct tfrc_rx_info ccid3hcrx_tfrc; | 152 | struct tfrc_rx_info ccid3hcrx_tfrc; |
@@ -165,7 +164,6 @@ struct ccid3_hc_rx_sock { | |||
165 | struct list_head ccid3hcrx_li_hist; | 164 | struct list_head ccid3hcrx_li_hist; |
166 | u16 ccid3hcrx_s; | 165 | u16 ccid3hcrx_s; |
167 | u32 ccid3hcrx_pinv; | 166 | u32 ccid3hcrx_pinv; |
168 | u32 ccid3hcrx_elapsed_time; | ||
169 | }; | 167 | }; |
170 | 168 | ||
171 | static inline struct ccid3_hc_rx_sock *ccid3_hc_rx_sk(const struct sock *sk) | 169 | static inline struct ccid3_hc_rx_sock *ccid3_hc_rx_sk(const struct sock *sk) |