lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20081029053342.GA26455@gerrit.erg.abdn.ac.uk>
Date:	Wed, 29 Oct 2008 06:33:43 +0100
From:	Gerrit Renker <gerrit@....abdn.ac.uk>
To:	dccp@...r.kernel.org, netdev@...r.kernel.org
Subject: dccp test-tree [RFC/RFT] [Patch 1/1] dccp ccid-2: Use u32
	timestamps uniformly

This is an update of the dccp test tree at

	git://eden-feed.erg.abdn.ac.uk/dccp_exp	[subtree `dccp']

It is part of an ongoing effort to improve and align the code with 
existing code.

>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Patch <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
dccp ccid-2: Use u32 timestamps uniformly

CCID-2 is de facto a mini implementation of TCP. Thus it makes sense to share
as much code as possible. 

This patch therefore aligns CCID-2 timestamping with TCP timestamping, which
also halves the space consumption (on 64-bit systems).

The necessary include file <net/tcp.h> is already included by way of
net/dccp.h.  Redundant include files are also removed.

Signed-off-by: Gerrit Renker <gerrit@....abdn.ac.uk>
---
 net/dccp/ccids/ccid2.c |   14 ++++++--------
 net/dccp/ccids/ccid2.h |   15 ++++++++++-----
 2 files changed, 16 insertions(+), 13 deletions(-)

--- a/net/dccp/ccids/ccid2.h
+++ b/net/dccp/ccids/ccid2.h
@@ -20,18 +20,23 @@
 #ifndef _DCCP_CCID2_H_
 #define _DCCP_CCID2_H_
 
-#include <linux/dccp.h>
 #include <linux/timer.h>
 #include <linux/types.h>
 #include "../ccid.h"
+#include "../dccp.h"
+
+/*
+ * CCID-2 timestamping faces the same issues as TCP timestamping.
+ * Hence we reuse/share as much of the code as possible.
+ */
+#define ccid2_time_stamp	tcp_time_stamp
+
 /* NUMDUPACK parameter from RFC 4341, p. 6 */
 #define NUMDUPACK	3
 
-struct sock;
-
 struct ccid2_seq {
 	u64			ccid2s_seq;
-	unsigned long		ccid2s_sent;
+	u32			ccid2s_sent;
 	int			ccid2s_acked;
 	struct ccid2_seq	*ccid2s_prev;
 	struct ccid2_seq	*ccid2s_next;
@@ -73,7 +78,7 @@ struct ccid2_hc_tx_sock {
 	struct timer_list	rtotimer;
 	u64			rpseq;
 	int			rpdupack;
-	unsigned long		last_cong;
+	u32			last_cong;
 	u64			high_ack;
 	struct list_head	av_chunks;
 };
--- a/net/dccp/ccids/ccid2.c
+++ b/net/dccp/ccids/ccid2.c
@@ -26,8 +26,6 @@
  * This implementation should follow RFC 4341
  */
 #include "../feat.h"
-#include "../ccid.h"
-#include "../dccp.h"
 #include "ccid2.h"
 
 
@@ -177,7 +175,7 @@ static void ccid2_hc_tx_packet_sent(stru
 
 	hctx->seqh->ccid2s_seq   = dp->dccps_gss;
 	hctx->seqh->ccid2s_acked = 0;
-	hctx->seqh->ccid2s_sent  = jiffies;
+	hctx->seqh->ccid2s_sent  = ccid2_time_stamp;
 
 	next = hctx->seqh->ccid2s_next;
 	/* check if we need to alloc more space */
@@ -252,7 +250,7 @@ static void ccid2_hc_tx_packet_sent(stru
 		struct ccid2_seq *seqp = hctx->seqt;
 
 		while (seqp != hctx->seqh) {
-			ccid2_pr_debug("out seq=%llu acked=%d time=%lu\n",
+			ccid2_pr_debug("out seq=%llu acked=%d time=%u\n",
 				       (unsigned long long)seqp->ccid2s_seq,
 				       seqp->ccid2s_acked, seqp->ccid2s_sent);
 			seqp = seqp->ccid2s_next;
@@ -372,19 +370,19 @@ static void ccid2_new_ack(struct sock *s
 	 * The cleanest solution is to not use the ccid2s_sent field at all
 	 * and instead use DCCP timestamps - need to be resolved at some time.
 	 */
-	ccid2_rtt_estimator(sk, jiffies - seqp->ccid2s_sent);
+	ccid2_rtt_estimator(sk, ccid2_time_stamp - seqp->ccid2s_sent);
 }
 
 static void ccid2_congestion_event(struct sock *sk, struct ccid2_seq *seqp)
 {
 	struct ccid2_hc_tx_sock *hctx = ccid2_hc_tx_sk(sk);
 
-	if (time_before(seqp->ccid2s_sent, hctx->last_cong)) {
+	if ((s32)(seqp->ccid2s_sent - hctx->last_cong) < 0) {
 		ccid2_pr_debug("Multiple losses in an RTT---treating as one\n");
 		return;
 	}
 
-	hctx->last_cong = jiffies;
+	hctx->last_cong = ccid2_time_stamp;
 
 	hctx->cwnd     = hctx->cwnd / 2 ? : 1U;
 	hctx->ssthresh = max(hctx->cwnd, 2U);
@@ -634,7 +632,7 @@ static int ccid2_hc_tx_init(struct ccid 
 
 	hctx->rto	= DCCP_TIMEOUT_INIT;
 	hctx->rpdupack  = -1;
-	hctx->last_cong = jiffies;
+	hctx->last_cong = ccid2_time_stamp;
 	setup_timer(&hctx->rtotimer, ccid2_hc_tx_rto_expire, (unsigned long)sk);
 	INIT_LIST_HEAD(&hctx->av_chunks);
 	return 0;
-- 
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ