Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F102996652
D46142.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
11 KB
Referenced Files
None
Subscribers
None
D46142.diff
View Options
diff --git a/sys/netinet/cc/cc.h b/sys/netinet/cc/cc.h
--- a/sys/netinet/cc/cc.h
+++ b/sys/netinet/cc/cc.h
@@ -87,21 +87,12 @@
#endif /* _KERNEL */
#if defined(_KERNEL) || defined(_WANT_TCPCB)
-/*
- * Wrapper around transport structs that contain same-named congestion
- * control variables. Allows algos to be shared amongst multiple CC aware
- * transprots.
- */
struct cc_var {
void *cc_data; /* Per-connection private CC algorithm data. */
int bytes_this_ack; /* # bytes acked by the current ACK. */
tcp_seq curack; /* Most recent ACK. */
uint32_t flags; /* Flags for cc_var (see below) */
- int type; /* Indicates which ptr is valid in ccvc. */
- union ccv_container {
- struct tcpcb *tcp;
- struct sctp_nets *sctp;
- } ccvc;
+ struct tcpcb *tp; /* Pointer to tcpcb */
uint16_t nsegs; /* # segments coalesced into current chain. */
uint8_t labc; /* Dont use system abc use passed in */
};
diff --git a/sys/netinet/cc/cc.c b/sys/netinet/cc/cc.c
--- a/sys/netinet/cc/cc.c
+++ b/sys/netinet/cc/cc.c
@@ -404,7 +404,7 @@
* XXXLAS: Find a way to do this without needing curack
*/
if (V_tcp_do_newsack)
- pipe = tcp_compute_pipe(ccv->ccvc.tcp);
+ pipe = tcp_compute_pipe(ccv->tp);
else
pipe = CCV(ccv, snd_max) - ccv->curack;
if (pipe < CCV(ccv, snd_ssthresh))
@@ -440,7 +440,7 @@
* maximum of the former ssthresh or 3/4 of the old cwnd, to
* not exit slow-start prematurely.
*/
- rw = tcp_compute_initwnd(tcp_fixed_maxseg(ccv->ccvc.tcp));
+ rw = tcp_compute_initwnd(tcp_fixed_maxseg(ccv->tp));
CCV(ccv, snd_ssthresh) = max(CCV(ccv, snd_ssthresh),
CCV(ccv, snd_cwnd)-(CCV(ccv, snd_cwnd)>>2));
@@ -457,7 +457,7 @@
uint32_t cwin, factor, mss, pipe;
cwin = CCV(ccv, snd_cwnd);
- mss = tcp_fixed_maxseg(ccv->ccvc.tcp);
+ mss = tcp_fixed_maxseg(ccv->tp);
/*
* Other TCP congestion controls use newreno_cong_signal(), but
* with their own private cc_data. Make sure the cc_data is used
@@ -490,7 +490,7 @@
case CC_RTO:
if (CCV(ccv, t_rxtshift) == 1) {
if (V_tcp_do_newsack) {
- pipe = tcp_compute_pipe(ccv->ccvc.tcp);
+ pipe = tcp_compute_pipe(ccv->tp);
} else {
pipe = CCV(ccv, snd_max) -
CCV(ccv, snd_fack) +
diff --git a/sys/netinet/cc/cc_cdg.c b/sys/netinet/cc/cc_cdg.c
--- a/sys/netinet/cc/cc_cdg.c
+++ b/sys/netinet/cc/cc_cdg.c
@@ -295,7 +295,7 @@
{
struct cdg *cdg_data;
- INP_WLOCK_ASSERT(tptoinpcb(ccv->ccvc.tcp));
+ INP_WLOCK_ASSERT(tptoinpcb(ccv->tp));
if (ptr == NULL) {
cdg_data = malloc(sizeof(struct cdg), M_CC_MEM, M_NOWAIT);
if (cdg_data == NULL)
diff --git a/sys/netinet/cc/cc_chd.c b/sys/netinet/cc/cc_chd.c
--- a/sys/netinet/cc/cc_chd.c
+++ b/sys/netinet/cc/cc_chd.c
@@ -322,7 +322,7 @@
{
struct chd *chd_data;
- INP_WLOCK_ASSERT(tptoinpcb(ccv->ccvc.tcp));
+ INP_WLOCK_ASSERT(tptoinpcb(ccv->tp));
if (ptr == NULL) {
chd_data = malloc(sizeof(struct chd), M_CC_MEM, M_NOWAIT);
if (chd_data == NULL)
diff --git a/sys/netinet/cc/cc_cubic.c b/sys/netinet/cc/cc_cubic.c
--- a/sys/netinet/cc/cc_cubic.c
+++ b/sys/netinet/cc/cc_cubic.c
@@ -125,7 +125,7 @@
if (hystart_bblogs == 0)
return;
- tp = ccv->ccvc.tcp;
+ tp = ccv->tp;
if (tcp_bblogging_on(tp)) {
union tcp_log_stackspecific log;
struct timeval tv;
@@ -385,7 +385,7 @@
{
struct cubic *cubic_data;
- INP_WLOCK_ASSERT(tptoinpcb(ccv->ccvc.tcp));
+ INP_WLOCK_ASSERT(tptoinpcb(ccv->tp));
if (ptr == NULL) {
cubic_data = malloc(sizeof(struct cubic), M_CC_MEM, M_NOWAIT|M_ZERO);
if (cubic_data == NULL)
@@ -424,7 +424,7 @@
uint32_t mss, pipe;
cubic_data = ccv->cc_data;
- mss = tcp_fixed_maxseg(ccv->ccvc.tcp);
+ mss = tcp_fixed_maxseg(ccv->tp);
switch (type) {
case CC_NDUPACK:
@@ -478,7 +478,7 @@
cubic_data->undo_W_max = cubic_data->W_max;
cubic_data->undo_K = cubic_data->K;
if (V_tcp_do_newsack) {
- pipe = tcp_compute_pipe(ccv->ccvc.tcp);
+ pipe = tcp_compute_pipe(ccv->tp);
} else {
pipe = CCV(ccv, snd_max) -
CCV(ccv, snd_fack) +
@@ -549,7 +549,7 @@
* XXXLAS: Find a way to do this without needing curack
*/
if (V_tcp_do_newsack)
- pipe = tcp_compute_pipe(ccv->ccvc.tcp);
+ pipe = tcp_compute_pipe(ccv->tp);
else
pipe = CCV(ccv, snd_max) - ccv->curack;
@@ -590,7 +590,7 @@
/* Ignore srtt until a min number of samples have been taken. */
if (CCV(ccv, t_rttupdated) >= CUBIC_MIN_RTT_SAMPLES) {
cubic_data = ccv->cc_data;
- t_srtt_usecs = tcp_get_srtt(ccv->ccvc.tcp,
+ t_srtt_usecs = tcp_get_srtt(ccv->tp,
TCP_TMR_GRANULARITY_USEC);
/*
* Record the current SRTT as our minrtt if it's the smallest
diff --git a/sys/netinet/cc/cc_dctcp.c b/sys/netinet/cc/cc_dctcp.c
--- a/sys/netinet/cc/cc_dctcp.c
+++ b/sys/netinet/cc/cc_dctcp.c
@@ -201,7 +201,7 @@
{
struct dctcp *dctcp_data;
- INP_WLOCK_ASSERT(tptoinpcb(ccv->ccvc.tcp));
+ INP_WLOCK_ASSERT(tptoinpcb(ccv->tp));
if (ptr == NULL) {
dctcp_data = malloc(sizeof(struct dctcp), M_CC_MEM, M_NOWAIT|M_ZERO);
if (dctcp_data == NULL)
@@ -245,7 +245,7 @@
if (CCV(ccv, t_flags2) & TF2_ECN_PERMIT) {
dctcp_data = ccv->cc_data;
cwin = CCV(ccv, snd_cwnd);
- mss = tcp_fixed_maxseg(ccv->ccvc.tcp);
+ mss = tcp_fixed_maxseg(ccv->tp);
switch (type) {
case CC_NDUPACK:
@@ -294,7 +294,7 @@
case CC_RTO:
if (CCV(ccv, t_rxtshift) == 1) {
if (V_tcp_do_newsack) {
- pipe = tcp_compute_pipe(ccv->ccvc.tcp);
+ pipe = tcp_compute_pipe(ccv->tp);
} else {
pipe = CCV(ccv, snd_max) -
CCV(ccv, snd_fack) +
diff --git a/sys/netinet/cc/cc_htcp.c b/sys/netinet/cc/cc_htcp.c
--- a/sys/netinet/cc/cc_htcp.c
+++ b/sys/netinet/cc/cc_htcp.c
@@ -253,7 +253,7 @@
{
struct htcp *htcp_data;
- INP_WLOCK_ASSERT(tptoinpcb(ccv->ccvc.tcp));
+ INP_WLOCK_ASSERT(tptoinpcb(ccv->tp));
if (ptr == NULL) {
htcp_data = malloc(sizeof(struct htcp), M_CC_MEM, M_NOWAIT);
if (htcp_data == NULL)
@@ -284,7 +284,7 @@
uint32_t mss, pipe;
htcp_data = ccv->cc_data;
- mss = tcp_fixed_maxseg(ccv->ccvc.tcp);
+ mss = tcp_fixed_maxseg(ccv->tp);
switch (type) {
case CC_NDUPACK:
@@ -325,7 +325,7 @@
case CC_RTO:
if (CCV(ccv, t_rxtshift) == 1) {
if (V_tcp_do_newsack) {
- pipe = tcp_compute_pipe(ccv->ccvc.tcp);
+ pipe = tcp_compute_pipe(ccv->tp);
} else {
pipe = CCV(ccv, snd_max) -
CCV(ccv, snd_fack) +
@@ -383,7 +383,7 @@
* XXXLAS: Find a way to do this without needing curack
*/
if (V_tcp_do_newsack)
- pipe = tcp_compute_pipe(ccv->ccvc.tcp);
+ pipe = tcp_compute_pipe(ccv->tp);
else
pipe = CCV(ccv, snd_max) - ccv->curack;
@@ -451,7 +451,7 @@
*/
if (V_htcp_rtt_scaling)
alpha = max(1, (min(max(HTCP_MINROWE,
- (tcp_get_srtt(ccv->ccvc.tcp, TCP_TMR_GRANULARITY_TICKS) << HTCP_SHIFT) /
+ (tcp_get_srtt(ccv->tp, TCP_TMR_GRANULARITY_TICKS) << HTCP_SHIFT) /
htcp_rtt_ref), HTCP_MAXROWE) * alpha)
>> HTCP_SHIFT);
@@ -502,18 +502,18 @@
* or minrtt is currently equal to its initialised value. Ignore SRTT
* until a min number of samples have been taken.
*/
- if ((tcp_get_srtt(ccv->ccvc.tcp, TCP_TMR_GRANULARITY_TICKS) < htcp_data->minrtt ||
+ if ((tcp_get_srtt(ccv->tp, TCP_TMR_GRANULARITY_TICKS) < htcp_data->minrtt ||
htcp_data->minrtt == TCPTV_SRTTBASE) &&
(CCV(ccv, t_rttupdated) >= HTCP_MIN_RTT_SAMPLES))
- htcp_data->minrtt = tcp_get_srtt(ccv->ccvc.tcp, TCP_TMR_GRANULARITY_TICKS);
+ htcp_data->minrtt = tcp_get_srtt(ccv->tp, TCP_TMR_GRANULARITY_TICKS);
/*
* Record the current SRTT as our maxrtt if it's the largest we've
* seen. Ignore SRTT until a min number of samples have been taken.
*/
- if (tcp_get_srtt(ccv->ccvc.tcp, TCP_TMR_GRANULARITY_TICKS) > htcp_data->maxrtt
+ if (tcp_get_srtt(ccv->tp, TCP_TMR_GRANULARITY_TICKS) > htcp_data->maxrtt
&& CCV(ccv, t_rttupdated) >= HTCP_MIN_RTT_SAMPLES)
- htcp_data->maxrtt = tcp_get_srtt(ccv->ccvc.tcp, TCP_TMR_GRANULARITY_TICKS);
+ htcp_data->maxrtt = tcp_get_srtt(ccv->tp, TCP_TMR_GRANULARITY_TICKS);
}
/*
diff --git a/sys/netinet/cc/cc_module.h b/sys/netinet/cc/cc_module.h
--- a/sys/netinet/cc/cc_module.h
+++ b/sys/netinet/cc/cc_module.h
@@ -43,18 +43,7 @@
#ifndef _NETINET_CC_MODULE_H_
#define _NETINET_CC_MODULE_H_
-/*
- * Allows a CC algorithm to manipulate a commonly named CC variable regardless
- * of the transport protocol and associated C struct.
- * XXXLAS: Out of action until the work to support SCTP is done.
- *
-#define CCV(ccv, what) \
-(*( \
- (ccv)->type == IPPROTO_TCP ? &(ccv)->ccvc.tcp->what : \
- &(ccv)->ccvc.sctp->what \
-))
- */
-#define CCV(ccv, what) (ccv)->ccvc.tcp->what
+#define CCV(ccv, what) (ccv)->tp->what
#define DECLARE_CC_MODULE(ccname, ccalgo) \
static moduledata_t cc_##ccname = { \
diff --git a/sys/netinet/cc/cc_newreno.c b/sys/netinet/cc/cc_newreno.c
--- a/sys/netinet/cc/cc_newreno.c
+++ b/sys/netinet/cc/cc_newreno.c
@@ -135,7 +135,7 @@
if (hystart_bblogs == 0)
return;
- tp = ccv->ccvc.tcp;
+ tp = ccv->tp;
if (tcp_bblogging_on(tp)) {
union tcp_log_stackspecific log;
struct timeval tv;
@@ -175,7 +175,7 @@
{
struct newreno *nreno;
- INP_WLOCK_ASSERT(tptoinpcb(ccv->ccvc.tcp));
+ INP_WLOCK_ASSERT(tptoinpcb(ccv->tp));
if (ptr == NULL) {
ccv->cc_data = malloc(sizeof(struct newreno), M_CC_MEM, M_NOWAIT);
if (ccv->cc_data == NULL)
@@ -369,7 +369,7 @@
uint32_t beta, beta_ecn, cwin, factor, mss, pipe;
cwin = CCV(ccv, snd_cwnd);
- mss = tcp_fixed_maxseg(ccv->ccvc.tcp);
+ mss = tcp_fixed_maxseg(ccv->tp);
nreno = ccv->cc_data;
beta = (nreno == NULL) ? V_newreno_beta : nreno->beta;;
beta_ecn = (nreno == NULL) ? V_newreno_beta_ecn : nreno->beta_ecn;
@@ -429,7 +429,7 @@
case CC_RTO:
if (CCV(ccv, t_rxtshift) == 1) {
if (V_tcp_do_newsack) {
- pipe = tcp_compute_pipe(ccv->ccvc.tcp);
+ pipe = tcp_compute_pipe(ccv->tp);
} else {
pipe = CCV(ccv, snd_max) -
CCV(ccv, snd_fack) +
@@ -456,7 +456,7 @@
if (sopt->sopt_valsize != sizeof(struct cc_newreno_opts))
return (EMSGSIZE);
- if (CC_ALGO(ccv->ccvc.tcp) != &newreno_cc_algo)
+ if (CC_ALGO(ccv->tp) != &newreno_cc_algo)
return (ENOPROTOOPT);
nreno = (struct newreno *)ccv->cc_data;
diff --git a/sys/netinet/cc/cc_vegas.c b/sys/netinet/cc/cc_vegas.c
--- a/sys/netinet/cc/cc_vegas.c
+++ b/sys/netinet/cc/cc_vegas.c
@@ -184,7 +184,7 @@
{
struct vegas *vegas_data;
- INP_WLOCK_ASSERT(tptoinpcb(ccv->ccvc.tcp));
+ INP_WLOCK_ASSERT(tptoinpcb(ccv->tp));
if (ptr == NULL) {
vegas_data = malloc(sizeof(struct vegas), M_CC_MEM, M_NOWAIT);
if (vegas_data == NULL)
diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c
--- a/sys/netinet/tcp_subr.c
+++ b/sys/netinet/tcp_subr.c
@@ -2243,8 +2243,7 @@
bzero(&tp->t_start_zero, t_zero_size);
/* Initialise cc_var struct for this tcpcb. */
- tp->t_ccv.type = IPPROTO_TCP;
- tp->t_ccv.ccvc.tcp = tp;
+ tp->t_ccv.tp = tp;
rw_rlock(&tcp_function_lock);
if (listening_tcb != NULL) {
INP_LOCK_ASSERT(tptoinpcb(listening_tcb));
diff --git a/sys/netinet/tcp_usrreq.c b/sys/netinet/tcp_usrreq.c
--- a/sys/netinet/tcp_usrreq.c
+++ b/sys/netinet/tcp_usrreq.c
@@ -1957,7 +1957,7 @@
tp = intotcpcb(inp);
if (ptr != NULL)
memset(ptr, 0, mem_sz);
- cc_mem.ccvc.tcp = tp;
+ cc_mem.tp = tp;
/*
* We once again hold a write lock over the tcb so it's
* safe to do these things without ordering concerns.
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Nov 20, 3:23 PM (22 h, 1 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14741390
Default Alt Text
D46142.diff (11 KB)
Attached To
Mode
D46142: cc: remove non-working sctp support
Attached
Detach File
Event Timeline
Log In to Comment