1190207Srpaulo/* @(#) $Header: /tcpdump/master/tcpdump/icmp6.h,v 1.18 2007-08-29 02:31:44 mcr Exp $ (LBL) */
2190207Srpaulo/*	NetBSD: icmp6.h,v 1.13 2000/08/03 16:30:37 itojun Exp 	*/
375115Sfenner/*	$KAME: icmp6.h,v 1.22 2000/08/03 15:25:16 jinmei Exp $	*/
475115Sfenner
575115Sfenner/*
675115Sfenner * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
775115Sfenner * All rights reserved.
875115Sfenner *
975115Sfenner * Redistribution and use in source and binary forms, with or without
1075115Sfenner * modification, are permitted provided that the following conditions
1175115Sfenner * are met:
1275115Sfenner * 1. Redistributions of source code must retain the above copyright
1375115Sfenner *    notice, this list of conditions and the following disclaimer.
1475115Sfenner * 2. Redistributions in binary form must reproduce the above copyright
1575115Sfenner *    notice, this list of conditions and the following disclaimer in the
1675115Sfenner *    documentation and/or other materials provided with the distribution.
1775115Sfenner * 3. Neither the name of the project nor the names of its contributors
1875115Sfenner *    may be used to endorse or promote products derived from this software
1975115Sfenner *    without specific prior written permission.
2075115Sfenner *
2175115Sfenner * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
2275115Sfenner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2375115Sfenner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2475115Sfenner * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
2575115Sfenner * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2675115Sfenner * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2775115Sfenner * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2875115Sfenner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2975115Sfenner * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3075115Sfenner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3175115Sfenner * SUCH DAMAGE.
3275115Sfenner */
3375115Sfenner
3475115Sfenner/*
3575115Sfenner * Copyright (c) 1982, 1986, 1993
3675115Sfenner *	The Regents of the University of California.  All rights reserved.
3775115Sfenner *
3875115Sfenner * Redistribution and use in source and binary forms, with or without
3975115Sfenner * modification, are permitted provided that the following conditions
4075115Sfenner * are met:
4175115Sfenner * 1. Redistributions of source code must retain the above copyright
4275115Sfenner *    notice, this list of conditions and the following disclaimer.
4375115Sfenner * 2. Redistributions in binary form must reproduce the above copyright
4475115Sfenner *    notice, this list of conditions and the following disclaimer in the
4575115Sfenner *    documentation and/or other materials provided with the distribution.
4675115Sfenner * 3. All advertising materials mentioning features or use of this software
4775115Sfenner *    must display the following acknowledgement:
4875115Sfenner *	This product includes software developed by the University of
4975115Sfenner *	California, Berkeley and its contributors.
5075115Sfenner * 4. Neither the name of the University nor the names of its contributors
5175115Sfenner *    may be used to endorse or promote products derived from this software
5275115Sfenner *    without specific prior written permission.
5375115Sfenner *
5475115Sfenner * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
5575115Sfenner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
5675115Sfenner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
5775115Sfenner * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
5875115Sfenner * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
5975115Sfenner * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
6075115Sfenner * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
6175115Sfenner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
6275115Sfenner * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
6375115Sfenner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
6475115Sfenner * SUCH DAMAGE.
6575115Sfenner *
6675115Sfenner *	@(#)ip_icmp.h	8.1 (Berkeley) 6/10/93
6775115Sfenner */
6875115Sfenner
6975115Sfenner#ifndef _NETINET_ICMP6_H_
7075115Sfenner#define _NETINET_ICMP6_H_
7175115Sfenner
7275115Sfennerstruct icmp6_hdr {
7375115Sfenner	u_int8_t	icmp6_type;	/* type field */
7475115Sfenner	u_int8_t	icmp6_code;	/* code field */
7575115Sfenner	u_int16_t	icmp6_cksum;	/* checksum field */
7675115Sfenner	union {
7775115Sfenner		u_int32_t	icmp6_un_data32[1]; /* type-specific field */
7875115Sfenner		u_int16_t	icmp6_un_data16[2]; /* type-specific field */
7975115Sfenner		u_int8_t	icmp6_un_data8[4];  /* type-specific field */
8075115Sfenner	} icmp6_dataun;
8175115Sfenner};
8275115Sfenner
8375115Sfenner#define icmp6_data32	icmp6_dataun.icmp6_un_data32
8475115Sfenner#define icmp6_data16	icmp6_dataun.icmp6_un_data16
8575115Sfenner#define icmp6_data8	icmp6_dataun.icmp6_un_data8
8675115Sfenner#define icmp6_pptr	icmp6_data32[0]		/* parameter prob */
8775115Sfenner#define icmp6_mtu	icmp6_data32[0]		/* packet too big */
8875115Sfenner#define icmp6_id	icmp6_data16[0]		/* echo request/reply */
8975115Sfenner#define icmp6_seq	icmp6_data16[1]		/* echo request/reply */
9075115Sfenner#define icmp6_maxdelay	icmp6_data16[0]		/* mcast group membership */
9175115Sfenner
9275115Sfenner#define ICMP6_DST_UNREACH		1	/* dest unreachable, codes: */
9375115Sfenner#define ICMP6_PACKET_TOO_BIG		2	/* packet too big */
9475115Sfenner#define ICMP6_TIME_EXCEEDED		3	/* time exceeded, code: */
9575115Sfenner#define ICMP6_PARAM_PROB		4	/* ip6 header bad */
9675115Sfenner
9775115Sfenner#define ICMP6_ECHO_REQUEST		128	/* echo service */
9875115Sfenner#define ICMP6_ECHO_REPLY		129	/* echo reply */
9975115Sfenner#define ICMP6_MEMBERSHIP_QUERY		130	/* group membership query */
10075115Sfenner#define MLD6_LISTENER_QUERY		130 	/* multicast listener query */
10175115Sfenner#define ICMP6_MEMBERSHIP_REPORT		131	/* group membership report */
10275115Sfenner#define MLD6_LISTENER_REPORT		131	/* multicast listener report */
10375115Sfenner#define ICMP6_MEMBERSHIP_REDUCTION	132	/* group membership termination */
10475115Sfenner#define MLD6_LISTENER_DONE		132	/* multicast listener done */
10575115Sfenner
10675115Sfenner#define ND_ROUTER_SOLICIT		133	/* router solicitation */
107162017Ssam#define ND_ROUTER_ADVERT		134	/* router advertisement */
10875115Sfenner#define ND_NEIGHBOR_SOLICIT		135	/* neighbor solicitation */
109162017Ssam#define ND_NEIGHBOR_ADVERT		136	/* neighbor advertisement */
11075115Sfenner#define ND_REDIRECT			137	/* redirect */
11175115Sfenner
11275115Sfenner#define ICMP6_ROUTER_RENUMBERING	138	/* router renumbering */
11375115Sfenner
11475115Sfenner#define ICMP6_WRUREQUEST		139	/* who are you request */
11575115Sfenner#define ICMP6_WRUREPLY			140	/* who are you reply */
11675115Sfenner#define ICMP6_FQDN_QUERY		139	/* FQDN query */
11775115Sfenner#define ICMP6_FQDN_REPLY		140	/* FQDN reply */
11875115Sfenner#define ICMP6_NI_QUERY			139	/* node information request */
11975115Sfenner#define ICMP6_NI_REPLY			140	/* node information reply */
120146773Ssam#define IND_SOLICIT			141	/* inverse neighbor solicitation */
121146773Ssam#define IND_ADVERT			142	/* inverse neighbor advertisement */
12275115Sfenner
123146773Ssam#define ICMP6_V2_MEMBERSHIP_REPORT	143	/* v2 membership report */
124146773Ssam#define MLDV2_LISTENER_REPORT		143	/* v2 multicast listener report */
125146773Ssam#define ICMP6_HADISCOV_REQUEST		144
126146773Ssam#define ICMP6_HADISCOV_REPLY		145
127146773Ssam#define ICMP6_MOBILEPREFIX_SOLICIT	146
128146773Ssam#define ICMP6_MOBILEPREFIX_ADVERT	147
12975115Sfenner
130146773Ssam#define MLD6_MTRACE_RESP		200	/* mtrace response(to sender) */
131146773Ssam#define MLD6_MTRACE			201	/* mtrace messages */
13275115Sfenner
133146773Ssam#define ICMP6_MAXTYPE			201
134127668Sbms
13575115Sfenner#define ICMP6_DST_UNREACH_NOROUTE	0	/* no route to destination */
13675115Sfenner#define ICMP6_DST_UNREACH_ADMIN	 	1	/* administratively prohibited */
13775115Sfenner#define ICMP6_DST_UNREACH_NOTNEIGHBOR	2	/* not a neighbor(obsolete) */
13875115Sfenner#define ICMP6_DST_UNREACH_BEYONDSCOPE	2	/* beyond scope of source address */
13975115Sfenner#define ICMP6_DST_UNREACH_ADDR		3	/* address unreachable */
14075115Sfenner#define ICMP6_DST_UNREACH_NOPORT	4	/* port unreachable */
14175115Sfenner
14275115Sfenner#define ICMP6_TIME_EXCEED_TRANSIT 	0	/* ttl==0 in transit */
14375115Sfenner#define ICMP6_TIME_EXCEED_REASSEMBLY	1	/* ttl==0 in reass */
14475115Sfenner
14575115Sfenner#define ICMP6_PARAMPROB_HEADER 	 	0	/* erroneous header field */
14675115Sfenner#define ICMP6_PARAMPROB_NEXTHEADER	1	/* unrecognized next header */
14775115Sfenner#define ICMP6_PARAMPROB_OPTION		2	/* unrecognized option */
14875115Sfenner
14975115Sfenner#define ICMP6_INFOMSG_MASK		0x80	/* all informational messages */
15075115Sfenner
15175115Sfenner#define ICMP6_NI_SUBJ_IPV6	0	/* Query Subject is an IPv6 address */
15275115Sfenner#define ICMP6_NI_SUBJ_FQDN	1	/* Query Subject is a Domain name */
15375115Sfenner#define ICMP6_NI_SUBJ_IPV4	2	/* Query Subject is an IPv4 address */
15475115Sfenner
15575115Sfenner#define ICMP6_NI_SUCCESS	0	/* node information successful reply */
15675115Sfenner#define ICMP6_NI_REFUSED	1	/* node information request is refused */
15775115Sfenner#define ICMP6_NI_UNKNOWN	2	/* unknown Qtype */
15875115Sfenner
15975115Sfenner#define ICMP6_ROUTER_RENUMBERING_COMMAND  0	/* rr command */
16075115Sfenner#define ICMP6_ROUTER_RENUMBERING_RESULT   1	/* rr result */
16175115Sfenner#define ICMP6_ROUTER_RENUMBERING_SEQNUM_RESET   255	/* rr seq num reset */
16275115Sfenner
16375115Sfenner/* Used in kernel only */
16475115Sfenner#define ND_REDIRECT_ONLINK	0	/* redirect to an on-link node */
16575115Sfenner#define ND_REDIRECT_ROUTER	1	/* redirect to a better router */
16675115Sfenner
16775115Sfenner/*
16875115Sfenner * Multicast Listener Discovery
16975115Sfenner */
17075115Sfennerstruct mld6_hdr {
17175115Sfenner	struct icmp6_hdr	mld6_hdr;
17275115Sfenner	struct in6_addr		mld6_addr; /* multicast address */
17375115Sfenner};
17475115Sfenner
17575115Sfenner#define mld6_type	mld6_hdr.icmp6_type
17675115Sfenner#define mld6_code	mld6_hdr.icmp6_code
17775115Sfenner#define mld6_cksum	mld6_hdr.icmp6_cksum
17875115Sfenner#define mld6_maxdelay	mld6_hdr.icmp6_data16[0]
17975115Sfenner#define mld6_reserved	mld6_hdr.icmp6_data16[1]
18075115Sfenner
181146773Ssam#define MLD_MINLEN	24
182146773Ssam#define MLDV2_MINLEN	28
183146773Ssam
18475115Sfenner/*
18575115Sfenner * Neighbor Discovery
18675115Sfenner */
18775115Sfenner
18875115Sfennerstruct nd_router_solicit {	/* router solicitation */
18975115Sfenner	struct icmp6_hdr 	nd_rs_hdr;
19075115Sfenner	/* could be followed by options */
19175115Sfenner};
19275115Sfenner
19375115Sfenner#define nd_rs_type	nd_rs_hdr.icmp6_type
19475115Sfenner#define nd_rs_code	nd_rs_hdr.icmp6_code
19575115Sfenner#define nd_rs_cksum	nd_rs_hdr.icmp6_cksum
19675115Sfenner#define nd_rs_reserved	nd_rs_hdr.icmp6_data32[0]
19775115Sfenner
19875115Sfennerstruct nd_router_advert {	/* router advertisement */
19975115Sfenner	struct icmp6_hdr	nd_ra_hdr;
20075115Sfenner	u_int32_t		nd_ra_reachable;	/* reachable time */
20175115Sfenner	u_int32_t		nd_ra_retransmit;	/* retransmit timer */
20275115Sfenner	/* could be followed by options */
20375115Sfenner};
20475115Sfenner
20575115Sfenner#define nd_ra_type		nd_ra_hdr.icmp6_type
20675115Sfenner#define nd_ra_code		nd_ra_hdr.icmp6_code
20775115Sfenner#define nd_ra_cksum		nd_ra_hdr.icmp6_cksum
20875115Sfenner#define nd_ra_curhoplimit	nd_ra_hdr.icmp6_data8[0]
20975115Sfenner#define nd_ra_flags_reserved	nd_ra_hdr.icmp6_data8[1]
21075115Sfenner#define ND_RA_FLAG_MANAGED	0x80
21175115Sfenner#define ND_RA_FLAG_OTHER	0x40
21298524Sfenner#define ND_RA_FLAG_HOME_AGENT	0x20
21398524Sfenner
21498524Sfenner/*
21598524Sfenner * Router preference values based on draft-draves-ipngwg-router-selection-01.
21698524Sfenner * These are non-standard definitions.
21798524Sfenner */
21898524Sfenner#define ND_RA_FLAG_RTPREF_MASK	0x18 /* 00011000 */
21998524Sfenner
22098524Sfenner#define ND_RA_FLAG_RTPREF_HIGH	0x08 /* 00001000 */
22198524Sfenner#define ND_RA_FLAG_RTPREF_MEDIUM	0x00 /* 00000000 */
22298524Sfenner#define ND_RA_FLAG_RTPREF_LOW	0x18 /* 00011000 */
22398524Sfenner#define ND_RA_FLAG_RTPREF_RSV	0x10 /* 00010000 */
22498524Sfenner
22575115Sfenner#define nd_ra_router_lifetime	nd_ra_hdr.icmp6_data16[1]
22675115Sfenner
22775115Sfennerstruct nd_neighbor_solicit {	/* neighbor solicitation */
22875115Sfenner	struct icmp6_hdr	nd_ns_hdr;
22975115Sfenner	struct in6_addr		nd_ns_target;	/*target address */
23075115Sfenner	/* could be followed by options */
23175115Sfenner};
23275115Sfenner
23375115Sfenner#define nd_ns_type		nd_ns_hdr.icmp6_type
23475115Sfenner#define nd_ns_code		nd_ns_hdr.icmp6_code
23575115Sfenner#define nd_ns_cksum		nd_ns_hdr.icmp6_cksum
23675115Sfenner#define nd_ns_reserved		nd_ns_hdr.icmp6_data32[0]
23775115Sfenner
23875115Sfennerstruct nd_neighbor_advert {	/* neighbor advertisement */
23975115Sfenner	struct icmp6_hdr	nd_na_hdr;
24075115Sfenner	struct in6_addr		nd_na_target;	/* target address */
24175115Sfenner	/* could be followed by options */
24275115Sfenner};
24375115Sfenner
24475115Sfenner#define nd_na_type		nd_na_hdr.icmp6_type
24575115Sfenner#define nd_na_code		nd_na_hdr.icmp6_code
24675115Sfenner#define nd_na_cksum		nd_na_hdr.icmp6_cksum
24775115Sfenner#define nd_na_flags_reserved	nd_na_hdr.icmp6_data32[0]
24875115Sfenner
249146773Ssam#define ND_NA_FLAG_ROUTER		0x80000000
250146773Ssam#define ND_NA_FLAG_SOLICITED		0x40000000
251146773Ssam#define ND_NA_FLAG_OVERRIDE		0x20000000
252146773Ssam
25375115Sfennerstruct nd_redirect {		/* redirect */
25475115Sfenner	struct icmp6_hdr	nd_rd_hdr;
25575115Sfenner	struct in6_addr		nd_rd_target;	/* target address */
25675115Sfenner	struct in6_addr		nd_rd_dst;	/* destination address */
25775115Sfenner	/* could be followed by options */
25875115Sfenner};
25975115Sfenner
26075115Sfenner#define nd_rd_type		nd_rd_hdr.icmp6_type
26175115Sfenner#define nd_rd_code		nd_rd_hdr.icmp6_code
26275115Sfenner#define nd_rd_cksum		nd_rd_hdr.icmp6_cksum
26375115Sfenner#define nd_rd_reserved		nd_rd_hdr.icmp6_data32[0]
26475115Sfenner
26575115Sfennerstruct nd_opt_hdr {		/* Neighbor discovery option header */
26675115Sfenner	u_int8_t	nd_opt_type;
26775115Sfenner	u_int8_t	nd_opt_len;
26875115Sfenner	/* followed by option specific data*/
26975115Sfenner};
27075115Sfenner
27175115Sfenner#define ND_OPT_SOURCE_LINKADDR		1
27275115Sfenner#define ND_OPT_TARGET_LINKADDR		2
27375115Sfenner#define ND_OPT_PREFIX_INFORMATION	3
27475115Sfenner#define ND_OPT_REDIRECTED_HEADER	4
27575115Sfenner#define ND_OPT_MTU			5
27698524Sfenner#define ND_OPT_ADVINTERVAL		7
27798524Sfenner#define ND_OPT_HOMEAGENT_INFO		8
27898524Sfenner#define ND_OPT_ROUTE_INFO		9	/* draft-ietf-ipngwg-router-preference, not officially assigned yet */
279214478Srpaulo#define ND_OPT_RDNSS			25
280251158Sdelphij#define ND_OPT_DNSSL			31
28175115Sfenner
28275115Sfennerstruct nd_opt_prefix_info {	/* prefix information */
28375115Sfenner	u_int8_t	nd_opt_pi_type;
28475115Sfenner	u_int8_t	nd_opt_pi_len;
28575115Sfenner	u_int8_t	nd_opt_pi_prefix_len;
28675115Sfenner	u_int8_t	nd_opt_pi_flags_reserved;
287146773Ssam	u_int8_t	nd_opt_pi_valid_time[4];
288146773Ssam	u_int8_t	nd_opt_pi_preferred_time[4];
289146773Ssam	u_int8_t	nd_opt_pi_reserved2[4];
29075115Sfenner	struct in6_addr	nd_opt_pi_prefix;
29175115Sfenner};
29275115Sfenner
29375115Sfenner#define ND_OPT_PI_FLAG_ONLINK		0x80
29475115Sfenner#define ND_OPT_PI_FLAG_AUTO		0x40
29575115Sfenner#define ND_OPT_PI_FLAG_ROUTER		0x20	/*2292bis*/
29675115Sfenner
29775115Sfennerstruct nd_opt_rd_hdr {         /* redirected header */
29875115Sfenner	u_int8_t	nd_opt_rh_type;
29975115Sfenner	u_int8_t	nd_opt_rh_len;
30075115Sfenner	u_int16_t	nd_opt_rh_reserved1;
30175115Sfenner	u_int32_t	nd_opt_rh_reserved2;
30275115Sfenner	/* followed by IP header and data */
30375115Sfenner};
30475115Sfenner
30575115Sfennerstruct nd_opt_mtu {		/* MTU option */
30675115Sfenner	u_int8_t	nd_opt_mtu_type;
30775115Sfenner	u_int8_t	nd_opt_mtu_len;
30875115Sfenner	u_int16_t	nd_opt_mtu_reserved;
30975115Sfenner	u_int32_t	nd_opt_mtu_mtu;
31075115Sfenner};
31175115Sfenner
312251158Sdelphijstruct nd_opt_rdnss {		/* RDNSS RFC 6106 5.1 */
313214478Srpaulo	u_int8_t	nd_opt_rdnss_type;
314214478Srpaulo	u_int8_t	nd_opt_rdnss_len;
315214478Srpaulo	u_int16_t	nd_opt_rdnss_reserved;
316214478Srpaulo	u_int32_t	nd_opt_rdnss_lifetime;
317214478Srpaulo	struct in6_addr nd_opt_rdnss_addr[1];	/* variable-length */
318214478Srpaulo};
319214478Srpaulo
320251158Sdelphijstruct nd_opt_dnssl {		/* DNSSL RFC 6106 5.2 */
321251158Sdelphij	u_int8_t  nd_opt_dnssl_type;
322251158Sdelphij	u_int8_t  nd_opt_dnssl_len;
323251158Sdelphij	u_int16_t nd_opt_dnssl_reserved;
324251158Sdelphij	u_int32_t nd_opt_dnssl_lifetime;
325251158Sdelphij	/* followed by list of DNS search domains, variable-length */
326251158Sdelphij};
327251158Sdelphij
32898524Sfennerstruct nd_opt_advinterval {	/* Advertisement interval option */
32998524Sfenner	u_int8_t	nd_opt_adv_type;
33098524Sfenner	u_int8_t	nd_opt_adv_len;
33198524Sfenner	u_int16_t	nd_opt_adv_reserved;
33298524Sfenner	u_int32_t	nd_opt_adv_interval;
33375115Sfenner};
33475115Sfenner
33598524Sfennerstruct nd_opt_homeagent_info {	/* Home Agent info */
33698524Sfenner	u_int8_t	nd_opt_hai_type;
33798524Sfenner	u_int8_t	nd_opt_hai_len;
33898524Sfenner	u_int16_t	nd_opt_hai_reserved;
33998524Sfenner	int16_t		nd_opt_hai_preference;
34098524Sfenner	u_int16_t	nd_opt_hai_lifetime;
34198524Sfenner};
34298524Sfenner
34398524Sfennerstruct nd_opt_route_info {	/* route info */
34498524Sfenner	u_int8_t	nd_opt_rti_type;
34598524Sfenner	u_int8_t	nd_opt_rti_len;
34698524Sfenner	u_int8_t	nd_opt_rti_prefixlen;
34798524Sfenner	u_int8_t	nd_opt_rti_flags;
34898524Sfenner	u_int32_t	nd_opt_rti_lifetime;
34998524Sfenner	/* prefix follows */
35098524Sfenner};
35198524Sfenner
35275115Sfenner/*
35375115Sfenner * icmp6 namelookup
35475115Sfenner */
35575115Sfenner
35675115Sfennerstruct icmp6_namelookup {
35775115Sfenner	struct icmp6_hdr 	icmp6_nl_hdr;
35875115Sfenner	u_int8_t	icmp6_nl_nonce[8];
35975115Sfenner	int32_t		icmp6_nl_ttl;
36075115Sfenner#if 0
36175115Sfenner	u_int8_t	icmp6_nl_len;
36275115Sfenner	u_int8_t	icmp6_nl_name[3];
36375115Sfenner#endif
36475115Sfenner	/* could be followed by options */
36575115Sfenner};
36675115Sfenner
36775115Sfenner/*
36875115Sfenner * icmp6 node information
36975115Sfenner */
37075115Sfennerstruct icmp6_nodeinfo {
37175115Sfenner	struct icmp6_hdr icmp6_ni_hdr;
37275115Sfenner	u_int8_t icmp6_ni_nonce[8];
37375115Sfenner	/* could be followed by reply data */
37475115Sfenner};
37575115Sfenner
37675115Sfenner#define ni_type		icmp6_ni_hdr.icmp6_type
37775115Sfenner#define ni_code		icmp6_ni_hdr.icmp6_code
37875115Sfenner#define ni_cksum	icmp6_ni_hdr.icmp6_cksum
37975115Sfenner#define ni_qtype	icmp6_ni_hdr.icmp6_data16[0]
38075115Sfenner#define ni_flags	icmp6_ni_hdr.icmp6_data16[1]
38175115Sfenner
38275115Sfenner#define NI_QTYPE_NOOP		0 /* NOOP  */
38375115Sfenner#define NI_QTYPE_SUPTYPES	1 /* Supported Qtypes */
38475115Sfenner#define NI_QTYPE_FQDN		2 /* FQDN (draft 04) */
38575115Sfenner#define NI_QTYPE_DNSNAME	2 /* DNS Name */
38675115Sfenner#define NI_QTYPE_NODEADDR	3 /* Node Addresses */
38775115Sfenner#define NI_QTYPE_IPV4ADDR	4 /* IPv4 Addresses */
38875115Sfenner
38975115Sfenner/* network endian */
39075115Sfenner#define NI_SUPTYPE_FLAG_COMPRESS	((u_int16_t)htons(0x1))
39175115Sfenner#define NI_FQDN_FLAG_VALIDTTL		((u_int16_t)htons(0x1))
39275115Sfenner
39375115Sfenner/* network endian */
39475115Sfenner#define NI_NODEADDR_FLAG_TRUNCATE	((u_int16_t)htons(0x1))
39575115Sfenner#define NI_NODEADDR_FLAG_ALL		((u_int16_t)htons(0x2))
39675115Sfenner#define NI_NODEADDR_FLAG_COMPAT		((u_int16_t)htons(0x4))
39775115Sfenner#define NI_NODEADDR_FLAG_LINKLOCAL	((u_int16_t)htons(0x8))
39875115Sfenner#define NI_NODEADDR_FLAG_SITELOCAL	((u_int16_t)htons(0x10))
39975115Sfenner#define NI_NODEADDR_FLAG_GLOBAL		((u_int16_t)htons(0x20))
40075115Sfenner#define NI_NODEADDR_FLAG_ANYCAST	((u_int16_t)htons(0x40)) /* just experimental. not in spec */
40175115Sfenner
40275115Sfennerstruct ni_reply_fqdn {
40375115Sfenner	u_int32_t ni_fqdn_ttl;	/* TTL */
40475115Sfenner	u_int8_t ni_fqdn_namelen; /* length in octets of the FQDN */
40575115Sfenner	u_int8_t ni_fqdn_name[3]; /* XXX: alignment */
40675115Sfenner};
40775115Sfenner
40875115Sfenner/*
40975115Sfenner * Router Renumbering. as router-renum-08.txt
41075115Sfenner */
41175115Sfennerstruct icmp6_router_renum {	/* router renumbering header */
41275115Sfenner	struct icmp6_hdr	rr_hdr;
41375115Sfenner	u_int8_t	rr_segnum;
41475115Sfenner	u_int8_t	rr_flags;
41575115Sfenner	u_int16_t	rr_maxdelay;
41675115Sfenner	u_int32_t	rr_reserved;
41775115Sfenner};
41875115Sfenner#define ICMP6_RR_FLAGS_TEST		0x80
41975115Sfenner#define ICMP6_RR_FLAGS_REQRESULT	0x40
42098524Sfenner#define ICMP6_RR_FLAGS_FORCEAPPLY	0x20
42175115Sfenner#define ICMP6_RR_FLAGS_SPECSITE		0x10
42275115Sfenner#define ICMP6_RR_FLAGS_PREVDONE		0x08
42375115Sfenner
42475115Sfenner#define rr_type		rr_hdr.icmp6_type
42575115Sfenner#define rr_code		rr_hdr.icmp6_code
42675115Sfenner#define rr_cksum	rr_hdr.icmp6_cksum
42775115Sfenner#define rr_seqnum 	rr_hdr.icmp6_data32[0]
42875115Sfenner
42975115Sfennerstruct rr_pco_match {		/* match prefix part */
43075115Sfenner	u_int8_t	rpm_code;
43175115Sfenner	u_int8_t	rpm_len;
43275115Sfenner	u_int8_t	rpm_ordinal;
43375115Sfenner	u_int8_t	rpm_matchlen;
43475115Sfenner	u_int8_t	rpm_minlen;
43575115Sfenner	u_int8_t	rpm_maxlen;
43675115Sfenner	u_int16_t	rpm_reserved;
43775115Sfenner	struct	in6_addr	rpm_prefix;
43875115Sfenner};
43975115Sfenner
44075115Sfenner#define RPM_PCO_ADD		1
44175115Sfenner#define RPM_PCO_CHANGE		2
44275115Sfenner#define RPM_PCO_SETGLOBAL	3
44375115Sfenner#define RPM_PCO_MAX		4
44475115Sfenner
44575115Sfennerstruct rr_pco_use {		/* use prefix part */
44675115Sfenner	u_int8_t	rpu_uselen;
44775115Sfenner	u_int8_t	rpu_keeplen;
44875115Sfenner	u_int8_t	rpu_ramask;
44975115Sfenner	u_int8_t	rpu_raflags;
45075115Sfenner	u_int32_t	rpu_vltime;
45175115Sfenner	u_int32_t	rpu_pltime;
45275115Sfenner	u_int32_t	rpu_flags;
45375115Sfenner	struct	in6_addr rpu_prefix;
45475115Sfenner};
45575115Sfenner#define ICMP6_RR_PCOUSE_RAFLAGS_ONLINK	0x80
45675115Sfenner#define ICMP6_RR_PCOUSE_RAFLAGS_AUTO	0x40
45775115Sfenner
45875115Sfenner/* network endian */
45975115Sfenner#define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME     ((u_int32_t)htonl(0x80000000))
46075115Sfenner#define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME     ((u_int32_t)htonl(0x40000000))
46175115Sfenner
46275115Sfennerstruct rr_result {		/* router renumbering result message */
46375115Sfenner	u_int16_t	rrr_flags;
46475115Sfenner	u_int8_t	rrr_ordinal;
46575115Sfenner	u_int8_t	rrr_matchedlen;
46675115Sfenner	u_int32_t	rrr_ifid;
46775115Sfenner	struct	in6_addr rrr_prefix;
46875115Sfenner};
46975115Sfenner/* network endian */
47075115Sfenner#define ICMP6_RR_RESULT_FLAGS_OOB		((u_int16_t)htons(0x0002))
47175115Sfenner#define ICMP6_RR_RESULT_FLAGS_FORBIDDEN		((u_int16_t)htons(0x0001))
47275115Sfenner
47375115Sfenner#endif /* not _NETINET_ICMP6_H_ */
474