Contents

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().