On Wed, Jul 6, 2011 at 5:25 PM, Calomel Org <infallibilismindefeasibil...@calomel.org> wrote: > ALTQ using hfsc is limited to a maximum parent bandwidth of 4294Mb. > This value is 2^32 or 4,294,967,296 bits. If you set the bandwidth any > higher, altq will flip back to zero. This "bug" was found when trying > to test 10 gigabit and 40 gigabit bandwidth models. These tests were > done on OpenBSD 32bit and 64bit as well as FreeBSD 32bit and 64bit. > > If anyone else can verify this independently and agree with the > results I would be happy to register it as a bug. > > > How to replicate: > > A quick test is setting the bandwidth to 4294Mb and doing a pfctl -sq > to check altq. > > altq on $ExtIf bandwidth 4294Mb hfsc queue { ack, web} > queue root_em0 on em0 bandwidth 4.29Gb priority 0 {ack, web} > > Now set the bandwidth to 4295Mb and notice altq has flip to zero and > add the 32.70Kb difference. > > altq on $ExtIf bandwidth 4295Mb hfsc queue { ack, web } > queue root_em0 on em0 bandwidth 32.70Kb priority 0 {ack, web} > > Again, we can set the bandwidth to a multiple of two(2) to 8589Mb. > The bandwidth value flips to zero once and the result is 4.29Gb. > > altq on $ExtIf bandwidth 8589Mb hfsc queue { ack, web} > queue root_em0 on em0 bandwidth 4.29Gb priority 0 {ack, web} > > If we add one more megabit to 8590Mb the value flips twice and we are > left with 65.41Kb. > > altq on $ExtIf bandwidth 8590Mb hfsc queue { ack, web} > queue root_em0 on em0 bandwidth 65.41Kb priority 0 {ack, web} >
It is true that there is a limit because of data type used. Though it cannot be fixed easily on i386 but on amd64 this should work. Index: sys/contrib/pf/net/pfvar.h =================================================================== --- sys/contrib/pf/net/pfvar.h (revision 223824) +++ sys/contrib/pf/net/pfvar.h (working copy) @@ -1491,13 +1491,13 @@ /* scheduler spec */ u_int8_t scheduler; /* scheduler type */ u_int16_t tbrsize; /* tokenbucket regulator size */ - u_int32_t ifbandwidth; /* interface bandwidth */ + u_int64_t ifbandwidth; /* interface bandwidth */ /* queue spec */ char qname[PF_QNAME_SIZE]; /* queue name */ char parent[PF_QNAME_SIZE]; /* parent name */ u_int32_t parent_qid; /* parent queue id */ - u_int32_t bandwidth; /* queue bandwidth */ + u_int64_t bandwidth; /* queue bandwidth */ u_int8_t priority; /* priority */ #ifdef __FreeBSD__ u_int8_t local_flags; /* dynamic interface */ > > Thanks. > > -- > Calomel @ https://calomel.org > Open Source Research and Reference > _______________________________________________ > freebsd-pf@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-pf > To unsubscribe, send any mail to "freebsd-pf-unsubscr...@freebsd.org" > -- Ermal _______________________________________________ freebsd-pf@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-pf To unsubscribe, send any mail to "freebsd-pf-unsubscr...@freebsd.org"