Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 24 Oct 2014 22:36:29 +0000
From:      bugzilla-noreply@freebsd.org
To:        freebsd-net@FreeBSD.org
Subject:   [Bug 194453] [dummynet] pipe config bw parameter is limited to 2Gbits per second
Message-ID:  <bug-194453-2472-m51G9ODXck@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-194453-2472@https.bugs.freebsd.org/bugzilla/>
References:  <bug-194453-2472@https.bugs.freebsd.org/bugzilla/>

next in thread | previous in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=194453

--- Comment #7 from Hiren Panchasara <hiren@FreeBSD.org> ---
(In reply to rizzo from comment #6)
> (In reply to Hiren Panchasara from comment #5)
> > (In reply to boba from comment #4)
> > > (In reply to Hiren Panchasara from comment #2)
> > > > (In reply to boba from comment #0)
> > > > > It's impossible to create "pipe" with bandwidth higher than 2Gbits per
> > > > > second. Possible due to "signed" type of variable.
> > > > > 
> > > > > # ipfw pipe 1 config bw 2700mbit/s
> > > > > ipfw: bandwidth too large
> > > > 
> > > > I think you are right that its overflowing because of "signed" type.
> > > > 
> > > > A simple change like this may fix the problem:
> > > > 
> > > > Index: dummynet.c
> > > > ===================================================================
> > > > --- dummynet.c  (revision 270969)
> > > > +++ dummynet.c  (working copy)
> > > > @@ -546,7 +546,7 @@
> > > >                 if_name[namelen] = '\0';
> > > >                 *bandwidth = 0;
> > > >         } else {        /* read bandwidth value */
> > > > -               int bw;
> > > > +               uint32_t bw;
> > > >                 char *end = NULL;
> > > >  
> > > >                 bw = strtoul(arg, &end, 0);
> > > 
> > > This patch will not work at all because of following check few lines after
> > > it:
> > > 
> > >                 if (bw < 0)
> > >                         errx(EX_DATAERR, "bandwidth too large");
> > 
> > This patch is incomplete. But the check above is needed exactly for the
> > reason of catching overflowing values. 
> > 
> > Afaik, a couple of things need to be done to make the patch complete:
> > 1) make sure whatever datatype we use for bandwidth is uniform across entire
> > dummynet codebase. i.e. in struct dn_link inside netinet/ip_dummynet.h
> > 
> > 2) It currently only handles Mb/s and b/s and not Gb/s while setting
> > bandwidth.
> > 
> > If someone else doesn't beat me to it, I'll try to spend some time next week
> > on this.
> 
> I think it is a waste of time to work on just extending the input range
> unless one revises the internals so that dummynet can do shaping
> with reasonable accuracy in the Gbit/s range.

Thanks a lot for stopping me before I waste much time on it and come up with a
wrong fix. Appreciate all the details you provided.
I do not have bandwidth to look into a proper fix right now.

cheers,
Hiren

-- 
You are receiving this mail because:
You are the assignee for the bug.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-194453-2472-m51G9ODXck>