git: 09e25aff543c - stable/13 - ipfw: use unsigned int for dummynet bandwidth

Kristof Provost kp at FreeBSD.org
Thu Aug 26 12:06:31 UTC 2021


The branch stable/13 has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=09e25aff543c37bf912fb09f61d139a54f2d55a5

commit 09e25aff543c37bf912fb09f61d139a54f2d55a5
Author:     Luiz Otavio O Souza <loos at FreeBSD.org>
AuthorDate: 2021-08-17 07:54:40 +0000
Commit:     Kristof Provost <kp at FreeBSD.org>
CommitDate: 2021-08-26 12:05:26 +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 de38ed9fbedf..533dc5ccd85f 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 */
 };
@@ -214,7 +214,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 e035fedaaf91..a690aa0290d7 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 */
@@ -231,7 +231,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 11357b44e05e..dad5cb087b39 100644
--- a/sys/netpfil/ipfw/ip_dn_io.c
+++ b/sys/netpfil/ipfw/ip_dn_io.c
@@ -591,7 +591,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;


More information about the dev-commits-src-branches mailing list