aboutsummaryrefslogtreecommitdiffstats
path: root/net/dccp/ccids/lib/packet_history.c
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2007-11-29 22:47:15 -0200
committerDavid S. Miller <davem@davemloft.net>2008-01-28 14:55:19 -0800
commit9108d5f4b2cd82f55ad178caa0be66a866a06dcc (patch)
treec706ab8146fa93ab56c72037b7daa2a6f78e4062 /net/dccp/ccids/lib/packet_history.c
parent[NET]: Implement the per network namespace sysctl infrastructure (diff)
downloadlinux-dev-9108d5f4b2cd82f55ad178caa0be66a866a06dcc.tar.xz
linux-dev-9108d5f4b2cd82f55ad178caa0be66a866a06dcc.zip
[TFRC]: Hide tx history details from the CCIDs
Based on a previous patch by Gerrit Renker. Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/dccp/ccids/lib/packet_history.c')
-rw-r--r--net/dccp/ccids/lib/packet_history.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/net/dccp/ccids/lib/packet_history.c b/net/dccp/ccids/lib/packet_history.c
index 139736064713..4805de996568 100644
--- a/net/dccp/ccids/lib/packet_history.c
+++ b/net/dccp/ccids/lib/packet_history.c
@@ -39,12 +39,24 @@
#include <linux/string.h>
#include "packet_history.h"
+/**
+ * tfrc_tx_hist_entry - Simple singly-linked TX history list
+ * @next: next oldest entry (LIFO order)
+ * @seqno: sequence number of this entry
+ * @stamp: send time of packet with sequence number @seqno
+ */
+struct tfrc_tx_hist_entry {
+ struct tfrc_tx_hist_entry *next;
+ u64 seqno;
+ ktime_t stamp;
+};
+
/*
* Transmitter History Routines
*/
static struct kmem_cache *tfrc_tx_hist;
-struct tfrc_tx_hist_entry *
+static struct tfrc_tx_hist_entry *
tfrc_tx_hist_find_entry(struct tfrc_tx_hist_entry *head, u64 seqno)
{
while (head != NULL && head->seqno != seqno)
@@ -52,7 +64,6 @@ struct tfrc_tx_hist_entry *
return head;
}
-EXPORT_SYMBOL_GPL(tfrc_tx_hist_find_entry);
int tfrc_tx_hist_add(struct tfrc_tx_hist_entry **headp, u64 seqno)
{
@@ -83,6 +94,24 @@ void tfrc_tx_hist_purge(struct tfrc_tx_hist_entry **headp)
}
EXPORT_SYMBOL_GPL(tfrc_tx_hist_purge);
+u32 tfrc_tx_hist_rtt(struct tfrc_tx_hist_entry *head, const u64 seqno,
+ const ktime_t now)
+{
+ u32 rtt = 0;
+ struct tfrc_tx_hist_entry *packet = tfrc_tx_hist_find_entry(head, seqno);
+
+ if (packet != NULL) {
+ rtt = ktime_us_delta(now, packet->stamp);
+ /*
+ * Garbage-collect older (irrelevant) entries:
+ */
+ tfrc_tx_hist_purge(&packet->next);
+ }
+
+ return rtt;
+}
+EXPORT_SYMBOL_GPL(tfrc_tx_hist_rtt);
+
/*
* Receiver History Routines
*/