ip6.h
上传用户:szlgq88
上传日期:2009-04-28
资源大小:48287k
文件大小:4k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* Copyright (C) 1991-1997, 2001, 2003 Free Software Foundation, Inc.
  2.    This file is part of the GNU C Library.
  3.    The GNU C Library is free software; you can redistribute it and/or
  4.    modify it under the terms of the GNU Lesser General Public
  5.    License as published by the Free Software Foundation; either
  6.    version 2.1 of the License, or (at your option) any later version.
  7.    The GNU C Library is distributed in the hope that it will be useful,
  8.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  10.    Lesser General Public License for more details.
  11.    You should have received a copy of the GNU Lesser General Public
  12.    License along with the GNU C Library; if not, write to the Free
  13.    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  14.    02111-1307 USA.  */
  15. #ifndef _NETINET_IP6_H
  16. #define _NETINET_IP6_H 1
  17. #include <inttypes.h>
  18. #include <netinet/in.h>
  19. struct ip6_hdr
  20.   {
  21.     union
  22.       {
  23. struct ip6_hdrctl
  24.   {
  25.     uint32_t ip6_un1_flow;   /* 4 bits version, 8 bits TC,
  26. 20 bits flow-ID */
  27.     uint16_t ip6_un1_plen;   /* payload length */
  28.     uint8_t  ip6_un1_nxt;    /* next header */
  29.     uint8_t  ip6_un1_hlim;   /* hop limit */
  30.   } ip6_un1;
  31. uint8_t ip6_un2_vfc;       /* 4 bits version, top 4 bits tclass */
  32.       } ip6_ctlun;
  33.     struct in6_addr ip6_src;      /* source address */
  34.     struct in6_addr ip6_dst;      /* destination address */
  35.   };
  36. #define ip6_vfc   ip6_ctlun.ip6_un2_vfc
  37. #define ip6_flow  ip6_ctlun.ip6_un1.ip6_un1_flow
  38. #define ip6_plen  ip6_ctlun.ip6_un1.ip6_un1_plen
  39. #define ip6_nxt   ip6_ctlun.ip6_un1.ip6_un1_nxt
  40. #define ip6_hlim  ip6_ctlun.ip6_un1.ip6_un1_hlim
  41. #define ip6_hops  ip6_ctlun.ip6_un1.ip6_un1_hlim
  42. /* Generic extension header.  */
  43. struct ip6_ext
  44.   {
  45.     uint8_t  ip6e_nxt; /* next header.  */
  46.     uint8_t  ip6e_len; /* length in units of 8 octets.  */
  47.   };
  48. /* Hop-by-Hop options header.  */
  49. struct ip6_hbh
  50.   {
  51.     uint8_t  ip6h_nxt; /* next header.  */
  52.     uint8_t  ip6h_len; /* length in units of 8 octets.  */
  53.     /* followed by options */
  54.   };
  55. /* Destination options header */
  56. struct ip6_dest
  57.   {
  58.     uint8_t  ip6d_nxt; /* next header */
  59.     uint8_t  ip6d_len; /* length in units of 8 octets */
  60.     /* followed by options */
  61.   };
  62. /* Routing header */
  63. struct ip6_rthdr
  64.   {
  65.     uint8_t  ip6r_nxt; /* next header */
  66.     uint8_t  ip6r_len; /* length in units of 8 octets */
  67.     uint8_t  ip6r_type; /* routing type */
  68.     uint8_t  ip6r_segleft; /* segments left */
  69.     /* followed by routing type specific data */
  70.   };
  71. /* Type 0 Routing header */
  72. struct ip6_rthdr0
  73.   {
  74.     uint8_t  ip6r0_nxt; /* next header */
  75.     uint8_t  ip6r0_len; /* length in units of 8 octets */
  76.     uint8_t  ip6r0_type; /* always zero */
  77.     uint8_t  ip6r0_segleft; /* segments left */
  78.     uint8_t  ip6r0_reserved; /* reserved field */
  79.     uint8_t  ip6r0_slmap[3]; /* strict/loose bit map */
  80.     struct in6_addr  ip6r0_addr[1];  /* up to 23 addresses */
  81.   };
  82. /* Fragment header */
  83. struct ip6_frag
  84.   {
  85.     uint8_t   ip6f_nxt; /* next header */
  86.     uint8_t   ip6f_reserved; /* reserved field */
  87.     uint16_t  ip6f_offlg; /* offset, reserved, and flag */
  88.     uint32_t  ip6f_ident; /* identification */
  89.   };
  90. #if     BYTE_ORDER == BIG_ENDIAN
  91. #define IP6F_OFF_MASK       0xfff8  /* mask out offset from _offlg */
  92. #define IP6F_RESERVED_MASK  0x0006  /* reserved bits in ip6f_offlg */
  93. #define IP6F_MORE_FRAG      0x0001  /* more-fragments flag */
  94. #else   /* BYTE_ORDER == LITTLE_ENDIAN */
  95. #define IP6F_OFF_MASK       0xf8ff  /* mask out offset from _offlg */
  96. #define IP6F_RESERVED_MASK  0x0600  /* reserved bits in ip6f_offlg */
  97. #define IP6F_MORE_FRAG      0x0100  /* more-fragments flag */
  98. #endif
  99. /* Special option types for padding.  */
  100. #define IP6OPT_PAD1 0
  101. #define IP6OPT_PADN 1
  102. #endif /* netinet/ip6.h */