I've tried very hard to make it concise and avoided any references to underlying algorithms.
OK? --- share/man/man5/pf.conf.5 | 47 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git share/man/man5/pf.conf.5 share/man/man5/pf.conf.5 index e0e8e897768..5c886c0cb3a 100644 --- share/man/man5/pf.conf.5 +++ share/man/man5/pf.conf.5 @@ -46,11 +46,11 @@ This is an overview of the sections in this manual page: .It Sx PACKET FILTERING including network address translation (NAT). .It Sx OPTIONS globally tune the behaviour of the packet filtering engine. .It Sx QUEUEING -provides rule-based bandwidth control. +provides rule-based bandwidth and traffic control. .It Sx TABLES provide a method for dealing with large numbers of addresses. .It Sx ANCHORS are containers for rules and tables. .It Sx STATEFUL FILTERING @@ -1562,10 +1562,48 @@ pass out on em0 inet proto tcp from $employeehosts to any port 80 \e pass out on em0 inet proto tcp from any to any port 22 \e set queue(ssh_bulk, ssh_interactive) pass out on em0 inet proto tcp from any to any port 25 \e set queue mail .Ed +.Pp +Additionally to the bandwidth management a fair traffic sharing option +is provided via a flow queue. +When packets are classified by the stateful inspection engine, a flow +identifier is assigned to all packets belonging to this state. +A flow queue splits the outgoing traffic according to these identifiers +into individual queues and services them in a way that provides equal +opportunities for all connections to progress. +.Pp +Configuration of a flow queue is similar to a regular one, however flow +queues don't build a hierarchy and thus only one flow queue may be +specified per interface. +.Pp +The core parameter of a flow queue is a number of expected simultaneous +connections, or +.Cm flows , +bounded by the resolution of the flow identifier (the current +implementation is able classify traffic into 32767 distinct flows). +Thus minimal flow queue configuration is: +.Bd -literal -offset indent +queue fq on em0 flows 1024 +.Ed +.Pp +Another value affecting the flow queue is a quantum of service. +The lower the +.Cm quantum +the more advantage is given to streams of small packets at the expense +of bulk transfers. +The default value for +.Cm quantum +is selected based on the configured Maximum Transmission Unit (MTU) +of the specified interface. +.Pp +An additional configuration option +.Cm qlimit +sets the queue depth shared among all flows. +The default is 1024. +.El .Sh TABLES Tables are named structures which can hold a collection of addresses and networks. Lookups against tables in .Xr pf 4 @@ -2693,13 +2731,16 @@ anchor-rule = "anchor" [ string ] [ ( "in" | "out" ) ] [ "on" ifspec ] anchor-close = "}" load-anchor = "load anchor" string "from" filename queueopts-list = queueopts-list queueopts | queueopts -queueopts = [ "bandwidth" bandwidth ] | [ "min" bandwidth ] | +queueopts = ([ "bandwidth" bandwidth ] | [ "min" bandwidth ] | [ "max" bandwidth ] | [ "parent" string ] | - [ "default" ] | [ "qlimit" number ] + [ "default" ]) | + ([ "flows" number ] | [ "quantum" number ]) | + [ "qlimit" number ] + bandwidth = bandwidth-spec [ "burst" bandwidth-spec "for" number "ms" ] bandwidth-spec = number ( "" | "K" | "M" | "G" ) action = "pass" | "match" | "block" [ return ] return = "drop" | "return" | -- 2.12.2