Comtrol eCos User Manual

Page 538

Advertising
background image

Chapter 38. TCP/IP Library Reference

inet6_option_init(void *bp, struct cmsghdr **cmsgp, int type);

int

inet6_option_append(struct cmsghdr *cmsg, const u_int8_t *typep,

int multx, int plusy);

u_int8_t *

inet6_option_alloc(struct cmsghdr *cmsg, int datalen, int multx,

int plusy);;

int

inet6_option_next(const struct cmsghdr *cmsg, u_int8_t **tptrp);

int

inet6_option_find(const struct cmsghdr *cmsg, u_int8_t **tptrp,

int type);

DESCRIPTION

Building and parsing the Hop-by-Hop and Destination options is compli-

cated due to alignment constranints, padding and ancillary data manipula-

tion.

RFC2292 defines a set of functions to help the application.

The

function prototypes for these functions are all in the

<

netinet/in.h>

header.

inet6_option_space

inet6_option_space() returns the number of bytes required to hold an

option when it is stored as ancillary data, including the cmsghdr struc-

ture 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

inet6_option_init() is called once per ancillary data object that will

contain either Hop-by-Hop or Destination options.

It returns 0 on suc-

cess 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 indi-

vidual 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 ini-

tialized by this function to point to the cmsghdr structure constructed

by this function in the buffer pointed to by bp.

434

Advertising