xref: /dflybsd-src/share/man/man9/altq.9 (revision f09de992f9332956876cbc1cd9cd4cf4f2771904)
125538edfSSascha Wildner.\"	$OpenBSD: altq.9,v 1.4 2001/07/12 12:41:42 itojun Exp $
225538edfSSascha Wildner.\"	$NetBSD: altq.9,v 1.14 2007/06/24 19:26:58 rumble Exp $
325538edfSSascha Wildner.\"
425538edfSSascha Wildner.\" Copyright (C) 2001
525538edfSSascha Wildner.\" Sony Computer Science Laboratories Inc.  All rights reserved.
625538edfSSascha Wildner.\"
725538edfSSascha Wildner.\" Redistribution and use in source and binary forms, with or without
825538edfSSascha Wildner.\" modification, are permitted provided that the following conditions
925538edfSSascha Wildner.\" are met:
1025538edfSSascha Wildner.\" 1. Redistributions of source code must retain the above copyright
1125538edfSSascha Wildner.\"    notice, this list of conditions and the following disclaimer.
1225538edfSSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright
1325538edfSSascha Wildner.\"    notice, this list of conditions and the following disclaimer in the
1425538edfSSascha Wildner.\"    documentation and/or other materials provided with the distribution.
1525538edfSSascha Wildner.\"
1625538edfSSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY SONY CSL AND CONTRIBUTORS ``AS IS'' AND
1725538edfSSascha Wildner.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1825538edfSSascha Wildner.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1925538edfSSascha Wildner.\" ARE DISCLAIMED.  IN NO EVENT SHALL SONY CSL OR CONTRIBUTORS BE LIABLE
2025538edfSSascha Wildner.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2125538edfSSascha Wildner.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2225538edfSSascha Wildner.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2325538edfSSascha Wildner.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2425538edfSSascha Wildner.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2525538edfSSascha Wildner.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2625538edfSSascha Wildner.\" SUCH DAMAGE.
2725538edfSSascha Wildner.\"
2825538edfSSascha Wildner.Dd November 18, 2007
2925538edfSSascha Wildner.Dt ALTQ 9
3025538edfSSascha Wildner.Os
3125538edfSSascha Wildner.Sh NAME
3225538edfSSascha Wildner.Nm ALTQ
3325538edfSSascha Wildner.Nd kernel interfaces for manipulating output queues on network interfaces
3425538edfSSascha Wildner.Sh SYNOPSIS
3525538edfSSascha Wildner.In sys/types.h
3625538edfSSascha Wildner.In sys/socket.h
3725538edfSSascha Wildner.In net/if.h
3825538edfSSascha Wildner.In net/ifq_var.h
3925538edfSSascha Wildner.Ft static int
40*f09de992SSascha Wildner.Fn ifq_enqueue "struct ifaltq *_ifq" "struct mbuf *_m" "struct altq_pktattr *_pa"
4125538edfSSascha Wildner.Ft static int
42*f09de992SSascha Wildner.Fn ifq_handoff "struct ifnet *_ifp" "struct mbuf *_m" "struct altq_pktattr *_pa"
4325538edfSSascha Wildner.Ft struct mbuf *
4425538edfSSascha Wildner.Fn ifq_dequeue "struct ifaltq *_ifq" "struct mbuf *_mpolled"
4525538edfSSascha Wildner.Ft struct mbuf *
4625538edfSSascha Wildner.Fn ifq_poll "struct ifaltq *_ifq"
4725538edfSSascha Wildner.Ft void
4825538edfSSascha Wildner.Fn ifq_purge "struct ifaltq *_ifq"
4925538edfSSascha Wildner.Ft void
50*f09de992SSascha Wildner.Fn ifq_classify "struct ifaltq *_ifq" "struct mbuf *_m" "uint8_t _af" "struct altq_pktattr *_pa"
5125538edfSSascha Wildner.Ft int
5225538edfSSascha Wildner.Fn ifq_is_empty "struct ifaltq *_ifq"
5325538edfSSascha Wildner.Ft void
5425538edfSSascha Wildner.Fn ifq_set_maxlen "struct ifaltq *_ifq" "int _len"
5525538edfSSascha Wildner.Ft void
5625538edfSSascha Wildner.Fn ifq_set_ready "struct ifaltq *_ifq"
5725538edfSSascha Wildner.Ft int
5825538edfSSascha Wildner.Fn ifq_is_enabled "struct ifaltq *_ifq"
5925538edfSSascha Wildner.Sh DESCRIPTION
6025538edfSSascha WildnerThe
6125538edfSSascha Wildner.Nm
6225538edfSSascha Wildnersystem is a framework to manage queueing disciplines on network
6325538edfSSascha Wildnerinterfaces.
6425538edfSSascha Wildner.Nm
6525538edfSSascha Wildnerintroduces new functions to manipulate output queues.
6625538edfSSascha WildnerThe output queue functions are used to abstract queue operations and not to
6725538edfSSascha Wildnertouch the internal fields of the output queue structure.
6825538edfSSascha Wildner.Pp
6925538edfSSascha Wildner.Fn ifq_enqueue
7025538edfSSascha Wildnerand
7125538edfSSascha Wildner.Fn ifq_handoff
7225538edfSSascha Wildnerenqueue a packet
7325538edfSSascha Wildner.Fa _m
7425538edfSSascha Wildnerto the queue
7525538edfSSascha Wildner.Fa _ifq .
7625538edfSSascha WildnerThe underlying queueing discipline may discard the packet.
7725538edfSSascha WildnerThey return 0 on success, or
7825538edfSSascha Wildner.Er ENOBUFS
7925538edfSSascha Wildnerif the packet is discarded.
8025538edfSSascha WildnerThe packet pointed to by
8125538edfSSascha Wildner.Fa _m
8225538edfSSascha Wildnerwill be freed by the device driver on success or by the queueing discipline on
8325538edfSSascha Wildnerfailure, so that the caller should not touch
8425538edfSSascha Wildner.Fa _m
8525538edfSSascha Wildnerafter calling
8625538edfSSascha Wildner.Fn ifq_enqueue .
8725538edfSSascha Wildner.Fn ifq_handoff
8825538edfSSascha Wildnercombines the enqueue operation with statistic generation and calls
8925538edfSSascha Wildner.Fn if_start
9025538edfSSascha Wildnerupon successful enqueue to initiate the actual send.
9125538edfSSascha Wildner.Pp
9225538edfSSascha Wildner.Fn ifq_dequeue
9325538edfSSascha Wildnerdequeues a packet from the queue.
9425538edfSSascha WildnerIt returns the dequeued packet, or
9525538edfSSascha Wildner.Dv NULL
9625538edfSSascha Wildnerif no packet is dequeued.
9725538edfSSascha WildnerThe caller must always check the return value
9825538edfSSascha Wildnersince a non-empty queue could return
9925538edfSSascha Wildner.Dv NULL
10025538edfSSascha Wildnerunder rate-limiting.
10125538edfSSascha Wildner.Pp
10225538edfSSascha Wildner.Fn ifq_poll
10325538edfSSascha Wildnerreturns the next packet without removing it from the queue.
10425538edfSSascha WildnerIt is guaranteed by the underlying queueing discipline that
10525538edfSSascha Wildner.Fn ifq_dequeue
10625538edfSSascha Wildnerimmediately after
10725538edfSSascha Wildner.Fn ifq_poll
10825538edfSSascha Wildnerreturns the same packet.
10925538edfSSascha Wildner.Pp
11025538edfSSascha Wildner.Fn ifq_purge
11125538edfSSascha Wildnerdiscards all the packets in the queue.
11225538edfSSascha WildnerThe purge operation is needed since a non-work conserving queue cannot be
11325538edfSSascha Wildneremptied by a dequeue loop.
11425538edfSSascha Wildner.Pp
11525538edfSSascha Wildner.Fn ifq_classify
11625538edfSSascha Wildnerclassifies a packet to a scheduling class, and returns the result in
11725538edfSSascha Wildner.Fa _pa .
11825538edfSSascha Wildner.Pp
11925538edfSSascha Wildner.Fn ifq_is_empty
12025538edfSSascha Wildnercan be used to check if the queue is empty.
12125538edfSSascha WildnerNote that
12225538edfSSascha Wildner.Fn ifq_dequeue
12325538edfSSascha Wildnercould still return
12425538edfSSascha Wildner.Dv NULL
12525538edfSSascha Wildnerif the queueing discipline is non-work conserving.
12625538edfSSascha Wildner.Pp
12725538edfSSascha Wildner.Fn ifq_set_maxlen
12825538edfSSascha Wildnersets the queue length limit to the default FIFO queue.
12925538edfSSascha Wildner.Pp
13025538edfSSascha Wildner.Fn ifq_set_ready
13125538edfSSascha Wildnersets a flag to indicate that this driver is converted to use the new macros.
13225538edfSSascha Wildner.Nm
13325538edfSSascha Wildnercan be enabled only on interfaces with this flag.
13425538edfSSascha Wildner.Pp
13525538edfSSascha Wildner.Fn ifq_is_enabled
13625538edfSSascha Wildnerreturns 1 if
13725538edfSSascha Wildner.Nm
13825538edfSSascha Wildneris enabled for the queue, 0 if not.
13925538edfSSascha Wildner.Sh QUEUEING DISCIPLINES
14025538edfSSascha WildnerQueueing disciplines need to maintain
14125538edfSSascha Wildner.Fa ifq_len
14225538edfSSascha Wildner.Po
14325538edfSSascha Wildnerused by
14425538edfSSascha Wildner.Fn ifq_is_empty
14525538edfSSascha Wildner.Pc .
14625538edfSSascha WildnerQueueing disciplines also need to guarantee that the same mbuf is returned if
14725538edfSSascha Wildner.Fn ifq_dequeue
14825538edfSSascha Wildneris called immediately after
14925538edfSSascha Wildner.Fn ifq_poll .
15025538edfSSascha Wildner.Sh SEE ALSO
15125538edfSSascha Wildner.Xr altq 4 ,
15225538edfSSascha Wildner.Xr pf 4 ,
15325538edfSSascha Wildner.Xr pf.conf 5 ,
15425538edfSSascha Wildner.Xr pfctl 8
15525538edfSSascha Wildner.Sh HISTORY
15625538edfSSascha WildnerThe
15725538edfSSascha Wildner.Nm
15825538edfSSascha Wildnersystem first appeared in March 1997 and was imported into
15925538edfSSascha Wildner.Dx 1.1 .
160