]> The Tcpdump Group git mirrors - tcpdump/blobdiff - ip6.h
Fix the pointer tests in the non-ndoified TTEST2() macro as well.
[tcpdump] / ip6.h
diff --git a/ip6.h b/ip6.h
index e4f9fe1c9e5ef00278090e9fcfbb422b1d647d1c..0a80f39448d428c1dcf12b6abd13f261b43b175d 100644 (file)
--- a/ip6.h
+++ b/ip6.h
@@ -86,7 +86,21 @@ struct ip6_hdr {
        } ip6_ctlun;
        struct in6_addr ip6_src;        /* source address */
        struct in6_addr ip6_dst;        /* destination address */
-};
+} UNALIGNED;
+
+/*
+ * Pseudo header, used for higher layer checksumming.
+ */
+union ip6_pseudo_hdr {
+    struct {
+       struct in6_addr ph_src;
+       struct in6_addr ph_dst;
+       u_int32_t       ph_len;
+       u_int8_t        ph_zero[3];
+       u_int8_t        ph_nxt;
+    } ph;
+    u_int16_t pa[20];
+} UNALIGNED;
 
 #define ip6_vfc                ip6_ctlun.ip6_un2_vfc
 #define ip6_flow       ip6_ctlun.ip6_un1.ip6_un1_flow
@@ -109,25 +123,23 @@ 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 */
@@ -163,7 +175,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 {
@@ -174,7 +186,7 @@ struct ip6_rthdr0 {
        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 */
-};
+} UNALIGNED;
 
 /* Fragment header */
 struct ip6_frag {
@@ -182,10 +194,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 */
 
+/* in print-ip6.c */
+extern int nextproto6_cksum(const struct ip6_hdr *, const u_short *, u_int, u_int);
+
 #endif /* not _NETINET_IP6_H_ */