Recently I've been writing rules for small router (2 internal interfaces, 1
external, few services running). Originally I didn't thought about
subqueuing (cbq) inbound traffic - I've just set 1 queue for the whole
inbound (1 mbit) on internal interface, so it won't get stalled by other
traffic from int. net to the server itself. Essentially:
altq on $if_100 cbq bandwidth 100Mb queue { if100_extbulk, \
if100_misc, if100_ack, ... other queues }
queue if100_extbulk on $if_100 bandwidth 1Mb cbq
..
other [sub]queues
..
+ appropriate other pf rules/queues/etc.
But then I recalled the 2nd example from PF faq, that actually used
subqueues to shape traffic of inbound traffic. But ... they all had 'borrow'
option - does it even have a chance to work as intended this way ? Inbound
bandwidth is by default limited - wouldn't PF adjust to whatever it receives
in that stream, thanks to 'borrow' ? For instance, consider:
queue if100_extbulk on $if_100 bandwidth 1Mb cbq { if100_eb_1, if100_eb_2 }
queue if100_eb_1 on $if_100 bandwidth 50% cbq(borrow)
queue if100_eb_2 on $if_100 bandwidth 50% cbq(borrow)
Let's assume that the external interface receives some data, routed to
internal interface, where traffic that would go to eb_1 is 5%, but would be
more if not for eb_2. In this case, wouldn't PF simply adapt - eb_2 would
borrow from eb_1, because as far as PF is concerned, there's only as much
eb_1 as it's coming in that 1mbit bulk from ext. interface (and the parent
queue covers all of it) ?
If borrow was ommited, then I guess it should work, assuming transferring
party behaved and slowed down.
Am I thinking right ?