Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 11 Feb 2010 15:36:39 +0000 (UTC)
From:      Lawrence Stewart <lstewart@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r203781 - projects/tcp_cc_head/sys/netinet
Message-ID:  <201002111536.o1BFadGx015204@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: lstewart
Date: Thu Feb 11 15:36:39 2010
New Revision: 203781
URL: http://svn.freebsd.org/changeset/base/203781

Log:
  - The ertt helper actually needs an input and output path hook point to work
  correctly, so update accordingly.
  
  - In order to do enhanced timing correctly, need to track the most recently
    SACKed sequence number, by adding a new member to sackhint.
  
  - Expand the context data passed to the helper hooks as required by the ertt
    helper.

Modified:
  projects/tcp_cc_head/sys/netinet/tcp_input.c
  projects/tcp_cc_head/sys/netinet/tcp_output.c
  projects/tcp_cc_head/sys/netinet/tcp_sack.c
  projects/tcp_cc_head/sys/netinet/tcp_subr.c

Modified: projects/tcp_cc_head/sys/netinet/tcp_input.c
==============================================================================
--- projects/tcp_cc_head/sys/netinet/tcp_input.c	Thu Feb 11 15:34:54 2010	(r203780)
+++ projects/tcp_cc_head/sys/netinet/tcp_input.c	Thu Feb 11 15:36:39 2010	(r203781)
@@ -2119,14 +2119,20 @@ tcp_do_segment(struct mbuf *m, struct tc
 			TCPSTAT_INC(tcps_rcvacktoomuch);
 			goto dropafterack;
 		}
+		hhook_data.new_sacked_bytes = 0;
 		if ((tp->t_flags & TF_SACK_PERMIT) &&
 		    ((to.to_flags & TOF_SACK) ||
-		     !TAILQ_EMPTY(&tp->snd_holes)))
+		     !TAILQ_EMPTY(&tp->snd_holes))) {
 			tcp_sack_doack(tp, &to, th->th_ack);
+			/* XXXDH: should only be one if a productive SACK */
+			hhook_data.new_sacked_bytes = 1;
+		}
 
-		hhook_data.curack = th->th_ack;
-		run_hhooks(HHOOK_TYPE_TCP, HHOOK_TCP_ESTABLISHED, &hhook_data,
-		tp->dblocks, tp->n_dblocks);
+		hhook_data.tp = tp;
+		hhook_data.th = th;
+		hhook_data.to = &to;
+		run_hhooks(HHOOK_TYPE_TCP, HHOOK_TCP_ESTABLISHED_IN, &hhook_data,
+		    tp->dblocks, tp->n_dblocks);
 
 		if (SEQ_LEQ(th->th_ack, tp->snd_una)) {
 			if (tlen == 0 && tiwin == tp->snd_wnd) {

Modified: projects/tcp_cc_head/sys/netinet/tcp_output.c
==============================================================================
--- projects/tcp_cc_head/sys/netinet/tcp_output.c	Thu Feb 11 15:34:54 2010	(r203780)
+++ projects/tcp_cc_head/sys/netinet/tcp_output.c	Thu Feb 11 15:36:39 2010	(r203781)
@@ -54,6 +54,7 @@ __FBSDID("$FreeBSD$");
 #include <net/vnet.h>
 
 #include <netinet/cc.h>
+#include <netinet/hhooks.h>
 #include <netinet/in.h>
 #include <netinet/in_systm.h>
 #include <netinet/ip.h>
@@ -161,6 +162,7 @@ tcp_output(struct tcpcb *tp)
 	struct sackhole *p;
 	int tso = 0;
 	struct tcpopt to;
+	struct tcp_hhook_data hhook_data;
 #if 0
 	int maxburst = TCP_MAXBURST;
 #endif
@@ -1112,6 +1114,15 @@ timer:
 			tp->snd_max = tp->snd_nxt + len;
 	}
 
+	hhook_data.th = th;
+	hhook_data.tp = tp;
+	hhook_data.to = &to;
+	hhook_data.len = len;
+	hhook_data.tso = tso;
+	run_hhooks(HHOOK_TYPE_TCP, HHOOK_TCP_ESTABLISHED_OUT, &hhook_data,
+	    tp->dblocks, tp->n_dblocks);
+
+
 #ifdef TCPDEBUG
 	/*
 	 * Trace.

Modified: projects/tcp_cc_head/sys/netinet/tcp_sack.c
==============================================================================
--- projects/tcp_cc_head/sys/netinet/tcp_sack.c	Thu Feb 11 15:34:54 2010	(r203780)
+++ projects/tcp_cc_head/sys/netinet/tcp_sack.c	Thu Feb 11 15:36:39 2010	(r203781)
@@ -426,6 +426,7 @@ tcp_sack_doack(struct tcpcb *tp, struct 
 	 * are received.
 	 */
 	sblkp = &sack_blocks[num_sack_blks - 1];	/* Last SACK block */
+	tp->sackhint.last_sack_ack = sblkp->end;
 	if (SEQ_LT(tp->snd_fack, sblkp->start)) {
 		/*
 		 * The highest SACK block is beyond fack.  Append new SACK

Modified: projects/tcp_cc_head/sys/netinet/tcp_subr.c
==============================================================================
--- projects/tcp_cc_head/sys/netinet/tcp_subr.c	Thu Feb 11 15:34:54 2010	(r203780)
+++ projects/tcp_cc_head/sys/netinet/tcp_subr.c	Thu Feb 11 15:36:39 2010	(r203781)
@@ -378,7 +378,10 @@ tcp_init(void)
 
 	V_tcp_inflight_rttthresh = TCPTV_INFLIGHT_RTTTHRESH;
 
-	if (register_hhook_head(HHOOK_TYPE_TCP, HHOOK_TCP_ESTABLISHED,
+	if (register_hhook_head(HHOOK_TYPE_TCP, HHOOK_TCP_ESTABLISHED_IN,
+	    HHOOK_NOWAIT) != 0)
+		printf("%s: WARNING: unable to register helper hook\n", __func__);
+	if (register_hhook_head(HHOOK_TYPE_TCP, HHOOK_TCP_ESTABLISHED_OUT,
 	    HHOOK_NOWAIT) != 0)
 		printf("%s: WARNING: unable to register helper hook\n", __func__);
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201002111536.o1BFadGx015204>