inet6_rth_space(3)

NAME

inet6_rth_space, inet6_rth_init, inet6_rth_add,
inet6_rth_reverse,
inet6_rth_segments, inet6_rth_getaddr - IPv6 Routing Header
Options
manipulation

SYNOPSIS

#include <netinet/in.h>
socklen_t
inet6_rth_space(int, int);
void *
inet6_rth_init(void *, socklen_t, int, int);
int
inet6_rth_add(void *, const struct in6_addr *);
int
inet6_rth_reverse(const void *, void *);
int
inet6_rth_segments(const void *);
struct in6_addr *
inet6_rth_getaddr(const void *, int);

DESCRIPTION

The IPv6 Advanced API, RFC 3542, defines the functions that
an application calls to build and examine IPv6 Routing headers. Rout
ing headers
are used to perform source routing in IPv6 networks. The
RFC uses the
word ``segments'' to describe addresses and that is the term
used here as
well. All of the functions are defined in the #include
<netinet/in.h>
header file. The functions described in this manual page
all operate on
routing header structures which are defined in #include
<netinet/ip6.h>
but which should not need to be modified outside the use of
this API.
The size and shape of the route header structures may
change, so using
the APIs is a more portable, long term, solution.
The functions in the API are split into two groups, those
that build a
routing header and those that parse a received routing head
er. We will
describe the builder functions followed by the parser func
tions.
inet6_rth_space
The inet6_rth_space() function returns the number of bytes
required to
hold a Routing Header of the type, specified in the type ar
gument and
containing the number of addresses specified in the segments
argument.
When the type is IPV6_RTHDR_TYPE_0 the number of segments
must be from 0
through 127. Routing headers of type IPV6_RTHDR_TYPE_2 con
tain only one
segment, and are only used with Mobile IPv6. The return
value from this
function is the number of bytes required to store the rout
ing header. If
the value 0 is returned then either the route header type
was not recognized or another error occurred.
inet6_rth_init
The inet6_rth_init() function initializes the pre-allocated
buffer
pointed to by bp to contain a routing header of the speci
fied type The
bp_len argument is used to verify that the buffer is large
enough. The
caller must allocate the buffer pointed to by bp. The nec
essary buffer
size should be determined by calling inet6_rth_space() de
scribed in the
previous sections.
The inet6_rth_init() function returns a pointer to bp on
success and NULL
when there is an error.
inet6_rth_add
The inet6_rth_add() function adds the IPv6 address pointed
to by addr to
the end of the routing header being constructed.
A successful addition results in the function returning 0,
otherwise -1
is returned.
inet6_rth_reverse
The inet6_rth_reverse() function takes a routing header,
pointed to by
the argument in, and writes a new routing header into the
argument
pointed to by out. The routing header at that sends data
grams along the
reverse of that route. Both arguments are allowed to point
to the same
buffer meaning that the reversal can occur in place.
The return value of the function is 0 on success, or -1 when
there is an
error.
The next set of functions operate on a routing header that
the application wants to parse. In the usual case such a routing head
er is received
from the network, although these functions can also be used
with routing
headers that the application itself created.
inet6_rth_segments
The inet6_rth_segments() function returns the number of seg
ments contained in the routing header pointed to by bp. The return
value is the
number of segments contained in the routing header, or -1 if
an error
occurred. It is not an error for 0 to be returned as a
routing header
may contain 0 segments.
inet6_rth_getaddr
The inet6_rth_getaddr() function is used to retrieve a sin
gle address
from a routing header. The index is the location in the
routing header
from which the application wants to retrieve an address.
The index
parameter must have a value between 0 and one less than the
number of
segments present in the routing header. The
inet6_rth_segments() function, described in the last section, should be used to de
termine the
total number of segments in the routing header. The
inet6_rth_getaddr()
function returns a pointer to an IPv6 address on success or
NULL when an
error has occurred.

EXAMPLES

RFC 3542 gives extensive examples in Section 21, Appendix B.

KAME also provides examples in the advapitest directory of
its kit.

DIAGNOSTICS

The inet6_rth_space() and inet6_rth_getaddr() functions re
turn 0 on
errors.
The inet6_rthdr_init() function returns NULL on error. The inet6_rth_add() and inet6_rth_reverse() functions return 0
on success, or
-1 upon an error.

SEE ALSO

W. Stevens, M. Thomas, E. Nordmark, and T. Jinmei, Advanced
Sockets API
for IPv6, RFC 3542, May 2003.
S. Deering and R. Hinden, Internet Protocol, Version 6
(IPv6)
Specification, RFC2460, December 1998.

HISTORY

The implementation first appeared in KAME advanced network
ing kit.
BSD December 24, 2004
Copyright © 2010-2025 Platon Technologies, s.r.o.           Home | Man pages | tLDP | Documents | Utilities | About
Design by styleshout