M_TAG(9)               NetBSD Kernel Developer's Manual               M_TAG(9)

NAME
     m_tag, m_tag_get, m_tag_free, m_tag_prepend, m_tag_unlink, m_tag_delete,
     m_tag_delete_chain, m_tag_delete_nonpersistent, m_tag_find, m_tag_copy,
     m_tag_copy_chain, m_tag_init, m_tag_first, m_tag_next -- mbuf tagging
     interfaces

SYNOPSIS
     #include <sys/mbuf.h>

     struct m_tag *
     m_tag_get(int type, int len, int wait);

     void
     m_tag_free(struct m_tag *t);

     void
     m_tag_prepend(struct mbuf *m, struct m_tag *t);

     void
     m_tag_unlink(struct mbuf *m, struct m_tag *t);

     void
     m_tag_delete(struct mbuf *m, struct m_tag *t);

     void
     m_tag_delete_chain(struct mbuf *m, struct m_tag *t);

     void
     m_tag_delete_nonpersistent(struct mbuf *);

     struct m_tag *
     m_tag_find(struct mbuf *m, int type, struct m_tag *t);

     struct m_tag *
     m_tag_copy(struct m_tag *m);

     int
     m_tag_copy_chain(struct mbuf *to, struct mbuf *from);

     void
     m_tag_init(struct mbuf *m);

     struct m_tag *
     m_tag_first(struct mbuf *m);

     struct m_tag *
     m_tag_next(struct mbuf *m, struct m_tag *t);

DESCRIPTION
     The m_tag interface is used to ``tag'' mbufs.

FUNCTIONS
     m_tag_get(type, len, wait)
              Allocate an mbuf tag.  type is one of the PACKET_TAG_ macros.
              len is the size of the data associated with the tag, in bytes.
              wait is either M_WAITOK or M_NOWAIT.

     m_tag_free(t)
              Free the mbuf tag t.

     m_tag_prepend(m, t)
              Prepend the mbuf tag t to the mbuf m.  t will become the first
              tag of the mbuf m.  When m is freed, t will also be freed.

     m_tag_unlink(m, t)
              Unlink the mbuf tag t from the mbuf m.

     m_tag_delete(m, t)
              The same as m_tag_unlink() followed by m_tag_free().

     m_tag_delete_chain(m, t)
              Unlink and free mbuf tags beginning with the mbuf tag t from the
              mbuf m.  If t is NULL, m_tag_delete_chain() unlinks and frees
              all mbuf tags associated with the mbuf m.

     m_tag_delete_nonpersistent(m)
              Unlink and free all non persistent tags associated with the mbuf
              m.

     m_tag_find(m, type, t)
              Find an mbuf tag with type type after the mbuf tag t in the tag
              chain associated with the mbuf m.  If t is NULL, search from the
              first mbuf tag.  If an mbuf tag is found, return a pointer to
              it.  Otherwise return NULL.

     m_tag_copy(t)
              Copy an mbuf tag t.  Return a new mbuf tag on success.  Other-
              wise return NULL.

     m_tag_copy_chain(to, from)
              Copy all mbuf tags associated with the mbuf from to the mbuf to.
              If to already has any mbuf tags, they will be unlinked and freed
              beforehand.  Return 1 on success.  Otherwise return 0.

     m_tag_init(m)
              Initialize mbuf tag chain of the mbuf m.

     m_tag_first(m)
              Return the first mbuf tag associated with the mbuf m.  Return
              NULL if no mbuf tags are found.

     m_tag_next(m, t)
              Return the next mbuf tag after t associated with the mbuf m.
              Return NULL if t is the last tag in the chain.

CODE REFERENCES
     This section describes places within the NetBSD source tree where actual
     code implementing the mbuf tagging interfaces can be found.  All path-
     names are relative to /usr/src.

     The mbuf tagging interfaces are implemented within the file
     sys/kern/uipc_mbuf2.c.

     The PACKET_TAG_ macros are defined in the file sys/sys/mbuf.h.

SEE ALSO
     intro(9), malloc(9), mbuf(9)

BUGS
     The semantics of the term "persistent tag" are vague.

NetBSD 5.0_STABLE              September 7, 2004             NetBSD 5.0_STABLE
