summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRandall Stewart <rrs@FreeBSD.org>2016-05-17 09:53:22 +0000
committerRandall Stewart <rrs@FreeBSD.org>2016-05-17 09:53:22 +0000
commit5105a92c4945e74f7d7c5eb97969d3e7da8fea9b (patch)
treec861d3068ac5374d4c048abdf2ef8864a247646d
parent71edebc7d5693f7ab747405d71734463df2a70a6 (diff)
Notes
-rw-r--r--sys/netinet/tcp_stacks/fastpath.c33
-rw-r--r--sys/netinet/tcp_timer.c4
-rw-r--r--sys/netinet/tcp_var.h1
3 files changed, 13 insertions, 25 deletions
diff --git a/sys/netinet/tcp_stacks/fastpath.c b/sys/netinet/tcp_stacks/fastpath.c
index e7807bd15cd6..7d573c563945 100644
--- a/sys/netinet/tcp_stacks/fastpath.c
+++ b/sys/netinet/tcp_stacks/fastpath.c
@@ -2375,34 +2375,17 @@ tcp_do_segment_fastack(struct mbuf *m, struct tcphdr *th, struct socket *so,
}
struct tcp_function_block __tcp_fastslow = {
- "fastslow",
- tcp_output,
- tcp_do_segment_fastslow,
- tcp_default_ctloutput,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- 0,
- 0
-
+ .tfb_tcp_block_name = "fastslow",
+ .tfb_tcp_output = tcp_output,
+ .tfb_tcp_do_segment = tcp_do_segment_fastslow,
+ .tfb_tcp_ctloutput = tcp_default_ctloutput,
};
struct tcp_function_block __tcp_fastack = {
- "fastack",
- tcp_output,
- tcp_do_segment_fastack,
- tcp_default_ctloutput,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- 0,
- 0
+ .tfb_tcp_block_name = "fastack",
+ .tfb_tcp_output = tcp_output,
+ .tfb_tcp_do_segment = tcp_do_segment_fastack,
+ .tfb_tcp_ctloutput = tcp_default_ctloutput
};
static int
diff --git a/sys/netinet/tcp_timer.c b/sys/netinet/tcp_timer.c
index 5925f42449d0..837913e190eb 100644
--- a/sys/netinet/tcp_timer.c
+++ b/sys/netinet/tcp_timer.c
@@ -604,6 +604,10 @@ tcp_timer_rexmt(void * xtp)
KASSERT((tp->t_timers->tt_flags & TT_REXMT) != 0,
("%s: tp %p rexmt callout should be running", __func__, tp));
tcp_free_sackholes(tp);
+ if (tp->t_fb->tfb_tcp_rexmit_tmr) {
+ /* The stack has a timer action too. */
+ (*tp->t_fb->tfb_tcp_rexmit_tmr)(tp);
+ }
/*
* Retransmission timer went off. Message has not
* been acked within retransmit interval. Back off
diff --git a/sys/netinet/tcp_var.h b/sys/netinet/tcp_var.h
index f2c76a889553..3540b2511c1b 100644
--- a/sys/netinet/tcp_var.h
+++ b/sys/netinet/tcp_var.h
@@ -135,6 +135,7 @@ struct tcp_function_block {
uint32_t, u_int);
int (*tfb_tcp_timer_active)(struct tcpcb *, uint32_t);
void (*tfb_tcp_timer_stop)(struct tcpcb *, uint32_t);
+ void (*tfb_tcp_rexmit_tmr)(struct tcpcb *);
volatile uint32_t tfb_refcnt;
uint32_t tfb_flags;
};