| INET6_OPTION_SPACE(3) | Library Functions Manual | INET6_OPTION_SPACE(3) | 
inet6_option_space,
  inet6_option_init,
  inet6_option_append,
  inet6_option_alloc,
  inet6_option_next,
  inet6_option_find —
#include <netinet/in.h>
int
  
  inet6_option_space(int
    nbytes);
int
  
  inet6_option_init(void
    *bp, struct cmsghdr
    **cmsgp, int
  type);
int
  
  inet6_option_append(struct
    cmsghdr *cmsg, const
    uint8_t *typep, int
    multx, int
  plusy);
uint8_t *
  
  inet6_option_alloc(struct
    cmsghdr *cmsg, int
    datalen, int multx,
    int plusy);
int
  
  inet6_option_next(const
    struct cmsghdr *cmsg,
    uint8_t **tptrp);
int
  
  inet6_option_find(const
    struct cmsghdr *cmsg,
    uint8_t **tptrp,
    int type);
<netinet/in.h> header.
inet6_option_space() returns the number of bytes
  required to hold an option when it is stored as ancillary data, including the
  cmsghdr structure at the beginning, and any padding at
  the end (to make its size a multiple of 8 bytes). The argument is the size of
  the structure defining the option, which must include any pad bytes at the
  beginning (the value y in the alignment term
  “xn + y”), the type byte, the length
  byte, and the option data.
Note: If multiple options are stored in a single ancillary data
    object, which is the recommended technique, this function overestimates the
    amount of space required by the size of N-1
    cmsghdr structures, where N
    is the number of options to be stored in the object. This is of little
    consequence, since it is assumed that most Hop-by-Hop option headers and
    Destination option headers carry only one option (appendix B of [RFC
  2460]).
inet6_option_init() is called once per ancillary data
  object that will contain either Hop-by-Hop or Destination options. It returns
  0 on success or -1 on an
  error.
bp is a pointer to previously allocated
    space that will contain the ancillary data object. It must be large enough
    to contain all the individual options to be added by later calls to
    inet6_option_append() and
    inet6_option_alloc().
cmsgp is a pointer to a pointer to a
    cmsghdr structure. *cmsgp is
    initialized by this function to point to the cmsghdr
    structure constructed by this function in the buffer pointed to by
    bp.
type is either
    IPV6_HOPOPTS or
    IPV6_DSTOPTS. This type is
    stored in the cmsg_type member of the
    cmsghdr structure pointed to by
    *cmsgp.
inet6_option_init(). This function returns
  0 if it succeeds or -1 on an
  error.
cmsg is a pointer to the
    cmsghdr structure that must have been initialized by
    inet6_option_init().
typep is a pointer to the 8-bit option type. It is assumed that this field is immediately followed by the 8-bit option data length field, which is then followed immediately by the option data. The caller initializes these three fields (the type-length-value, or TLV) before calling this function.
The option type must have a value from 2
    to 255, inclusive. (0 and
    1 are reserved for the Pad1
    and PadN options, respectively.)
The option data length must have a value between
    0 and 255, inclusive, and is
    the length of the option data that follows.
multx is the value x
    in the alignment term “xn + y”. It
    must have a value of 1, 2,
    4, or 8.
plusy is the value y
    in the alignment term “xn + y”. It
    must have a value between 0 and
    7, inclusive.
inet6_option_init(). This function returns a pointer
  to the 8-bit option type field that starts the option on success, or
  NULL on an error.
The difference between this function and
    inet6_option_append() is that the latter copies the
    contents of a previously built option into the ancillary data object while
    the current function returns a pointer to the space in the data object where
    the option's TLV must then be built by the caller.
cmsg is a pointer to the
    cmsghdr structure that must have been initialized by
    inet6_option_init().
datalen is the value of the option data
    length byte for this option. This value is required as an argument to allow
    the function to determine if padding must be appended at the end of the
    option. (The inet6_option_append() function does not
    need a data length argument since the option data length must already be
    stored by the caller.)
multx is the value x
    in the alignment term “xn + y”. It
    must have a value of 1, 2,
    4, or 8.
plusy is the value y
    in the alignment term “xn + y”. It
    must have a value between 0 and
    7, inclusive.
0 and
  *tptrp points to the 8-bit option type field (which is
  followed by the 8-bit option data length, followed by the option data). If no
  more options remain to be processed, the return value is
  -1 and *tptrp is
  NULL. If an error occurs, the return value is
  -1 and *tptrp is not
  NULL.
cmsg is a pointer to
    cmsghdr structure of which
    cmsg_level equals
    IPPROTO_IPV6 and cmsg_type
    equals either IPV6_HOPOPTS or
    IPV6_DSTOPTS.
tptrp is a pointer to a pointer to an 8-bit
    byte and *tptrp is used by the function to remember
    its place in the ancillary data object each time the function is called. The
    first time this function is called for a given ancillary data object,
    *tptrp must be set to
  NULL.
Each time this function returns success, *tptrp points to the 8-bit option type field for the next option to be processed.
inet6_option_next() function, except this function
  lets the caller specify the option type to be searched for, instead of always
  returning the next option in the ancillary data object.
  cmsg is a pointer to cmsghdr
  structure of which cmsg_level equals
  IPPROTO_IPV6 and cmsg_type
  equals either IPV6_HOPOPTS or
  IPV6_DSTOPTS.
tptrp is a pointer to a pointer to an 8-bit
    byte and *tptrp is used by the function to remember
    its place in the ancillary data object each time the function is called. The
    first time this function is called for a given ancillary data object,
    *tptrp must be set to NULL.
    ~ This function starts searching for an option of
    the specified type beginning after the value of
    *tptrp. If an option of the specified type is located,
    this function returns 0 and
    *tptrp points to the 8- bit option type field for the
    option of the specified type. If an option of the specified type is not
    located, the return value is -1 and
    *tptrp is NULL. If an error
    occurs, the return value is -1 and
    *tptrp is not NULL.
inet6_option_init() and
  inet6_option_append() return 0
  on success or -1 on an error.
inet6_option_alloc() returns
    NULL on an error.
On errors, inet6_option_next() and
    inet6_option_find() return
    -1 setting *tptrp to non
    NULL value.
W. Stevens and M. Thomas, Advanced Sockets API for IPv6, RFC 2292, February 1998.
S. Deering and R. Hinden, Internet Protocol, Version 6 (IPv6) Specification, RFC 2460, December 1998.
| December 10, 1999 | NetBSD 9.3 |