16617cf57SGeorge V. Neville-Neil.\" $KAME: inet6_option_space.3,v 1.11 2005/01/05 03:00:44 itojun Exp $ 26617cf57SGeorge V. Neville-Neil.\" $FreeBSD$ 36617cf57SGeorge V. Neville-Neil.\" 46617cf57SGeorge V. Neville-Neil.\" Copyright (C) 2004 WIDE Project. 56617cf57SGeorge V. Neville-Neil.\" All rights reserved. 66617cf57SGeorge V. Neville-Neil.\" 76617cf57SGeorge V. Neville-Neil.\" Redistribution and use in source and binary forms, with or without 86617cf57SGeorge V. Neville-Neil.\" modification, are permitted provided that the following conditions 96617cf57SGeorge V. Neville-Neil.\" are met: 106617cf57SGeorge V. Neville-Neil.\" 1. Redistributions of source code must retain the above copyright 116617cf57SGeorge V. Neville-Neil.\" notice, this list of conditions and the following disclaimer. 126617cf57SGeorge V. Neville-Neil.\" 2. Redistributions in binary form must reproduce the above copyright 136617cf57SGeorge V. Neville-Neil.\" notice, this list of conditions and the following disclaimer in the 146617cf57SGeorge V. Neville-Neil.\" documentation and/or other materials provided with the distribution. 156617cf57SGeorge V. Neville-Neil.\" 3. Neither the name of the project nor the names of its contributors 166617cf57SGeorge V. Neville-Neil.\" may be used to endorse or promote products derived from this software 176617cf57SGeorge V. Neville-Neil.\" without specific prior written permission. 186617cf57SGeorge V. Neville-Neil.\" 196617cf57SGeorge V. Neville-Neil.\" THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 206617cf57SGeorge V. Neville-Neil.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 216617cf57SGeorge V. Neville-Neil.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 226617cf57SGeorge V. Neville-Neil.\" ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 236617cf57SGeorge V. Neville-Neil.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 246617cf57SGeorge V. Neville-Neil.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 256617cf57SGeorge V. Neville-Neil.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 266617cf57SGeorge V. Neville-Neil.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 276617cf57SGeorge V. Neville-Neil.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 286617cf57SGeorge V. Neville-Neil.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 296617cf57SGeorge V. Neville-Neil.\" SUCH DAMAGE. 306617cf57SGeorge V. Neville-Neil.\" 316617cf57SGeorge V. Neville-Neil.Dd December 23, 2004 326617cf57SGeorge V. Neville-Neil.Dt INET6_OPTION_SPACE 3 336617cf57SGeorge V. Neville-Neil.Os 346617cf57SGeorge V. Neville-Neil.\" 356617cf57SGeorge V. Neville-Neil.Sh NAME 366617cf57SGeorge V. Neville-Neil.Nm inet6_option_space , 376617cf57SGeorge V. Neville-Neil.Nm inet6_option_init , 386617cf57SGeorge V. Neville-Neil.Nm inet6_option_append , 396617cf57SGeorge V. Neville-Neil.Nm inet6_option_alloc , 406617cf57SGeorge V. Neville-Neil.Nm inet6_option_next , 416617cf57SGeorge V. Neville-Neil.Nm inet6_option_find 426617cf57SGeorge V. Neville-Neil.Nd IPv6 Hop-by-Hop and Destination Option Manipulation 436617cf57SGeorge V. Neville-Neil.\" 446617cf57SGeorge V. Neville-Neil.Sh LIBRARY 456617cf57SGeorge V. Neville-Neil.Lb libc 466617cf57SGeorge V. Neville-Neil.Sh SYNOPSIS 476617cf57SGeorge V. Neville-Neil.In sys/types.h 486617cf57SGeorge V. Neville-Neil.In netinet/in.h 496617cf57SGeorge V. Neville-Neil.Ft "int" 506617cf57SGeorge V. Neville-Neil.Fn inet6_option_space "int nbytes" 516617cf57SGeorge V. Neville-Neil.Ft "int" 526617cf57SGeorge V. Neville-Neil.Fn inet6_option_init "void *bp" "struct cmsghdr **cmsgp" "int type" 536617cf57SGeorge V. Neville-Neil.Ft "int" 546617cf57SGeorge V. Neville-Neil.Fn inet6_option_append "struct cmsghdr *cmsg" "const u_int8_t *typep" "int multx" "int plusy" 556617cf57SGeorge V. Neville-Neil.Ft "u_int8_t *" 566617cf57SGeorge V. Neville-Neil.Fn inet6_option_alloc "struct cmsghdr *cmsg" "int datalen" "int multx" "int plusy" 576617cf57SGeorge V. Neville-Neil.Ft "int" 586617cf57SGeorge V. Neville-Neil.Fn inet6_option_next "const struct cmsghdr *cmsg" "u_int8_t **tptrp" 596617cf57SGeorge V. Neville-Neil.Ft "int" 606617cf57SGeorge V. Neville-Neil.Fn inet6_option_find "const struct cmsghdr *cmsg" "u_int8_t **tptrp" "int type" 616617cf57SGeorge V. Neville-Neil.\" 626617cf57SGeorge V. Neville-Neil.Sh DESCRIPTION 636617cf57SGeorge V. Neville-Neil.\" 646617cf57SGeorge V. Neville-NeilManipulating and parsing IPv6's Hop-by-Hop and Destination options is 656617cf57SGeorge V. Neville-Neilcomplicated by the need to properly align and pad data as well as the 666617cf57SGeorge V. Neville-Neilneed to manipulate ancillary information that is not part of the data 676617cf57SGeorge V. Neville-Neilstream. 686617cf57SGeorge V. Neville-NeilRFC2292 defines a set of functions, which are implemented as 696617cf57SGeorge V. Neville-Neilpart of the Kame libraries, to support help developers create, change, 706617cf57SGeorge V. Neville-Neiland parse Hop-by-Hope and Destination options. 716617cf57SGeorge V. Neville-NeilAll of the prototypes 726617cf57SGeorge V. Neville-Neilfor the option functions are defined in the 736617cf57SGeorge V. Neville-Neil.In netinet/in.h 746617cf57SGeorge V. Neville-Neilheader file. 756617cf57SGeorge V. Neville-Neil.\" 766617cf57SGeorge V. Neville-Neil.Ss inet6_option_space 776617cf57SGeorge V. Neville-NeilIn order to determine the amount of space necessary to hold any option 786617cf57SGeorge V. Neville-Neilthe 796617cf57SGeorge V. Neville-Neil.Fn inet6_option_space 806617cf57SGeorge V. Neville-Neilfunction is called. 816617cf57SGeorge V. Neville-NeilIt returns the number of bytes required to hold 826617cf57SGeorge V. Neville-Neilan option when it is stored as ancillary data, including the 836617cf57SGeorge V. Neville-Neil.Li cmsghdr 846617cf57SGeorge V. Neville-Neilstructure at the beginning, and any necessary padding at the end. 856617cf57SGeorge V. Neville-NeilThe 866617cf57SGeorge V. Neville-Neil.Li nbytes 876617cf57SGeorge V. Neville-Neilargument indicates the size of the structure defining the option, 886617cf57SGeorge V. Neville-Neiland must include any pad bytes at the beginning (the value 896617cf57SGeorge V. Neville-Neil.Li y 906617cf57SGeorge V. Neville-Neilin the alignment term 916617cf57SGeorge V. Neville-Neil.Dq Li "xn + y" ) , 926617cf57SGeorge V. Neville-Neilthe type byte, the length byte, and the option data. 936617cf57SGeorge V. Neville-Neil.Pp 946617cf57SGeorge V. Neville-NeilNote: If multiple options are stored in a single ancillary data 956617cf57SGeorge V. Neville-Neilobject, which is the recommended technique, the 966617cf57SGeorge V. Neville-Neil.Fn inet6_option_space 976617cf57SGeorge V. Neville-Neilfunction overestimates the amount of space required by the size of 986617cf57SGeorge V. Neville-Neil.Li N-1 996617cf57SGeorge V. Neville-Neil.Li cmsghdr 1006617cf57SGeorge V. Neville-Neilstructures, where 1016617cf57SGeorge V. Neville-Neil.Li N 1026617cf57SGeorge V. Neville-Neilis the number of options to be stored in the object. 1036617cf57SGeorge V. Neville-NeilUsually this has 1046617cf57SGeorge V. Neville-Neilno impact because it is assumed that most Hop-by-Hop and Destination 1056617cf57SGeorge V. Neville-Neiloption headers carry only one option as indicated in appendix B of RFC2460. 1066617cf57SGeorge V. Neville-Neil.\" 1076617cf57SGeorge V. Neville-Neil.Ss inet6_option_init 1086617cf57SGeorge V. Neville-NeilThe 1096617cf57SGeorge V. Neville-Neil.Fn inet6_option_init 1106617cf57SGeorge V. Neville-Neilfunction is called to initialize any ancillary data object that will contain 1116617cf57SGeorge V. Neville-Neila Hop-by-Hop or Destination option. 1126617cf57SGeorge V. Neville-NeilIt returns 1136617cf57SGeorge V. Neville-Neil.Li 0 1146617cf57SGeorge V. Neville-Neilon success and 1156617cf57SGeorge V. Neville-Neil.Li -1 1166617cf57SGeorge V. Neville-Neilwhen an error occurs. 1176617cf57SGeorge V. Neville-Neil.Pp 1186617cf57SGeorge V. Neville-NeilThe 1196617cf57SGeorge V. Neville-Neil.Fa bp 1206617cf57SGeorge V. Neville-Neilargument points to a previously allocated area of memory which must be 1216617cf57SGeorge V. Neville-Neillarge enough to contain all the arguments that the application indents 1226617cf57SGeorge V. Neville-Neilto add later via 1236617cf57SGeorge V. Neville-Neil.Fn inet6_option_append 1246617cf57SGeorge V. Neville-Neiland 1256617cf57SGeorge V. Neville-Neil.Fn inet6_option_alloc 1266617cf57SGeorge V. Neville-Neilroutines. 1276617cf57SGeorge V. Neville-Neil.Pp 1286617cf57SGeorge V. Neville-NeilThe 1296617cf57SGeorge V. Neville-Neil.Fa cmsgp 1306617cf57SGeorge V. Neville-Neilargument is a pointer to a pointer to a 1316617cf57SGeorge V. Neville-Neil.Li cmsghdr 1326617cf57SGeorge V. Neville-Neilstructure. 1336617cf57SGeorge V. Neville-NeilThe 1346617cf57SGeorge V. Neville-Neil.Fa *cmsgp 1356617cf57SGeorge V. Neville-Neilargument 1366617cf57SGeorge V. Neville-Neilpoints to a 1376617cf57SGeorge V. Neville-Neil.Li cmsghdr 1386617cf57SGeorge V. Neville-Neilstructure which is constructed by this function and stored in the 1396617cf57SGeorge V. Neville-Neilarea of memory pointed to by 1406617cf57SGeorge V. Neville-Neil.Fa bp . 1416617cf57SGeorge V. Neville-Neil.Pp 1426617cf57SGeorge V. Neville-NeilThe 1436617cf57SGeorge V. Neville-Neil.Fa type 1446617cf57SGeorge V. Neville-Neilis either 1456617cf57SGeorge V. Neville-Neil.Dv IPV6_HOPOPTS 1466617cf57SGeorge V. Neville-Neilor 1476617cf57SGeorge V. Neville-Neil.Dv IPV6_DSTOPTS 1486617cf57SGeorge V. Neville-Neiland is stored in the 1496617cf57SGeorge V. Neville-Neil.Li cmsg_type 1506617cf57SGeorge V. Neville-Neilmember of the 1516617cf57SGeorge V. Neville-Neil.Li cmsghdr 1526617cf57SGeorge V. Neville-Neilstructure mentioned above. 1536617cf57SGeorge V. Neville-Neil.\" 1546617cf57SGeorge V. Neville-Neil.Ss inet6_option_append 1556617cf57SGeorge V. Neville-NeilThis function appends a Hop-by-Hop option or a Destination option into 1566617cf57SGeorge V. Neville-Neilan ancillary data object previously initialized by a call to 1576617cf57SGeorge V. Neville-Neil.Fn inet6_option_init . 1586617cf57SGeorge V. Neville-NeilThe 1596617cf57SGeorge V. Neville-Neil.Fn inet6_option_append function returns 1606617cf57SGeorge V. Neville-Neil.Li 0 1616617cf57SGeorge V. Neville-Neilif it succeeds or 1626617cf57SGeorge V. Neville-Neil.Li -1 1636617cf57SGeorge V. Neville-Neilwhen an error occurs. 1646617cf57SGeorge V. Neville-Neil.Pp 1656617cf57SGeorge V. Neville-NeilThe 1666617cf57SGeorge V. Neville-Neil.Fa cmsg 1676617cf57SGeorge V. Neville-Neilargument is a pointer to the 1686617cf57SGeorge V. Neville-Neil.Li cmsghdr 1696617cf57SGeorge V. Neville-Neilstructure that was initialized by a call to 1706617cf57SGeorge V. Neville-Neil.Fn inet6_option_init . 1716617cf57SGeorge V. Neville-Neil.Pp 1726617cf57SGeorge V. Neville-NeilThe 1736617cf57SGeorge V. Neville-Neil.Fa typep 1746617cf57SGeorge V. Neville-Neilargument is a pointer to the 8-bit option type. 1756617cf57SGeorge V. Neville-NeilAll options are 1766617cf57SGeorge V. Neville-Neilencoded as type-length-value tuples and it is assumed that 1776617cf57SGeorge V. Neville-Neilthe 1786617cf57SGeorge V. Neville-Neil.Fa typep 1796617cf57SGeorge V. Neville-Neilfield is immediately followed by the 8-bit option data length field, 1806617cf57SGeorge V. Neville-Neilwhich is then followed by the option data. 1816617cf57SGeorge V. Neville-Neil.Pp 1826617cf57SGeorge V. Neville-NeilThe option types of 1836617cf57SGeorge V. Neville-Neil.Li 0 1846617cf57SGeorge V. Neville-Neiland 1856617cf57SGeorge V. Neville-Neil.Li 1 are reserved for the 1866617cf57SGeorge V. Neville-Neil.Li Pad1 1876617cf57SGeorge V. Neville-Neiland 1886617cf57SGeorge V. Neville-Neil.Li PadN 1896617cf57SGeorge V. Neville-Neiloptions respectively. 1906617cf57SGeorge V. Neville-NeilAll other values from 1916617cf57SGeorge V. Neville-Neil.Li 2 1926617cf57SGeorge V. Neville-Neilthrough 1936617cf57SGeorge V. Neville-Neil.Li 255 1946617cf57SGeorge V. Neville-Neilare available for applications to use. 1956617cf57SGeorge V. Neville-Neil.Pp 1966617cf57SGeorge V. Neville-NeilThe option data length, since it is stored in 8 bites, must have a 1976617cf57SGeorge V. Neville-Neilvalue between 1986617cf57SGeorge V. Neville-Neil.Li 0 1996617cf57SGeorge V. Neville-Neiland 2006617cf57SGeorge V. Neville-Neil.Li 255 , 2016617cf57SGeorge V. Neville-Neilinclusive. 2026617cf57SGeorge V. Neville-Neil.Pp 2036617cf57SGeorge V. Neville-NeilThe 2046617cf57SGeorge V. Neville-Neil.Fa multx 2056617cf57SGeorge V. Neville-Neilargument 2066617cf57SGeorge V. Neville-Neilis the value 2076617cf57SGeorge V. Neville-Neil.Li x 2086617cf57SGeorge V. Neville-Neilin the alignment term 2096617cf57SGeorge V. Neville-Neil.Dq Li xn + y 2106617cf57SGeorge V. Neville-Neiland indicates the byte alignment necessary for the data. 2116617cf57SGeorge V. Neville-NeilAlignments may be specified as 2126617cf57SGeorge V. Neville-Neil.Li 1 , 2136617cf57SGeorge V. Neville-Neil.Li 2 , 2146617cf57SGeorge V. Neville-Neil.Li 4 , 2156617cf57SGeorge V. Neville-Neilor 2166617cf57SGeorge V. Neville-Neil.Li 8 2176617cf57SGeorge V. Neville-Neilbytes, which is no alignment, 16 bit, 32 bit and 64 bit alignments 2186617cf57SGeorge V. Neville-Neilrespectively. 2196617cf57SGeorge V. Neville-Neil.Pp 2206617cf57SGeorge V. Neville-NeilThe 2216617cf57SGeorge V. Neville-Neil.Fa plusy 2226617cf57SGeorge V. Neville-Neilargument 2236617cf57SGeorge V. Neville-Neilis the value 2246617cf57SGeorge V. Neville-Neil.Li y 2256617cf57SGeorge V. Neville-Neilin the alignment term 2266617cf57SGeorge V. Neville-Neil.Dq Li xn + y 2276617cf57SGeorge V. Neville-Neiland must have a value between 2286617cf57SGeorge V. Neville-Neil.Li 0 2296617cf57SGeorge V. Neville-Neiland 2306617cf57SGeorge V. Neville-Neil.Li 7 , 2316617cf57SGeorge V. Neville-Neilinclusive, indicating the amount of padding that is necessary for an 2326617cf57SGeorge V. Neville-Neiloption. 2336617cf57SGeorge V. Neville-Neil.\" 2346617cf57SGeorge V. Neville-Neil.Ss inet6_option_alloc 2356617cf57SGeorge V. Neville-NeilThe 2366617cf57SGeorge V. Neville-Neil.Fn inet6_option_alloc 2376617cf57SGeorge V. Neville-Neilfunction appends a Hop-by-Hop option or a Destination option into an 2386617cf57SGeorge V. Neville-Neilancillary data object that has previously been initialized by a call to 2396617cf57SGeorge V. Neville-Neil.Fn inet6_option_init . 2406617cf57SGeorge V. Neville-NeilThe 2416617cf57SGeorge V. Neville-Neil.Fn inet6_option_alloc 2426617cf57SGeorge V. Neville-Neilfunction returns a pointer to the 8-bit option type field that at the 2436617cf57SGeorge V. Neville-Neilbeginning of the allocated the option on success, or 2446617cf57SGeorge V. Neville-Neil.Dv NULL 2456617cf57SGeorge V. Neville-Neilon an error. 2466617cf57SGeorge V. Neville-Neil.Pp 2476617cf57SGeorge V. Neville-NeilThe difference between the 2486617cf57SGeorge V. Neville-Neil.Fn inet6_option_alloc 2496617cf57SGeorge V. Neville-Neiland 2506617cf57SGeorge V. Neville-Neil.Fn inet6_option_append 2516617cf57SGeorge V. Neville-Neilfunctions is that the latter copies the contents of a previously built 2526617cf57SGeorge V. Neville-Neiloption into the ancillary data object while the former returns a 2536617cf57SGeorge V. Neville-Neilpointer to the place in the data object where the option's TLV must 2546617cf57SGeorge V. Neville-Neilthen be built by the application. 2556617cf57SGeorge V. Neville-Neil.Pp 2566617cf57SGeorge V. Neville-NeilThe 2576617cf57SGeorge V. Neville-Neil.Fa cmsg 2586617cf57SGeorge V. Neville-Neilargument is a pointer to a 2596617cf57SGeorge V. Neville-Neil.Li cmsghdr 2606617cf57SGeorge V. Neville-Neilstructure that was initialized by 2616617cf57SGeorge V. Neville-Neil.Fn inet6_option_init . 2626617cf57SGeorge V. Neville-Neil.Pp 2636617cf57SGeorge V. Neville-NeilThe 2646617cf57SGeorge V. Neville-Neil.Fa datalen 2656617cf57SGeorge V. Neville-Neilargument is the value of the option data length byte for this option. 2666617cf57SGeorge V. Neville-NeilThis value is required as an argument to allow the function to 2676617cf57SGeorge V. Neville-Neildetermine if padding must be appended at the end of the option. 2686617cf57SGeorge V. Neville-Neil(The 2696617cf57SGeorge V. Neville-Neil.Fn inet6_option_append 2706617cf57SGeorge V. Neville-Neilfunction does not need a data length argument 2716617cf57SGeorge V. Neville-Neilsince the option data length must already be stored by the caller) 2726617cf57SGeorge V. Neville-Neil.Pp 2736617cf57SGeorge V. Neville-NeilThe 2746617cf57SGeorge V. Neville-Neil.Fa multx 2756617cf57SGeorge V. Neville-Neiland 2766617cf57SGeorge V. Neville-Neil.Fa plusy 2776617cf57SGeorge V. Neville-Neilarguments 2786617cf57SGeorge V. Neville-Neilare identical to the arguments of the same name described in the 2796617cf57SGeorge V. Neville-Neil.Fn inet6_option_init 2806617cf57SGeorge V. Neville-Neilfunction above. 2816617cf57SGeorge V. Neville-Neil.\" 2826617cf57SGeorge V. Neville-Neil.Ss inet6_option_next 2836617cf57SGeorge V. Neville-NeilThe 2846617cf57SGeorge V. Neville-Neil.Fn inet6_option_next 2856617cf57SGeorge V. Neville-Neilfunction is used to process Hop-by-Hop and Destination options that 2866617cf57SGeorge V. Neville-Neilare present in an ancillary data object. 2876617cf57SGeorge V. Neville-NeilWhen an option remains to 2886617cf57SGeorge V. Neville-Neilbe processed, the return value of the 2896617cf57SGeorge V. Neville-Neil.Fn inet6_option_next 2906617cf57SGeorge V. Neville-Neilfunction is 2916617cf57SGeorge V. Neville-Neil.Li 0 2926617cf57SGeorge V. Neville-Neiland the 2936617cf57SGeorge V. Neville-Neil.Fa *tptrp 2946617cf57SGeorge V. Neville-Neilargument points to the 8-bit option type field, which is followed by 2956617cf57SGeorge V. Neville-Neilthe 8-bit option data length, and then the option data. 2966617cf57SGeorge V. Neville-NeilWhen no more 2976617cf57SGeorge V. Neville-Neiloptions remain to be processed, the return value is 2986617cf57SGeorge V. Neville-Neil.Li -1 2996617cf57SGeorge V. Neville-Neiland 3006617cf57SGeorge V. Neville-Neil.Fa *tptrp 3016617cf57SGeorge V. Neville-Neilis 3026617cf57SGeorge V. Neville-Neil.Dv NULL 3036617cf57SGeorge V. Neville-Neiland when an error occurs, the return value is 3046617cf57SGeorge V. Neville-Neil.Li -1 3056617cf57SGeorge V. Neville-Neilbut the 3066617cf57SGeorge V. Neville-Neil.Fa *tptrp 3076617cf57SGeorge V. Neville-Neilargument is not 3086617cf57SGeorge V. Neville-Neil.Dv NULL . 3096617cf57SGeorge V. Neville-NeilThis set of return values allows a program to easily loop through all 3106617cf57SGeorge V. Neville-Neilthe options in an ancillary data object, checking for the error and 3116617cf57SGeorge V. Neville-Neilend of stream conditions along the way. 3126617cf57SGeorge V. Neville-Neil.Pp 3136617cf57SGeorge V. Neville-NeilWhen a valid option is returned the 3146617cf57SGeorge V. Neville-Neil.Fa cmsg 3156617cf57SGeorge V. Neville-Neilargument points to a 3166617cf57SGeorge V. Neville-Neil.Li cmsghdr 3176617cf57SGeorge V. Neville-Neilwhere the 3186617cf57SGeorge V. Neville-Neil.Li cmsg_level 3196617cf57SGeorge V. Neville-Neilequals 3206617cf57SGeorge V. Neville-Neil.Dv IPPROTO_IPV6 3216617cf57SGeorge V. Neville-Neiland 3226617cf57SGeorge V. Neville-Neil.Li cmsg_type 3236617cf57SGeorge V. Neville-Neilis either 3246617cf57SGeorge V. Neville-Neil.Dv IPV6_HOPOPTS 3256617cf57SGeorge V. Neville-Neilor 3266617cf57SGeorge V. Neville-Neil.Dv IPV6_DSTOPTS . 3276617cf57SGeorge V. Neville-Neil.Pp 3286617cf57SGeorge V. Neville-NeilThe 3296617cf57SGeorge V. Neville-Neil.Fa tptrp 3306617cf57SGeorge V. Neville-Neilargument is a pointer to a pointer to an 8-bit byte and 3316617cf57SGeorge V. Neville-Neil.Fa *tptrp 3326617cf57SGeorge V. Neville-Neilis used by the function to remember its place in the ancillary data 3336617cf57SGeorge V. Neville-Neilobject each time the function is called. 3346617cf57SGeorge V. Neville-NeilWhen the 3356617cf57SGeorge V. Neville-Neil.Fn inet6_option_next 3366617cf57SGeorge V. Neville-Neilfunction is called for the first time on a given ancillary data object, 3376617cf57SGeorge V. Neville-Neil.Fa *tptrp 3386617cf57SGeorge V. Neville-Neilmust be set to 3396617cf57SGeorge V. Neville-Neil.Dv NULL . 3406617cf57SGeorge V. Neville-Neil.Pp 3416617cf57SGeorge V. Neville-NeilEach time the function returns success, 3426617cf57SGeorge V. Neville-Neilthe 3436617cf57SGeorge V. Neville-Neil.Fa *tptrp 3446617cf57SGeorge V. Neville-Neilargument points to the 8-bit option type field for the next option to 3456617cf57SGeorge V. Neville-Neilbe processed. 3466617cf57SGeorge V. Neville-Neil.\" 3476617cf57SGeorge V. Neville-Neil.Ss inet6_option_find 3486617cf57SGeorge V. Neville-NeilThe 3496617cf57SGeorge V. Neville-Neil.Fn inet6_option_find 3506617cf57SGeorge V. Neville-Neilfunction allows an application to search for a particular option type 3516617cf57SGeorge V. Neville-Neilin an ancillary data object. 3526617cf57SGeorge V. Neville-NeilThe 3536617cf57SGeorge V. Neville-Neil.Fa cmsg 3546617cf57SGeorge V. Neville-Neilargument is a pointer to 3556617cf57SGeorge V. Neville-Neil.Li cmsghdr 3566617cf57SGeorge V. Neville-Neilstructure in which the 3576617cf57SGeorge V. Neville-Neil.Li cmsg_level 3586617cf57SGeorge V. Neville-Neilelement equals 3596617cf57SGeorge V. Neville-Neil.Dv IPPROTO_IPV6 3606617cf57SGeorge V. Neville-Neiland the 3616617cf57SGeorge V. Neville-Neil.Li cmsg_type 3626617cf57SGeorge V. Neville-Neilelement is either 3636617cf57SGeorge V. Neville-Neil.Dv IPV6_HOPOPTS 3646617cf57SGeorge V. Neville-Neilor 3656617cf57SGeorge V. Neville-Neil.Dv IPV6_DSTOPTS . 3666617cf57SGeorge V. Neville-Neil.Pp 3676617cf57SGeorge V. Neville-NeilThe 3686617cf57SGeorge V. Neville-Neil.Fa tptrp 3696617cf57SGeorge V. Neville-Neilargument is handled exactly as in the 3706617cf57SGeorge V. Neville-Neil.Fn inet6_option_next 3716617cf57SGeorge V. Neville-Neilfunction described above. 3726617cf57SGeorge V. Neville-Neil.Pa 3736617cf57SGeorge V. Neville-NeilThe 3746617cf57SGeorge V. Neville-Neil.fn inet6_option_find 3756617cf57SGeorge V. Neville-Neilfunction starts searching for an option of the specified type 3766617cf57SGeorge V. Neville-Neilbeginning after the value of 3776617cf57SGeorge V. Neville-Neil.Fa *tptrp . 3786617cf57SGeorge V. Neville-Neil.\" 3796617cf57SGeorge V. Neville-Neil.Sh DIAGNOSTICS 3806617cf57SGeorge V. Neville-NeilThe 3816617cf57SGeorge V. Neville-Neil.Fn inet6_option_init 3826617cf57SGeorge V. Neville-Neiland 3836617cf57SGeorge V. Neville-Neil.Fn inet6_option_append 3846617cf57SGeorge V. Neville-Neilfunctions return 3856617cf57SGeorge V. Neville-Neil.Li 0 3866617cf57SGeorge V. Neville-Neilon success or 3876617cf57SGeorge V. Neville-Neil.Li -1 3886617cf57SGeorge V. Neville-Neilon an error. 3896617cf57SGeorge V. Neville-Neil.Pp 3906617cf57SGeorge V. Neville-NeilThe 3916617cf57SGeorge V. Neville-Neil.Fn inet6_option_alloc 3926617cf57SGeorge V. Neville-Neilfunction returns 3936617cf57SGeorge V. Neville-Neil.Dv NULL 3946617cf57SGeorge V. Neville-Neilon an error. 3956617cf57SGeorge V. Neville-Neil.Pp 3966617cf57SGeorge V. Neville-NeilWhen 3976617cf57SGeorge V. Neville-Neil.Fn inet6_option_next 3986617cf57SGeorge V. Neville-Neilor 3996617cf57SGeorge V. Neville-Neil.Fn inet6_option_find 4006617cf57SGeorge V. Neville-Neildetect an error they return 4016617cf57SGeorge V. Neville-Neil.Li -1 4026617cf57SGeorge V. Neville-Neilsetting 4036617cf57SGeorge V. Neville-Neil.Fa *tptrp 4046617cf57SGeorge V. Neville-Neilto non 4056617cf57SGeorge V. Neville-Neil.Dv NULL 4066617cf57SGeorge V. Neville-Neilvalue. 4076617cf57SGeorge V. Neville-Neil.\" 4086617cf57SGeorge V. Neville-Neil.Sh EXAMPLES 4096617cf57SGeorge V. Neville-NeilRFC2292 gives comprehensive examples in chapter 6. 4106617cf57SGeorge V. Neville-Neil.\" 4116617cf57SGeorge V. Neville-Neil.Sh SEE ALSO 4126617cf57SGeorge V. Neville-Neil.Rs 4136617cf57SGeorge V. Neville-Neil.%A W. Stevens 4146617cf57SGeorge V. Neville-Neil.%A M. Thomas 4156617cf57SGeorge V. Neville-Neil.%T "Advanced Sockets API for IPv6" 4166617cf57SGeorge V. Neville-Neil.%N RFC2292 4176617cf57SGeorge V. Neville-Neil.%D February 1998 4186617cf57SGeorge V. Neville-Neil.Re 4196617cf57SGeorge V. Neville-Neil.Rs 4206617cf57SGeorge V. Neville-Neil.%A S. Deering 4216617cf57SGeorge V. Neville-Neil.%A R. Hinden 4226617cf57SGeorge V. Neville-Neil.%T "Internet Protocol, Version 6 (IPv6) Specification" 4236617cf57SGeorge V. Neville-Neil.%N RFC2460 4246617cf57SGeorge V. Neville-Neil.%D December 1998 4256617cf57SGeorge V. Neville-Neil.Re 4266617cf57SGeorge V. Neville-Neil.\" 4276617cf57SGeorge V. Neville-Neil.Sh HISTORY 4286617cf57SGeorge V. Neville-NeilThe implementation first appeared in KAME advanced networking kit. 4296617cf57SGeorge V. Neville-Neil.\" 4306617cf57SGeorge V. Neville-Neil.Sh STANDARDS 4316617cf57SGeorge V. Neville-NeilThe functions are documented in 4326617cf57SGeorge V. Neville-Neil.Dq Advanced Sockets API for IPv6 4336617cf57SGeorge V. Neville-Neil(RFC2292). 4346617cf57SGeorge V. Neville-Neil.\" 435