]> The Tcpdump Group git mirrors - tcpdump/blobdiff - ip6.h
Add changes in 4.2.1.
[tcpdump] / ip6.h
diff --git a/ip6.h b/ip6.h
index b00b41551ec528513525ec91d202ce56c907f8bc..12c87ad29291ca0868bf361d99214e0ecbbb069e 100644 (file)
--- a/ip6.h
+++ b/ip6.h
@@ -1,4 +1,5 @@
-/*     $NetBSD: ip6.h,v 1.9 2000/07/13 05:34:21 itojun Exp $   */
+/* @(#) $Header: /tcpdump/master/tcpdump/ip6.h,v 1.8 2007-08-29 02:31:44 mcr Exp $ (LBL) */
+/*     NetBSD: ip6.h,v 1.9 2000/07/13 05:34:21 itojun Exp      */
 /*     $KAME: ip6.h,v 1.9 2000/07/02 21:01:32 itojun Exp $     */
 
 /*
@@ -85,7 +86,7 @@ struct ip6_hdr {
        } ip6_ctlun;
        struct in6_addr ip6_src;        /* source address */
        struct in6_addr ip6_dst;        /* destination address */
-};
+} UNALIGNED;
 
 #define ip6_vfc                ip6_ctlun.ip6_un2_vfc
 #define ip6_flow       ip6_ctlun.ip6_un1.ip6_un1_flow
@@ -94,9 +95,6 @@ struct ip6_hdr {
 #define ip6_hlim       ip6_ctlun.ip6_un1.ip6_un1_hlim
 #define ip6_hops       ip6_ctlun.ip6_un1.ip6_un1_hlim
 
-#define IPV6_VERSION           0x60
-#define IPV6_VERSION_MASK      0xf0
-
 /* in network endian */
 #define IPV6_FLOWINFO_MASK     ((u_int32_t)htonl(0x0fffffff))  /* flow info (28 bits) */
 #define IPV6_FLOWLABEL_MASK    ((u_int32_t)htonl(0x000fffff))  /* flow label (20 bits) */
@@ -111,38 +109,43 @@ struct ip6_hdr {
  */
 
 struct ip6_ext {
-       u_char  ip6e_nxt;
-       u_char  ip6e_len;
-};
+       u_int8_t ip6e_nxt;
+       u_int8_t ip6e_len;
+} UNALIGNED;
 
 /* Hop-by-Hop options header */
-/* XXX should we pad it to force alignment on an 8-byte boundary? */
 struct ip6_hbh {
        u_int8_t ip6h_nxt;      /* next header */
        u_int8_t ip6h_len;      /* length in units of 8 octets */
        /* followed by options */
-};
+} UNALIGNED;
 
 /* Destination options header */
-/* XXX should we pad it to force alignment on an 8-byte boundary? */
 struct ip6_dest {
        u_int8_t ip6d_nxt;      /* next header */
        u_int8_t ip6d_len;      /* length in units of 8 octets */
        /* followed by options */
-};
+} UNALIGNED;
 
 /* Option types and related macros */
 #define IP6OPT_PAD1            0x00    /* 00 0 00000 */
 #define IP6OPT_PADN            0x01    /* 00 0 00001 */
 #define IP6OPT_JUMBO           0xC2    /* 11 0 00010 = 194 */
 #define IP6OPT_JUMBO_LEN       6
-#define IP6OPT_RTALERT         0x05    /* 00 0 00101 */
+#define IP6OPT_ROUTER_ALERT    0x05    /* 00 0 00101 */
+
 #define IP6OPT_RTALERT_LEN     4
 #define IP6OPT_RTALERT_MLD     0       /* Datagram contains an MLD message */
 #define IP6OPT_RTALERT_RSVP    1       /* Datagram contains an RSVP message */
 #define IP6OPT_RTALERT_ACTNET  2       /* contains an Active Networks msg */
 #define IP6OPT_MINLEN          2
 
+#define IP6OPT_BINDING_UPDATE  0xc6    /* 11 0 00110 */
+#define IP6OPT_BINDING_ACK     0x07    /* 00 0 00111 */
+#define IP6OPT_BINDING_REQ     0x08    /* 00 0 01000 */
+#define IP6OPT_HOME_ADDRESS    0xc9    /* 11 0 01001 */
+#define IP6OPT_EID             0x8a    /* 10 0 01010 */
+
 #define IP6OPT_TYPE(o)         ((o) & 0xC0)
 #define IP6OPT_TYPE_SKIP       0x00
 #define IP6OPT_TYPE_DISCARD    0x40
@@ -158,7 +161,7 @@ struct ip6_rthdr {
        u_int8_t  ip6r_type;    /* routing type */
        u_int8_t  ip6r_segleft; /* segments left */
        /* followed by routing type specific data */
-};
+} UNALIGNED;
 
 /* Type 0 Routing header */
 struct ip6_rthdr0 {
@@ -168,8 +171,8 @@ struct ip6_rthdr0 {
        u_int8_t  ip6r0_segleft;        /* segments left */
        u_int8_t  ip6r0_reserved;       /* reserved field */
        u_int8_t  ip6r0_slmap[3];       /* strict/loose bit map */
-       struct in6_addr  ip6r0_addr[1]; /* up to 23 addresses */
-};
+       struct in6_addr ip6r0_addr[1];  /* up to 23 addresses */
+} UNALIGNED;
 
 /* Fragment header */
 struct ip6_frag {
@@ -177,11 +180,13 @@ struct ip6_frag {
        u_int8_t  ip6f_reserved;        /* reserved field */
        u_int16_t ip6f_offlg;           /* offset, reserved, and flag */
        u_int32_t ip6f_ident;           /* identification */
-};
+} UNALIGNED;
+
+#define IP6F_OFF_MASK          0xfff8  /* mask out offset from ip6f_offlg */
+#define IP6F_RESERVED_MASK     0x0006  /* reserved bits in ip6f_offlg */
+#define IP6F_MORE_FRAG         0x0001  /* more-fragments flag */
 
-/* network endian */
-#define IP6F_OFF_MASK          ((u_int16_t)htons(0xfff8))      /* mask out offset from _offlg */
-#define IP6F_RESERVED_MASK     ((u_int16_t)htons(0x0006))      /* reserved bits in ip6f_offlg */
-#define IP6F_MORE_FRAG         ((u_int16_t)htons(0x0001))      /* more-fragments flag */
+/* in print-ip6.c */
+extern int nextproto6_cksum(const struct ip6_hdr *, const u_int8_t *, u_int, u_int);
 
 #endif /* not _NETINET_IP6_H_ */