111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* $NetBSD: icmp6.h,v 1.40 2009/10/31 22:32:17 christos Exp $ */ 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* $KAME: icmp6.h,v 1.84 2003/04/23 10:26:51 itojun Exp $ */ 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * All rights reserved. 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Redistribution and use in source and binary forms, with or without 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * modification, are permitted provided that the following conditions 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * are met: 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1. Redistributions of source code must retain the above copyright 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * notice, this list of conditions and the following disclaimer. 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 2. Redistributions in binary form must reproduce the above copyright 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * notice, this list of conditions and the following disclaimer in the 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * documentation and/or other materials provided with the distribution. 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 3. Neither the name of the project nor the names of its contributors 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * may be used to endorse or promote products derived from this software 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * without specific prior written permission. 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * SUCH DAMAGE. 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1982, 1986, 1993 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * The Regents of the University of California. All rights reserved. 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Redistribution and use in source and binary forms, with or without 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * modification, are permitted provided that the following conditions 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * are met: 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1. Redistributions of source code must retain the above copyright 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * notice, this list of conditions and the following disclaimer. 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 2. Redistributions in binary form must reproduce the above copyright 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * notice, this list of conditions and the following disclaimer in the 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * documentation and/or other materials provided with the distribution. 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 3. Neither the name of the University nor the names of its contributors 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * may be used to endorse or promote products derived from this software 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * without specific prior written permission. 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * SUCH DAMAGE. 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * @(#)ip_icmp.h 8.1 (Berkeley) 6/10/93 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _NETINET_ICMP6_H_ 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _NETINET_ICMP6_H_ 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6_PLD_MAXLEN 1232 /* IPV6_MMTU - sizeof(struct ip6_hdr) 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert - sizeof(struct icmp6_hdr) */ 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct icmp6_hdr { 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t icmp6_type; /* type field */ 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t icmp6_code; /* code field */ 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int16_t icmp6_cksum; /* checksum field */ 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert union { 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t icmp6_un_data32[1]; /* type-specific field */ 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int16_t icmp6_un_data16[2]; /* type-specific field */ 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t icmp6_un_data8[4]; /* type-specific field */ 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } icmp6_dataun; 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} __packed; 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define icmp6_data32 icmp6_dataun.icmp6_un_data32 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define icmp6_data16 icmp6_dataun.icmp6_un_data16 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define icmp6_data8 icmp6_dataun.icmp6_un_data8 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define icmp6_pptr icmp6_data32[0] /* parameter prob */ 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define icmp6_mtu icmp6_data32[0] /* packet too big */ 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define icmp6_id icmp6_data16[0] /* echo request/reply */ 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define icmp6_seq icmp6_data16[1] /* echo request/reply */ 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define icmp6_maxdelay icmp6_data16[0] /* mcast group membership */ 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_DST_UNREACH 1 /* dest unreachable, codes: */ 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_PACKET_TOO_BIG 2 /* packet too big */ 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_TIME_EXCEEDED 3 /* time exceeded, code: */ 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_PARAM_PROB 4 /* ip6 header bad */ 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_ECHO_REQUEST 128 /* echo service */ 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_ECHO_REPLY 129 /* echo reply */ 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MLD_LISTENER_QUERY 130 /* multicast listener query */ 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MLD_LISTENER_REPORT 131 /* multicast listener report */ 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MLD_LISTENER_DONE 132 /* multicast listener done */ 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* RFC2292 decls */ 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_MEMBERSHIP_QUERY 130 /* group membership query */ 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_MEMBERSHIP_REPORT 131 /* group membership report */ 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_MEMBERSHIP_REDUCTION 132 /* group membership termination */ 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _KERNEL 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* the followings are for backward compatibility to old KAME apps. */ 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MLD6_LISTENER_QUERY MLD_LISTENER_QUERY 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MLD6_LISTENER_REPORT MLD_LISTENER_REPORT 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MLD6_LISTENER_DONE MLD_LISTENER_DONE 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_ROUTER_SOLICIT 133 /* router solicitation */ 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_ROUTER_ADVERT 134 /* router advertisement */ 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_NEIGHBOR_SOLICIT 135 /* neighbor solicitation */ 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_NEIGHBOR_ADVERT 136 /* neighbor advertisement */ 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_REDIRECT 137 /* redirect */ 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_ROUTER_RENUMBERING 138 /* router renumbering */ 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_WRUREQUEST 139 /* who are you request */ 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_WRUREPLY 140 /* who are you reply */ 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_FQDN_QUERY 139 /* FQDN query */ 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_FQDN_REPLY 140 /* FQDN reply */ 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_NI_QUERY 139 /* node information request */ 12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_NI_REPLY 140 /* node information reply */ 12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* The definitions below are experimental. TBA */ 13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MLD_MTRACE_RESP 200 /* mtrace response(to sender) */ 13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MLD_MTRACE 201 /* mtrace messages */ 13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _KERNEL 13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* the followings are for backward compatibility to old KAME apps. */ 13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MLD6_MTRACE_RESP MLD_MTRACE_RESP 13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MLD6_MTRACE MLD_MTRACE 13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_MAXTYPE 201 14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_DST_UNREACH_NOROUTE 0 /* no route to destination */ 14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_DST_UNREACH_ADMIN 1 /* administratively prohibited */ 14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_DST_UNREACH_NOTNEIGHBOR 2 /* not a neighbor(obsolete) */ 14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_DST_UNREACH_BEYONDSCOPE 2 /* beyond scope of source address */ 14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_DST_UNREACH_ADDR 3 /* address unreachable */ 14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_DST_UNREACH_NOPORT 4 /* port unreachable */ 14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_TIME_EXCEED_TRANSIT 0 /* ttl==0 in transit */ 14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_TIME_EXCEED_REASSEMBLY 1 /* ttl==0 in reass */ 15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_PARAMPROB_HEADER 0 /* erroneous header field */ 15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_PARAMPROB_NEXTHEADER 1 /* unrecognized next header */ 15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_PARAMPROB_OPTION 2 /* unrecognized option */ 15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_INFOMSG_MASK 0x80 /* all informational messages */ 15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_NI_SUBJ_IPV6 0 /* Query Subject is an IPv6 address */ 15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_NI_SUBJ_FQDN 1 /* Query Subject is a Domain name */ 15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_NI_SUBJ_IPV4 2 /* Query Subject is an IPv4 address */ 16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_NI_SUCCESS 0 /* node information successful reply */ 16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_NI_REFUSED 1 /* node information request is refused */ 16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_NI_UNKNOWN 2 /* unknown Qtype */ 16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_ROUTER_RENUMBERING_COMMAND 0 /* rr command */ 16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_ROUTER_RENUMBERING_RESULT 1 /* rr result */ 16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_ROUTER_RENUMBERING_SEQNUM_RESET 255 /* rr seq num reset */ 16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Used in kernel only */ 17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_REDIRECT_ONLINK 0 /* redirect to an on-link node */ 17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_REDIRECT_ROUTER 1 /* redirect to a better router */ 17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Multicast Listener Discovery 17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct mld_hdr { 17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct icmp6_hdr mld_icmp6_hdr; 17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct in6_addr mld_addr; /* multicast address */ 17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} __packed; 18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* definitions to provide backward compatibility to old KAME applications */ 18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _KERNEL 18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define mld6_hdr mld_hdr 18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define mld6_type mld_type 18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define mld6_code mld_code 18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define mld6_cksum mld_cksum 18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define mld6_maxdelay mld_maxdelay 18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define mld6_reserved mld_reserved 18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define mld6_addr mld_addr 19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* shortcut macro definitions */ 19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define mld_type mld_icmp6_hdr.icmp6_type 19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define mld_code mld_icmp6_hdr.icmp6_code 19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define mld_cksum mld_icmp6_hdr.icmp6_cksum 19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define mld_maxdelay mld_icmp6_hdr.icmp6_data16[0] 19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define mld_reserved mld_icmp6_hdr.icmp6_data16[1] 19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MLD_MINLEN 24 20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Neighbor Discovery 20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 20411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct nd_router_solicit { /* router solicitation */ 20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct icmp6_hdr nd_rs_hdr; 20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* could be followed by options */ 20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} __packed; 20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_rs_type nd_rs_hdr.icmp6_type 21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_rs_code nd_rs_hdr.icmp6_code 21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_rs_cksum nd_rs_hdr.icmp6_cksum 21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_rs_reserved nd_rs_hdr.icmp6_data32[0] 21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct nd_router_advert { /* router advertisement */ 21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct icmp6_hdr nd_ra_hdr; 21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t nd_ra_reachable; /* reachable time */ 21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t nd_ra_retransmit; /* retransmit timer */ 21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* could be followed by options */ 22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} __packed; 22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_ra_type nd_ra_hdr.icmp6_type 22311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_ra_code nd_ra_hdr.icmp6_code 22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_ra_cksum nd_ra_hdr.icmp6_cksum 22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_ra_curhoplimit nd_ra_hdr.icmp6_data8[0] 22611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_ra_flags_reserved nd_ra_hdr.icmp6_data8[1] 22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_RA_FLAG_MANAGED 0x80 22811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_RA_FLAG_OTHER 0x40 22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_RA_FLAG_HOME_AGENT 0x20 23011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 23211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Router preference values based on RFC4199. 23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_RA_FLAG_RTPREF_MASK 0x18 /* 00011000 */ 23511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_RA_FLAG_RTPREF_HIGH 0x08 /* 00001000 */ 23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_RA_FLAG_RTPREF_MEDIUM 0x00 /* 00000000 */ 23811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_RA_FLAG_RTPREF_LOW 0x18 /* 00011000 */ 23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_RA_FLAG_RTPREF_RSV 0x10 /* 00010000 */ 24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_ra_router_lifetime nd_ra_hdr.icmp6_data16[1] 24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 24311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct nd_neighbor_solicit { /* neighbor solicitation */ 24411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct icmp6_hdr nd_ns_hdr; 24511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct in6_addr nd_ns_target; /*target address */ 24611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* could be followed by options */ 24711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} __packed; 24811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 24911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_ns_type nd_ns_hdr.icmp6_type 25011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_ns_code nd_ns_hdr.icmp6_code 25111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_ns_cksum nd_ns_hdr.icmp6_cksum 25211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_ns_reserved nd_ns_hdr.icmp6_data32[0] 25311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 25411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct nd_neighbor_advert { /* neighbor advertisement */ 25511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct icmp6_hdr nd_na_hdr; 25611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct in6_addr nd_na_target; /* target address */ 25711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* could be followed by options */ 25811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} __packed; 25911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 26011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_na_type nd_na_hdr.icmp6_type 26111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_na_code nd_na_hdr.icmp6_code 26211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_na_cksum nd_na_hdr.icmp6_cksum 26311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_na_flags_reserved nd_na_hdr.icmp6_data32[0] 26411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if BYTE_ORDER == BIG_ENDIAN 26511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_NA_FLAG_ROUTER 0x80000000 26611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_NA_FLAG_SOLICITED 0x40000000 26711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_NA_FLAG_OVERRIDE 0x20000000 26811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 26911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if BYTE_ORDER == LITTLE_ENDIAN 27011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_NA_FLAG_ROUTER 0x80 27111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_NA_FLAG_SOLICITED 0x40 27211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_NA_FLAG_OVERRIDE 0x20 27311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 27411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 27511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 27611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct nd_redirect { /* redirect */ 27711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct icmp6_hdr nd_rd_hdr; 27811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct in6_addr nd_rd_target; /* target address */ 27911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct in6_addr nd_rd_dst; /* destination address */ 28011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* could be followed by options */ 28111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} __packed; 28211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 28311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_rd_type nd_rd_hdr.icmp6_type 28411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_rd_code nd_rd_hdr.icmp6_code 28511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_rd_cksum nd_rd_hdr.icmp6_cksum 28611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define nd_rd_reserved nd_rd_hdr.icmp6_data32[0] 28711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 28811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct nd_opt_hdr { /* Neighbor discovery option header */ 28911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t nd_opt_type; 29011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t nd_opt_len; 29111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* followed by option specific data*/ 29211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} __packed; 29311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 29411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_OPT_SOURCE_LINKADDR 1 29511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_OPT_TARGET_LINKADDR 2 29611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_OPT_PREFIX_INFORMATION 3 29711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_OPT_REDIRECTED_HEADER 4 29811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_OPT_MTU 5 29911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_OPT_ADVINTERVAL 7 30011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_OPT_HOMEAGENT_INFO 8 30111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_OPT_SOURCE_ADDRLIST 9 30211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_OPT_TARGET_ADDRLIST 10 30311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_OPT_RDNSS 25 30411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* draft-ietf-ipngwg-router-preference, not officially assigned yet */ 30511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_OPT_ROUTE_INFO 200 30611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* draft-ietf-mobileip-hmipv6, not officially assigned yet */ 30711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_OPT_MAP 201 30811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 30911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct nd_opt_route_info { /* route info */ 31011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t nd_opt_rti_type; 31111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t nd_opt_rti_len; 31211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t nd_opt_rti_prefixlen; 31311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t nd_opt_rti_flags; 31411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t nd_opt_rti_lifetime; 31511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* prefix follows */ 31611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 31711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 31811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct nd_opt_prefix_info { /* prefix information */ 31911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t nd_opt_pi_type; 32011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t nd_opt_pi_len; 32111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t nd_opt_pi_prefix_len; 32211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t nd_opt_pi_flags_reserved; 32311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t nd_opt_pi_valid_time; 32411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t nd_opt_pi_preferred_time; 32511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t nd_opt_pi_reserved2; 32611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct in6_addr nd_opt_pi_prefix; 32711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} __packed; 32811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_OPT_PI_FLAG_ONLINK 0x80 33011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ND_OPT_PI_FLAG_AUTO 0x40 33111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 33211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct nd_opt_rd_hdr { /* redirected header */ 33311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t nd_opt_rh_type; 33411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t nd_opt_rh_len; 33511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int16_t nd_opt_rh_reserved1; 33611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t nd_opt_rh_reserved2; 33711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* followed by IP header and data */ 33811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} __packed; 33911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 34011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct nd_opt_mtu { /* MTU option */ 34111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t nd_opt_mtu_type; 34211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t nd_opt_mtu_len; 34311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int16_t nd_opt_mtu_reserved; 34411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t nd_opt_mtu_mtu; 34511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} __packed; 34611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 34711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct nd_opt_rdnss { /* RDNSS option RFC 5006 */ 34811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t nd_opt_rdnss_type; 34911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t nd_opt_rdnss_len; 35011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int16_t nd_opt_rdnss_reserved; 35111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t nd_opt_rdnss_lifetime; 35211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* followed by list of IP prefixes */ 35311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} __packed; 35411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 35511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 35611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * icmp6 namelookup 35711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 35811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 35911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct icmp6_namelookup { 36011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct icmp6_hdr icmp6_nl_hdr; 36111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t icmp6_nl_nonce[8]; 36211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int32_t icmp6_nl_ttl; 36311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if 0 36411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t icmp6_nl_len; 36511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t icmp6_nl_name[3]; 36611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 36711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* could be followed by options */ 36811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} __packed; 36911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 37011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 37111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * icmp6 node information 37211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 37311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct icmp6_nodeinfo { 37411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct icmp6_hdr icmp6_ni_hdr; 37511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t icmp6_ni_nonce[8]; 37611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* could be followed by reply data */ 37711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} __packed; 37811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 37911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ni_type icmp6_ni_hdr.icmp6_type 38011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ni_code icmp6_ni_hdr.icmp6_code 38111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ni_cksum icmp6_ni_hdr.icmp6_cksum 38211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ni_qtype icmp6_ni_hdr.icmp6_data16[0] 38311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ni_flags icmp6_ni_hdr.icmp6_data16[1] 38411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 38511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_QTYPE_NOOP 0 /* NOOP */ 38611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_QTYPE_SUPTYPES 1 /* Supported Qtypes */ 38711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_QTYPE_FQDN 2 /* FQDN (draft 04) */ 38811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_QTYPE_DNSNAME 2 /* DNS Name */ 38911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_QTYPE_NODEADDR 3 /* Node Addresses */ 39011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_QTYPE_IPV4ADDR 4 /* IPv4 Addresses */ 39111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 39211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if BYTE_ORDER == BIG_ENDIAN 39311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_SUPTYPE_FLAG_COMPRESS 0x1 39411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_FQDN_FLAG_VALIDTTL 0x1 39511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#elif BYTE_ORDER == LITTLE_ENDIAN 39611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_SUPTYPE_FLAG_COMPRESS 0x0100 39711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_FQDN_FLAG_VALIDTTL 0x0100 39811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 39911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 40011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef NAME_LOOKUPS_04 40111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if BYTE_ORDER == BIG_ENDIAN 40211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_LINKLOCAL 0x1 40311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_SITELOCAL 0x2 40411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_GLOBAL 0x4 40511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_ALL 0x8 40611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_TRUNCATE 0x10 40711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_ANYCAST 0x20 /* just experimental. not in spec */ 40811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#elif BYTE_ORDER == LITTLE_ENDIAN 40911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_LINKLOCAL 0x0100 41011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_SITELOCAL 0x0200 41111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_GLOBAL 0x0400 41211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_ALL 0x0800 41311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_TRUNCATE 0x1000 41411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_ANYCAST 0x2000 /* just experimental. not in spec */ 41511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 41611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else /* draft-ietf-ipngwg-icmp-name-lookups-05 (and later?) */ 41711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if BYTE_ORDER == BIG_ENDIAN 41811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_TRUNCATE 0x1 41911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_ALL 0x2 42011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_COMPAT 0x4 42111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_LINKLOCAL 0x8 42211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_SITELOCAL 0x10 42311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_GLOBAL 0x20 42411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_ANYCAST 0x40 /* just experimental. not in spec */ 42511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#elif BYTE_ORDER == LITTLE_ENDIAN 42611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_TRUNCATE 0x0100 42711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_ALL 0x0200 42811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_COMPAT 0x0400 42911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_LINKLOCAL 0x0800 43011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_SITELOCAL 0x1000 43111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_GLOBAL 0x2000 43211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NI_NODEADDR_FLAG_ANYCAST 0x4000 /* just experimental. not in spec */ 43311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 43411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 43511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 43611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct ni_reply_fqdn { 43711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t ni_fqdn_ttl; /* TTL */ 43811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t ni_fqdn_namelen; /* length in octets of the FQDN */ 43911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t ni_fqdn_name[3]; /* XXX: alignment */ 44011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} __packed; 44111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 44211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 44311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Router Renumbering. as router-renum-08.txt 44411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 44511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct icmp6_router_renum { /* router renumbering header */ 44611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct icmp6_hdr rr_hdr; 44711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t rr_segnum; 44811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t rr_flags; 44911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int16_t rr_maxdelay; 45011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t rr_reserved; 45111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} __packed; 45211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 45311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_RR_FLAGS_TEST 0x80 45411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_RR_FLAGS_REQRESULT 0x40 45511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_RR_FLAGS_FORCEAPPLY 0x20 45611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_RR_FLAGS_SPECSITE 0x10 45711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_RR_FLAGS_PREVDONE 0x08 45811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 45911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define rr_type rr_hdr.icmp6_type 46011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define rr_code rr_hdr.icmp6_code 46111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define rr_cksum rr_hdr.icmp6_cksum 46211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define rr_seqnum rr_hdr.icmp6_data32[0] 46311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 46411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct rr_pco_match { /* match prefix part */ 46511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t rpm_code; 46611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t rpm_len; 46711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t rpm_ordinal; 46811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t rpm_matchlen; 46911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t rpm_minlen; 47011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t rpm_maxlen; 47111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int16_t rpm_reserved; 47211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct in6_addr rpm_prefix; 47311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} __packed; 47411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 47511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define RPM_PCO_ADD 1 47611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define RPM_PCO_CHANGE 2 47711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define RPM_PCO_SETGLOBAL 3 47811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define RPM_PCO_MAX 4 47911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 48011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct rr_pco_use { /* use prefix part */ 48111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t rpu_uselen; 48211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t rpu_keeplen; 48311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t rpu_ramask; 48411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t rpu_raflags; 48511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t rpu_vltime; 48611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t rpu_pltime; 48711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t rpu_flags; 48811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct in6_addr rpu_prefix; 48911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} __packed; 49011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_RR_PCOUSE_RAFLAGS_ONLINK 0x80 49111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_RR_PCOUSE_RAFLAGS_AUTO 0x40 49211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 49311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if BYTE_ORDER == BIG_ENDIAN 49411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME 0x80000000 49511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME 0x40000000 49611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#elif BYTE_ORDER == LITTLE_ENDIAN 49711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME 0x80 49811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME 0x40 49911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 50011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 50111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct rr_result { /* router renumbering result message */ 50211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int16_t rrr_flags; 50311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t rrr_ordinal; 50411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int8_t rrr_matchedlen; 50511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t rrr_ifid; 50611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct in6_addr rrr_prefix; 50711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} __packed; 50811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if BYTE_ORDER == BIG_ENDIAN 50911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_RR_RESULT_FLAGS_OOB 0x0002 51011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_RR_RESULT_FLAGS_FORBIDDEN 0x0001 51111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#elif BYTE_ORDER == LITTLE_ENDIAN 51211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_RR_RESULT_FLAGS_OOB 0x0200 51311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_RR_RESULT_FLAGS_FORBIDDEN 0x0100 51411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 51511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 51611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 51711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * icmp6 filter structures. 51811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 51911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 52011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct icmp6_filter { 52111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u_int32_t icmp6_filt[8]; 52211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 52311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 52411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_FILTER_SETPASSALL(filterp) \ 52511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert (void)memset(filterp, 0xff, sizeof(struct icmp6_filter)) 52611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_FILTER_SETBLOCKALL(filterp) \ 52711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert (void)memset(filterp, 0x00, sizeof(struct icmp6_filter)) 52811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_FILTER_SETPASS(type, filterp) \ 52911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert (((filterp)->icmp6_filt[(type) >> 5]) |= (1 << ((type) & 31))) 53011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_FILTER_SETBLOCK(type, filterp) \ 53111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert (((filterp)->icmp6_filt[(type) >> 5]) &= ~(1 << ((type) & 31))) 53211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_FILTER_WILLPASS(type, filterp) \ 53311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) != 0) 53411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_FILTER_WILLBLOCK(type, filterp) \ 53511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) == 0) 53611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 53711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 53811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Variables related to this implementation 53911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * of the internet control message protocol version 6. 54011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 54111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 54211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 54311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * IPv6 ICMP statistics. 54411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Each counter is an unsigned 64-bit value. 54511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 54611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_STAT_ERROR 0 /* # of calls to icmp6_error */ 54711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_STAT_CANTERROR 1 /* no error (old was icmp) */ 54811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_STAT_TOOFREQ 2 /* no error (rate limitation) */ 54911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_STAT_OUTHIST 3 /* # of output messages */ 55011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* space for 256 counters */ 55111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_STAT_BADCODE 259 /* icmp6_code out of range */ 55211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_STAT_TOOSHORT 260 /* packet < sizeof(struct icmp6_hdr) */ 55311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_STAT_CHECKSUM 261 /* bad checksum */ 55411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_STAT_BADLEN 262 /* calculated bound mismatch */ 55511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* 55611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * number of responses; this member is inherited from the netinet code, 55711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * but for netinet6 code, it is already available in outhist[]. 55811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 55911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_STAT_REFLECT 263 56011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_STAT_INHIST 264 /* # of input messages */ 56111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* space for 256 counters */ 56211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_STAT_ND_TOOMANYOPT 520 /* too many ND options */ 56311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_STAT_OUTERRHIST 521 56411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* space for 13 counters */ 56511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_STAT_PMTUCHG 534 /* path MTU changes */ 56611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_STAT_ND_BADOPT 535 /* bad ND options */ 56711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_STAT_BADNS 536 /* bad neighbor solicititation */ 56811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_STAT_BADNA 537 /* bad neighbor advertisement */ 56911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_STAT_BADRS 538 /* bad router solicitiation */ 57011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_STAT_BADRA 539 /* bad router advertisement */ 57111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_STAT_BADREDIRECT 540 /* bad redirect message */ 57211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 57311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_NSTATS 541 57411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 57511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_ERRSTAT_DST_UNREACH_NOROUTE 0 57611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_ERRSTAT_DST_UNREACH_ADMIN 1 57711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_ERRSTAT_DST_UNREACH_BEYONDSCOPE 2 57811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_ERRSTAT_DST_UNREACH_ADDR 3 57911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_ERRSTAT_DST_UNREACH_NOPORT 4 58011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_ERRSTAT_PACKET_TOO_BIG 5 58111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_ERRSTAT_TIME_EXCEED_TRANSIT 6 58211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_ERRSTAT_TIME_EXCEED_REASSEMBLY 7 58311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_ERRSTAT_PARAMPROB_HEADER 8 58411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_ERRSTAT_PARAMPROB_NEXTHEADER 9 58511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_ERRSTAT_PARAMPROB_OPTION 10 58611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_ERRSTAT_REDIRECT 11 58711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMP6_ERRSTAT_UNKNOWN 12 58811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 58911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 59011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Names for ICMP sysctl objects 59111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 59211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_STATS 1 59311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_REDIRACCEPT 2 /* accept/process redirects */ 59411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_REDIRTIMEOUT 3 /* redirect cache time */ 59511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if 0 /*obsoleted*/ 59611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_ERRRATELIMIT 5 /* ICMPv6 error rate limitation */ 59711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 59811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_ND6_PRUNE 6 59911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_ND6_DELAY 8 60011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_ND6_UMAXTRIES 9 60111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_ND6_MMAXTRIES 10 60211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_ND6_USELOOPBACK 11 60311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/*#define ICMPV6CTL_ND6_PROXYALL 12 obsoleted, do not reuse here */ 60411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_NODEINFO 13 60511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_ERRPPSLIMIT 14 /* ICMPv6 error pps limitation */ 60611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_ND6_MAXNUDHINT 15 60711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_MTUDISC_HIWAT 16 60811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_MTUDISC_LOWAT 17 60911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_ND6_DEBUG 18 61011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_ND6_DRLIST 19 61111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_ND6_PRLIST 20 61211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_ND6_MAXQLEN 24 61311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_MAXID 25 61411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 61511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ICMPV6CTL_NAMES { \ 61611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 0, 0 }, \ 61711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 0, 0 }, \ 61811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { "rediraccept", CTLTYPE_INT }, \ 61911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { "redirtimeout", CTLTYPE_INT }, \ 62011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 0, 0 }, \ 62111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 0, 0 }, \ 62211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { "nd6_prune", CTLTYPE_INT }, \ 62311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 0, 0 }, \ 62411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { "nd6_delay", CTLTYPE_INT }, \ 62511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { "nd6_umaxtries", CTLTYPE_INT }, \ 62611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { "nd6_mmaxtries", CTLTYPE_INT }, \ 62711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { "nd6_useloopback", CTLTYPE_INT }, \ 62811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 0, 0 }, \ 62911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { "nodeinfo", CTLTYPE_INT }, \ 63011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { "errppslimit", CTLTYPE_INT }, \ 63111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { "nd6_maxnudhint", CTLTYPE_INT }, \ 63211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { "mtudisc_hiwat", CTLTYPE_INT }, \ 63311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { "mtudisc_lowat", CTLTYPE_INT }, \ 63411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { "nd6_debug", CTLTYPE_INT }, \ 63511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 0, 0 }, \ 63611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 0, 0 }, \ 63711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 0, 0 }, \ 63811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 0, 0 }, \ 63911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 0, 0 }, \ 64011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { "nd6_maxqueuelen", CTLTYPE_INT }, \ 64111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 64211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 64311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define RTF_PROBEMTU RTF_PROTO1 64411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 64511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef _KERNEL 64611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct rtentry; 64711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct rttimer; 64811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct in6_multi; 64911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 65011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid icmp6_init(void); 65111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid icmp6_paramerror(struct mbuf *, int); 65211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid icmp6_error(struct mbuf *, int, int, int); 65311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid icmp6_error2(struct mbuf *, int, int, int, struct ifnet *); 65411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint icmp6_input(struct mbuf **, int *, int); 65511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid icmp6_fasttimo(void); 65611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid icmp6_reflect(struct mbuf *, size_t); 65711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid icmp6_prepare(struct mbuf *); 65811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid icmp6_redirect_input(struct mbuf *, int); 65911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid icmp6_redirect_output(struct mbuf *, struct rtentry *); 66011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint icmp6_sysctl(int *, u_int, void *, size_t *, void *, size_t); 66111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 66211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid icmp6_statinc(u_int); 66311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 66411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct ip6ctlparam; 66511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid icmp6_mtudisc_update(struct ip6ctlparam *, int); 66611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid icmp6_mtudisc_callback_register(void (*)(struct in6_addr *)); 66711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 66811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* XXX: is this the right place for these macros? */ 66911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define icmp6_ifstat_inc(ifp, tag) \ 67011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertdo { \ 67111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (ifp) \ 67211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ((struct in6_ifextra *)((ifp)->if_afdata[AF_INET6]))->icmp6_ifstat->tag++; \ 67311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} while (/*CONSTCOND*/ 0) 67411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 67511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define icmp6_ifoutstat_inc(ifp, type, code) \ 67611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertdo { \ 67711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert icmp6_ifstat_inc(ifp, ifs6_out_msg); \ 67811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert switch(type) { \ 67911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case ICMP6_DST_UNREACH: \ 68011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert icmp6_ifstat_inc(ifp, ifs6_out_dstunreach); \ 68111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (code == ICMP6_DST_UNREACH_ADMIN) \ 68211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert icmp6_ifstat_inc(ifp, ifs6_out_adminprohib); \ 68311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; \ 68411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case ICMP6_PACKET_TOO_BIG: \ 68511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert icmp6_ifstat_inc(ifp, ifs6_out_pkttoobig); \ 68611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; \ 68711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case ICMP6_TIME_EXCEEDED: \ 68811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert icmp6_ifstat_inc(ifp, ifs6_out_timeexceed); \ 68911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; \ 69011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case ICMP6_PARAM_PROB: \ 69111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert icmp6_ifstat_inc(ifp, ifs6_out_paramprob); \ 69211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; \ 69311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case ICMP6_ECHO_REQUEST: \ 69411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert icmp6_ifstat_inc(ifp, ifs6_out_echo); \ 69511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; \ 69611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case ICMP6_ECHO_REPLY: \ 69711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert icmp6_ifstat_inc(ifp, ifs6_out_echoreply); \ 69811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; \ 69911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case MLD_LISTENER_QUERY: \ 70011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert icmp6_ifstat_inc(ifp, ifs6_out_mldquery); \ 70111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; \ 70211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case MLD_LISTENER_REPORT: \ 70311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert icmp6_ifstat_inc(ifp, ifs6_out_mldreport); \ 70411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; \ 70511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case MLD_LISTENER_DONE: \ 70611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert icmp6_ifstat_inc(ifp, ifs6_out_mlddone); \ 70711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; \ 70811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case ND_ROUTER_SOLICIT: \ 70911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert icmp6_ifstat_inc(ifp, ifs6_out_routersolicit); \ 71011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; \ 71111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case ND_ROUTER_ADVERT: \ 71211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert icmp6_ifstat_inc(ifp, ifs6_out_routeradvert); \ 71311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; \ 71411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case ND_NEIGHBOR_SOLICIT: \ 71511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert icmp6_ifstat_inc(ifp, ifs6_out_neighborsolicit); \ 71611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; \ 71711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case ND_NEIGHBOR_ADVERT: \ 71811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert icmp6_ifstat_inc(ifp, ifs6_out_neighboradvert); \ 71911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; \ 72011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert case ND_REDIRECT: \ 72111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert icmp6_ifstat_inc(ifp, ifs6_out_redirect); \ 72211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert break; \ 72311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } \ 72411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} while (/*CONSTCOND*/ 0) 72511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 72611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern int icmp6_rediraccept; /* accept/process redirects */ 72711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern int icmp6_redirtimeout; /* cache time for redirect routes */ 72811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _KERNEL */ 72911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 73011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* !_NETINET_ICMP6_H_ */ 731