FreeBSD Bugzilla – Attachment 145214 Details for
Bug 191520
[tcp] Implementation of draft-ieft-tcpm-newcwv-06
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Updated NewCWV patch
newcwv-01082014.patch (text/plain), 5.56 KB, created by
Tom Jones
on 2014-08-01 14:20:50 UTC
(
hide
)
Description:
Updated NewCWV patch
Filename:
MIME Type:
Creator:
Tom Jones
Created:
2014-08-01 14:20:50 UTC
Size:
5.56 KB
patch
obsolete
>Index: sys/conf/files >=================================================================== >--- sys/conf/files (revision 269231) >+++ sys/conf/files (working copy) >@@ -3383,6 +3383,7 @@ > netinet/tcp_sack.c optional inet | inet6 > netinet/tcp_subr.c optional inet | inet6 > netinet/tcp_syncache.c optional inet | inet6 >+netinet/tcp_newcwv.c optional inet | inet6 > netinet/tcp_timer.c optional inet | inet6 > netinet/tcp_timewait.c optional inet | inet6 > netinet/tcp_usrreq.c optional inet | inet6 >Index: sys/netinet/tcp_input.c >=================================================================== >--- sys/netinet/tcp_input.c (revision 269231) >+++ sys/netinet/tcp_input.c (working copy) >@@ -105,6 +105,7 @@ > #include <netinet6/tcp6_var.h> > #include <netinet/tcpip.h> > #include <netinet/tcp_syncache.h> >+#include <netinet/tcp_newcwv.h> > #ifdef TCPDEBUG > #include <netinet/tcp_debug.h> > #endif /* TCPDEBUG */ >@@ -174,6 +175,11 @@ > &VNET_NAME(tcp_abc_l_var), 2, > "Cap the max cwnd increment during slow-start to this number of segments"); > >+VNET_DEFINE(int, tcp_do_newcwv) = 0; >+SYSCTL_VNET_INT(_net_inet_tcp, OID_AUTO, newcwv, CTLFLAG_RW, >+ &VNET_NAME(tcp_do_newcwv), 0, >+ "Enable draft-ietf-tcpm-newcwv-06 (New Congestion Window Validation)"); >+ > static SYSCTL_NODE(_net_inet_tcp, OID_AUTO, ecn, CTLFLAG_RW, 0, "TCP ECN"); > > VNET_DEFINE(int, tcp_do_ecn) = 0; >@@ -285,9 +291,12 @@ > INP_WLOCK_ASSERT(tp->t_inpcb); > > tp->ccv->bytes_this_ack = BYTES_THIS_ACK(tp, th); >- if (tp->snd_cwnd <= tp->snd_wnd) >+ /* draft-ietf-tcpm-newcwv relaxes conditions for growing cwnd */ >+ if (tp->snd_cwnd <= tp->snd_wnd || >+ (V_tcp_do_newcwv && tp->newcwv.pipeack >= (tp->snd_cwnd >> 1)) ) { > tp->ccv->flags |= CCF_CWND_LIMITED; >- else >+ tp->newcwv.cwnd_valid_ts = ticks; >+ } else > tp->ccv->flags &= ~CCF_CWND_LIMITED; > > if (type == CC_ACK) { >@@ -309,6 +318,12 @@ > tp->ccv->curack = th->th_ack; > CC_ALGO(tp)->ack_received(tp->ccv, type); > } >+ >+ /* >+ * update draft-ietf-newcwv-06 pipeack >+ */ >+ if(V_tcp_do_newcwv && !IN_FASTRECOVERY(tp->t_flags)) >+ tcp_newcwv_update_pipeack(tp); > } > > static void inline >@@ -378,6 +393,12 @@ > tp->snd_cwnd = 4 * tp->t_maxseg; > } > >+ /* >+ * Initialise NewCWV state >+ */ >+ tp->newcwv.init_cwnd = tp->snd_cwnd; >+ tcp_newcwv_reset(tp); >+ > if (CC_ALGO(tp)->conn_init != NULL) > CC_ALGO(tp)->conn_init(tp->ccv); > } >@@ -426,6 +447,11 @@ > tp->t_badrxtwin = 0; > break; > } >+ >+ if (V_tcp_do_newcwv && >+ (type == CC_NDUPACK || type == CC_ECN) && >+ tp->newcwv.pipeack <= (tp->snd_cwnd >> 1) ) >+ tcp_newcwv_enter_recovery(tp); > > if (CC_ALGO(tp)->cong_signal != NULL) { > if (th != NULL) >@@ -447,6 +473,13 @@ > } > /* XXXLAS: EXIT_RECOVERY ? */ > tp->t_bytes_acked = 0; >+ >+ if(V_tcp_do_newcwv) { >+ if(tp->newcwv.loss_flight_size) >+ tcp_newcwv_end_recovery(tp); >+ tcp_newcwv_reset(tp); >+ } >+ tp->newcwv.loss_flight_size = 0; > } > > #ifdef TCP_SIGNATURE >Index: sys/netinet/tcp_output.c >=================================================================== >--- sys/netinet/tcp_output.c (revision 269231) >+++ sys/netinet/tcp_output.c (working copy) >@@ -74,6 +74,7 @@ > #include <netinet/tcp_timer.h> > #include <netinet/tcp_var.h> > #include <netinet/tcpip.h> >+#include <netinet/tcp_newcwv.h> > #ifdef TCPDEBUG > #include <netinet/tcp_debug.h> > #endif >@@ -691,6 +692,10 @@ > #endif > hdrlen = sizeof (struct tcpiphdr); > >+ /* Trigger the newcwv timer */ >+ if(V_tcp_do_newcwv) >+ tcp_newcwv_datalim_closedown(tp); >+ > /* > * Compute options for segment. > * We only have to care about SYN and established connection >Index: sys/netinet/tcp_subr.c >=================================================================== >--- sys/netinet/tcp_subr.c (revision 269231) >+++ sys/netinet/tcp_subr.c (working copy) >@@ -800,6 +800,7 @@ > tp->t_flags = (TF_REQ_SCALE|TF_REQ_TSTMP); > if (V_tcp_do_sack) > tp->t_flags |= TF_SACK_PERMIT; >+ > TAILQ_INIT(&tp->snd_holes); > tp->t_inpcb = inp; /* XXX */ > /* >Index: sys/netinet/tcp_var.h >=================================================================== >--- sys/netinet/tcp_var.h (revision 269231) >+++ sys/netinet/tcp_var.h (working copy) >@@ -172,6 +172,22 @@ > int t_sndzerowin; /* zero-window updates sent */ > u_int t_badrxtwin; /* window for retransmit recovery */ > u_char snd_limited; /* segments limited transmitted */ >+/* NewCWV releated state */ >+ struct { >+ u_int32_t pipeack; >+ u_int32_t psp; /* pipeack sampling period */ >+ >+ u_int32_t head; >+ u_int32_t psample[4]; /* pipe ack samples */ >+ u_int32_t time_stamp[4]; /* time stamp samples */ >+ u_int32_t prev_snd_una; /* previous snd_una in this sampe */ >+ u_int32_t prev_snd_nxt; /* previous snd_nxt in this sampe */ >+ >+ u_int32_t loss_flight_size; /* flightsize at loss detection */ >+ u_int32_t prior_retrans; /* Retransmission before going into FR */ >+ u_int32_t cwnd_valid_ts; /*last time cwnd was found valid */ >+ u_int32_t init_cwnd; /* The inital cwnd */ >+ } newcwv; > /* SACK related state */ > int snd_numholes; /* number of holes seen by sender */ > TAILQ_HEAD(sackhole_head, sackhole) snd_holes; >@@ -605,6 +621,7 @@ > VNET_DECLARE(int, path_mtu_discovery); > VNET_DECLARE(int, tcp_do_rfc3465); > VNET_DECLARE(int, tcp_abc_l_var); >+VNET_DECLARE(int, tcp_do_newcwv); > #define V_tcb VNET(tcb) > #define V_tcbinfo VNET(tcbinfo) > #define V_tcp_mssdflt VNET(tcp_mssdflt) >@@ -617,6 +634,7 @@ > #define V_path_mtu_discovery VNET(path_mtu_discovery) > #define V_tcp_do_rfc3465 VNET(tcp_do_rfc3465) > #define V_tcp_abc_l_var VNET(tcp_abc_l_var) >+#define V_tcp_do_newcwv VNET(tcp_do_newcwv) > > VNET_DECLARE(int, tcp_do_sack); /* SACK enabled/disabled */ > VNET_DECLARE(int, tcp_sc_rst_sock_fail); /* RST on sock alloc failure */
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 191520
:
144299
|
145214
|
145216
|
155673