PF throttle bandwidth

Matthew Dillon dillon at
Thu May 1 08:53:49 PDT 2008

:hour and then suddenly I'm banned for 24 hours. So I set up a nifty
:script to switch pf.conf files and restart pf when I near 13Gb of usage.
:My question now is what can really give me a cap of 56Kb (modem speed)?
:Currently I'm using
:altq on $ext_if fairq bandwidth 112Kb queue { hi lo }
:queue hi priority 2 bandwidth 56Kb fairq (buckets 64, default) qlimit 50
:queue lo priority 1 bandwidth 56Kb fairq (buckets 64) qlimit 50
:This works temporarily, sort of.. because some connections get slower,
:but only because they're bursty, as opposed to really being capped to
:56Kb. So does anyone know how to hard-cap a connection to a certain
:speed? Doesn't even have to be pf, can be a secret magic sysctl :)
:Robert Luciani

    Well, specifying the cap in th altq line would do the trick.
    That ought to limit your overall bandwidth.  You should still be able
    to keep the hi and lo queue lines intact, remember that the bandwidth
    specification for the fairq lines are minimums, not maximums.  All
    you really need to do is make sure your low priority queue gets
    a little bandwidth
altq on $ext_if fairq bandwidth 56Kb queue { hi lo }
queue hi priority 2 bandwidth 40Kb fairq (buckets 64, default) qlimit 50
queue lo priority 1 bandwidth 16Kb fairq (buckets 64) qlimit 50

    Another option is to use IPFW + DUMMYNET (which can be done in parallel
    with PF, I think), and create a bandwidth-limited pipe explicitly for
    your torrents.

    PF also has other queueing types which can be used to create service
    curves with hard bandwidth limits.  However, you would not be able to
    use fairq in that situation.

    It might be possible to use bridging + PF to route certain types of
    traffic through another interface, and then apply a different queue to
    that interface while maintaining the FAIRQ on your primary external
    interface.  I've never tried doing it so it would take a lot of
    experimentation, but it might be possible to do with lo1, lo2, etc.

    In anycase, what you are doing now... reloading pf.conf, is probably
    unavoidable.  PF has no concept of 'daily limits' (not even the queues
    with service curves can do that on their own), and some sort of 
    external intelligence would definitely be needed.

					Matthew Dillon 
					<dillon at>

More information about the Users mailing list