PERFORCE change 197759 for review
Catalin Nicutar
cnicutar at FreeBSD.org
Wed Aug 17 08:18:47 UTC 2011
http://p4web.freebsd.org/@@197759?ac=10
Change 197759 by cnicutar at cnicutar_cronos on 2011/08/17 08:18:09
Change the behavior of TCP_RCVUTO_TIMEOUT to allow the application
to impose a per-connection maximum timeout.
Affected files ...
.. //depot/projects/soc2011/cnicutar_tcputo_9/src/sys/netinet/tcp_syncache.c#5 edit
.. //depot/projects/soc2011/cnicutar_tcputo_9/src/sys/netinet/tcp_syncache.h#4 edit
.. //depot/projects/soc2011/cnicutar_tcputo_9/src/sys/netinet/tcp_timer.c#4 edit
.. //depot/projects/soc2011/cnicutar_tcputo_9/src/sys/netinet/tcp_usrreq.c#3 edit
.. //depot/projects/soc2011/cnicutar_tcputo_9/src/sys/netinet/tcp_var.h#5 edit
Differences ...
==== //depot/projects/soc2011/cnicutar_tcputo_9/src/sys/netinet/tcp_syncache.c#5 (text+ko) ====
@@ -835,6 +835,7 @@
tp->t_flags |= TF_RCV_UTO;
/* Regardless of SCF_RCV_UTO. */
tp->rcv_uto = sc->sc_rcv_uto;
+ tp->max_uto = sc->sc_max_uto;
}
if (sc->sc_flags & SCF_ECN)
@@ -1053,7 +1054,7 @@
* socket accept suggestions?).
*/
uint16_t rcv_uto_tf;
- uint32_t rcv_uto = 0;
+ uint32_t rcv_uto = 0, max_uto = 0;
INP_INFO_WLOCK_ASSERT(&V_tcbinfo);
INP_WLOCK_ASSERT(inp); /* listen socket */
@@ -1089,6 +1090,7 @@
/* Remember received UTO regardless of disposition and clear it. */
rcv_uto_tf = (tp->t_flags & TF_RCV_UTO) ? SCF_RCV_UTO : 0;
rcv_uto = tp->rcv_uto;
+ max_uto = tp->max_uto;
tp->rcv_uto = 0;
/* By the time we drop the lock these should no longer be used. */
@@ -1307,6 +1309,7 @@
/* Inherit received UTO, regardless of disposition. */
sc->sc_flags |= rcv_uto_tf;
sc->sc_rcv_uto = rcv_uto;
+ sc->sc_max_uto = max_uto;
if (V_tcp_syncookies) {
syncookie_generate(sch, sc, &flowtmp);
==== //depot/projects/soc2011/cnicutar_tcputo_9/src/sys/netinet/tcp_syncache.h#4 (text+ko) ====
@@ -84,6 +84,7 @@
u_int32_t sc_snd_uto; /* Sent UTO (seconds) */
u_int32_t sc_rcv_uto; /* Received UTO (seconds) */
+ u_int32_t sc_max_uto; /* Maximum UTO (seconds) */
};
/*
==== //depot/projects/soc2011/cnicutar_tcputo_9/src/sys/netinet/tcp_timer.c#4 (text+ko) ====
@@ -504,9 +504,9 @@
* compute how much time we've got left.
*/
uto_left = 0;
- if (tp->t_flags & TF_RCV_UTO)
+ if (tp->t_flags & TF_RCV_UTO && tp->rcv_uto)
/* Clamping the received value. */
- uto_left = min(V_uto_max_timeout,
+ uto_left = min(tp->max_uto,
max(V_uto_min_timeout, tp->rcv_uto));
/* Taking the longer timeout. */
==== //depot/projects/soc2011/cnicutar_tcputo_9/src/sys/netinet/tcp_usrreq.c#3 (text+ko) ====
@@ -1356,8 +1356,15 @@
if (optval <= 0)
/* This connection will ignore suggestions. */
tp->t_flags &= ~TF_RCV_UTO;
- else
+ else {
tp->t_flags |= TF_RCV_UTO;
+ /*
+ * If optval > 1, we'll use it as the max
+ * acceptable suggestion.
+ */
+ tp->max_uto = (optval > 1) ?
+ optval : V_uto_max_timeout;
+ }
INP_WUNLOCK(inp);
break;
case TCP_NODELAY:
==== //depot/projects/soc2011/cnicutar_tcputo_9/src/sys/netinet/tcp_var.h#5 (text+ko) ====
@@ -203,12 +203,13 @@
struct cc_var *ccv; /* congestion control specific vars */
struct osd *osd; /* storage for Khelp module data */
- uint32_t t_ispare[9]; /* 4 keep timers, 2 UTO, 3 TBD */
+ uint32_t t_ispare[8]; /* 4 keep timers, 1 UTO, 3 TBD */
void *t_pspare2[4]; /* 4 TBD */
uint64_t _pad[6]; /* 6 TBD (1-2 CC/RTT?) */
uint32_t snd_uto; /* sent timeout (seconds) */
uint32_t rcv_uto; /* received suggestion (seconds) */
+ uint32_t max_uto; /* max received uto (seconds) */
int t_suto; /* uto starting time (ticks) */
};
More information about the p4-projects
mailing list