Function

mbuf_attachcluster

Declaration

errno_t mbuf_attachcluster(mbuf_how_t how, mbuf_type_t type, mbuf_t *mbuf, caddr_t extbuf, void (*extfree)(caddr_t, u_int, caddr_t), size_t extsize, caddr_t extarg);

Parameters

how

Blocking or non-blocking.

type

The type of the mbuf if mbuf is non-NULL; otherwise ignored.

mbuf

Pointer to the address of the mbuf; if NULL, an mbuf will be allocated, otherwise, it must point to a valid mbuf address. If the user-supplied mbuf is already attached to a cluster, the current cluster will be freed before the mbuf gets attached to the supplied external buffer. Note that this routine may return a different mbuf_t than the one you passed in.

extbuf

Address of the external buffer.

extfree

Free routine for the external buffer; the caller is required to defined a routine that will be invoked when the mbuf is freed.

extsize

Size of the external buffer.

extarg

Private value that will be passed to the free routine when it is called at the time the mbuf is freed.

Return Value

0 on success EINVAL - Invalid parameter ENOMEM - Not enough memory available

Discussion

Attach an external buffer as a cluster for an mbuf. If mbuf points to a NULL mbuf_t, an mbuf will be allocated for you. If mbuf points to a non-NULL mbuf_t, the user-supplied mbuf will be used instead. The caller is responsible for allocating the external buffer by calling mbuf_alloccluster().