Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Aug 2021 12:06:32 GMT
From:      Kristof Provost <kp@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: 217e75db75d4 - stable/12 - ipfw: use unsigned int for dummynet bandwidth
Message-ID:  <202108261206.17QC6Waw081036@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/12 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=217e75db75d4646f73b078d898d3ce7366dad77a

commit 217e75db75d4646f73b078d898d3ce7366dad77a
Author:     Luiz Otavio O Souza <loos@FreeBSD.org>
AuthorDate: 2021-08-17 07:54:40 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2021-08-26 07:26:45 +0000

    ipfw: use unsigned int for dummynet bandwidth
    
    This allows the maximum value of 4294967295 (~4Gb/s) instead of previous
    value of 2147483647 (~2Gb/s).
    
    Reviewed by:    np, scottl
    Obtained from:  pfSense
    MFC after:      1 week
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
    Differential Revision:  https://reviews.freebsd.org/D31582
    
    (cherry picked from commit 20ffd88ed54fe3fd098ac30bd221275b2a14f52c)
---
 sbin/ipfw/dummynet.c          | 13 +++++++------
 sys/netinet/ip_dummynet.h     |  4 ++--
 sys/netpfil/ipfw/ip_dn_glue.c |  4 ++--
 sys/netpfil/ipfw/ip_dn_io.c   |  3 ++-
 4 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/sbin/ipfw/dummynet.c b/sbin/ipfw/dummynet.c
index 24d835fbb98e..88367694a404 100644
--- a/sbin/ipfw/dummynet.c
+++ b/sbin/ipfw/dummynet.c
@@ -23,6 +23,7 @@
  */
 
 #define NEW_AQM
+#include <sys/limits.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 /* XXX there are several sysctl leftover here */
@@ -794,9 +795,9 @@ is_valid_number(const char *s)
  * set clocking interface or bandwidth value
  */
 static void
-read_bandwidth(char *arg, int *bandwidth, char *if_name, int namelen)
+read_bandwidth(char *arg, uint32_t *bandwidth, char *if_name, int namelen)
 {
-	if (*bandwidth != -1)
+	if (*bandwidth != (uint32_t)-1)
 		warnx("duplicate token, override bandwidth value!");
 
 	if (arg[0] >= 'a' && arg[0] <= 'z') {
@@ -810,7 +811,7 @@ read_bandwidth(char *arg, int *bandwidth, char *if_name, int namelen)
 		strlcpy(if_name, arg, namelen);
 		*bandwidth = 0;
 	} else {	/* read bandwidth value */
-		int bw;
+		uint64_t bw;
 		char *end = NULL;
 
 		bw = strtoul(arg, &end, 0);
@@ -829,10 +830,10 @@ read_bandwidth(char *arg, int *bandwidth, char *if_name, int namelen)
 		    _substrcmp2(end, "by", "bytes") == 0)
 			bw *= 8;
 
-		if (bw < 0)
+		if (bw > UINT_MAX)
 			errx(EX_DATAERR, "bandwidth too large");
 
-		*bandwidth = bw;
+		*bandwidth = (uint32_t)bw;
 		if (if_name)
 			if_name[0] = '\0';
 	}
@@ -1737,7 +1738,7 @@ end_mask:
 	if (p) {
 		if (p->delay > 10000)
 			errx(EX_DATAERR, "delay must be < 10000");
-		if (p->bandwidth == -1)
+		if (p->bandwidth == (uint32_t)-1)
 			p->bandwidth = 0;
 	}
 	if (fs) {
diff --git a/sys/netinet/ip_dummynet.h b/sys/netinet/ip_dummynet.h
index 9d64b3e9e8b5..8d25592842c5 100644
--- a/sys/netinet/ip_dummynet.h
+++ b/sys/netinet/ip_dummynet.h
@@ -131,7 +131,7 @@ struct dn_link {
 	 * XXX what about burst ?
 	 */
 	int32_t		link_nr;
-	int		bandwidth;	/* bit/s or bits/tick.   */
+	uint32_t	bandwidth;	/* bit/s or bits/tick.   */
 	int		delay;		/* ms and ticks */
 	uint64_t	burst;		/* scaled. bits*Hz  XXX */
 };
@@ -216,7 +216,7 @@ struct dn_profile {
 	char	name[ED_MAX_NAME_LEN];
 	int	link_nr;
 	int	loss_level;
-	int	bandwidth;			// XXX use link bandwidth?
+	uint32_t	bandwidth;			// XXX use link bandwidth?
 	int	samples_no;			/* actual len of samples[] */
 	int	samples[ED_MAX_SAMPLES_NO];	/* may be shorter */
 };
diff --git a/sys/netpfil/ipfw/ip_dn_glue.c b/sys/netpfil/ipfw/ip_dn_glue.c
index cfea43110c9e..1bb3c1efbf07 100644
--- a/sys/netpfil/ipfw/ip_dn_glue.c
+++ b/sys/netpfil/ipfw/ip_dn_glue.c
@@ -166,7 +166,7 @@ struct dn_pipe7 {        /* a pipe */
 	SLIST_ENTRY(dn_pipe7)    next;   /* linked list in a hash slot */
 
 	int pipe_nr ;       /* number   */
-	int bandwidth;      /* really, bytes/tick.  */
+	uint32_t bandwidth;      /* really, bytes/tick.  */
 	int delay ;         /* really, ticks    */
 
 	struct  mbuf *head, *tail ; /* packets in delay line */
@@ -232,7 +232,7 @@ struct dn_pipe8 {        /* a pipe */
 	SLIST_ENTRY(dn_pipe8)    next;   /* linked list in a hash slot */
 
 	int pipe_nr ;       /* number   */
-	int bandwidth;      /* really, bytes/tick.  */
+	uint32_t bandwidth;      /* really, bytes/tick.  */
 	int delay ;         /* really, ticks    */
 
 	struct  mbuf *head, *tail ; /* packets in delay line */
diff --git a/sys/netpfil/ipfw/ip_dn_io.c b/sys/netpfil/ipfw/ip_dn_io.c
index 114cfac440ee..3a1140e8e7ea 100644
--- a/sys/netpfil/ipfw/ip_dn_io.c
+++ b/sys/netpfil/ipfw/ip_dn_io.c
@@ -587,7 +587,8 @@ serve_sched(struct mq *q, struct dn_sch_inst *si, uint64_t now)
 	struct dn_schk *s = si->sched;
 	struct mbuf *m = NULL;
 	int delay_line_idle = (si->dline.mq.head == NULL);
-	int done, bw;
+	int done;
+	uint32_t bw;
 
 	if (q == NULL) {
 		q = &def_q;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202108261206.17QC6Waw081036>