IFQ_ENQUEUE(9) | Kernel Developer's Manual | IFQ_ENQUEUE(9) |
ifq_enqueue
,
ifq_dequeue
, ifq_purge
,
ifq_len
, ifq_empty
,
ifq_hdatalen
,
ifq_set_oactive
,
ifq_clr_oactive
,
ifq_is_oactive
, ifq_restart
,
ifq_barrier
— interface send
queue API
#include
<net/if_var.h>
int
ifq_enqueue
(struct
ifqueue *ifq, struct mbuf
*m);
struct mbuf *
ifq_dequeue
(struct
ifqueue *ifq);
unsigned int
ifq_purge
(struct
ifqueue *ifq);
unsigned int
ifq_len
(struct
ifqueue *ifq);
unsigned int
ifq_empty
(struct
ifqueue *ifq);
int
ifq_hdatalen
(struct
ifqueue *ifq);
void
ifq_set_oactive
(struct
ifqueue *ifq);
void
ifq_clr_oactive
(struct
ifqueue *ifq);
unsigned int
ifq_is_oactive
(struct
ifqueue *ifq);
void
ifq_restart
(struct
ifqueue *ifq);
void
ifq_barrier
(struct
ifqueue *ifq);
The ifqueue API provides implementations of data structures and operations for the network stack to queue mbufs for a network driver to dequeue from its start routine for transmission.
ifq_enqueue
(struct
ifqueue *ifq, struct mbuf *m)ifq_dequeue
(struct
ifqueue *ifq)ifq_purge
(struct
ifqueue *ifq)ifq_len
(struct
ifqueue *ifq)ifq_len
() may report that mbufs are on the queue,
the current queue discipline may not make them available for dequeueing
with ifq_dequeue
() or
ifq_deq_begin
().ifq_empty
(struct
ifqueue *ifq)ifq_hdatalen
(struct
ifqueue *ifq)ifq_set_oactive
(struct
ifqueue *ifq)ifq_set_oactive
() is called by the relevant driver
to mark the hardware associated with the interface send queue
ifq as unable to transmit more packets.ifq_clr_oactive
(struct
ifqueue *ifq)ifq_clr_oactive
() is called by the relevant driver
to clear the "active" mark on the hardware associated with the
interface send queue ifq, meaning it is now able to
transmit packets.ifq_is_oactive
(struct
ifqueue *ifq)ifq_restart
(struct
ifqueue *ifq)ifq_clr_oactive
() and the
interface's start routine. This call is serialised with other calls to the
start routine via
if_start
()
and therefore provides race free modification of the "active"
mark.ifq_barrier
(struct
ifqueue *ifq)ifq_barrier
() guarantees that any work currently
running in the interface queue serialiser (e.g. work dispatched by
ifq_restart
() or the interface's start routine)
has finished before ifq_barrier
() returns.ifq_enqueue
(),
ifq_dequeue
(), ifq_purge
(),
ifq_len
(), ifq_empty
(),
ifq_hdatalen
(),
ifq_set_oactive
(),
ifq_clr_oactive
(),
ifq_is_oactive
(), and
ifq_restart
() can be called during autoconf, from
process context, or from interrupt context.
ifq_barrier
() can be called from process
context.
ifq_enqueue
() returns 0 if the mbuf was
successfully queued, or non-zero if mbuf was freed.
ifq_dequeue
() returns the next mbuf to be
transmitted by the interface. If no packet is available for transmission,
NULL
is returned.
ifq_purge
() returns the number of mbufs
that were removed from the queue and freed.
ifq_len
() returns the number of mbufs on
the queue.
ifq_empty
() returns a non-zero value if
the queue is empty, otherwise 0.
ifq_hdatalen
() returns the size of a
packet on the queue, or 0 if the queue is empty;
ifq_is_oactive
() returns a non-zero value
if the hardware associated with the interface send queue is unable to
transmit more packets, otherwise 0.
March 31, 2022 | OpenBSD-current |