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