1.\" 2.\" Copyright (c) 2004 Max Laier <mlaier@FreeBSD.org> 3.\" All rights reserved. 4.\" 5.\" Redistribution and use in source and binary forms, with or without 6.\" modification, are permitted provided that the following conditions 7.\" are met: 8.\" 1. Redistributions of source code must retain the above copyright 9.\" notice, this list of conditions and the following disclaimer. 10.\" 2. Redistributions in binary form must reproduce the above copyright 11.\" notice, this list of conditions and the following disclaimer in the 12.\" documentation and/or other materials provided with the distribution. 13.\" 14.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24.\" SUCH DAMAGE. 25.\" 26.\" $FreeBSD$ 27.\" 28.Dd January 26, 2021 29.Dt ALTQ 4 30.Os 31.Sh NAME 32.Nm ALTQ 33.Nd "alternate queuing of network packets" 34.Sh SYNOPSIS 35.Cd options ALTQ 36.Pp 37.Cd options ALTQ_CBQ 38.Cd options ALTQ_CODEL 39.Cd options ALTQ_RED 40.Cd options ALTQ_RIO 41.Cd options ALTQ_HFSC 42.Cd options ALTQ_CDNR 43.Cd options ALTQ_PRIQ 44.Cd options ALTQ_FAIRQ 45.Sh DESCRIPTION 46The 47.Nm 48system is a framework which provides several disciplines for queuing outgoing 49network packets. 50This is done by modifications to the interface packet queues. 51See 52.Xr altq 9 53for details. 54.Pp 55The user interface for 56.Nm 57is implemented by the 58.Xr pfctl 8 59utility, so please refer to the 60.Xr pfctl 8 61and the 62.Xr pf.conf 5 63man pages for a complete description of the 64.Nm 65capabilities and how to use it. 66.Ss Kernel Options 67The following options in the kernel configuration file are related to 68.Nm 69operation: 70.Pp 71.Bl -tag -width ".Dv ALTQ_DEBUG" -compact 72.It Dv ALTQ 73Enable 74.Nm . 75.It Dv ALTQ_CBQ 76Build the 77.Dq "Class Based Queuing" 78discipline. 79.It Dv ALTQ_CODEL 80Build the 81.Dq "Controlled Delay" 82discipline. 83.It Dv ALTQ_RED 84Build the 85.Dq "Random Early Detection" 86extension. 87.It Dv ALTQ_RIO 88Build 89.Dq "Random Early Drop" 90for input and output. 91.It Dv ALTQ_HFSC 92Build the 93.Dq "Hierarchical Packet Scheduler" 94discipline. 95.It Dv ALTQ_CDNR 96Build the traffic conditioner. 97This option is meaningless at the moment as the conditioner is not used by 98any of the available disciplines or consumers. 99.It Dv ALTQ_PRIQ 100Build the 101.Dq "Priority Queuing" 102discipline. 103.It Dv ALTQ_FAIRQ 104Build the 105.Dq "Fair Queuing" 106discipline. 107.It Dv ALTQ_NOPCC 108Required if the TSC is unusable. 109.It Dv ALTQ_DEBUG 110Enable additional debugging facilities. 111.El 112.Pp 113Note that 114.Nm Ns -disciplines 115cannot be loaded as kernel modules. 116In order to use a certain discipline you have to build it into a custom 117kernel. 118The 119.Xr pf 4 120interface, that is required for the configuration process of 121.Nm 122can be loaded as a module. 123.Sh SUPPORTED DEVICES 124The driver modifications described in 125.Xr altq 9 126are required to use a certain network card with 127.Nm . 128They have been applied to the following hardware drivers: 129.Xr ae 4 , 130.Xr age 4 , 131.Xr alc 4 , 132.Xr ale 4 , 133.Xr an 4 , 134.Xr aue 4 , 135.Xr axe 4 , 136.Xr bce 4 , 137.Xr bfe 4 , 138.Xr bge 4 , 139.Xr bxe 4 , 140.Xr cas 4 , 141.Xr cxgbe 4 , 142.Xr dc 4 , 143.Xr em 4 , 144.Xr epair 4 , 145.Xr et 4 , 146.Xr fxp 4 , 147.Xr gem 4 , 148.Xr igb 4 , 149.Xr ixgbe 4 , 150.Xr jme 4 , 151.Xr le 4 , 152.Xr liquidio 4 , 153.Xr msk 4 , 154.Xr mxge 4 , 155.Xr my 4 , 156.Xr nfe 4 , 157.Xr nge 4 , 158.Xr npe 4 , 159.Xr qlxgb 4 , 160.Xr re 4 , 161.Xr rl 4 , 162.Xr sge 4 , 163.Xr sis 4 , 164.Xr sk 4 , 165.Xr ste 4 , 166.Xr stge 4 , 167.Xr ti 4 , 168.Xr udav 4 , 169.Xr vge 4 , 170.Xr vr 4 , 171.Xr vte 4 , 172and 173.Xr xl 4 . 174.Pp 175The 176.Xr tun 4 177and 178.Xr ng_iface 4 179pseudo drivers also do support 180.Nm . 181.Pp 182The 183.Xr vlan 4 184driver does not directly support 185.Nm , 186but as packets (mbufs) are passed to the underlying interface, a queue 187can be defined for the underlying interface, and any packets directed 188to the queue will be processed at the interface level. 189An example: 190.Pp 191.Bd -literal -offset indent 192altq on igb0 cbq queue { def aq } 193queue def bandwidth 90% cbq (default borrow) 194queue aq bandwidth 10Mb cbq 195 196pass in on igb0.10 proto udp all queue aq keep state 197.Ed 198.Sh SEE ALSO 199.Xr pf 4 , 200.Xr pf.conf 5 , 201.Xr ipfw 8 , 202.Xr pfctl 8 , 203.Xr altq 9 204.Sh HISTORY 205The 206.Nm 207system first appeared in March 1997 and found home in the KAME project 208(http://www.kame.net). 209It was imported to 210.Fx 211in 5.3 . 212