1192 lines
33 KiB
Groff
1192 lines
33 KiB
Groff
.\" $NetBSD: altq.conf.5,v 1.8 2003/03/31 17:21:41 perry Exp $
|
|
.\" $KAME: altq.conf.5,v 1.12 2002/02/20 01:58:57 kjc Exp $
|
|
.\"
|
|
.\" Copyright (C) 2000
|
|
.\" Sony Computer Science Laboratories Inc. All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY SONY CSL AND CONTRIBUTORS ``AS IS'' AND
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL SONY CSL OR CONTRIBUTORS BE LIABLE
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\" SUCH DAMAGE.
|
|
.\"
|
|
.Dd September 28, 1999
|
|
.Dt ALTQ.CONF 5
|
|
.Os
|
|
.\"
|
|
.Sh NAME
|
|
.Nm altq.conf
|
|
.Nd ALTQ configuration file
|
|
.\"
|
|
.Sh DESCRIPTION
|
|
The
|
|
.Nm
|
|
file contains a number of lines specifying the behavior of queueing
|
|
disciplines.
|
|
Comments start with a # and extend to the end of the line.
|
|
.Pp
|
|
The
|
|
.Xr altqd 8
|
|
program reads
|
|
.Pa /etc/altq.conf
|
|
at startup and sets up queueing disciplines.
|
|
BLUE, CBQ (Class-Based Queueing), FIFOQ (First-In First-Out Queue),
|
|
HFSC (Hierarchical Fair Service Curve), PRIQ (Priority Queueing),
|
|
RED (Random Early Detection), RIO (RED with IN/OUT),
|
|
WFQ (Weighted Fair Queueing),
|
|
and CDNR (Diffserv Traffic Conditioner) can be configured in this file.
|
|
.Ss Interface Commands
|
|
.Bl -tag -width interface -offset indent
|
|
.It Cm interface
|
|
.Ar if_name
|
|
.Op Cm bandwidth Ar bps
|
|
.Op Cm tbrsize Ar bytes
|
|
.Op Ar sched_type
|
|
.Op Ar discipline-specific-options
|
|
.El
|
|
.Pp
|
|
The
|
|
.Cm interface
|
|
command specifies a network interface to be under control of ALTQ.
|
|
One interface specification is provided for each network interface
|
|
under control of ALTQ.
|
|
A system configured as a router may have multiple interface
|
|
specifications.
|
|
.Bl -tag -width 8n -offset indent
|
|
.It Ar if_name
|
|
specifies the name of a network interface (e.g., fxp0).
|
|
.It Cm bandwidth
|
|
specifies the interface bandwidth in bits per second.
|
|
This is the maximum rate that the queueing discipline will allow on this
|
|
interface.
|
|
.It Cm tbrsize
|
|
specifies the bucket size of a token bucket regulator in bytes.
|
|
When
|
|
.Cm tbrsize
|
|
is omitted, the system automatically sets the bucket size
|
|
using heuristics.
|
|
The token rate is set to the interface bandwidth specified by the
|
|
.Cm interface
|
|
command.
|
|
.It Ar sched_type
|
|
Type of a queueing discipline.
|
|
It must be either
|
|
.Cm blue ,
|
|
.Cm cbq ,
|
|
.Cm fifoq ,
|
|
.Cm hfsc ,
|
|
.Cm priq ,
|
|
.Cm red ,
|
|
.Cm rio ,
|
|
or
|
|
.Cm wfq .
|
|
If the interface has only traffic conditioners and no queueing
|
|
discipline,
|
|
.Ar sched_type
|
|
can be omitted.
|
|
.El
|
|
.Ss Class Command
|
|
.Bl -tag -width class -offset indent
|
|
.It Cm class
|
|
.Ar sched_type
|
|
.Ar if_name
|
|
.Ar class_name
|
|
.Ar parent_name
|
|
.Op Cm red|rio
|
|
.Op Cm ecn
|
|
.Op Cm cleardscp
|
|
.Op Ar discipline-specific-options
|
|
.El
|
|
.Pp
|
|
The
|
|
.Cm class
|
|
command specifies a packet scheduling class for CBQ, HFSC, or PRIQ.
|
|
A class specifier must be provided for each packet scheduling class.
|
|
.Bl -tag -width 8n -offset indent
|
|
.It Ar sched_type
|
|
Type of queueing discipline.
|
|
Must correspond to the discipline name in interface specification.
|
|
.It Ar if_name
|
|
Interface name.
|
|
Must correspond to name in interface specification.
|
|
.It Ar class_name
|
|
Arbitrary name for this class.
|
|
Must be unique for this interface.
|
|
.It Ar parent_name
|
|
The name of the parent class for this class (for CBQ or HFSC).
|
|
Parent class must have been previously defined.
|
|
PRIQ does not have class hierarchy and parent_name must be
|
|
.Dv NULL
|
|
for PRIQ classes.
|
|
.It Cm red
|
|
Use RED (Random Early Detection) on this class queue.
|
|
RED drops packets with the probability proportional to the average
|
|
queue length.
|
|
.It Cm rio
|
|
Use RIO (RED with In/Out bit) on this class queue.
|
|
RIO runs triple RED algorithms at the same time.
|
|
.It Cm ecn
|
|
Use RED/ECN (Explicit Congestion Notification) on this
|
|
class queue (experimental implementation).
|
|
ECN implies RED.
|
|
.It Cm cleardscp
|
|
Clear diffserv codepoint in the IP header.
|
|
.El
|
|
.Ss Filter Commands
|
|
.Bl -tag -width filter -offset indent
|
|
.It Cm filter
|
|
.Ar if_name
|
|
.Ar class_name
|
|
.Op Cm name Ar fltr_name
|
|
.Op Cm ruleno Ar num
|
|
.Ar filter_values
|
|
.El
|
|
.Pp
|
|
The
|
|
.Cm filter
|
|
command specifies a filter to classify packets into
|
|
a scheduling class.
|
|
A filter specifier determines any statically-defined packet
|
|
classification rules.
|
|
.Bl -tag -width 10n -offset indent
|
|
.It Ar if_name
|
|
Name of a network interface (e.g., fxp0).
|
|
.It Ar class_name
|
|
Name of a class or a conditioner to which matching packets are directed.
|
|
.It Cm name
|
|
Add an arbitrary name to the filter for a future reference.
|
|
.It Cm ruleno
|
|
Specifies explicit order of filter matching.
|
|
Filter matching is performed from a filter with a larger ruleno.
|
|
Default is 0.
|
|
.El
|
|
.Pp
|
|
.Ar filter_value
|
|
should be in the following format:
|
|
.Bl -tag -width filter -offset indent
|
|
.Ar filter_values :
|
|
.Ad dst_addr Op Cm netmask Ar mask
|
|
.Ar dport
|
|
.Ad src_addr Op Cm netmask Ar mask
|
|
.Ar sport
|
|
.Ar proto
|
|
.Oo
|
|
.Cm tos
|
|
.Ar value
|
|
.Op Cm tosmask Ar value
|
|
.Oc
|
|
.Op Cm gpi Ar value
|
|
.El
|
|
.Pp
|
|
Here
|
|
.Ad dst_addr
|
|
and
|
|
.Ad src_addr
|
|
are dotted-decimal addresses of
|
|
the destination and the source respectively.
|
|
An address may be followed by
|
|
.Cm netmask
|
|
keyword.
|
|
.Ar dport
|
|
and
|
|
.Ar sport
|
|
are port numbers of the destination and the source respectively.
|
|
.Ar proto
|
|
is a protocol number defined for IP packets (e.g. 6 for TCP).
|
|
.Cm tos
|
|
keyword can be used to specify the type of service field value.
|
|
.Cm gpi
|
|
keyword can be used to specify the Security Parameter Index value for
|
|
IPsec.
|
|
.Pp
|
|
When filter value 0 is used, it is taken as a wildcard.
|
|
.Bl -tag -width filter6 -offset indent
|
|
.It Cm filter6
|
|
.Ar if_name
|
|
.Ar class_name
|
|
.Op Cm name Ar fltr_name
|
|
.Op Cm ruleno Ar num
|
|
.Ar filter6_values
|
|
.El
|
|
.Pp
|
|
The
|
|
.Cm filter6
|
|
command is for IPv6.
|
|
.Ar filter6_value
|
|
should be in the following format:
|
|
.Bl -tag -width filter6 -offset indent
|
|
.It filter6_values :
|
|
.Ad dst_addr Ns Op /prefix_len
|
|
.Ar dport
|
|
.Ad src_addr Ns Op /prefix_len
|
|
.Ar sport
|
|
.Ar proto
|
|
.Op Cm flowlabel Ar value
|
|
.Oo
|
|
.Cm tclass
|
|
.Ar value
|
|
.Op Cm tclassmask Ar value
|
|
.Oc
|
|
.Op Cm gpi Ar value
|
|
.El
|
|
.Pp
|
|
Here
|
|
.Ad dst_addr
|
|
and
|
|
.Ad src_addr
|
|
are IPv6 addresses of the destination and the source respectively.
|
|
An address may be followed by an optional address prefix length.
|
|
.Ar dport
|
|
and
|
|
.Ar sport
|
|
are port numbers of the destination and the source respectively.
|
|
.Ar proto
|
|
is a protocol number defined for IPv6 packets (e.g. 6 for TCP).
|
|
.Cm flowlabel
|
|
keyword can be used to specify the flowlabel field value.
|
|
.Cm tclass
|
|
keyword can be used to specify the traffic class field value.
|
|
.Cm gpi
|
|
keyword can be used to specify the Security Parameter Index value for
|
|
IPsec.
|
|
.Pp
|
|
When filter value 0 is used, it is taken as a wildcard.
|
|
.Ss CBQ Commands
|
|
CBQ (Class Based Queueing) achieves both partitioning and sharing of
|
|
link bandwidth by hierarchically structured classes.
|
|
Each class has its own queue and is assigned its share of bandwidth.
|
|
A child class can borrow bandwidth from its parent class as long as
|
|
excess bandwidth is available.
|
|
.Bl -tag -width interface -offset indent
|
|
.It Cm interface
|
|
.Ar if_name
|
|
.Op Cm bandwidth Ar bps
|
|
.Op Cm tbrsize Ar bytes
|
|
.Op Ar sched_type
|
|
.Op Cm efficient
|
|
.El
|
|
.Pp
|
|
.Bl -tag -width 8n -offset indent
|
|
.It Ar if_name
|
|
specifies the name of a network interface (e.g., fxp0).
|
|
.It Cm bandwidth
|
|
specifies the interface bandwidth in bits per second.
|
|
.It Cm tbrsize
|
|
specifies the bucket size of a token bucket regulator in bytes.
|
|
.It Ar sched_type
|
|
must be either
|
|
.Cm cbq ,
|
|
.Cm cbq-wrr
|
|
(weighted-round robin) or
|
|
.Cm cbq-prr
|
|
(packet-by-packet round robin).
|
|
.Cm cbq
|
|
is equivalent to
|
|
.Cm cbq-wrr .
|
|
.It Cm efficient
|
|
Enables CBQ's link efficiency mode.
|
|
This means that the scheduler will send a packet from the first
|
|
overlimit class it encounters of all classes of the link-sharing
|
|
structure when all classes are overlimit.
|
|
This will also cause the scheduler to use greater than its assigned
|
|
bandwidth, if the link is capable of more than the assigned bandwidth.
|
|
By default, this mode is turned off.
|
|
By adding the keyword
|
|
.Cm efficient
|
|
to the interface specification line, enables this mode.
|
|
.El
|
|
.Pp
|
|
.Bl -tag -width class -offset indent
|
|
.It Cm class
|
|
.Ar sched_type
|
|
.Ar if_name
|
|
.Ar class_name
|
|
.Ar parent_name
|
|
.Op Cm admission cntlload|none
|
|
.Op Cm priority Ar pri
|
|
.Op Cm pbandwidth Ar percent
|
|
.Op Cm exactbandwidth Ar bps
|
|
.Op Cm borrow
|
|
.Op Cm default
|
|
.Op Cm control
|
|
.Op Cm maxburst Ar count
|
|
.Op Cm minburst Ar count
|
|
.Bk -words
|
|
.Op Cm maxdelay Ar msec
|
|
.Ek
|
|
.Op Cm packetsize Ar bytes
|
|
.Op Cm maxpacketsize Ar bytes
|
|
.Op Cm red|rio
|
|
.Op Cm ecn
|
|
.Op Cm flowvalve
|
|
.Op Cm cleardscp
|
|
.El
|
|
.Pp
|
|
The
|
|
.Cm class
|
|
command specifies a CBQ class.
|
|
The classes are organized as a hierarchy, and every class, except
|
|
for the root class, has a parent.
|
|
.Bl -tag -width 8n -offset indent
|
|
.It Ar sched_type
|
|
must be
|
|
.Cm cbq
|
|
for a CBQ class.
|
|
.It Ar if_name
|
|
Interface name.
|
|
Must correspond to name in interface specification.
|
|
.It Ar class_name
|
|
Arbitrary name for this class.
|
|
Must be unique within the class
|
|
hierarchy for this interface.
|
|
The name
|
|
.Cm ctl_class
|
|
is a reserved class name.
|
|
.It Cm parent_name
|
|
The name of the parent class for this class or
|
|
.Dv NULL
|
|
if this is the root class.
|
|
Parent class must have been previously defined.
|
|
.It Cm admission
|
|
The type of admission control and QoS type.
|
|
.Cm cntlload
|
|
is controlled load service for RSVP, otherwise, it should be
|
|
.Cm none .
|
|
The default is
|
|
.Cm none .
|
|
.It Cm priority
|
|
High numbers are higher priority.
|
|
Max value is 7 and Min value is 0.
|
|
Default is 1.
|
|
.It Cm pbandwidth
|
|
The percentage of the interface bandwidth allocated to this class.
|
|
Generally should add up to 100 percent at each level of the class
|
|
hierarchy, although other amounts can be specified for purposes of
|
|
experimentation.
|
|
.It Cm exactbandwidth
|
|
Specify the bandwidth in bits-per-second instead of
|
|
.Cm pbandwidth .
|
|
Note that the bandwidth allocation of CBQ is not so precise but this
|
|
is just a way to pass a parameter to CBQ; the user is supposed to know
|
|
the detailed internals of CBQ.
|
|
.Cm pbandwidth
|
|
is a preferred way to specify the bandwidth of a class.
|
|
.It Cm borrow
|
|
The class can borrow bandwidth from its parent class when this class
|
|
is overlimit.
|
|
If this keyword is not present, then no borrowing is done, and the
|
|
packet is delayed or dropped when the class is overlimit.
|
|
.It Cm default
|
|
Specify the default class.
|
|
When this keyword is present, all packets that do not match some
|
|
classification criteria are assigned to this class.
|
|
Must be exactly one class on each interface defined as the default
|
|
class.
|
|
.It Cm control
|
|
Specify the control class.
|
|
When this keyword is present, the predefined control class packets
|
|
(RSVP, IGMP, and ICMP) are assigned to this class.
|
|
Note that when the control class is not specified by the time the
|
|
default class is created, one is automatically created with default
|
|
parameters.
|
|
Thus, if the control class is specified, it must be listed before the
|
|
default class.
|
|
Must be exactly one class on each interface defined as the control
|
|
class.
|
|
.It Cm maxburst
|
|
The maximum burst of back-to-back packets allowed in this class.
|
|
Default is 16 but the default value is automatically reduced to 4 when
|
|
the class bandwidth is small (about less than 1Mbps).
|
|
.It Cm minburst
|
|
The minimum burst is used to obtain the steady state burst size.
|
|
It's the parameter to help compute offtime for the class.
|
|
Offtime is the amount of time a class is to wait between packets.
|
|
Default is 2.
|
|
.It Cm maxdelay
|
|
The maxdelay is specified in millisecond and used to obtain the max
|
|
queue size of the class.
|
|
If not specified, the default max queue size (30 packets) is used.
|
|
.It Cm packetsize
|
|
The average packet size in bytes to be used in CBQ over-/under-limit
|
|
computations.
|
|
Default value is MTU of the interface.
|
|
.It Cm maxpacketsize
|
|
The maximum packet size in bytes for the class.
|
|
Default value is MTU of the interface.
|
|
.It Cm red
|
|
enables RED on this class queue.
|
|
.It Cm rio
|
|
enables RIO on this class queue.
|
|
.It Cm ecn
|
|
enables RED/ECN on this class queue.
|
|
.It Cm flowvalve
|
|
enables RED/flow-valve (a.k.a. red-penalty-box) on this class queue.
|
|
.It Cm cleardscp
|
|
clears diffserv codepoint in the IP header.
|
|
.El
|
|
.Ss HFSC Commands
|
|
HFSC (Hierarchical Fair Service Curve) supports both link-sharing and
|
|
guaranteed real-time services.
|
|
H-FSC employs a service curve based QoS model, and its unique feature
|
|
is an ability to decouple delay and bandwidth allocation.
|
|
HFSC has 2 independent scheduling mechanisms.
|
|
Real-time scheduling is used to guarantee the delay and the
|
|
bandwidth allocation at the same time.
|
|
Hierarchical link-sharing is used to distribute the excess
|
|
bandwidth.
|
|
When dequeueing a packet, HFSC always tries real-time scheduling
|
|
first.
|
|
If no packet is eligible for real-time scheduling, link-sharing
|
|
scheduling is performed.
|
|
HFSC does not use class hierarchy for real-time scheduling.
|
|
.Bl -tag -width interface -offset indent
|
|
.It Cm interface
|
|
.Ar if_name
|
|
.Op Cm bandwidth Ar bps
|
|
.Op Cm tbrsize Ar bytes
|
|
.Op Ar sched_type
|
|
.El
|
|
.Pp
|
|
.Bl -tag -width 8n -offset indent
|
|
.It Ar if_name
|
|
specifies the name of a network interface (e.g., fxp0).
|
|
.It Cm bandwidth
|
|
specifies the interface bandwidth in bits per second.
|
|
.It Cm tbrsize
|
|
specifies the bucket size of a token bucket regulator in bytes.
|
|
.It Ar sched_type
|
|
must be
|
|
.Cm hfsc
|
|
for HFSC.
|
|
.El
|
|
.Pp
|
|
.Bl -tag -width class -offset indent
|
|
.It Cm class
|
|
.Ar sched_type
|
|
.Ar if_name
|
|
.Ar class_name
|
|
.Ar parent_name
|
|
.Op Cm admission cntlload|none
|
|
.Op Bq Cm sc Ar m1 d m2
|
|
.Op Bq Cm rt Ar m1 d m2
|
|
.Op Bq Cm ls Ar m1 d m2
|
|
.Op Cm pshare Ar percent
|
|
.Op Cm grate Ar bps
|
|
.Op Cm default
|
|
.Op Cm qlimit Ar count
|
|
.Op Cm red|rio
|
|
.Op Cm ecn
|
|
.Op Cm cleardscp
|
|
.El
|
|
.Pp
|
|
The
|
|
.Cm class
|
|
command specifies a HFSC class.
|
|
The classes are organized as a hierarchy, and every class, except
|
|
for the root class, has a parent.
|
|
.Pp
|
|
Each HFSC class has 2 service curves, the real-time service curve and
|
|
the link-sharing service curve.
|
|
Service curves are specified by
|
|
.Bq Ar type Ar m1 d m2 .
|
|
.Ar type
|
|
should be either
|
|
.Cm sc, rt
|
|
or
|
|
.Cm ls .
|
|
.Cm sc
|
|
(service curve) is used to set the same values to both service curves.
|
|
.Cm rt
|
|
(real-time) is used to specify the real-time service curve.
|
|
.Cm ls
|
|
(link-sharing) is used to specify the link-sharing service curve.
|
|
.Ar m1
|
|
is the slope of the first segment specified in bits-per-second.
|
|
.Ar d
|
|
is the x-projection of the intersection point of the 2 segments
|
|
specified in milliseconds.
|
|
.Ar m2
|
|
is the slope of the second segment specified in bits-per-second.
|
|
.Bl -tag -width 8n -offset indent
|
|
.It Ar sched_type
|
|
must be
|
|
.Cm hfsc
|
|
for a HFSC class.
|
|
.It Ar if_name
|
|
Interface name.
|
|
Must correspond to name in interface specification.
|
|
.It Ar class_name
|
|
Arbitrary name for this class.
|
|
Must be unique within the class hierarchy for this interface.
|
|
The name
|
|
.Cm root
|
|
is a reserved class name for the root class.
|
|
The root class for the interface is automatically created by the
|
|
.Cm interface
|
|
command.
|
|
.It Ar parent_name
|
|
The name of the parent class for this class.
|
|
Keyword
|
|
.Cm root
|
|
is used when the parent is the root class.
|
|
Parent class must have been previously defined.
|
|
.It Cm admission
|
|
The type of admission control and QoS type.
|
|
.Cm cntlload
|
|
is controlled load service for RSVP, otherwise, it should be
|
|
.Cm none .
|
|
The default is
|
|
.Cm none .
|
|
.It Cm pshare
|
|
Percent of the link share.
|
|
This specifies a linear link-sharing service curve as a fraction of
|
|
the link bandwidth.
|
|
It is a short hand of
|
|
.Li [ls 0 0 (link-bandwidth * percent / 100)] .
|
|
.It Cm grate
|
|
Guaranteed rate.
|
|
This specifies a linear real-time service curve.
|
|
It is a short hand of
|
|
.Li [rt 0 0 bps] .
|
|
.It Cm default
|
|
Specify the default class.
|
|
When this keyword is present, all packets that do not match some
|
|
classification criteria are assigned to this class.
|
|
Must be exactly one class on each interface defined as the default
|
|
class.
|
|
.It Cm qlimit
|
|
The maximum queue size in number of packets.
|
|
Default value is 50.
|
|
.It Cm red
|
|
enables RED on this class queue.
|
|
.It Cm rio
|
|
enables RIO on this class queue.
|
|
.It Cm ecn
|
|
enables RED/ECN on this class queue.
|
|
.It Cm cleardscp
|
|
clears diffserv codepoint in the IP header.
|
|
.El
|
|
.Ss PRIQ Commands
|
|
PRIQ (Priority Queueing) implements a simple priority-based queueing.
|
|
A higher priority class is always served first.
|
|
Up to 16 priorities can be used with PRIQ.
|
|
.Bl -tag -width interface -offset indent
|
|
.It Cm interface
|
|
.Ar if_name
|
|
.Op Cm bandwidth Ar bps
|
|
.Op Cm tbrsize Ar bytes
|
|
.Op Ar sched_type
|
|
.El
|
|
.Pp
|
|
.Bl -tag -width 8n -offset indent
|
|
.It Ar if_name
|
|
specifies the name of a network interface (e.g., fxp0).
|
|
.It Cm bandwidth
|
|
specifies the interface bandwidth in bits per second.
|
|
.It Cm tbrsize
|
|
specifies the bucket size of a token bucket regulator in bytes.
|
|
.It Ar sched_type
|
|
must be
|
|
.Cm priq
|
|
for PRIQ.
|
|
.El
|
|
.Pp
|
|
.Bl -tag -width class -offset indent
|
|
.It Cm class
|
|
.Ar sched_type
|
|
.Ar if_name
|
|
.Ar class_name
|
|
.Ar parent_name
|
|
.Op Cm priority Ar pri
|
|
.Op Cm default
|
|
.Op Cm qlimit Ar count
|
|
.Op Cm red|rio
|
|
.Op Cm ecn
|
|
.Op Cm cleardscp
|
|
.El
|
|
.Pp
|
|
.Bl -tag -width 8n -offset indent
|
|
.It Ar sched_type
|
|
must be
|
|
.Cm priq
|
|
for a PRIQ class.
|
|
.It Ar if_name
|
|
Interface name.
|
|
Must correspond to name in interface specification.
|
|
.It Ar class_name
|
|
Arbitrary name for this class.
|
|
Must be unique for this interface.
|
|
.It Ar parent_name
|
|
Parent class must be
|
|
.Dv NULL
|
|
for PRIQ.
|
|
.It Cm priority
|
|
High numbers are higher priority.
|
|
Max value is 15 and Min value is 0.
|
|
Default is 0.
|
|
A higher priority class is always served first in PRIQ.
|
|
Priority must be unique for the interface.
|
|
.It Cm default
|
|
Specify the default class.
|
|
When this keyword is present, all packets that do not match some
|
|
classification criteria are assigned to this class.
|
|
Must be exactly one class on each interface defined as the default
|
|
class.
|
|
.It Cm qlimit
|
|
The maximum queue size in number of packets.
|
|
Default value is 50.
|
|
.It Cm red
|
|
enables RED on this class queue.
|
|
.It Cm rio
|
|
enables RIO on this class queue.
|
|
.It Cm ecn
|
|
enables RED/ECN on this class queue.
|
|
.It Cm cleardscp
|
|
clears diffserv codepoint in the IP header.
|
|
.El
|
|
.Ss WFQ Commands
|
|
WFQ (Weighted Fair Queueing) implements a weighted-round robin
|
|
scheduler for a set of queue.
|
|
A weight can be assigned to each queue to give a
|
|
different proportion of the link capacity.
|
|
A hash function is used to map a flow to one of a set of queues, and
|
|
thus, it is possible for two different flows to be mapped into the same
|
|
queue.
|
|
.Bl -tag -width interface -offset indent
|
|
.It Cm interface
|
|
.Ar if_name
|
|
.Op Cm bandwidth Ar bps
|
|
.Op Cm tbrsize Ar bytes
|
|
.Op Ar sched_type
|
|
.Op Cm nqueues Ar count
|
|
.Op Cm qsize Ar bytes
|
|
.Op Cm hash Ar policy
|
|
.El
|
|
.Pp
|
|
.Bl -tag -width 8n -offset indent
|
|
.It Cm if_name
|
|
specifies the name of a network interface (e.g., fxp0).
|
|
.It Cm bandwidth
|
|
specifies the interface bandwidth in bits per second.
|
|
.It Cm tbrsize
|
|
specifies the bucket size of a token bucket regulator in bytes.
|
|
.It Ar sched_type
|
|
must be
|
|
.Cm wfq
|
|
for WFQ.
|
|
.It Cm nqueues
|
|
The number of queues in WFQ. Default value is 256.
|
|
.It Cm qsize
|
|
The size of each queue in number of bytes.
|
|
Default value is 64K bytes.
|
|
.It Cm hash
|
|
Type of hash policy to select a queue.
|
|
.Cm dstaddr
|
|
specifies a hashing policy by IP destination address.
|
|
.Cm full
|
|
specifies a hashing policy by IP addresses and ports.
|
|
.Cm srcport
|
|
specifies a hashing policy by IP source port number.
|
|
Default is
|
|
.Cm dstaddr
|
|
.El
|
|
.Ss FIFOQ Commands
|
|
FIFOQ (First-In First-Out Queueing) is a simple tail-drop FIFO queue.
|
|
FIFOQ is the simplest possible implementation of a queueing discipline
|
|
in ALTQ, and can be used to compare with other queueing disciplines.
|
|
FIFOQ can be also used as a template for those who want to write their
|
|
own queueing disciplines.
|
|
.Bl -tag -width interface -offset indent
|
|
.It Cm interface
|
|
.Ar if_name
|
|
.Op Cm bandwidth Ar bps
|
|
.Op Cm tbrsize Ar bytes
|
|
.Op Ar sched_type
|
|
.Op Cm qlimit Ar count
|
|
.El
|
|
.Pp
|
|
.Bl -tag -width 8n -offset indent
|
|
.It Ar if_name
|
|
specifies the name of a network interface (e.g., fxp0).
|
|
.It Cm bandwidth
|
|
specifies the interface bandwidth in bits per second.
|
|
.It Cm tbrsize
|
|
specifies the bucket size of a token bucket regulator in bytes.
|
|
.It Ar sched_type
|
|
must be
|
|
.Cm fifoq
|
|
for FIFOQ.
|
|
.It Cm qlimit
|
|
The maximum queue size in number of packets.
|
|
Default value is 50.
|
|
.El
|
|
.Ss RED Commands
|
|
RED (Random Early Detection) is an implicit congestion notification
|
|
mechanism that exercises packet dropping or packet marking
|
|
stochastically according to the average queue length.
|
|
RED can be viewed as a buffer management mechanism
|
|
and can be integrated into other packet scheduling schemes.
|
|
.Bl -tag -width red -offset indent
|
|
.It Cm red
|
|
.Ar min_th
|
|
.Ar max_th
|
|
.Ar inv_pmax
|
|
.El
|
|
.Pp
|
|
The
|
|
.Cm red
|
|
command sets the default RED parameters.
|
|
.Ar min_th
|
|
and
|
|
.Ar max_th
|
|
are the minimum and the maximum threshold values.
|
|
.Ar inv_pmax
|
|
is the inverse (reciprocal) of the maximum drop probability.
|
|
For example, 10 means the maximum drop probability of 1/10.
|
|
.Bl -tag -width interface -offset indent
|
|
.It Cm interface
|
|
.Ar if_name
|
|
.Op Cm bandwidth Ar bps
|
|
.Op Cm tbrsize Ar bytes
|
|
.Op Ar sched_type
|
|
.Op Cm qlimit Ar count
|
|
.Op Cm packetsize Ar bytes
|
|
.Op Cm weight Ar n
|
|
.Op Cm thmin Ar n
|
|
.Op Cm thmax Ar n
|
|
.Op Cm invpmax Ar n
|
|
.Op Cm ecn
|
|
.Op Cm flowvalve
|
|
.El
|
|
.Pp
|
|
.Bl -tag -width 8n -offset indent
|
|
.It Ar if_name
|
|
specifies the name of a network interface (e.g., fxp0).
|
|
.It Cm bandwidth
|
|
specifies the interface bandwidth in bits per second.
|
|
.It Cm tbrsize
|
|
specifies the bucket size of a token bucket regulator in bytes.
|
|
.It Ar sched_type
|
|
must be
|
|
.Cm red
|
|
for RED.
|
|
.It Cm qlimit
|
|
The maximum queue size in number of packets.
|
|
Default value is 60.
|
|
.It Cm packetsize
|
|
The average packet size in number of bytes.
|
|
This parameter is used to calibrate the idle period.
|
|
Default value is 1000.
|
|
.It Cm weight
|
|
The inverse of the weight of EWMA (exponentially weighted moving average).
|
|
.It Cm thmin
|
|
The minimum threshold.
|
|
.It Cm thmax
|
|
The maximum threshold.
|
|
.It Cm invpmax
|
|
The inverse of the maximum drop probability.
|
|
.It Cm ecn
|
|
enables ECN.
|
|
.It Cm flowvalve
|
|
enables flowvalve.
|
|
.El
|
|
.Ss RIO Commands
|
|
ALTQ/RIO has 3 drop precedence levels defined for the Assured
|
|
Forwarding of DiffServ (RFC2597).
|
|
Since adaptive flows are likely to stay under the medium drop
|
|
precedence level under congestion, the medium drop precedence would
|
|
protect adaptive flows from unadaptive flows.
|
|
.Pp
|
|
The original RIO has 2 sets of RED parameters; one for in-profile
|
|
packets and the other for out-of-profile packets.
|
|
At the ingress of the network, profile meters tag packets as IN
|
|
or OUT based on contracted profiles for customers.
|
|
Inside the network, IN packets receive preferential treatment by
|
|
the RIO dropper.
|
|
It is possible to provision the network not to drop IN packets
|
|
at all by providing enough capacity for the total volume of IN
|
|
packets.
|
|
Thus, RIO can be used to provide a service that statistically assures
|
|
capacity allocated for users.
|
|
This mechanism can be extended to support an arbitrary number of drop
|
|
precedence levels. ALTQ supports 3 drop precedence levels.
|
|
.Bl -tag -width rio -offset indent
|
|
.It Cm rio
|
|
.Ar low_min_th
|
|
.Ar low_max_th
|
|
.Ar low_inv_pmax
|
|
.Ar medium_min_th
|
|
.Ar medium_max_th
|
|
.Ar medium_inv_pmax
|
|
.Ar high_min_th
|
|
.Ar high_max_th
|
|
.Ar high_inv_pmax
|
|
.El
|
|
.Pp
|
|
The
|
|
.Cm rio
|
|
command sets the default RIO parameters.
|
|
The parameters are RED parameters for 3 (low, medium, high) drop
|
|
precedence.
|
|
.Bl -tag -width interface -offset indent
|
|
.It Cm interface
|
|
.Ar if_name
|
|
.Op Cm bandwidth Ar bps
|
|
.Op Cm tbrsize Ar bytes
|
|
.Op Ar sched_type
|
|
.Op Cm qlimit Ar count
|
|
.Op Cm packetsize Ar bytes
|
|
.Op Cm weight Ar n
|
|
.Op Cm lo_thmin Ar n
|
|
.Op Cm lo_thmax Ar n
|
|
.Op Cm lo_invpmax Ar n
|
|
.Op Cm med_thmin Ar n
|
|
.Op Cm med_thmax Ar n
|
|
.Op Cm med_invpmax Ar n
|
|
.Op Cm hi_thmin Ar n
|
|
.Op Cm hi_thmax Ar n
|
|
.Op Cm hi_invpmax Ar n
|
|
.Op Cm ecn
|
|
.El
|
|
.Pp
|
|
.Bl -tag -width 8n -offset indent
|
|
.It Ar if_name
|
|
specifies the name of a network interface (e.g., fxp0).
|
|
.It Cm bandwidth
|
|
specifies the interface bandwidth in bits per second.
|
|
.It Cm tbrsize
|
|
specifies the bucket size of a token bucket regulator in bytes.
|
|
.It Ar sched_type
|
|
must be
|
|
.Cm rio
|
|
for RIO.
|
|
.It Cm qlimit
|
|
The maximum queue size in number of packets.
|
|
Default value is 60.
|
|
.It Cm packetsize
|
|
The average packet size in number of bytes.
|
|
This parameter is used to calibrate the idle period.
|
|
Default value is 1000.
|
|
.It Cm weight
|
|
The inverse of the weight of EWMA (exponentially weighted moving average).
|
|
.It Cm lo_thmin
|
|
The minimum threshold for low drop precedence.
|
|
.It Cm lo_thmax
|
|
The maximum threshold for low drop precedence.
|
|
.It Cm lo_invpmax
|
|
The inverse of the maximum drop probability for low drop precedence.
|
|
.It Cm med_thmin
|
|
The minimum threshold for medium drop precedence.
|
|
.It Cm med_thmax
|
|
The maximum threshold for medium drop precedence.
|
|
.It Cm med_invpmax
|
|
The inverse of the maximum drop probability for medium drop precedence.
|
|
.It Cm hi_thmin
|
|
The minimum threshold for high drop precedence.
|
|
.It Cm hi_thmax
|
|
The maximum threshold for high drop precedence.
|
|
.It Cm hi_invpmax
|
|
The inverse of the maximum drop probability for high drop precedence.
|
|
.It Cm ecn
|
|
enables ECN.
|
|
.El
|
|
.Ss BLUE Commands
|
|
.Bl -tag -width interface -offset indent
|
|
.It Cm interface
|
|
.Ar if_name
|
|
.Op Cm bandwidth Ar bps
|
|
.Op Cm tbrsize Ar bytes
|
|
.Op Ar sched_type
|
|
.Op Cm qlimit Ar count
|
|
.Op Cm packetsize Ar bytes
|
|
.Op Cm maxpmark Ar n
|
|
.Op Cm holdtime Ar usec
|
|
.Op Cm ecn
|
|
.El
|
|
.Pp
|
|
.Bl -tag -width 8n -offset indent
|
|
.It Ar if_name
|
|
specifies the name of a network interface (e.g., fxp0).
|
|
.It Cm bandwidth
|
|
specifies the interface bandwidth in bits per second.
|
|
.It Cm tbrsize
|
|
specifies the bucket size of a token bucket regulator in bytes.
|
|
.It Ar sched_type
|
|
must be
|
|
.Cm blue
|
|
for BLUE.
|
|
.It Cm qlimit
|
|
The maximum queue size in number of packets.
|
|
Default value is 60.
|
|
.It Cm packetsize
|
|
The average packet size in number of bytes. Default value is 1000.
|
|
.It Cm maxpmark
|
|
specifies the precision of marking probability.
|
|
.It Cm holdtime
|
|
specifies the hold time in usec.
|
|
.It Cm ecn
|
|
enables ECN.
|
|
.El
|
|
.Ss CDNR Commands
|
|
The
|
|
.Cm conditioner
|
|
command specifies a diffserv traffic conditioner.
|
|
A traffic conditioner is not a queueing discipline but a component to
|
|
meter, mark or drop incoming packets according to some rules.
|
|
.Pp
|
|
As opposed to a queueing discipline, a traffic conditioner handles
|
|
incoming packets at an input interface.
|
|
If no queueing discipline (e.g., CBQ) is used for the interface,
|
|
a null interface command should be used to specify an input network
|
|
interface.
|
|
.Bl -tag -width interface -offset indent
|
|
.It Cm interface
|
|
.Ar if_name
|
|
.Op Cm bandwidth Ar bps
|
|
.Op Cm tbrsize Ar bytes
|
|
.El
|
|
.Pp
|
|
The
|
|
.Cm conditioner
|
|
command has the following syntax.
|
|
.Bl -tag -width conditioner -offset indent
|
|
.It Cm conditioner
|
|
.Ar if_name
|
|
.Ar cdnr_name
|
|
.Aq action
|
|
.El
|
|
.Pp
|
|
.Bl -tag -width 10n -offset indent
|
|
.It Ar if_name
|
|
Interface name. Must correspond to name in interface specification.
|
|
.It Ar cdnr_name
|
|
Arbitrary name for this conditioner.
|
|
Must be unique for this interface.
|
|
.It Ar action
|
|
Action of the conditioner.
|
|
.El
|
|
.Pp
|
|
An action can be a recursively defined action.
|
|
The following actions are defined.
|
|
.Bl -tag -width pass -offset indent
|
|
.It Cm pass
|
|
.Bl -inset -offset indent
|
|
.It Cm pass
|
|
allows the packet to go through without any modification to the packet.
|
|
.El
|
|
.El
|
|
.Pp
|
|
.Bl -tag -width drop -offset indent
|
|
.It Cm drop
|
|
.Bl -inset -offset indent
|
|
.It Cm drop
|
|
rejects the packet.
|
|
The packet is immediately discarded.
|
|
.El
|
|
.El
|
|
.Pp
|
|
.Bl -tag -width mark -offset indent
|
|
.It Cm mark
|
|
.Ar value
|
|
.Bl -inset -offset indent
|
|
.It Cm mark
|
|
sets the specified value to the ds field in the IP header.
|
|
Then, the packet is allowed to go through.
|
|
.El
|
|
.El
|
|
.Pp
|
|
.Bl -tag -width tbmeter -offset indent
|
|
.It Cm tbmeter
|
|
.Ar rate depth
|
|
.Aq in_action
|
|
.Aq out_action
|
|
.Pp
|
|
.Bl -inset -offset indent
|
|
.It Cm tbmeter
|
|
is a token bucket meter configured with rate and depth parameters.
|
|
Rate is token rate in bits-per-second.
|
|
Depth is bucket depth in KB.
|
|
When an incoming packet is in profile (available token is more than
|
|
the packet size), tbmeter takes in_action.
|
|
Otherwise, tbmeter takes out_action.
|
|
.El
|
|
.El
|
|
.Pp
|
|
.Bl -tag -width trtcm -offset indent
|
|
.It Cm trtcm
|
|
.Ar cmtd_rate cmtd_depth peak_rate peak_depth
|
|
.Aq green_action
|
|
.Aq yellow_action
|
|
.Aq red_action
|
|
.Op Cm coloraware|colorblind
|
|
.Bl -inset -offset indent
|
|
.It Cm trtcm
|
|
is a 2-rate 3 color marker for Assured Forwarding.
|
|
A trtcm consists of 2 token buckets, one for a committed rate and the
|
|
other for a peak rate.
|
|
When an incoming packet is in the committed profile, trtcm takes
|
|
green_action.
|
|
When the packet is out of the committed profile but in the peak
|
|
profile, trtcm takes yellow_action.
|
|
Otherwise, tbtcm takes red_action.
|
|
A trtcm is either color-aware or color-blind.
|
|
A color-aware trtcm do not raise the color (ds field value), that is,
|
|
a yellow packet can be yellow or red but can not be blue.
|
|
Default is color-blind.
|
|
.El
|
|
.El
|
|
.Pp
|
|
.Bl -tag -width tswtcm -offset indent
|
|
.It Cm tswtcm
|
|
.Ar cmtd_rate peak_rate avg_interval
|
|
.Aq green_action
|
|
.Aq yellow_action
|
|
.Aq red_action
|
|
.Bl -inset -offset indent
|
|
.It Cm tswtcm
|
|
is a time sliding window 3 color marker for Assured Forwarding.
|
|
A tswtcm differs from trtcm in that a tswtcm probabilistically marks
|
|
packets.
|
|
A tswtcm consists of 2 rates, one for a committed rate and the
|
|
other for a peak rate.
|
|
When an incoming packet is in the committed profile, tswtcm takes
|
|
green_action.
|
|
When the packet is out of the committed profile but in the peak
|
|
profile, tswtcm takes yellow_action.
|
|
Otherwise, tswtcm takes red_action.
|
|
cmtd_rate and peak_rate are specified in bits per second.
|
|
avg_interval provides the size of time window for averaging incoming
|
|
rate, and is specified in milliseconds.
|
|
500 msec is ok for normal settings.
|
|
.El
|
|
.El
|
|
.Sh EXAMPLES
|
|
.Ss CBQ Example
|
|
.Bd -literal
|
|
#
|
|
# cbq configuration for vx0 (10Mbps ether)
|
|
# give at least 40% to TCP
|
|
# limit HTTP from network 133.138.1.0 up to 10%, use RED.
|
|
# other traffic goes into default class
|
|
#
|
|
interface vx0 bandwidth 10M cbq
|
|
#
|
|
class cbq vx0 root_class NULL priority 0 pbandwidth 100
|
|
class cbq vx0 def_class root_class borrow pbandwidth 95 default
|
|
class cbq vx0 tcp_class def_class borrow pbandwidth 40
|
|
filter vx0 tcp_class 0 0 0 0 6
|
|
class cbq vx0 csl_class tcp_class pbandwidth 10 red
|
|
filter vx0 csl_class 0 0 133.138.1.0 netmask 0xffffff00 80 6
|
|
filter vx0 csl_class 133.138.1.0 netmask 0xffffff00 0 0 80 6
|
|
#
|
|
# sample filter6 command
|
|
#
|
|
filter6 vx0 csl_class ::0 0 d000:a:0:123::/64 80 6
|
|
.Ed
|
|
.Ss HFSC Example
|
|
.Bd -literal
|
|
#
|
|
# hfsc configuration for hierarchical sharing
|
|
#
|
|
interface pvc0 bandwidth 45M hfsc
|
|
#
|
|
# (10% of the bandwidth share goes to the default class)
|
|
class hfsc pvc0 def_class root pshare 10 default
|
|
#
|
|
# bandwidth share guaranteed rate
|
|
# CMU: 45% 15Mbps
|
|
# PITT: 45% 15Mbps
|
|
#
|
|
class hfsc pvc0 cmu root pshare 45 grate 15M
|
|
class hfsc pvc0 pitt root pshare 45 grate 15M
|
|
#
|
|
# CMU bandwidth share guaranteed rate
|
|
# CS: 20% 10Mbps
|
|
# other: 20% 5Mbps
|
|
#
|
|
class hfsc pvc0 cmu_other cmu pshare 20 grate 10M
|
|
filter pvc0 cmu_other 0 0 128.2.0.0 netmask 0xffff0000 0 0
|
|
class hfsc pvc0 cmu_cs cmu pshare 20 grate 5M
|
|
filter pvc0 cmu_cs 0 0 128.2.242.0 netmask 0xffffff00 0 0
|
|
#
|
|
# PITT bandwidth share guaranteed rate
|
|
# CS: 20% 10Mbps
|
|
# other: 20% 5Mbps
|
|
#
|
|
class hfsc pvc0 pitt_other pitt pshare 20 grate 10M
|
|
filter pvc0 pitt_other 0 0 136.142.0.0 netmask 0xffff0000 0 0
|
|
class hfsc pvc0 pitt_cs pitt pshare 20 grate 5M
|
|
filter pvc0 pitt_cs 0 0 136.142.79.0 netmask 0xffffff00 0 0
|
|
.Ed
|
|
.Ss PRIQ Example
|
|
.Bd -literal
|
|
#
|
|
# priq configuration for fxp0 (100Mbps ether)
|
|
# icmp: high priority
|
|
# tcp: medium priority
|
|
# others: low priority
|
|
#
|
|
interface fxp0 bandwidth 100M priq
|
|
#
|
|
class priq fxp0 high_class NULL priority 2
|
|
filter fxp0 high_class 0 0 0 0 1
|
|
class priq fxp0 med_class NULL priority 1
|
|
filter fxp0 high_class 0 0 0 0 6
|
|
class priq fxp0 low_class NULL priority 0 default
|
|
.Ed
|
|
.Ss WFQ Example
|
|
.Bd -literal
|
|
interface pvc0 bandwidth 134000000 wfq
|
|
.Ed
|
|
.Ss FIFOQ Example
|
|
.Bd -literal
|
|
interface rl0 bandwidth 10M fifoq
|
|
.Ed
|
|
.Ss Conditioner Example
|
|
.Bd -literal
|
|
#
|
|
interface fxp0
|
|
#
|
|
# a simple dropper
|
|
# discard all packets from 192.168.0.83
|
|
#
|
|
conditioner fxp0 dropper \*[Lt]drop\*[Gt]
|
|
filter fxp0 dropper 0 0 192.168.0.83 0 0
|
|
|
|
#
|
|
# EF conditioner
|
|
# mark EF to all packets from 192.168.0.117
|
|
#
|
|
conditioner pvc1 ef_cdnr \*[Lt]tbmeter 6M 64K \*[Lt]mark 0xb8\*[Gt]\*[Lt]drop\*[Gt]\*[Gt]
|
|
filter fxp0 ef_cdnr 0 0 192.168.0.117 0 0
|
|
|
|
#
|
|
# AF1x conditioner
|
|
# mark AF1x to packets from 192.168.0.178
|
|
# AF11 (low drop precedence): less than 3Mbps
|
|
# AF12 (medium drop precedence): more than 3Mbps and less than 10Mbps
|
|
# AF13 (high drop precedence): more than 10Mbps
|
|
#
|
|
conditioner fxp0 af1x_cdnr \*[Lt]trtcm 3M 32K 10M 64K \*[Lt]mark 0x28\*[Gt]\*[Lt]mark 0x30\*[Gt]\*[Lt]mark 0x38\*[Gt]\*[Gt]
|
|
filter fxp0 af1x_cdnr 0 0 192.168.0.178 0 0
|
|
.Ed
|
|
.Sh SEE ALSO
|
|
.Xr altqd 8
|
|
.Sh BUGS
|
|
This man page is incomplete. For more information read the source.
|