diff -uwr linux-2.6.11.2/net/ipv4.orig/sysctl_net_ipv4.c linux-2.6.11.2/net/ipv4/sysctl_net_ipv4.c
--- linux-2.6.11.2/net/ipv4.orig/sysctl_net_ipv4.c	2005-03-10 19:57:32.000000000 +0100
+++ linux-2.6.11.2/net/ipv4/sysctl_net_ipv4.c	2005-03-10 20:30:20.000000000 +0100
@@ -690,6 +690,22 @@
 		.mode		= 0644,
 		.proc_handler	= &proc_dointvec,
 	},
+        {
+	        .ctl_name= NET_TCP_ASAC_SPOOF,
+	        .procname= "tcp_asac_spoof",
+	        .data= &sysctl_tcp_asac_spoof,
+	        .maxlen= sizeof(int),
+	        .mode= 0644,
+	        .proc_handler= &proc_dointvec
+	},
+        {
+	        .ctl_name= NET_TCP_ASAC_SPOOF_OFFSET,
+	        .procname= "tcp_asac_spoof_offset",
+	        .data= &sysctl_tcp_asac_spoof_offset,
+	        .maxlen= sizeof(int),
+	        .mode= 0644,
+	        .proc_handler= &proc_dointvec
+	},
 	{ .ctl_name = 0 }
 };
 
Only in linux-2.6.11.2/net/ipv4: sysctl_net_ipv4.c~
diff -uwr linux-2.6.11.2/net/ipv4.orig/tcp.c linux-2.6.11.2/net/ipv4/tcp.c
--- linux-2.6.11.2/net/ipv4.orig/tcp.c	2005-03-10 19:57:32.000000000 +0100
+++ linux-2.6.11.2/net/ipv4/tcp.c	2005-03-10 20:12:30.000000000 +0100
@@ -2015,7 +2015,7 @@
 		if (val < 1 || val > MAX_TCP_KEEPIDLE)
 			err = -EINVAL;
 		else {
-			tp->keepalive_time = val * HZ;
+			tp->keepalive_time = val * ASAC_HZ;
 			if (sock_flag(sk, SOCK_KEEPOPEN) &&
 			    !((1 << sk->sk_state) &
 			      (TCPF_CLOSE | TCPF_LISTEN))) {
@@ -2032,7 +2032,7 @@
 		if (val < 1 || val > MAX_TCP_KEEPINTVL)
 			err = -EINVAL;
 		else
-			tp->keepalive_intvl = val * HZ;
+			tp->keepalive_intvl = val * ASAC_HZ;
 		break;
 	case TCP_KEEPCNT:
 		if (val < 1 || val > MAX_TCP_KEEPCNT)
@@ -2050,10 +2050,10 @@
 	case TCP_LINGER2:
 		if (val < 0)
 			tp->linger2 = -1;
-		else if (val > sysctl_tcp_fin_timeout / HZ)
+		else if (val > sysctl_tcp_fin_timeout / ASAC_HZ)
 			tp->linger2 = 0;
 		else
-			tp->linger2 = val * HZ;
+			tp->linger2 = val * ASAC_HZ;
 		break;
 
 	case TCP_DEFER_ACCEPT:
@@ -2062,7 +2062,7 @@
 			/* Translate value in seconds to number of
 			 * retransmits */
 			while (tp->defer_accept < 32 &&
-			       val > ((TCP_TIMEOUT_INIT / HZ) <<
+			       val > ((TCP_TIMEOUT_INIT / ASAC_HZ) <<
 				       tp->defer_accept))
 				tp->defer_accept++;
 			tp->defer_accept++;
@@ -2195,10 +2195,10 @@
 		val = !!(tp->nonagle&TCP_NAGLE_CORK);
 		break;
 	case TCP_KEEPIDLE:
-		val = (tp->keepalive_time ? : sysctl_tcp_keepalive_time) / HZ;
+		val = (tp->keepalive_time ? : sysctl_tcp_keepalive_time) / ASAC_HZ;
 		break;
 	case TCP_KEEPINTVL:
-		val = (tp->keepalive_intvl ? : sysctl_tcp_keepalive_intvl) / HZ;
+		val = (tp->keepalive_intvl ? : sysctl_tcp_keepalive_intvl) / ASAC_HZ;
 		break;
 	case TCP_KEEPCNT:
 		val = tp->keepalive_probes ? : sysctl_tcp_keepalive_probes;
@@ -2209,10 +2209,10 @@
 	case TCP_LINGER2:
 		val = tp->linger2;
 		if (val >= 0)
-			val = (val ? : sysctl_tcp_fin_timeout) / HZ;
+			val = (val ? : sysctl_tcp_fin_timeout) / ASAC_HZ;
 		break;
 	case TCP_DEFER_ACCEPT:
-		val = !tp->defer_accept ? 0 : ((TCP_TIMEOUT_INIT / HZ) <<
+		val = !tp->defer_accept ? 0 : ((TCP_TIMEOUT_INIT / ASAC_HZ) <<
 					       (tp->defer_accept - 1));
 		break;
 	case TCP_WINDOW_CLAMP:
Only in linux-2.6.11.2/net/ipv4: tcp.c~
diff -uwr linux-2.6.11.2/net/ipv4.orig/tcp_diag.c linux-2.6.11.2/net/ipv4/tcp_diag.c
--- linux-2.6.11.2/net/ipv4.orig/tcp_diag.c	2005-03-10 19:57:32.000000000 +0100
+++ linux-2.6.11.2/net/ipv4/tcp_diag.c	2005-03-10 20:12:24.000000000 +0100
@@ -98,7 +98,7 @@
 		r->id.tcpdiag_dst[0] = tw->tw_daddr;
 		r->tcpdiag_state = tw->tw_substate;
 		r->tcpdiag_timer = 3;
-		r->tcpdiag_expires = (tmo*1000+HZ-1)/HZ;
+		r->tcpdiag_expires = (tmo*1000+ASAC_HZ-1)/ASAC_HZ;
 		r->tcpdiag_rqueue = 0;
 		r->tcpdiag_wqueue = 0;
 		r->tcpdiag_uid = 0;
@@ -131,7 +131,7 @@
 	}
 #endif
 
-#define EXPIRES_IN_MS(tmo)  ((tmo-jiffies)*1000+HZ-1)/HZ
+#define EXPIRES_IN_MS(tmo)  ((tmo-jiffies)*1000+ASAC_HZ-1)/ASAC_HZ
 
 	if (tp->pending == TCP_TIME_RETRANS) {
 		r->tcpdiag_timer = 1;
Only in linux-2.6.11.2/net/ipv4: tcp_diag.c~
diff -uwr linux-2.6.11.2/net/ipv4.orig/tcp_input.c linux-2.6.11.2/net/ipv4/tcp_input.c
--- linux-2.6.11.2/net/ipv4.orig/tcp_input.c	2005-03-10 19:57:32.000000000 +0100
+++ linux-2.6.11.2/net/ipv4/tcp_input.c	2005-03-10 20:34:46.000000000 +0100
@@ -104,6 +104,10 @@
 int sysctl_tcp_bic_low_window = 14;
 int sysctl_tcp_bic_beta = 819;		/* = 819/1024 (BICTCP_BETA_SCALE) */
 
+/* asac spoof patch */
+int sysctl_tcp_asac_spoof = 1;
+int sysctl_tcp_asac_spoof_offset = 300;
+
 #define FLAG_DATA		0x01 /* Incoming frame contained data.		*/
 #define FLAG_WIN_UPDATE		0x02 /* Incoming ACK was a window update.	*/
 #define FLAG_DATA_ACKED		0x04 /* This ACK acknowledged new data.		*/
@@ -2035,7 +2039,7 @@
 		return tp->snd_cwnd;
 
 	if (tp->bictcp.last_cwnd == tp->snd_cwnd &&
-	   (s32)(tcp_time_stamp - tp->bictcp.last_stamp) <= (HZ>>5))
+	   (s32)(tcp_time_stamp - tp->bictcp.last_stamp) <= (ASAC_HZ>>5))
 		return tp->bictcp.cnt;
 
 	tp->bictcp.last_cwnd = tp->snd_cwnd;
@@ -3148,7 +3152,7 @@
 		!tcp_may_update_window(tp, ack, seq, ntohs(th->window) << tp->rx_opt.snd_wscale) &&
 
 		/* 4. ... and sits in replay window. */
-		(s32)(tp->rx_opt.ts_recent - tp->rx_opt.rcv_tsval) <= (tp->rto*1024)/HZ);
+		(s32)(tp->rx_opt.ts_recent - tp->rx_opt.rcv_tsval) <= (tp->rto*1024)/ASAC_HZ);
 }
 
 static inline int tcp_paws_discard(struct tcp_sock *tp, struct sk_buff *skb)
Only in linux-2.6.11.2/net/ipv4: tcp_input.c~
diff -uwr linux-2.6.11.2/net/ipv4.orig/tcp_ipv4.c linux-2.6.11.2/net/ipv4/tcp_ipv4.c
--- linux-2.6.11.2/net/ipv4.orig/tcp_ipv4.c	2005-03-10 19:57:32.000000000 +0100
+++ linux-2.6.11.2/net/ipv4/tcp_ipv4.c	2005-03-10 20:12:10.000000000 +0100
@@ -1338,7 +1338,7 @@
 {
 	static unsigned long warntime;
 
-	if (time_after(jiffies, (warntime + HZ * 60))) {
+	if (time_after(jiffies, (warntime + ASAC_HZ * 60))) {
 		warntime = jiffies;
 		printk(KERN_INFO
 		       "possible SYN flooding on port %d. Sending cookies.\n",
Only in linux-2.6.11.2/net/ipv4: tcp_ipv4.c~
diff -uwr linux-2.6.11.2/net/ipv4.orig/tcp_timer.c linux-2.6.11.2/net/ipv4/tcp_timer.c
--- linux-2.6.11.2/net/ipv4.orig/tcp_timer.c	2005-03-10 19:57:32.000000000 +0100
+++ linux-2.6.11.2/net/ipv4/tcp_timer.c	2005-03-10 20:12:04.000000000 +0100
@@ -424,7 +424,7 @@
 	bh_lock_sock(sk);
 	if (sock_owned_by_user(sk)) {
 		/* Try again later */
-		sk_reset_timer(sk, &tp->retransmit_timer, jiffies + (HZ / 20));
+		sk_reset_timer(sk, &tp->retransmit_timer, jiffies + (ASAC_HZ / 20));
 		goto out_unlock;
 	}
 
@@ -580,7 +580,7 @@
 	bh_lock_sock(sk);
 	if (sock_owned_by_user(sk)) {
 		/* Try again later. */ 
-		tcp_reset_keepalive_timer (sk, HZ/20);
+		tcp_reset_keepalive_timer (sk, ASAC_HZ/20);
 		goto out;
 	}
 
Only in linux-2.6.11.2/net/ipv4: tcp_timer.c~
Only in linux-2.6.11.2/net/ipv4: xfrm4_state.c~
--- linux-2.6.11.2/include/linux/sysctl.h.orig	2005-03-10 19:57:02.000000000 +0100
+++ linux-2.6.11.2/include/linux/sysctl.h	2005-03-10 19:59:39.000000000 +0100
@@ -345,6 +345,8 @@
 	NET_TCP_MODERATE_RCVBUF=106,
 	NET_TCP_TSO_WIN_DIVISOR=107,
 	NET_TCP_BIC_BETA=108,
+        NET_TCP_ASAC_SPOOF=300,
+        NET_TCP_ASAC_SPOOF_OFFSET=301,
 };
 
 enum {
--- linux-2.6.11.2/include/net/tcp.h.orig	2005-03-10 19:57:10.000000000 +0100
+++ linux-2.6.11.2/include/net/tcp.h	2005-03-10 20:20:13.000000000 +0100
@@ -39,6 +39,8 @@
 #endif
 #include <linux/seq_file.h>
 
+#define ASAC_HZ (HZ/10)
+
 /* This is for all connections with a full identity, no wildcards.
  * New scheme, half the table is for TIME_WAIT, the other half is
  * for the rest.  I'll experiment with dynamic table growth later.
@@ -429,7 +431,7 @@
 				 */
 
 
-#define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT
+#define TCP_TIMEWAIT_LEN (60*ASAC_HZ) /* how long to wait to destroy TIME-WAIT
 				  * state, about 60 seconds	*/
 #define TCP_FIN_TIMEOUT	TCP_TIMEWAIT_LEN
                                  /* BSD style FIN_WAIT2 deadlock breaker.
@@ -438,32 +440,32 @@
 				  * TIME-WAIT timer.
 				  */
 
-#define TCP_DELACK_MAX	((unsigned)(HZ/5))	/* maximal time to delay before sending an ACK */
-#if HZ >= 100
-#define TCP_DELACK_MIN	((unsigned)(HZ/25))	/* minimal time to delay before sending an ACK */
-#define TCP_ATO_MIN	((unsigned)(HZ/25))
+#define TCP_DELACK_MAX	((unsigned)(ASAC_HZ/5))	/* maximal time to delay before sending an ACK */
+#if ASAC_HZ >= 100
+#define TCP_DELACK_MIN	((unsigned)(ASAC_HZ/25))	/* minimal time to delay before sending an ACK */
+#define TCP_ATO_MIN	((unsigned)(ASAC_HZ/25))
 #else
 #define TCP_DELACK_MIN	4U
 #define TCP_ATO_MIN	4U
 #endif
-#define TCP_RTO_MAX	((unsigned)(120*HZ))
-#define TCP_RTO_MIN	((unsigned)(HZ/5))
-#define TCP_TIMEOUT_INIT ((unsigned)(3*HZ))	/* RFC 1122 initial RTO value	*/
+#define TCP_RTO_MAX	((unsigned)(120*ASAC_HZ))
+#define TCP_RTO_MIN	((unsigned)(ASAC_HZ/5))
+#define TCP_TIMEOUT_INIT ((unsigned)(3*ASAC_HZ))	/* RFC 1122 initial RTO value	*/
 
-#define TCP_RESOURCE_PROBE_INTERVAL ((unsigned)(HZ/2U)) /* Maximal interval between probes
+#define TCP_RESOURCE_PROBE_INTERVAL ((unsigned)(ASAC_HZ/2U)) /* Maximal interval between probes
 					                 * for local resources.
 					                 */
 
-#define TCP_KEEPALIVE_TIME	(120*60*HZ)	/* two hours */
+#define TCP_KEEPALIVE_TIME	(120*60*ASAC_HZ)	/* two hours */
 #define TCP_KEEPALIVE_PROBES	9		/* Max of 9 keepalive probes	*/
-#define TCP_KEEPALIVE_INTVL	(75*HZ)
+#define TCP_KEEPALIVE_INTVL	(75*ASAC_HZ)
 
 #define MAX_TCP_KEEPIDLE	32767
 #define MAX_TCP_KEEPINTVL	32767
 #define MAX_TCP_KEEPCNT		127
 #define MAX_TCP_SYNCNT		127
 
-#define TCP_SYNQ_INTERVAL	(HZ/5)	/* Period of SYNACK timer */
+#define TCP_SYNQ_INTERVAL	(ASAC_HZ/5)	/* Period of SYNACK timer */
 #define TCP_SYNQ_HSIZE		512	/* Size of SYNACK hash table */
 
 #define TCP_PAWS_24DAYS	(60 * 60 * 24 * 24)
@@ -485,21 +487,21 @@
    so that we select tick to get range about 4 seconds.
  */
 
-#if HZ <= 16 || HZ > 4096
-# error Unsupported: HZ <= 16 or HZ > 4096
-#elif HZ <= 32
+#if ASAC_HZ <= 16 || ASAC_HZ > 4096
+# error Unsupported: ASAC_HZ <= 16 or ASAC_HZ > 4096
+#elif ASAC_HZ <= 32
 # define TCP_TW_RECYCLE_TICK (5+2-TCP_TW_RECYCLE_SLOTS_LOG)
-#elif HZ <= 64
+#elif ASAC_HZ <= 64
 # define TCP_TW_RECYCLE_TICK (6+2-TCP_TW_RECYCLE_SLOTS_LOG)
-#elif HZ <= 128
+#elif ASAC_HZ <= 128
 # define TCP_TW_RECYCLE_TICK (7+2-TCP_TW_RECYCLE_SLOTS_LOG)
-#elif HZ <= 256
+#elif ASAC_HZ <= 256
 # define TCP_TW_RECYCLE_TICK (8+2-TCP_TW_RECYCLE_SLOTS_LOG)
-#elif HZ <= 512
+#elif ASAC_HZ <= 512
 # define TCP_TW_RECYCLE_TICK (9+2-TCP_TW_RECYCLE_SLOTS_LOG)
-#elif HZ <= 1024
+#elif ASAC_HZ <= 1024
 # define TCP_TW_RECYCLE_TICK (10+2-TCP_TW_RECYCLE_SLOTS_LOG)
-#elif HZ <= 2048
+#elif ASAC_HZ <= 2048
 # define TCP_TW_RECYCLE_TICK (11+2-TCP_TW_RECYCLE_SLOTS_LOG)
 #else
 # define TCP_TW_RECYCLE_TICK (12+2-TCP_TW_RECYCLE_SLOTS_LOG)
@@ -608,6 +610,8 @@
 extern int sysctl_tcp_bic_beta;
 extern int sysctl_tcp_moderate_rcvbuf;
 extern int sysctl_tcp_tso_win_divisor;
+extern int sysctl_tcp_asac_spoof;
+extern int sysctl_tcp_asac_spoof_offset;
 
 extern atomic_t tcp_memory_allocated;
 extern atomic_t tcp_sockets_allocated;
@@ -1108,7 +1112,8 @@
  * only use of the low 32-bits of jiffies and hide the ugly
  * casts with the following macro.
  */
-#define tcp_time_stamp		((__u32)(jiffies))
+#define tcp_time_stamp		(sysctl_tcp_asac_spoof ? (__u32)( jiffies / 10 /* 2.6 -> 2.4 */ + 100 /* Hz */ * 60 /* sec */ * 60 /* min */ * 24 /* hrs */ * sysctl_tcp_asac_spoof_offset) : (__u32)(jiffies))
+ 
 
 /* This is what the send packet queueing engine uses to pass
  * TCP per-packet control information to the transmission
@@ -1938,8 +1943,8 @@
 {
 	/* See RFC 2012 */
 	TCP_ADD_STATS_USER(TCP_MIB_RTOALGORITHM, 1);
-	TCP_ADD_STATS_USER(TCP_MIB_RTOMIN, TCP_RTO_MIN*1000/HZ);
-	TCP_ADD_STATS_USER(TCP_MIB_RTOMAX, TCP_RTO_MAX*1000/HZ);
+	TCP_ADD_STATS_USER(TCP_MIB_RTOMIN, TCP_RTO_MIN*1000/ASAC_HZ);
+	TCP_ADD_STATS_USER(TCP_MIB_RTOMAX, TCP_RTO_MAX*1000/ASAC_HZ);
 	TCP_ADD_STATS_USER(TCP_MIB_MAXCONN, -1);
 }
 
@@ -1972,8 +1977,8 @@
 
 /* TCP Westwood functions and constants */
 
-#define TCP_WESTWOOD_INIT_RTT  (20*HZ)           /* maybe too conservative?! */
-#define TCP_WESTWOOD_RTT_MIN   (HZ/20)           /* 50ms */
+#define TCP_WESTWOOD_INIT_RTT  (20*ASAC_HZ)           /* maybe too conservative?! */
+#define TCP_WESTWOOD_RTT_MIN   (ASAC_HZ/20)           /* 50ms */
 
 static inline void tcp_westwood_update_rtt(struct tcp_sock *tp, __u32 rtt_seq)
 {
