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

📄 rfc2292.txt

📁 netcat
💻 TXT
📖 第 1 页 / 共 5 页
字号:
   /* Hop-by-Hop options header */   /* XXX should we pad it to force alignment on an 8-byte boundary? */   struct ip6_hbh {     uint8_t  ip6h_nxt;        /* next header */     uint8_t  ip6h_len;        /* length in units of 8 octets */       /* followed by options */   };   /* Destination options header */   /* XXX should we pad it to force alignment on an 8-byte boundary? */   struct ip6_dest {     uint8_t  ip6d_nxt;        /* next header */     uint8_t  ip6d_len;        /* length in units of 8 octets */       /* followed by options */   };   /* Routing header */   struct ip6_rthdr {Stevens & Thomas             Informational                      [Page 6]RFC 2292             Advanced Sockets API for IPv6         February 1998     uint8_t  ip6r_nxt;        /* next header */     uint8_t  ip6r_len;        /* length in units of 8 octets */     uint8_t  ip6r_type;       /* routing type */     uint8_t  ip6r_segleft;    /* segments left */       /* followed by routing type specific data */   };   /* Type 0 Routing header */   struct ip6_rthdr0 {     uint8_t  ip6r0_nxt;       /* next header */     uint8_t  ip6r0_len;       /* length in units of 8 octets */     uint8_t  ip6r0_type;      /* always zero */     uint8_t  ip6r0_segleft;   /* segments left */     uint8_t  ip6r0_reserved;  /* reserved field */     uint8_t  ip6r0_slmap[3];  /* strict/loose bit map */     struct in6_addr  ip6r0_addr[1];  /* up to 23 addresses */   };   /* Fragment header */   struct ip6_frag {     uint8_t   ip6f_nxt;       /* next header */     uint8_t   ip6f_reserved;  /* reserved field */     uint16_t  ip6f_offlg;     /* offset, reserved, and flag */     uint32_t  ip6f_ident;     /* identification */   };   #if     BYTE_ORDER == BIG_ENDIAN   #define IP6F_OFF_MASK       0xfff8  /* mask out offset from _offlg */   #define IP6F_RESERVED_MASK  0x0006  /* reserved bits in ip6f_offlg */   #define IP6F_MORE_FRAG      0x0001  /* more-fragments flag */   #else   /* BYTE_ORDER == LITTLE_ENDIAN */   #define IP6F_OFF_MASK       0xf8ff  /* mask out offset from _offlg */   #define IP6F_RESERVED_MASK  0x0600  /* reserved bits in ip6f_offlg */   #define IP6F_MORE_FRAG      0x0100  /* more-fragments flag */   #endif   Defined constants for fields larger than 1 byte depend on the byte   ordering that is used.  This API assumes that the fields in the   protocol headers are left in the network byte order, which is big-   endian for the Internet protocols.  If not, then either these   constants or the fields being tested must be converted at run-time,   using something like htons() or htonl().   (Note: We show an implementation that supports both big-endian and   little-endian byte ordering, assuming a hypothetical compile-time #if   test to determine the byte ordering.  The constant that we show,Stevens & Thomas             Informational                      [Page 7]RFC 2292             Advanced Sockets API for IPv6         February 1998   BYTE_ORDER, with values of BIG_ENDIAN and LITTLE_ENDIAN, are for   example purposes only.  If an implementation runs on only one type of   hardware it need only define the set of constants for that hardware's   byte ordering.)2.2.  The icmp6_hdr Structure   The ICMPv6 header is needed by numerous IPv6 applications including   Ping, Traceroute, router discovery daemons, and neighbor discovery   daemons.  The following structure is defined as a result of including   <netinet/icmp6.h>.  Note that this is a new header.   struct icmp6_hdr {     uint8_t     icmp6_type;   /* type field */     uint8_t     icmp6_code;   /* code field */     uint16_t    icmp6_cksum;  /* checksum field */     union {       uint32_t  icmp6_un_data32[1]; /* type-specific field */       uint16_t  icmp6_un_data16[2]; /* type-specific field */       uint8_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 */2.2.1.  ICMPv6 Type and Code Values   In addition to a common structure for the ICMPv6 header, common   definitions are required for the ICMPv6 type and code fields.  The   following constants are also defined as a result of including   <netinet/icmp6.h>.#define ICMP6_DST_UNREACH             1#define ICMP6_PACKET_TOO_BIG          2#define ICMP6_TIME_EXCEEDED           3#define ICMP6_PARAM_PROB              4#define ICMP6_INFOMSG_MASK  0x80    /* all informational messages */#define ICMP6_ECHO_REQUEST          128#define ICMP6_ECHO_REPLY            129Stevens & Thomas             Informational                      [Page 8]RFC 2292             Advanced Sockets API for IPv6         February 1998#define ICMP6_MEMBERSHIP_QUERY      130#define ICMP6_MEMBERSHIP_REPORT     131#define ICMP6_MEMBERSHIP_REDUCTION  132#define ICMP6_DST_UNREACH_NOROUTE     0 /* no route to destination */#define ICMP6_DST_UNREACH_ADMIN       1 /* communication with */                                        /* destination */                                        /* administratively */                                        /* prohibited */#define ICMP6_DST_UNREACH_NOTNEIGHBOR 2 /* not a neighbor */#define ICMP6_DST_UNREACH_ADDR        3 /* address unreachable */#define ICMP6_DST_UNREACH_NOPORT      4 /* bad port */#define ICMP6_TIME_EXCEED_TRANSIT     0 /* Hop Limit == 0 in transit */#define ICMP6_TIME_EXCEED_REASSEMBLY  1 /* Reassembly time out */#define ICMP6_PARAMPROB_HEADER        0 /* erroneous header field */#define ICMP6_PARAMPROB_NEXTHEADER    1 /* unrecognized Next Header */#define ICMP6_PARAMPROB_OPTION        2 /* unrecognized IPv6 option */   The five ICMP message types defined by IPv6 neighbor discovery (133-   137) are defined in the next section.2.2.2.  ICMPv6 Neighbor Discovery Type and Code Values   The following structures and definitions are defined as a result of   including <netinet/icmp6.h>.   #define ND_ROUTER_SOLICIT           133   #define ND_ROUTER_ADVERT            134   #define ND_NEIGHBOR_SOLICIT         135   #define ND_NEIGHBOR_ADVERT          136   #define ND_REDIRECT                 137   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;     uint32_t   nd_ra_reachable;   /* reachable time */     uint32_t   nd_ra_retransmit;  /* retransmit timer */Stevens & Thomas             Informational                      [Page 9]RFC 2292             Advanced Sockets API for IPv6         February 1998       /* 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]   struct nd_neighbor_advert {    /* neighbor advertisement */     struct icmp6_hdr  nd_na_hdr;     struct in6_addr   nd_na_target; /* target address */       /* could be followed by options */   };   #define nd_na_type               nd_na_hdr.icmp6_type   #define nd_na_code               nd_na_hdr.icmp6_code   #define nd_na_cksum              nd_na_hdr.icmp6_cksum   #define nd_na_flags_reserved     nd_na_hdr.icmp6_data32[0]   #if     BYTE_ORDER == BIG_ENDIAN   #define ND_NA_FLAG_ROUTER        0x80000000   #define ND_NA_FLAG_SOLICITED     0x40000000   #define ND_NA_FLAG_OVERRIDE      0x20000000   #else   /* BYTE_ORDER == LITTLE_ENDIAN */   #define ND_NA_FLAG_ROUTER        0x00000080   #define ND_NA_FLAG_SOLICITED     0x00000040   #define ND_NA_FLAG_OVERRIDE      0x00000020   #endif   struct nd_redirect {           /* redirect */     struct icmp6_hdr  nd_rd_hdr;     struct in6_addr   nd_rd_target; /* target address */     struct in6_addr   nd_rd_dst;    /* destination address */       /* could be followed by options */Stevens & Thomas             Informational                     [Page 10]RFC 2292             Advanced Sockets API for IPv6         February 1998   };   #define nd_rd_type               nd_rd_hdr.icmp6_type   #define nd_rd_code               nd_rd_hdr.icmp6_code   #define nd_rd_cksum              nd_rd_hdr.icmp6_cksum   #define nd_rd_reserved           nd_rd_hdr.icmp6_data32[0]   struct nd_opt_hdr {           /* Neighbor discovery option header */     uint8_t  nd_opt_type;     uint8_t  nd_opt_len;        /* in units of 8 octets */       /* followed by option specific data */   };   #define  ND_OPT_SOURCE_LINKADDR       1   #define  ND_OPT_TARGET_LINKADDR       2   #define  ND_OPT_PREFIX_INFORMATION    3   #define  ND_OPT_REDIRECTED_HEADER     4   #define  ND_OPT_MTU                   5   struct nd_opt_prefix_info {    /* prefix information */     uint8_t   nd_opt_pi_type;     uint8_t   nd_opt_pi_len;     uint8_t   nd_opt_pi_prefix_len;     uint8_t   nd_opt_pi_flags_reserved;     uint32_t  nd_opt_pi_valid_time;     uint32_t  nd_opt_pi_preferred_time;     uint32_t  nd_opt_pi_reserved2;     struct in6_addr  nd_opt_pi_prefix;   };   #define ND_OPT_PI_FLAG_ONLINK        0x80   #define ND_OPT_PI_FLAG_AUTO          0x40   struct nd_opt_rd_hdr {         /* redirected header */     uint8_t   nd_opt_rh_type;     uint8_t   nd_opt_rh_len;     uint16_t  nd_opt_rh_reserved1;     uint32_t  nd_opt_rh_reserved2;       /* followed by IP header and data */   };   struct nd_opt_mtu {            /* MTU option */     uint8_t   nd_opt_mtu_type;     uint8_t   nd_opt_mtu_len;     uint16_t  nd_opt_mtu_reserved;     uint32_t  nd_opt_mtu_mtu;   };Stevens & Thomas             Informational                     [Page 11]RFC 2292             Advanced Sockets API for IPv6         February 1998   We note that the nd_na_flags_reserved flags have the same byte   ordering problems as we discussed with ip6f_offlg.2.3.  Address Testing Macros   The basic API ([RFC-2133]) defines some macros for testing an IPv6   address for certain properties.  This API extends those definitions   with additional address testing macros, defined as a result of   including <netinet/in.h>.

⌨️ 快捷键说明

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