⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 icmp6.h

📁 This directory contains source code for tcpdump, a tool for network monitoring and data acquisition
💻 H
📖 第 1 页 / 共 2 页
字号:
/* @(#) $Header: /tcpdump/master/tcpdump/icmp6.h,v 1.4 2000/12/17 23:13:32 guy Exp $ (LBL) */
/* $NetBSD: icmp6.h,v 1.13 2000/08/03 16:30:37 itojun Exp $ */
/* $KAME: icmp6.h,v 1.22 2000/08/03 15:25:16 jinmei Exp $ */

/*
 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Neither the name of the project nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

/*
 * Copyright (c) 1982, 1986, 1993
 * The Regents of the University of California.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 * This product includes software developed by the University of
 * California, Berkeley and its contributors.
 * 4. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * @(#)ip_icmp.h 8.1 (Berkeley) 6/10/93
 */

#ifndef _NETINET_ICMP6_H_
#define _NETINET_ICMP6_H_

struct icmp6_hdr
{
  u_int8_t  icmp6_type;           /* type field */
  u_int8_t  icmp6_code;           /* code field */
  u_int16_t icmp6_cksum;          /* checksum field */
  union
  {
    u_int32_t icmp6_un_data32[1]; /* type-specific field */
    u_int16_t icmp6_un_data16[2]; /* type-specific field */
    u_int8_t  icmp6_un_data8[4];  /* type-specific field */
  }
  icmp6_dataun;
};

#define icmp6_data32	icmp6_dataun.icmp6_un_data32
#define icmp6_data16	icmp6_dataun.icmp6_un_data16
#define icmp6_data8	icmp6_dataun.icmp6_un_data8
#define icmp6_pptr	icmp6_data32[0] /* parameter prob */
#define icmp6_mtu	icmp6_data32[0] /* packet too big */
#define icmp6_id	icmp6_data16[0] /* echo request/reply */
#define icmp6_seq	icmp6_data16[1] /* echo request/reply */
#define icmp6_maxdelay	icmp6_data16[0] /* mcast group membership */

#define ICMP6_DST_UNREACH		1    /* dest unreachable, codes: */
#define ICMP6_PACKET_TOO_BIG            2    /* packet too big */
#define ICMP6_TIME_EXCEEDED             3    /* time exceeded, code: */
#define ICMP6_PARAM_PROB                4    /* ip6 header bad */

#define ICMP6_ECHO_REQUEST              128  /* echo service */
#define ICMP6_ECHO_REPLY                129  /* echo reply */
#define ICMP6_MEMBERSHIP_QUERY          130  /* group membership query */
#define MLD6_LISTENER_QUERY             130  /* multicast listener query */
#define ICMP6_MEMBERSHIP_REPORT         131  /* group membership report */
#define MLD6_LISTENER_REPORT            131  /* multicast listener report */
#define ICMP6_MEMBERSHIP_REDUCTION      132  /* group membership termination */
#define MLD6_LISTENER_DONE              132  /* multicast listener done */

#define ND_ROUTER_SOLICIT		133  /* router solicitation */
#define ND_ROUTER_ADVERT                134  /* router advertisment */
#define ND_NEIGHBOR_SOLICIT             135  /* neighbor solicitation */
#define ND_NEIGHBOR_ADVERT              136  /* neighbor advertisment */
#define ND_REDIRECT                     137  /* redirect */

#define ICMP6_ROUTER_RENUMBERING        138  /* router renumbering */

#define ICMP6_WRUREQUEST                139  /* who are you request */
#define ICMP6_WRUREPLY                  140  /* who are you reply */
#define ICMP6_FQDN_QUERY                139  /* FQDN query */
#define ICMP6_FQDN_REPLY                140  /* FQDN reply */
#define ICMP6_NI_QUERY                  139  /* node information request */
#define ICMP6_NI_REPLY                  140  /* node information reply */

/* The definitions below are experimental. TBA */
#define MLD6_MTRACE_RESP                141  /* mtrace response(to sender) */
#define MLD6_MTRACE                     142  /* mtrace messages */

#define ICMP6_MAXTYPE			142

#define ICMP6_DST_UNREACH_NOROUTE       0    /* no route to destination */
#define ICMP6_DST_UNREACH_ADMIN         1    /* administratively prohibited */
#define ICMP6_DST_UNREACH_NOTNEIGHBOR   2    /* not a neighbor(obsolete) */
#define ICMP6_DST_UNREACH_BEYONDSCOPE   2    /* beyond scope of source address */
#define ICMP6_DST_UNREACH_ADDR          3    /* address unreachable */
#define ICMP6_DST_UNREACH_NOPORT        4    /* port unreachable */

#define ICMP6_TIME_EXCEED_TRANSIT       0    /* ttl==0 in transit */
#define ICMP6_TIME_EXCEED_REASSEMBLY    1    /* ttl==0 in reass */

#define ICMP6_PARAMPROB_HEADER          0    /* erroneous header field */
#define ICMP6_PARAMPROB_NEXTHEADER      1    /* unrecognized next header */
#define ICMP6_PARAMPROB_OPTION          2    /* unrecognized option */

#define ICMP6_INFOMSG_MASK		0x80 /* all informational messages */

#define ICMP6_NI_SUBJ_IPV6	0    /* Query Subject is an IPv6 address */
#define ICMP6_NI_SUBJ_FQDN	1    /* Query Subject is a Domain name */
#define ICMP6_NI_SUBJ_IPV4	2    /* Query Subject is an IPv4 address */

#define ICMP6_NI_SUCCESS        0    /* node information successful reply */
#define ICMP6_NI_REFUSED        1    /* node information request is refused */
#define ICMP6_NI_UNKNOWN        2    /* unknown Qtype */

#define ICMP6_ROUTER_RENUMBERING_COMMAND      0   /* rr command */
#define ICMP6_ROUTER_RENUMBERING_RESULT       1   /* rr result */
#define ICMP6_ROUTER_RENUMBERING_SEQNUM_RESET 255 /* rr seq num reset */

/* Used in kernel only */
#define ND_REDIRECT_ONLINK	0    /* redirect to an on-link node */
#define ND_REDIRECT_ROUTER	1    /* redirect to a better router */

/*
 * Multicast Listener Discovery
 */
struct mld6_hdr
{
  struct icmp6_hdr mld6_hdr;
  struct in6_addr  mld6_addr;    /* multicast address */
};

#define mld6_type	mld6_hdr.icmp6_type
#define mld6_code	mld6_hdr.icmp6_code
#define mld6_cksum	mld6_hdr.icmp6_cksum
#define mld6_maxdelay	mld6_hdr.icmp6_data16[0]
#define mld6_reserved	mld6_hdr.icmp6_data16[1]

/*
 * Neighbor Discovery
 */

struct nd_router_solicit
{                               /* router solicitation */
  struct icmp6_hdr nd_rs_hdr;
  /* could be followed by options */
};

#define nd_rs_type	nd_rs_hdr.icmp6_type
#define nd_rs_code	nd_rs_hdr.icmp6_code
#define nd_rs_cksum	nd_rs_hdr.icmp6_cksum
#define nd_rs_reserved	nd_rs_hdr.icmp6_data32[0]

struct nd_router_advert
{                               /* router advertisement */
  struct icmp6_hdr nd_ra_hdr;
  u_int32_t nd_ra_reachable;    /* reachable time */
  u_int32_t nd_ra_retransmit;   /* retransmit timer */
  /* could be followed by options */
};

#define nd_ra_type		nd_ra_hdr.icmp6_type
#define nd_ra_code		nd_ra_hdr.icmp6_code
#define nd_ra_cksum		nd_ra_hdr.icmp6_cksum
#define nd_ra_curhoplimit	nd_ra_hdr.icmp6_data8[0]
#define nd_ra_flags_reserved	nd_ra_hdr.icmp6_data8[1]
#define ND_RA_FLAG_MANAGED	0x80
#define ND_RA_FLAG_OTHER	0x40
#define nd_ra_router_lifetime	nd_ra_hdr.icmp6_data16[1]

struct nd_neighbor_solicit
{                               /* neighbor solicitation */
  struct icmp6_hdr nd_ns_hdr;
  struct in6_addr nd_ns_target; /*target address */
  /* could be followed by options */
};

#define nd_ns_type		nd_ns_hdr.icmp6_type
#define nd_ns_code		nd_ns_hdr.icmp6_code
#define nd_ns_cksum		nd_ns_hdr.icmp6_cksum
#define nd_ns_reserved		nd_ns_hdr.icmp6_data32[0]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -