IFQ_DEQ_BEGIN(9) | Kernel Developer's Manual | IFQ_DEQ_BEGIN(9)

# NAME

`ifq_deq_begin`, `ifq_deq_commit`, `ifq_deq_rollback` — dequeue an mbuf from an interface sending queue

# SYNOPSIS

`#include <net/if_var.h>`

struct mbuf *
`ifq_deq_begin`(struct ifqueue *ifq);

void
`ifq_deq_commit`(struct ifqueue *ifq, struct mbuf *m);

void
`ifq_deq_rollback`(struct ifqueue *ifq, struct mbuf *m);

# DESCRIPTION

The ifq_deq_* set of functions provides a non-atomic alternative to ifq_dequeue(9). Their use is discouraged, code should use ifq_dequeue(9) whenever possible.

`ifq_deq_begin`(struct ifqueue *ifq)
  Get a reference to the next mbuf to be transmitted from the ifq interface send queue. If an mbuf is to be transmitted, also acquire a lock on the send queue to exclude modification or freeing of the referenced mbuf. Its packet header must not be modified until the mbuf has been dequeued with `ifq_deq_commit`().
`ifq_deq_commit`(struct ifqueue *ifq, struct mbuf *m)
  Dequeue the mbuf m that was referenced by a previous call to `ifq_deq_begin`() and release the lock on ifq.
`ifq_deq_rollback`(struct ifqueue *ifq, struct mbuf *m)
  Release the lock on the interface send queue ifq that was acquired while a reference to m was being held.

# CONTEXT

`ifq_deq_begin`(), `ifq_deq_commit`(), and `ifq_deq_rollback`() can be called during autoconf, from process context, or from interrupt context.

# RETURN VALUES

`ifq_deq_begin`() returns the next mbuf to be transmitted by the interface. If no packet is available for transmission, `NULL` is returned.

# SEE ALSO

ifq_dequeue(9)

March 20, 2021 | Debian