Sync usage with man page.
[netbsd-mini2440.git] / usr.sbin / altq / altqd / altq.conf.5
blobb06a9be66e7a791fd275424bb4ef051e5b6c5ed9
1 .\"     $NetBSD: altq.conf.5,v 1.12 2008/09/11 17:58:59 joerg Exp $
2 .\"     $KAME: altq.conf.5,v 1.15 2002/11/17 02:51:49 kjc Exp $
3 .\"
4 .\" Copyright (C) 2000
5 .\" Sony Computer Science Laboratories Inc.  All rights reserved.
6 .\"
7 .\" Redistribution and use in source and binary forms, with or without
8 .\" modification, are permitted provided that the following conditions
9 .\" are met:
10 .\" 1. Redistributions of source code must retain the above copyright
11 .\"    notice, this list of conditions and the following disclaimer.
12 .\" 2. Redistributions in binary form must reproduce the above copyright
13 .\"    notice, this list of conditions and the following disclaimer in the
14 .\"    documentation and/or other materials provided with the distribution.
15 .\"
16 .\" THIS SOFTWARE IS PROVIDED BY SONY CSL AND CONTRIBUTORS ``AS IS'' AND
17 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 .\" ARE DISCLAIMED.  IN NO EVENT SHALL SONY CSL OR CONTRIBUTORS BE LIABLE
20 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 .\" SUCH DAMAGE.
27 .\"
28 .Dd September 10, 2008
29 .Dt ALTQ.CONF 5
30 .Os
31 .\"
32 .Sh NAME
33 .Nm altq.conf
34 .Nd ALTQ configuration file
35 .\"
36 .Sh DESCRIPTION
37 The
38 .Nm
39 file contains a number of lines specifying the behavior of queueing
40 disciplines.
41 Comments start with a # and extend to the end of the line.
42 .Pp
43 The
44 .Xr altqd 8
45 program reads
46 .Pa /etc/altq.conf
47 at startup and sets up queueing disciplines.
48 BLUE, CBQ (Class-Based Queueing), FIFOQ (First-In First-Out Queue),
49 HFSC (Hierarchical Fair Service Curve), PRIQ (Priority Queueing),
50 RED (Random Early Detection), RIO (RED with IN/OUT),
51 WFQ (Weighted Fair Queueing), JoBS (Joint Buffer Management and
52 Scheduling)
53 and CDNR (Diffserv Traffic Conditioner) can be configured in this file.
54 .Ss Interface Commands
55 .Bl -tag -width interface -offset indent
56 .It Cm interface
57 .Ar if_name
58 .Op Cm bandwidth Ar bps
59 .Op Cm tbrsize Ar bytes
60 .Op Ar sched_type
61 .Op Ar discipline-specific-options
62 .El
63 .Pp
64 The
65 .Cm interface
66 command specifies a network interface to be under control of ALTQ.
67 One interface specification is provided for each network interface
68 under control of ALTQ.
69 A system configured as a router may have multiple interface
70 specifications.
71 .Bl -tag -width 8n -offset indent
72 .It Ar if_name
73 specifies the name of a network interface (e.g., fxp0).
74 .It Cm bandwidth
75 specifies the interface bandwidth in bits per second.
76 This is the maximum rate that the queueing discipline will allow on this
77 interface.
78 .It Cm tbrsize
79 specifies the bucket size of a token bucket regulator in bytes.
80 When
81 .Cm tbrsize
82 is omitted, the system automatically sets the bucket size
83 using heuristics.
84 The token rate is set to the interface bandwidth specified by the
85 .Cm interface
86 command.
87 .It Ar sched_type
88 Type of a queueing discipline.
89 It must be either
90 .Cm blue ,
91 .Cm cbq ,
92 .Cm fifoq ,
93 .Cm hfsc ,
94 .Cm jobs ,
95 .Cm priq ,
96 .Cm red ,
97 .Cm rio ,
99 .Cm wfq .
100 If the interface has only traffic conditioners and no queueing
101 discipline,
102 .Ar sched_type
103 can be omitted.
105 .Ss Class Command
106 .Bl -tag -width class -offset indent
107 .It Cm class
108 .Ar sched_type
109 .Ar if_name
110 .Ar class_name
111 .Ar parent_name
112 .Op Cm red|rio
113 .Op Cm ecn
114 .Op Cm cleardscp
115 .Op Ar discipline-specific-options
119 .Cm class
120 command specifies a packet scheduling class for CBQ, HFSC, JoBS or PRIQ.
121 A class specifier must be provided for each packet scheduling class.
122 .Bl -tag -width 8n -offset indent
123 .It Ar sched_type
124 Type of queueing discipline.
125 Must correspond to the discipline name in interface specification.
126 .It Ar if_name
127 Interface name.
128 Must correspond to name in interface specification.
129 .It Ar class_name
130 Arbitrary name for this class.
131 Must be unique for this interface.
132 .It Ar parent_name
133 The name of the parent class for this class (for CBQ or HFSC).
134 Parent class must have been previously defined.
135 PRIQ and JoBS do not have class hierarchy and parent_name must be
136 .Dv NULL
137 for PRIQ and JoBS classes.
138 .It Cm red
139 Use RED (Random Early Detection) on this class queue.
140 RED drops packets with the probability proportional to the average
141 queue length.
142 .It Cm rio
143 Use RIO (RED with In/Out bit) on this class queue.
144 RIO runs triple RED algorithms at the same time.
145 .It Cm ecn
146 Use RED/ECN (Explicit Congestion Notification) on this
147 class queue (experimental implementation).
148 ECN implies RED.
149 .It Cm cleardscp
150 Clear diffserv codepoint in the IP header.
152 .Ss Filter Commands
153 .Bl -tag -width filter -offset indent
154 .It Cm filter
155 .Ar if_name
156 .Ar class_name
157 .Op Cm name Ar fltr_name
158 .Op Cm ruleno Ar num
159 .Ar filter_values
163 .Cm filter
164 command specifies a filter to classify packets into
165 a scheduling class.
166 A filter specifier determines any statically-defined packet
167 classification rules.
168 .Bl -tag -width 10n -offset indent
169 .It Ar if_name
170 Name of a network interface (e.g., fxp0).
171 .It Ar class_name
172 Name of a class or a conditioner to which matching packets are directed.
173 .It Cm name
174 Add an arbitrary name to the filter for a future reference.
175 .It Cm ruleno
176 Specifies explicit order of filter matching.
177 Filter matching is performed from a filter with a larger ruleno.
178 Default is 0.
181 .Ar filter_value
182 should be in the following format:
183 .Bl -tag -width filter -offset indent
184 .It filter_values :
185 .Ad dst_addr Op Cm netmask Ar mask
186 .Ar dport
187 .Ad src_addr Op Cm netmask Ar mask
188 .Ar sport
189 .Ar proto
191 .Cm tos
192 .Ar value
193 .Op Cm tosmask Ar value
195 .Op Cm gpi Ar value
198 Here
199 .Ad dst_addr
201 .Ad src_addr
202 are dotted-decimal addresses of
203 the destination and the source respectively.
204 An address may be followed by
205 .Cm netmask
206 keyword.
207 .Ar dport
209 .Ar sport
210 are port numbers of the destination and the source respectively.
211 .Ar proto
212 is a protocol number defined for IP packets (e.g. 6 for TCP).
213 .Cm tos
214 keyword can be used to specify the type of service field value.
215 .Cm gpi
216 keyword can be used to specify the Security Parameter Index value for
217 IPsec.
219 When filter value 0 is used, it is taken as a wildcard.
220 .Bl -tag -width filter6 -offset indent
221 .It Cm filter6
222 .Ar if_name
223 .Ar class_name
224 .Op Cm name Ar fltr_name
225 .Op Cm ruleno Ar num
226 .Ar filter6_values
230 .Cm filter6
231 command is for IPv6.
232 .Ar filter6_value
233 should be in the following format:
234 .Bl -tag -width filter6 -offset indent
235 .It filter6_values :
236 .Ad dst_addr Ns Op /prefix_len
237 .Ar dport
238 .Ad src_addr Ns Op /prefix_len
239 .Ar sport
240 .Ar proto
241 .Op Cm flowlabel Ar value
243 .Cm tclass
244 .Ar value
245 .Op Cm tclassmask Ar value
247 .Op Cm gpi Ar value
250 Here
251 .Ad dst_addr
253 .Ad src_addr
254 are IPv6 addresses of the destination and the source respectively.
255 An address may be followed by an optional address prefix length.
256 .Ar dport
258 .Ar sport
259 are port numbers of the destination and the source respectively.
260 .Ar proto
261 is a protocol number defined for IPv6 packets (e.g. 6 for TCP).
262 .Cm flowlabel
263 keyword can be used to specify the flowlabel field value.
264 .Cm tclass
265 keyword can be used to specify the traffic class field value.
266 .Cm gpi
267 keyword can be used to specify the Security Parameter Index value for
268 IPsec.
270 When filter value 0 is used, it is taken as a wildcard.
271 .Ss CBQ Commands
272 CBQ (Class Based Queueing) achieves both partitioning and sharing of
273 link bandwidth by hierarchically structured classes.
274 Each class has its own queue and is assigned its share of bandwidth.
275 A child class can borrow bandwidth from its parent class as long as
276 excess bandwidth is available.
277 .Bl -tag -width interface -offset indent
278 .It Cm interface
279 .Ar if_name
280 .Op Cm bandwidth Ar bps
281 .Op Cm tbrsize Ar bytes
282 .Op Ar sched_type
283 .Op Cm efficient
286 .Bl -tag -width 8n -offset indent
287 .It Ar if_name
288 specifies the name of a network interface (e.g., fxp0).
289 .It Cm bandwidth
290 specifies the interface bandwidth in bits per second.
291 .It Cm tbrsize
292 specifies the bucket size of a token bucket regulator in bytes.
293 .It Ar sched_type
294 must be either
295 .Cm cbq ,
296 .Cm cbq-wrr
297 (weighted-round robin) or
298 .Cm cbq-prr
299 (packet-by-packet round robin).
300 .Cm cbq
301 is equivalent to
302 .Cm cbq-wrr .
303 .It Cm efficient
304 Enables CBQ's link efficiency mode.
305 This means that the scheduler will send a packet from the first
306 overlimit class it encounters of all classes of the link-sharing
307 structure when all classes are overlimit.
308 This will also cause the scheduler to use greater than its assigned
309 bandwidth, if the link is capable of more than the assigned bandwidth.
310 By default, this mode is turned off.
311 By adding the keyword
312 .Cm efficient
313 to the interface specification line, enables this mode.
316 .Bl -tag -width class -offset indent
317 .It Cm class
318 .Ar sched_type
319 .Ar if_name
320 .Ar class_name
321 .Ar parent_name
322 .Op Cm admission cntlload|none
323 .Op Cm priority Ar pri
324 .Op Cm pbandwidth Ar percent
325 .Op Cm exactbandwidth Ar bps
326 .Op Cm borrow
327 .Op Cm default
328 .Op Cm control
329 .Op Cm maxburst Ar count
330 .Op Cm minburst Ar count
331 .Bk -words
332 .Op Cm maxdelay Ar msec
334 .Op Cm packetsize Ar bytes
335 .Op Cm maxpacketsize Ar bytes
336 .Op Cm red|rio
337 .Op Cm ecn
338 .Op Cm flowvalve
339 .Op Cm cleardscp
343 .Cm class
344 command specifies a CBQ class.
345 The classes are organized as a hierarchy, and every class, except
346 for the root class, has a parent.
347 .Bl -tag -width 8n -offset indent
348 .It Ar sched_type
349 must be
350 .Cm cbq
351 for a CBQ class.
352 .It Ar if_name
353 Interface name.
354 Must correspond to name in interface specification.
355 .It Ar class_name
356 Arbitrary name for this class.
357 Must be unique within the class
358 hierarchy for this interface.
359 The name
360 .Cm ctl_class
361 is a reserved class name.
362 .It Cm parent_name
363 The name of the parent class for this class or
364 .Dv NULL
365 if this is the root class.
366 Parent class must have been previously defined.
367 .It Cm admission
368 The type of admission control and QoS type.
369 .Cm cntlload
370 is controlled load service for RSVP, otherwise, it should be
371 .Cm none .
372 The default is
373 .Cm none .
374 .It Cm priority
375 High numbers are higher priority.
376 Max value is 7 and Min value is 0.
377 Default is 1.
378 .It Cm pbandwidth
379 The percentage of the interface bandwidth allocated to this class.
380 Generally should add up to 100 percent at each level of the class
381 hierarchy, although other amounts can be specified for purposes of
382 experimentation.
383 .It Cm exactbandwidth
384 Specify the bandwidth in bits-per-second instead of
385 .Cm pbandwidth .
386 Note that the bandwidth allocation of CBQ is not so precise but this
387 is just a way to pass a parameter to CBQ; the user is supposed to know
388 the detailed internals of CBQ.
389 .Cm pbandwidth
390 is a preferred way to specify the bandwidth of a class.
391 .It Cm borrow
392 The class can borrow bandwidth from its parent class when this class
393 is overlimit.
394 If this keyword is not present, then no borrowing is done, and the
395 packet is delayed or dropped when the class is overlimit.
396 .It Cm default
397 Specify the default class.
398 When this keyword is present, all packets that do not match some
399 classification criteria are assigned to this class.
400 Must be exactly one class on each interface defined as the default
401 class.
402 .It Cm control
403 Specify the control class.
404 When this keyword is present, the predefined control class packets
405 (RSVP, IGMP, and ICMP) are assigned to this class.
406 Note that when the control class is not specified by the time the
407 default class is created, one is automatically created with default
408 parameters.
409 Thus, if the control class is specified, it must be listed before the
410 default class.
411 Must be exactly one class on each interface defined as the control
412 class.
413 .It Cm maxburst
414 The maximum burst of back-to-back packets allowed in this class.
415 Default is 16 but the default value is automatically reduced to 4 when
416 the class bandwidth is small (about less than 1Mbps).
417 .It Cm minburst
418 The minimum burst is used to obtain the steady state burst size.
419 It's the parameter to help compute offtime for the class.
420 Offtime is the amount of time a class is to wait between packets.
421 Default is 2.
422 .It Cm maxdelay
423 The maxdelay is specified in milliseconds and used to obtain the max
424 queue size of the class.
425 If not specified, the default max queue size (30 packets) is used.
426 .It Cm packetsize
427 The average packet size in bytes to be used in CBQ over-/under-limit
428 computations.
429 Default value is MTU of the interface.
430 .It Cm maxpacketsize
431 The maximum packet size in bytes for the class.
432 Default value is MTU of the interface.
433 .It Cm red
434 enables RED on this class queue.
435 .It Cm rio
436 enables RIO on this class queue.
437 .It Cm ecn
438 enables RED/ECN on this class queue.
439 .It Cm flowvalve
440 enables RED/flow-valve (a.k.a. red-penalty-box) on this class queue.
441 .It Cm cleardscp
442 clears diffserv codepoint in the IP header.
444 .Ss HFSC Commands
445 HFSC (Hierarchical Fair Service Curve) supports both link-sharing and
446 guaranteed real-time services.
447 H-FSC employs a service curve based QoS model, and its unique feature
448 is an ability to decouple delay and bandwidth allocation.
449 HFSC has 2 independent scheduling mechanisms.
450 Real-time scheduling is used to guarantee the delay and the
451 bandwidth allocation at the same time.
452 Hierarchical link-sharing is used to distribute the excess
453 bandwidth.
454 When dequeueing a packet, HFSC always tries real-time scheduling
455 first.
456 If no packet is eligible for real-time scheduling, link-sharing
457 scheduling is performed.
458 HFSC does not use class hierarchy for real-time scheduling.
459 Additionally, an upper-limit service curve can be specified for
460 link-sharing to set the upper limit allowed for the class.
461 .Bl -tag -width interface -offset indent
462 .It Cm interface
463 .Ar if_name
464 .Op Cm bandwidth Ar bps
465 .Op Cm tbrsize Ar bytes
466 .Op Ar sched_type
469 .Bl -tag -width 8n -offset indent
470 .It Ar if_name
471 specifies the name of a network interface (e.g., fxp0).
472 .It Cm bandwidth
473 specifies the interface bandwidth in bits per second.
474 .It Cm tbrsize
475 specifies the bucket size of a token bucket regulator in bytes.
476 .It Ar sched_type
477 must be
478 .Cm hfsc
479 for HFSC.
482 .Bl -tag -width class -offset indent
483 .It Cm class
484 .Ar sched_type
485 .Ar if_name
486 .Ar class_name
487 .Ar parent_name
488 .Op Cm admission cntlload|none
489 .Op Bq Cm sc Ar m1 d m2
490 .Op Bq Cm rt Ar m1 d m2
491 .Op Bq Cm ls Ar m1 d m2
492 .Op Bq Cm ul Ar m1 d m2
493 .Op Cm pshare Ar percent
494 .Op Cm grate Ar bps
495 .Op Cm bandwidth Ar bps
496 .Op Cm ulimit Ar bps
497 .Op Cm default
498 .Op Cm qlimit Ar count
499 .Op Cm red|rio
500 .Op Cm ecn
501 .Op Cm cleardscp
505 .Cm class
506 command specifies a HFSC class.
507 The classes are organized as a hierarchy, and every class, except
508 for the root class, has a parent.
510 Each HFSC class has 2 service curves, the real-time service curve and
511 the link-sharing service curve.
512 Service curves are specified by
513 .Bq Ar type Ar m1 d m2 .
514 .Ar type
515 should be either
516 .Cm sc , rt , ls ,
518 .Cm ul .
519 .Cm sc
520 (service curve) is used to set the same values to both real-time and
521 link-sharing service curves.
522 .Cm rt
523 (real-time) is used to specify the real-time service curve.
524 .Cm ls
525 (link-sharing) is used to specify the link-sharing service curve.
526 .Cm ul
527 (upper-limit) is used to specify the upper-limit service curve for
528 link-sharing.
529 .Ar m1
530 is the slope of the first segment specified in bits-per-second.
531 .Ar d
532 is the x-projection of the intersection point of the 2 segments
533 specified in milliseconds.
534 .Ar m2
535 is the slope of the second segment specified in bits-per-second.
536 .Bl -tag -width 8n -offset indent
537 .It Ar sched_type
538 must be
539 .Cm hfsc
540 for a HFSC class.
541 .It Ar if_name
542 Interface name.
543 Must correspond to name in interface specification.
544 .It Ar class_name
545 Arbitrary name for this class.
546 Must be unique within the class hierarchy for this interface.
547 The name
548 .Cm root
549 is a reserved class name for the root class.
550 The root class for the interface is automatically created by the
551 .Cm interface
552 command.
553 .It Ar parent_name
554 The name of the parent class for this class.
555 Keyword
556 .Cm root
557 is used when the parent is the root class.
558 Parent class must have been previously defined.
559 .It Cm admission
560 The type of admission control and QoS type.
561 .Cm cntlload
562 is controlled load service for RSVP, otherwise, it should be
563 .Cm none .
564 The default is
565 .Cm none .
566 .It Cm pshare
567 Percent of the link share.
568 This specifies a linear link-sharing service curve as a fraction of
569 the link bandwidth.
570 It is a short hand of
571 .Li [ls 0 0 (link-bandwidth * percent / 100)] .
572 .It Cm grate
573 Guaranteed rate.
574 This specifies a linear real-time service curve.
575 It is a short hand of
576 .Li [rt 0 0 bps] .
577 .It Cm bandwidth
578 This is a short hand of
579 .Li [sc 0 0 bps] .
580 .It Cm ulimit
581 Upper limit rate.
582 This specifies a upper-limit service curve.
583 It is a short hand of
584 .Li [ul 0 0 bps] .
585 .It Cm default
586 Specify the default class.
587 When this keyword is present, all packets that do not match some
588 classification criteria are assigned to this class.
589 Must be exactly one class on each interface defined as the default
590 class.
591 .It Cm qlimit
592 The maximum queue size in number of packets.
593 Default value is 50.
594 .It Cm red
595 enables RED on this class queue.
596 .It Cm rio
597 enables RIO on this class queue.
598 .It Cm ecn
599 enables RED/ECN on this class queue.
600 .It Cm cleardscp
601 clears diffserv codepoint in the IP header.
603 .Ss PRIQ Commands
604 PRIQ (Priority Queueing) implements a simple priority-based queueing.
605 A higher priority class is always served first.
606 Up to 16 priorities can be used with PRIQ.
607 .Bl -tag -width interface -offset indent
608 .It Cm interface
609 .Ar if_name
610 .Op Cm bandwidth Ar bps
611 .Op Cm tbrsize Ar bytes
612 .Op Ar sched_type
615 .Bl -tag -width 8n -offset indent
616 .It Ar if_name
617 specifies the name of a network interface (e.g., fxp0).
618 .It Cm bandwidth
619 specifies the interface bandwidth in bits per second.
620 .It Cm tbrsize
621 specifies the bucket size of a token bucket regulator in bytes.
622 .It Ar sched_type
623 must be
624 .Cm priq
625 for PRIQ.
628 .Bl -tag -width class -offset indent
629 .It Cm class
630 .Ar sched_type
631 .Ar if_name
632 .Ar class_name
633 .Ar parent_name
634 .Op Cm priority Ar pri
635 .Op Cm default
636 .Op Cm qlimit Ar count
637 .Op Cm red|rio
638 .Op Cm ecn
639 .Op Cm cleardscp
642 .Bl -tag -width 8n -offset indent
643 .It Ar sched_type
644 must be
645 .Cm priq
646 for a PRIQ class.
647 .It Ar if_name
648 Interface name.
649 Must correspond to name in interface specification.
650 .It Ar class_name
651 Arbitrary name for this class.
652 Must be unique for this interface.
653 .It Ar parent_name
654 Parent class must be
655 .Dv NULL
656 for PRIQ.
657 .It Cm priority
658 High numbers are higher priority.
659 Max value is 15 and Min value is 0.
660 Default is 0.
661 A higher priority class is always served first in PRIQ.
662 Priority must be unique for the interface.
663 .It Cm default
664 Specify the default class.
665 When this keyword is present, all packets that do not match some
666 classification criteria are assigned to this class.
667 Must be exactly one class on each interface defined as the default
668 class.
669 .It Cm qlimit
670 The maximum queue size in number of packets.
671 Default value is 50.
672 .It Cm red
673 enables RED on this class queue.
674 .It Cm rio
675 enables RIO on this class queue.
676 .It Cm ecn
677 enables RED/ECN on this class queue.
678 .It Cm cleardscp
679 clears diffserv codepoint in the IP header.
681 .Ss WFQ Commands
682 WFQ (Weighted Fair Queueing) implements a weighted-round robin
683 scheduler for a set of queue.
684 A weight can be assigned to each queue to give a
685 different proportion of the link capacity.
686 A hash function is used to map a flow to one of a set of queues, and
687 thus, it is possible for two different flows to be mapped into the same
688 queue.
689 .Bl -tag -width interface -offset indent
690 .It Cm interface
691 .Ar if_name
692 .Op Cm bandwidth Ar bps
693 .Op Cm tbrsize Ar bytes
694 .Op Ar sched_type
695 .Op Cm nqueues Ar count
696 .Op Cm qsize Ar bytes
697 .Op Cm hash Ar policy
700 .Bl -tag -width 8n -offset indent
701 .It Cm if_name
702 specifies the name of a network interface (e.g., fxp0).
703 .It Cm bandwidth
704 specifies the interface bandwidth in bits per second.
705 .It Cm tbrsize
706 specifies the bucket size of a token bucket regulator in bytes.
707 .It Ar sched_type
708 must be
709 .Cm wfq
710 for WFQ.
711 .It Cm nqueues
712 The number of queues in WFQ.
713 Default value is 256.
714 .It Cm qsize
715 The size of each queue in number of bytes.
716 Default value is 64K bytes.
717 .It Cm hash
718 Type of hash policy to select a queue.
719 .Cm dstaddr
720 specifies a hashing policy by IP destination address.
721 .Cm full
722 specifies a hashing policy by IP addresses and ports.
723 .Cm srcport
724 specifies a hashing policy by IP source port number.
725 .Cm srcaddr
726 specifies a hashing policy by IP source address.
727 Default is
728 .Cm dstaddr
730 .Ss FIFOQ Commands
731 FIFOQ (First-In First-Out Queueing) is a simple tail-drop FIFO queue.
732 FIFOQ is the simplest possible implementation of a queueing discipline
733 in ALTQ, and can be used to compare with other queueing disciplines.
734 FIFOQ can be also used as a template for those who want to write their
735 own queueing disciplines.
736 .Bl -tag -width interface -offset indent
737 .It Cm interface
738 .Ar if_name
739 .Op Cm bandwidth Ar bps
740 .Op Cm tbrsize Ar bytes
741 .Op Ar sched_type
742 .Op Cm qlimit Ar count
745 .Bl -tag -width 8n -offset indent
746 .It Ar if_name
747 specifies the name of a network interface (e.g., fxp0).
748 .It Cm bandwidth
749 specifies the interface bandwidth in bits per second.
750 .It Cm tbrsize
751 specifies the bucket size of a token bucket regulator in bytes.
752 .It Ar sched_type
753 must be
754 .Cm fifoq
755 for FIFOQ.
756 .It Cm qlimit
757 The maximum queue size in number of packets.
758 Default value is 50.
760 .Ss RED Commands
761 RED (Random Early Detection) is an implicit congestion notification
762 mechanism that exercises packet dropping or packet marking
763 stochastically according to the average queue length.
764 RED can be viewed as a buffer management mechanism
765 and can be integrated into other packet scheduling schemes.
766 .Bl -tag -width red -offset indent
767 .It Cm red
768 .Ar min_th
769 .Ar max_th
770 .Ar inv_pmax
774 .Cm red
775 command sets the default RED parameters.
776 .Ar min_th
778 .Ar max_th
779 are the minimum and the maximum threshold values.
780 .Ar inv_pmax
781 is the inverse (reciprocal) of the maximum drop probability.
782 For example, 10 means the maximum drop probability of 1/10.
783 .Bl -tag -width interface -offset indent
784 .It Cm interface
785 .Ar if_name
786 .Op Cm bandwidth Ar bps
787 .Op Cm tbrsize Ar bytes
788 .Op Ar sched_type
789 .Op Cm qlimit Ar count
790 .Op Cm packetsize Ar bytes
791 .Op Cm weight Ar n
792 .Op Cm thmin Ar n
793 .Op Cm thmax Ar n
794 .Op Cm invpmax Ar n
795 .Op Cm ecn
796 .Op Cm flowvalve
799 .Bl -tag -width 8n -offset indent
800 .It Ar if_name
801 specifies the name of a network interface (e.g., fxp0).
802 .It Cm bandwidth
803 specifies the interface bandwidth in bits per second.
804 .It Cm tbrsize
805 specifies the bucket size of a token bucket regulator in bytes.
806 .It Ar sched_type
807 must be
808 .Cm red
809 for RED.
810 .It Cm qlimit
811 The maximum queue size in number of packets.
812 Default value is 60.
813 .It Cm packetsize
814 The average packet size in number of bytes.
815 This parameter is used to calibrate the idle period.
816 Default value is 1000.
817 .It Cm weight
818 The inverse of the weight of EWMA (exponentially weighted moving average).
819 .It Cm thmin
820 The minimum threshold.
821 .It Cm thmax
822 The maximum threshold.
823 .It Cm invpmax
824 The inverse of the maximum drop probability.
825 .It Cm ecn
826 enables ECN.
827 .It Cm flowvalve
828 enables flowvalve.
830 .Ss RIO Commands
831 ALTQ/RIO has 3 drop precedence levels defined for the Assured
832 Forwarding of DiffServ (RFC2597).
833 Since adaptive flows are likely to stay under the medium drop
834 precedence level under congestion, the medium drop precedence would
835 protect adaptive flows from unadaptive flows.
837 The original RIO has 2 sets of RED parameters; one for in-profile
838 packets and the other for out-of-profile packets.
839 At the ingress of the network, profile meters tag packets as IN
840 or OUT based on contracted profiles for customers.
841 Inside the network, IN packets receive preferential treatment by
842 the RIO dropper.
843 It is possible to provision the network not to drop IN packets
844 at all by providing enough capacity for the total volume of IN
845 packets.
846 Thus, RIO can be used to provide a service that statistically assures
847 capacity allocated for users.
848 This mechanism can be extended to support an arbitrary number of drop
849 precedence levels.
850 ALTQ supports 3 drop precedence levels.
851 .Bl -tag -width rio -offset indent
852 .It Cm rio
853 .Ar low_min_th
854 .Ar low_max_th
855 .Ar low_inv_pmax
856 .Ar medium_min_th
857 .Ar medium_max_th
858 .Ar medium_inv_pmax
859 .Ar high_min_th
860 .Ar high_max_th
861 .Ar high_inv_pmax
865 .Cm rio
866 command sets the default RIO parameters.
867 The parameters are RED parameters for 3 (low, medium, high) drop
868 precedence.
869 .Bl -tag -width interface -offset indent
870 .It Cm interface
871 .Ar if_name
872 .Op Cm bandwidth Ar bps
873 .Op Cm tbrsize Ar bytes
874 .Op Ar sched_type
875 .Op Cm qlimit Ar count
876 .Op Cm packetsize Ar bytes
877 .Op Cm weight Ar n
878 .Op Cm lo_thmin Ar n
879 .Op Cm lo_thmax Ar n
880 .Op Cm lo_invpmax Ar n
881 .Op Cm med_thmin Ar n
882 .Op Cm med_thmax Ar n
883 .Op Cm med_invpmax Ar n
884 .Op Cm hi_thmin Ar n
885 .Op Cm hi_thmax Ar n
886 .Op Cm hi_invpmax Ar n
887 .Op Cm ecn
890 .Bl -tag -width 8n -offset indent
891 .It Ar if_name
892 specifies the name of a network interface (e.g., fxp0).
893 .It Cm bandwidth
894 specifies the interface bandwidth in bits per second.
895 .It Cm tbrsize
896 specifies the bucket size of a token bucket regulator in bytes.
897 .It Ar sched_type
898 must be
899 .Cm rio
900 for RIO.
901 .It Cm qlimit
902 The maximum queue size in number of packets.
903 Default value is 60.
904 .It Cm packetsize
905 The average packet size in number of bytes.
906 This parameter is used to calibrate the idle period.
907 Default value is 1000.
908 .It Cm weight
909 The inverse of the weight of EWMA (exponentially weighted moving average).
910 .It Cm lo_thmin
911 The minimum threshold for low drop precedence.
912 .It Cm lo_thmax
913 The maximum threshold for low drop precedence.
914 .It Cm lo_invpmax
915 The inverse of the maximum drop probability for low drop precedence.
916 .It Cm med_thmin
917 The minimum threshold for medium drop precedence.
918 .It Cm med_thmax
919 The maximum threshold for medium drop precedence.
920 .It Cm med_invpmax
921 The inverse of the maximum drop probability for medium drop precedence.
922 .It Cm hi_thmin
923 The minimum threshold for high drop precedence.
924 .It Cm hi_thmax
925 The maximum threshold for high drop precedence.
926 .It Cm hi_invpmax
927 The inverse of the maximum drop probability for high drop precedence.
928 .It Cm ecn
929 enables ECN.
931 .Ss BLUE Commands
932 .Bl -tag -width interface -offset indent
933 .It Cm interface
934 .Ar if_name
935 .Op Cm bandwidth Ar bps
936 .Op Cm tbrsize Ar bytes
937 .Op Ar sched_type
938 .Op Cm qlimit Ar count
939 .Op Cm packetsize Ar bytes
940 .Op Cm maxpmark Ar n
941 .Op Cm holdtime Ar usec
942 .Op Cm ecn
945 .Bl -tag -width 8n -offset indent
946 .It Ar if_name
947 specifies the name of a network interface (e.g., fxp0).
948 .It Cm bandwidth
949 specifies the interface bandwidth in bits per second.
950 .It Cm tbrsize
951 specifies the bucket size of a token bucket regulator in bytes.
952 .It Ar sched_type
953 must be
954 .Cm blue
955 for BLUE.
956 .It Cm qlimit
957 The maximum queue size in number of packets.
958 Default value is 60.
959 .It Cm packetsize
960 The average packet size in number of bytes.
961 Default value is 1000.
962 .It Cm maxpmark
963 specifies the precision of marking probability.
964 .It Cm holdtime
965 specifies the hold time in usec.
966 .It Cm ecn
967 enables ECN.
969 .Ss CDNR Commands
971 .Cm conditioner
972 command specifies a diffserv traffic conditioner.
973 A traffic conditioner is not a queueing discipline but a component to
974 meter, mark or drop incoming packets according to some rules.
976 As opposed to a queueing discipline, a traffic conditioner handles
977 incoming packets at an input interface.
978 If no queueing discipline (e.g., CBQ) is used for the interface,
979 a null interface command should be used to specify an input network
980 interface.
981 .Bl -tag -width interface -offset indent
982 .It Cm interface
983 .Ar if_name
984 .Op Cm bandwidth Ar bps
985 .Op Cm tbrsize Ar bytes
989 .Cm conditioner
990 command has the following syntax.
991 .Bl -tag -width conditioner -offset indent
992 .It Cm conditioner
993 .Ar if_name
994 .Ar cdnr_name
995 .Aq action
998 .Bl -tag -width 10n -offset indent
999 .It Ar if_name
1000 Interface name.
1001 Must correspond to name in interface specification.
1002 .It Ar cdnr_name
1003 Arbitrary name for this conditioner.
1004 Must be unique for this interface.
1005 .It Ar action
1006 Action of the conditioner.
1009 An action can be a recursively defined action.
1010 The following actions are defined.
1011 .Bl -tag -width pass -offset indent
1012 .It Cm pass
1013 .Bl -inset -offset indent
1014 .It Cm pass
1015 allows the packet to go through without any modification to the packet.
1019 .Bl -tag -width drop -offset indent
1020 .It Cm drop
1021 .Bl -inset -offset indent
1022 .It Cm drop
1023 rejects the packet.
1024 The packet is immediately discarded.
1028 .Bl -tag -width mark -offset indent
1029 .It Cm mark
1030 .Ar value
1031 .Bl -inset -offset indent
1032 .It Cm mark
1033 sets the specified value to the ds field in the IP header.
1034 Then, the packet is allowed to go through.
1038 .Bl -tag -width tbmeter -offset indent
1039 .It Cm tbmeter
1040 .Ar rate depth
1041 .Aq in_action
1042 .Aq out_action
1044 .Bl -inset -offset indent
1045 .It Cm tbmeter
1046 is a token bucket meter configured with rate and depth parameters.
1047 Rate is token rate in bits-per-second.
1048 Depth is bucket depth in KB.
1049 When an incoming packet is in profile (available token is more than
1050 the packet size), tbmeter takes in_action.
1051 Otherwise, tbmeter takes out_action.
1055 .Bl -tag -width trtcm -offset indent
1056 .It Cm trtcm
1057 .Ar cmtd_rate cmtd_depth peak_rate peak_depth
1058 .Aq green_action
1059 .Aq yellow_action
1060 .Aq red_action
1061 .Op Cm coloraware|colorblind
1062 .Bl -inset -offset indent
1063 .It Cm trtcm
1064 is a 2-rate 3 color marker for Assured Forwarding.
1065 A trtcm consists of 2 token buckets, one for a committed rate and the
1066 other for a peak rate.
1067 When an incoming packet is in the committed profile, trtcm takes
1068 green_action.
1069 When the packet is out of the committed profile but in the peak
1070 profile, trtcm takes yellow_action.
1071 Otherwise, tbtcm takes red_action.
1072 A trtcm is either color-aware or color-blind.
1073 A color-aware trtcm do not raise the color (ds field value), that is,
1074 a yellow packet can be yellow or red but can not be blue.
1075 Default is color-blind.
1079 .Bl -tag -width tswtcm -offset indent
1080 .It Cm tswtcm
1081 .Ar cmtd_rate peak_rate avg_interval
1082 .Aq green_action
1083 .Aq yellow_action
1084 .Aq red_action
1085 .Bl -inset -offset indent
1086 .It Cm tswtcm
1087 is a time sliding window 3 color marker for Assured Forwarding.
1088 A tswtcm differs from trtcm in that a tswtcm probabilistically marks
1089 packets.
1090 A tswtcm consists of 2 rates, one for a committed rate and the
1091 other for a peak rate.
1092 When an incoming packet is in the committed profile, tswtcm takes
1093 green_action.
1094 When the packet is out of the committed profile but in the peak
1095 profile, tswtcm takes yellow_action.
1096 Otherwise, tswtcm takes red_action.
1097 cmtd_rate and peak_rate are specified in bits per second.
1098 avg_interval provides the size of time window for averaging incoming
1099 rate, and is specified in milliseconds.
1100 500 msec is ok for normal settings.
1103 .Ss JoBS Commands
1104 JoBS (Joint Buffer Management and Scheduling) is a queuing discipline
1105 that can enforce any feasible mix of absolute and proportional guarantees
1106 on packet losses, packet delays, and throughput, for classes of traffic,
1107 on a per-hop basis.
1108 No admission control is performed, thus if the set of service
1109 guarantees becomes infeasible, some service guarantees may be
1110 relaxed.
1111 .Bl -tag -width interface -offset indent
1112 .It Cm interface
1113 .Ar if_name
1114 .Op Cm bandwidth Ar bps
1115 .Op Cm qlimit Ar count
1116 .Op Cm separate
1117 .Op Cm tbrsize Ar bytes
1118 .Op Ar sched_type
1121 .Bl -tag -width 8n -offset indent
1122 .It Ar if_name
1123 specifies the name of a network interface (e.g., fxp0).
1124 .It Cm bandwidth
1125 specifies the interface bandwidth in bits per second.
1126 .It Cm qlimit
1127 specifies the maximum queue size in number of packets.
1128 .It Cm separate
1129 specifies that classes have independent buffers.
1130 The default is to have a shared buffer for all classes.
1131 If this option is specified, qlimit applies to each independent
1132 buffer.
1133 .It Cm tbrsize
1134 specifies the bucket size of a token bucket regulator in bytes.
1135 .It Ar sched_type
1136 must be
1137 .Cm jobs
1138 for JoBS.
1141 .Bl -tag -width class -offset indent
1142 .It Cm class
1143 .Ar sched_type
1144 .Ar if_name
1145 .Ar class_name
1146 .Ar parent_name
1147 .Op Cm priority Ar pri
1148 .Op Cm default
1149 .Op Cm adc Ar microsecs
1150 .Op Cm alc Ar fraction
1151 .Op Cm arc Ar bps
1152 .Op Cm rdc Ar prop
1153 .Op Cm rlc Ar prop
1156 .Bl -tag -width 8n -offset indent
1157 .It Ar sched_type
1158 must be
1159 .Cm jobs
1160 for a JoBS class.
1161 .It Ar if_name
1162 Interface name.
1163 Must correspond to name in interface specification.
1164 .It Ar class_name
1165 Arbitrary name for this class.
1166 Must be unique for this interface.
1167 .It Ar parent_name
1168 Parent class must be
1169 .Dv NULL
1170 for JoBS.
1171 .It Cm priority
1172 Priority index used for proportional differentiation.
1173 Max value is 15 and Min value is 0.
1174 Default is 0.
1175 Priority must be unique for the interface.
1176 .It Cm default
1177 Specify the default class.
1178 When this keyword is present, all packets that do not match some
1179 classification criteria are assigned to this class.
1180 Must be exactly one class on each interface defined as the
1181 default class.
1182 .It Cm adc
1183 Specifies an upper bound on delays for that class (in microseconds).
1184 A value of \-1 will indicate the absence of delay bound.
1185 By default, no delay bound is offered.
1186 .It Cm alc
1187 Specifies a upper bound on loss rate for that class (in fraction of 1,
1188 for instance a 1% loss rate bound will be expressed as 0.01).
1189 A value of \-1 will indicate the absence of loss rate bound.
1190 By default, no loss rate bound is offered.
1191 .It Cm arc
1192 Specifies a lower bound
1193 on the throughput received by that class (in bits per second).
1194 A value of
1195 \-1 will indicate the absence of throughput bound.
1196 By default, no throughput bound is offered.
1197 .It Cm rdc
1198 Specifies a proportional delay differentiation factor between that class
1199 and the class with the successive priority index.
1200 For instance, for priority 1, an rdc of 2 specifies that the delays of
1201 packets marked as class 2 will roughly be twice the delays of packets
1202 marked as class 1.
1203 A value of
1204 \-1 indicates the absence of proportional differentiation on that class.
1205 Note that class N if N is the maximum priority should have a dummy
1206 coefficient different from \-1 if proportional delay differentiation is desired
1207 on Class N.
1208 By default, no proportional delay differentiation is offered.
1209 .It Cm rlc
1210 Specifies a proportional loss differentiation factor between that class
1211 and the class with the successive priority index.
1212 For instance, for priority 1, an rlc of 2 specifies that the loss rate of
1213 packets marked as class 2 will roughly be twice the loss rate of packets
1214 marked as class 1.
1215 A value of
1216 \-1 indicates the absence of proportional differentiation on that class.
1217 Note that class N if N is the maximum priority should have a dummy
1218 coefficient different from \-1 if proportional loss differentiation is desired
1219 on Class N.
1220 By default, no proportional loss differentiation is offered.
1222 .Sh EXAMPLES
1223 .Ss CBQ Example
1224 .Bd -literal
1226 # cbq configuration for vx0 (10Mbps ether)
1227 # give at least 40% to TCP
1228 # limit HTTP from network 133.138.1.0 up to 10%, use RED.
1229 # other traffic goes into default class
1231 interface vx0 bandwidth 10M cbq
1233 class cbq vx0 root_class NULL priority 0 pbandwidth 100
1234 class cbq vx0 def_class root_class borrow pbandwidth 95 default
1235 class cbq vx0 tcp_class def_class borrow pbandwidth  40
1236         filter vx0 tcp_class 0 0 0 0 6
1237 class cbq vx0 csl_class tcp_class pbandwidth  10   red
1238         filter vx0 csl_class 0 0 133.138.1.0 netmask 0xffffff00 80 6
1239         filter vx0 csl_class 133.138.1.0 netmask 0xffffff00 0 0 80 6
1241 # sample filter6 command
1243                 filter6 vx0 csl_class ::0 0 d000:a:0:123::/64 80 6
1245 .Ss HFSC Example
1246 .Bd -literal
1248 # hfsc configuration for hierarchical sharing
1250 interface pvc0 bandwidth 45M hfsc
1252 # (10% of the bandwidth share goes to the default class)
1253 class hfsc pvc0 def_class root pshare 10 default
1255 #          bandwidth share    guaranteed rate
1256 #    CMU:       45%             15Mbps
1257 #    PITT:      45%             15Mbps
1259 class hfsc pvc0 cmu  root pshare 45 grate 15M
1260 class hfsc pvc0 pitt root pshare 45 grate 15M
1262 # CMU      bandwidth share    guaranteed rate
1263 #    CS:        20%             10Mbps
1264 #    other:     20%              5Mbps
1266 class hfsc pvc0 cmu_other cmu  pshare 20 grate 10M
1267         filter pvc0 cmu_other   0 0 128.2.0.0   netmask 0xffff0000 0 0
1268 class hfsc pvc0 cmu_cs    cmu  pshare 20 grate  5M
1269         filter pvc0 cmu_cs      0 0 128.2.242.0 netmask 0xffffff00 0 0
1271 # PITT     bandwidth share    guaranteed rate
1272 #    CS:        20%             10Mbps
1273 #    other:     20%              5Mbps
1275 class hfsc pvc0 pitt_other pitt  pshare 20 grate 10M
1276         filter pvc0 pitt_other  0 0 136.142.0.0  netmask 0xffff0000 0 0
1277 class hfsc pvc0 pitt_cs    pitt  pshare 20 grate  5M
1278         filter pvc0 pitt_cs     0 0 136.142.79.0 netmask 0xffffff00 0 0
1280 .Ss HFSC Example (simpler one with ulimit)
1281 .Bd -literal
1283 interface fxp0 bandwidth 90M hfsc
1284 # reserve 20% for default class
1285 class hfsc fxp0 def_class root pshare 20 default
1286 # shared class for TCP and UDP
1287 class hfsc fxp0 shared_class root bandwidth 72M
1288 # shared class for all TCP
1289 class hfsc fxp0 tcp_shared shared_class bandwidth 40M ulimit 60M
1290 # generic tcp
1291 class hfsc fxp0 tcp_class tcp_shared bandwidth 15M ulimit 50M
1292         filter fxp0 tcp_class 0 0 0 0 6
1293 # http
1294 class hfsc fxp0 http_class tcp_shared bandwidth 25M ulimit 40M
1295         filter fxp0 http_class 0 80 0 0 6
1296         filter fxp0 http_class 0 0 0 80 6
1297 # udp
1298 class hfsc fxp0 udp_class shared_class bandwidth 15M ulimit 20M
1299         filter fxp0 udp_class 0 0 0 0 17
1301 .Ss PRIQ Example
1302 .Bd -literal
1304 # priq configuration for fxp0 (100Mbps ether)
1305 #     icmp: high priority
1306 #     tcp:  medium priority
1307 #     others: low priority
1309 interface fxp0 bandwidth 100M priq
1311 class priq fxp0 high_class NULL priority 2
1312         filter fxp0 high_class 0 0 0 0 1
1313 class priq fxp0 med_class NULL priority 1
1314         filter fxp0 med_class 0 0 0 0 6
1315 class priq fxp0 low_class NULL priority 0 default
1317 .Ss WFQ Example
1318 .Bd -literal
1319 interface pvc0 bandwidth 134000000 wfq
1321 .Ss FIFOQ Example
1322 .Bd -literal
1323 interface rl0 bandwidth 10M fifoq
1325 .Ss Conditioner Example
1326 .Bd -literal
1328 interface fxp0
1330 # a simple dropper
1331 # discard all packets from 192.168.0.83
1333 conditioner fxp0 dropper \*[Lt]drop\*[Gt]
1334         filter fxp0 dropper 0 0 192.168.0.83 0 0
1337 # EF conditioner
1338 # mark EF to all packets from 192.168.0.117
1340 conditioner pvc1 ef_cdnr \*[Lt]tbmeter 6M 64K \*[Lt]mark 0xb8\*[Gt]\*[Lt]drop\*[Gt]\*[Gt]
1341         filter fxp0 ef_cdnr 0 0 192.168.0.117 0 0
1344 # AF1x conditioner
1345 # mark AF1x to packets from 192.168.0.178
1346 #       AF11 (low drop precedence):    less than 3Mbps
1347 #       AF12 (medium drop precedence): more than 3Mbps and less than 10Mbps
1348 #       AF13 (high drop precedence):   more than 10Mbps
1350 conditioner fxp0 af1x_cdnr \*[Lt]trtcm 3M 32K 10M 64K \*[Lt]mark 0x28\*[Gt]\*[Lt]mark 0x30\*[Gt]\*[Lt]mark 0x38\*[Gt]\*[Gt]
1351         filter fxp0 af1x_cdnr 0 0 192.168.0.178 0 0
1353 .Sh SEE ALSO
1354 .Xr altqd 8
1355 .Sh BUGS
1356 This man page is incomplete.
1357 For more information read the source.