svn commit: r367122 - head/sys/netinet

John Baldwin jhb at FreeBSD.org
Thu Oct 29 00:03:20 UTC 2020


Author: jhb
Date: Thu Oct 29 00:03:19 2020
New Revision: 367122
URL: https://svnweb.freebsd.org/changeset/base/367122

Log:
  Save the current TCP pacing rate in t_pacing_rate.
  
  Reviewed by:	gallatin, gnn
  Sponsored by:	Netflix
  Differential Revision:	https://reviews.freebsd.org/D26875

Modified:
  head/sys/netinet/tcp_ratelimit.c
  head/sys/netinet/tcp_subr.c
  head/sys/netinet/tcp_var.h

Modified: head/sys/netinet/tcp_ratelimit.c
==============================================================================
--- head/sys/netinet/tcp_ratelimit.c	Wed Oct 28 23:10:54 2020	(r367121)
+++ head/sys/netinet/tcp_ratelimit.c	Thu Oct 29 00:03:19 2020	(r367122)
@@ -1220,6 +1220,8 @@ tcp_set_pacing_rate(struct tcpcb *tp, struct ifnet *if
 {
 	const struct tcp_hwrate_limit_table *rte;
 
+	INP_WLOCK_ASSERT(tp->t_inpcb);
+
 	if (tp->t_inpcb->inp_snd_tag == NULL) {
 		/*
 		 * We are setting up a rate for the first time.
@@ -1250,6 +1252,7 @@ tcp_set_pacing_rate(struct tcpcb *tp, struct ifnet *if
 			*error = EINVAL;
 		rte = NULL;
 	}
+	tp->t_pacing_rate = rte->rate;
 	*error = 0;
 	return (rte);
 }
@@ -1264,6 +1267,8 @@ tcp_chg_pacing_rate(const struct tcp_hwrate_limit_tabl
 	int is_indirect = 0;
 	int err;
 
+	INP_WLOCK_ASSERT(tp->t_inpcb);
+
 	if ((tp->t_inpcb->inp_snd_tag == NULL) ||
 	    (crte == NULL)) {
 		/* Wrong interface */
@@ -1330,6 +1335,7 @@ re_rate:
 	}
 	if (error)
 		*error = 0;
+	tp->t_pacing_rate = nrte->rate;
 	return (nrte);
 }
 
@@ -1340,6 +1346,9 @@ tcp_rel_pacing_rate(const struct tcp_hwrate_limit_tabl
 	struct tcp_rate_set *rs;
 	uint64_t pre;
 
+	INP_WLOCK_ASSERT(tp->t_inpcb);
+
+	tp->t_pacing_rate = -1;
 	crs = crte->ptbl;
 	/*
 	 * Now we must break the const

Modified: head/sys/netinet/tcp_subr.c
==============================================================================
--- head/sys/netinet/tcp_subr.c	Wed Oct 28 23:10:54 2020	(r367121)
+++ head/sys/netinet/tcp_subr.c	Thu Oct 29 00:03:19 2020	(r367122)
@@ -1783,6 +1783,7 @@ tcp_newtcpcb(struct inpcb *inp)
 	/* Initialize the per-TCPCB log data. */
 	tcp_log_tcpcbinit(tp);
 #endif
+	tp->t_pacing_rate = -1;
 	if (tp->t_fb->tfb_tcp_fb_init) {
 		if ((*tp->t_fb->tfb_tcp_fb_init)(tp)) {
 			refcount_release(&tp->t_fb->tfb_refcnt);

Modified: head/sys/netinet/tcp_var.h
==============================================================================
--- head/sys/netinet/tcp_var.h	Wed Oct 28 23:10:54 2020	(r367121)
+++ head/sys/netinet/tcp_var.h	Thu Oct 29 00:03:19 2020	(r367122)
@@ -246,6 +246,7 @@ struct tcpcb {
 	int	t_dupacks;		/* consecutive dup acks recd */
 	int	t_lognum;		/* Number of log entries */
 	int	t_loglimit;		/* Maximum number of log entries */
+	int64_t	t_pacing_rate;		/* bytes / sec, -1 => unlimited */
 	struct tcp_log_stailq t_logs;	/* Log buffer */
 	struct tcp_log_id_node *t_lin;
 	struct tcp_log_id_bucket *t_lib;


More information about the svn-src-head mailing list