1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * CDDL HEADER START
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * The contents of this file are subject to the terms of the
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Common Development and Distribution License (the "License").
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * You may not use this file except in compliance with the License.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * See the License for the specific language governing permissions
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * and limitations under the License.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * When distributing Covered Code, include this CDDL HEADER in each
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * If applicable, add the following below this CDDL HEADER, with the
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * fields enclosed by brackets "[]" replaced with your own identifying
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * information: Portions Copyright [yyyy] [name of copyright owner]
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * CDDL HEADER END
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * This code is conformant to revision 7 of 2292bis. Some of these functions
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * were provided (named inet6_rthdr_) in a very similar form in RFC 2292.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * The RFC 2292 variants are not supported.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Return amount of space needed to hold N segments for the specified
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * routing type. Does NOT include space for cmsghdr.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (0);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (sizeof (struct ip6_rthdr0) +
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Initializes rthdr structure. Verifies the segments against the length of
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * the buffer.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Note that a routing header can only hold 127 segments since the length field
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * in the header is just a byte.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoinet6_rth_init(void *bp, socklen_t bp_len, int type, int segments)
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo rthdr->ip6r0_segleft = 0; /* Incremented by rthdr_add */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Add one more address to the routing header. Fails when there is no more
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if ((rthdr->ip6r0_segleft + 1) * 2 > rthdr->ip6r0_len) {
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* Not room for one more */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (-1);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* LINTED alignment */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo addrs = (struct in6_addr *)((char *)rthdr + sizeof (*rthdr));
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (0);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Reverse a source route. Both arguments can point to the same buffer.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo if (rtout->ip6r0_type != 0 || rtin->ip6r0_type != 0 ||
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (-1);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* LINTED alignment */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo rtout_addrs = (struct in6_addr *)((char *)rtout + sizeof (*rtout));
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* LINTED alignment */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo rtin_addrs = (struct in6_addr *)((char *)rtin + sizeof (*rtin));
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (0);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Return the number of segments in the routing header.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (-1);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo return (-1);
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Return a pointer to an element in the source route.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * This uses the C convention for index [0, size-1].
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo /* LINTED alignment */