From Ronald Henderson, when closing IO-Stat window, also close any open Filter...
[obnox/wireshark/wip.git] / packet-ipv6.h
index f451de7b533526395ad15cf66b705f268202ca15..813b45d1d3550cd3bf7777f25647e16fbeb46331 100644 (file)
@@ -1,23 +1,27 @@
 /* packet-ipv6.h
- * Definitions for IPv6 packet disassembly 
+ * Definitions for IPv6 packet disassembly
  *
- * $Id: packet-ipv6.h,v 1.6 1999/10/14 05:41:30 itojun Exp $
+ * $Id: packet-ipv6.h,v 1.29 2002/10/22 22:04:21 jmayer Exp $
  *
  * Ethereal - Network traffic analyzer
- * By Gerald Combs <gerald@zing.org>
+ * By Gerald Combs <gerald@ethereal.com>
+ *
  * Copyright 1998 Gerald Combs
  *
- * 
+ * MobileIPv6 support added by Tomislav Borosa <tomislav.borosa@siemens.hr>
+ *
+ * HMIPv6 support added by Martti Kuparinen <martti.kuparinen@iki.fi>
+ *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
  * of the License, or (at your option) any later version.
- * 
+ *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #ifndef __PACKET_IPV6_H_DEFINED__
 #define __PACKET_IPV6_H_DEFINED__
 
-#ifndef __GLOBALS_H__
-#include "globals.h"
-#endif
-
-struct e_in6_addr {
-       union {
-               guint32  u6_addr32[4];
-               guint16  u6_addr16[8];
-               guint8   u6_addr8[16];
-       } u6_addr;                      /* 128 bit IP6 address */
-};
-
-#ifdef s6_addr32
-#undef s6_addr32
-#endif
-
-#ifdef s6_addr16
-#undef s6_addr16
-#endif
-
-#ifdef s6_addr8
-#undef s6_addr8
-#endif
-
-#ifdef s6_addr
-#undef s6_addr
-#endif
-
-#define s6_addr32 u6_addr.u6_addr32
-#define s6_addr16 u6_addr.u6_addr16
-#define s6_addr8  u6_addr.u6_addr8
-#define s6_addr   u6_addr.u6_addr8
+#include <epan/ipv6-utils.h>
 
 #define INET6_ADDRSTRLEN       46
 
@@ -86,25 +59,26 @@ 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
+/* Offsets of fields within an IPv6 header. */
+#define        IP6H_CTL        0
+#define        IP6H_CTL_FLOW   0
+#define        IP6H_CTL_PLEN   4
+#define        IP6H_CTL_NXT    6
+#define        IP6H_CTL_HLIM   7
+#define        IP6H_CTL_VFC    0
+#define        IP6H_SRC        8
+#define        IP6H_DST        24
 
-#if BYTE_ORDER == BIG_ENDIAN
 #define IPV6_FLOWINFO_MASK     0x0fffffff      /* flow info (28 bits) */
 #define IPV6_FLOWLABEL_MASK    0x000fffff      /* flow label (20 bits) */
-#endif /* BIG_ENDIAN */
-#if BYTE_ORDER == LITTLE_ENDIAN
-#define IPV6_FLOWINFO_MASK     0xffffff0f      /* flow info (28 bits) */
-#define IPV6_FLOWLABEL_MASK    0xffff0f00      /* flow label (20 bits) */
-#endif /* LITTLE_ENDIAN */
 
 /*
  * Extension Headers
  */
 
 struct ip6_ext {
-       u_char  ip6e_nxt;
-       u_char  ip6e_len;
+       guchar  ip6e_nxt;
+       guchar  ip6e_len;
 };
 
 /* Hop-by-Hop options header */
@@ -129,11 +103,21 @@ struct ip6_dest {
 #define IP6OPT_JUMBO           0xC2    /* 11 0 00010 = 194 */
 #define IP6OPT_JUMBO_LEN       6
 #define IP6OPT_RTALERT         0x05    /* 00 0 00101 */
+
 #define IP6OPT_RTALERT_LEN     4
 #define IP6OPT_RTALERT_MLD     0       /* Datagram contains MLD message */
 #define IP6OPT_RTALERT_RSVP    1       /* Datagram contains 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_REQUEST 0x08  /* 00 0 01000 */
+#define IP6OPT_HOME_ADDRESS    0xC9  /* 11 0 01001 */
+#define IP6OPT_EID             0x8a  /* 10 0 01010 */
+#define IP6OPT_MIPv6_UNIQUE_ID_SUB 0x02  /* 00 0 00010 */
+#define IP6OPT_MIPv6_ALTERNATIVE_COA_SUB 0x04  /* 00 0 00100 */
+
 #define IP6OPT_TYPE(o)         ((o) & 0xC0)
 #define IP6OPT_TYPE_SKIP       0x00
 #define IP6OPT_TYPE_DISCARD    0x40
@@ -142,6 +126,42 @@ struct ip6_dest {
 
 #define IP6OPT_MUTABLE         0x20
 
+/* MIPv6 Lifetime */
+#define MIP_INFINITY 0xffffffff /* Infinity lifetime */
+
+/*     Binding Update Flags */
+#define IP6_MIPv6_BU_A_FLAG 0x80 /* 1000 0000 - Acknowledge */
+#define IP6_MIPv6_BU_H_FLAG 0x40 /* 0100 0000 - Home Registration */
+#define IP6_MIPv6_BU_R_FLAG 0x20 /* 0010 0000 - Router */
+#define IP6_MIPv6_BU_D_FLAG 0x10 /* 0001 0000 - Duplicate Address Detection */
+#define IP6_MIPv6_BU_M_FLAG 0x8  /* 0000 1000 - MAP Registration */
+#define IP6_MIPv6_BU_B_FLAG 0x4  /* 0000 0100 - Request for bicasting */
+
+#define IP6_MIPv6_OPTION_TYPE_LENGTH   1
+#define IP6_MIPv6_OPTION_LENGTH_LENGTH 1
+#define IP6_MIPv6_FLAGS_LENGTH 1
+#define IP6_MIPv6_PREFIX_LENGTH_LENGTH 1
+#define IP6_MIPv6_SEQUENCE_NUMBER_LENGTH       2
+#define IP6_MIPv6_LIFE_TIME_LENGTH     4
+#define IP6_MIPv6_REFRESH_LENGTH       4
+#define IP6_MIPv6_STATUS_LENGTH        1
+#define IP6_MIPv6_HOME_ADDRESS_LENGTH  16
+#define IP6_MIPv6_SUB_TYPE_LENGTH      1
+#define IP6_MIPv6_SUB_LENGTH_LENGTH    1
+#define IP6_MIPv6_SUB_UNIQUE_ID_LENGTH 2
+#define IP6_MIPv6_SUB_ALTERNATIVE_COA_LENGTH   16
+
+/* Binding Ackonwledgement Status */
+#define BA_OK 0 /* Binding update accepted */
+#define BA_REAS_UNSPEC 128 /*Reason unspecified */
+#define BA_ADMIN_PROH 130 /* Administratively prohibited */
+#define BA_INSUF_RES 131 /* Insufficient resources */
+#define BA_NO_HR 132 /* Home registration not supported */
+#define BA_NO_SUBNET 133 /* Not home subnet */
+#define BA_ERR_ID_LEN 136 /* Incorrect interface identifier length */
+#define BA_NO_HA 137 /* Not home agent for this mobile node */
+#define BA_DUPL_ADDR 138 /* Duplicate Address Detection failed */
+
 /* Routing header */
 struct ip6_rthdr {
        guint8  ip6r_nxt;       /* next header */
@@ -170,15 +190,9 @@ struct ip6_frag {
        guint32 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 /* BYTE_ORDER == LITTLE_ENDIAN */
 
 /*
  * Definition for ICMPv6.
@@ -230,17 +244,23 @@ struct icmp6_hdr {
 
 #define ICMP6_ROUTER_RENUMBERING       138     /* router renumbering */
 
-/* xxx: actually not assigned yet */
-#define ICMP6_WRUREQUEST               140     /* who are you request */
-#define ICMP6_WRUREPLY                 141     /* who are you reply */
-#define ICMP6_FQDN_QUERY               140     /* FQDN query */
-#define ICMP6_FQDN_REPLY               141     /* FQDN reply */
+#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                  141
+#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 */
+#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 */
 
@@ -253,6 +273,14 @@ struct icmp6_hdr {
 
 #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 */
@@ -299,6 +327,19 @@ struct nd_router_advert {  /* router advertisement */
 #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_FLAG_HOME_AGENT  0x20
+
+/*
+ * Router preference values based on draft-draves-ipngwg-router-selection-01.
+ * These are non-standard definitions.
+ */
+#define ND_RA_FLAG_RTPREF_MASK 0x18 /* 00011000 */
+
+#define ND_RA_FLAG_RTPREF_HIGH 0x08 /* 00001000 */
+#define ND_RA_FLAG_RTPREF_MEDIUM       0x00 /* 00000000 */
+#define ND_RA_FLAG_RTPREF_LOW  0x18 /* 00011000 */
+#define ND_RA_FLAG_RTPREF_RSV  0x10 /* 00010000 */
+
 #define nd_ra_router_lifetime  nd_ra_hdr.icmp6_data16[1]
 
 struct nd_neighbor_solicit {   /* neighbor solicitation */
@@ -322,15 +363,9 @@ struct nd_neighbor_advert {        /* neighbor advertisement */
 #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
-#elif BYTE_ORDER == LITTLE_ENDIAN
-#define ND_NA_FLAG_ROUTER              0x80
-#define ND_NA_FLAG_SOLICITED           0x40
-#define ND_NA_FLAG_OVERRIDE            0x20
-#endif
 
 struct nd_redirect {           /* redirect */
        struct icmp6_hdr        nd_rd_hdr;
@@ -355,6 +390,15 @@ struct nd_opt_hdr {                /* Neighbor discovery option header */
 #define ND_OPT_PREFIX_INFORMATION      3
 #define ND_OPT_REDIRECTED_HEADER       4
 #define ND_OPT_MTU                     5
+#define ND_OPT_ADVINTERVAL             7
+#define ND_OPT_HOMEAGENT_INFO          8
+#define ND_OPT_SOURCE_ADDRLIST         9
+#define ND_OPT_TARGET_ADDRLIST         10
+
+/* draft-ietf-ipngwg-router-preference, not officially assigned yet */
+#define ND_OPT_ROUTE_INFO              200
+/* draft-ietf-mobileip-hmipv6, not officially assigned yet */
+#define ND_OPT_MAP                     201
 
 struct nd_opt_prefix_info {    /* prefix information */
        guint8  nd_opt_pi_type;
@@ -369,6 +413,8 @@ struct nd_opt_prefix_info { /* prefix information */
 
 #define ND_OPT_PI_FLAG_ONLINK          0x80
 #define ND_OPT_PI_FLAG_AUTO            0x40
+#define ND_OPT_PI_FLAG_ROUTER          0x20
+#define ND_OPT_PI_FLAG_SITEPREF                0x10
 
 struct nd_opt_rd_hdr {         /* redirected header */
        guint8  nd_opt_rh_type;
@@ -385,54 +431,95 @@ struct nd_opt_mtu {               /* MTU option */
        guint32 nd_opt_mtu_mtu;
 };
 
-#if 0
-/* disregard until used. We have to decide how to handle guint64 */ 
+struct nd_opt_adv_int {                /* Advertisement Interval option */
+       guint8  nd_opt_adv_int_type;
+       guint8  nd_opt_adv_int_len;
+       guint16 nd_opt_adv_int_reserved;
+       guint32 nd_opt_adv_int_advint;
+};
+
+struct nd_opt_ha_info {                /* Home Agent Information option */
+       guint8  nd_opt_ha_info_type;
+       guint8  nd_opt_ha_info_len;
+       guint16 nd_opt_ha_info_reserved;
+       guint16 nd_opt_ha_info_ha_pref;
+       guint16 nd_opt_ha_info_ha_life;
+};
+
+struct nd_opt_route_info {     /* route info */
+       guint8  nd_opt_rti_type;
+       guint8  nd_opt_rti_len;
+       guint8  nd_opt_rti_prefixlen;
+       guint8  nd_opt_rti_flags;
+       guint32 nd_opt_rti_lifetime;
+       /* prefix follows */
+};
+
+struct nd_opt_map_info {       /* HMIPv6 MAP option */
+       guint8                  nd_opt_map_type;
+       guint8                  nd_opt_map_len;
+       guint8                  nd_opt_map_dist_and_pref;
+       guint8                  nd_opt_map_flags;
+       guint32                 nd_opt_map_lifetime;
+       struct e_in6_addr       nd_opt_map_address;
+};
+
+#define ND_OPT_MAP_FLAG_R      0x80
+#define ND_OPT_MAP_FLAG_M      0x40
+#define ND_OPT_MAP_FLAG_I      0x20
+#define ND_OPT_MAP_FLAG_T      0x10
+#define ND_OPT_MAP_FLAG_P      0x08
+#define ND_OPT_MAP_FLAG_V      0x04
+
 /*
- * icmp6 namelookup
+ * icmp6 node information
  */
+struct icmp6_nodeinfo {
+       struct icmp6_hdr icmp6_ni_hdr;
+       guint8 icmp6_ni_nonce[8];
+       /* could be followed by reply data */
+};
 
-struct icmp6_namelookup {
-       struct icmp6_hdr        icmp6_nl_hdr;
-       guint64 icmp6_nl_nonce;
-       guint32 icmp6_nl_ttl;
-#if 0
-       guint8  icmp6_nl_len;
-       guint8  icmp6_nl_name[3];
-#endif
-       /* could be followed by options */
+#define ni_type                icmp6_ni_hdr.icmp6_type
+#define ni_code                icmp6_ni_hdr.icmp6_code
+#define ni_cksum       icmp6_ni_hdr.icmp6_cksum
+#define ni_qtype       icmp6_ni_hdr.icmp6_data16[0]
+#define ni_flags       icmp6_ni_hdr.icmp6_data16[1]
+
+#define NI_QTYPE_NOOP          0 /* NOOP  */
+#define NI_QTYPE_SUPTYPES      1 /* Supported Qtypes */
+#define NI_QTYPE_FQDN          2 /* FQDN (draft 04) */
+#define NI_QTYPE_DNSNAME       2 /* DNS Name */
+#define NI_QTYPE_NODEADDR      3 /* Node Addresses */
+#define NI_QTYPE_IPV4ADDR      4 /* IPv4 Addresses */
+
+#define NI_SUPTYPE_FLAG_COMPRESS       0x1
+#define NI_FQDN_FLAG_VALIDTTL          0x1
+
+#define NI_NODEADDR_FLAG_TRUNCATE      0x1
+#define NI_NODEADDR_FLAG_ALL           0x2
+#define NI_NODEADDR_FLAG_COMPAT                0x4
+#define NI_NODEADDR_FLAG_LINKLOCAL     0x8
+#define NI_NODEADDR_FLAG_SITELOCAL     0x10
+#define NI_NODEADDR_FLAG_GLOBAL                0x20
+#define NI_NODEADDR_FLAG_ANYCAST       0x40 /* just experimental. not in spec */
+
+struct ni_reply_fqdn {
+       guint32 ni_fqdn_ttl;    /* TTL */
+       guint8  ni_fqdn_namelen; /* length in octets of the FQDN */
+       guint8  ni_fqdn_name[3]; /* XXX: alignment */
 };
-#endif
 
 /*
  * Router Renumbering. as router-renum-05.txt
  */
-#if BYTE_ORDER == BIG_ENDIAN /* net byte order */
 struct icmp6_router_renum {    /* router renumbering header */
        struct icmp6_hdr        rr_hdr;
        guint8          rr_segnum;
-       guint8          rr_test : 1;
-       guint8          rr_reqresult : 1;
-       guint8          rr_forceapply : 1;
-       guint8          rr_specsite : 1;
-       guint8          rr_prevdone : 1;
-       guint8          rr_flags_reserved : 3;
+       guint8          rr_flags;
        guint16         rr_maxdelay;
        guint32         rr_reserved;
 };
-#elif BYTE_ORDER == LITTLE_ENDIAN
-struct icmp6_router_renum {    /* router renumbering header */
-       struct icmp6_hdr        rr_hdr;
-       guint8          rr_segnum;
-       guint8          rr_flags_reserved : 3;
-       guint8          rr_prevdone : 1;
-       guint8          rr_specsite : 1;
-       guint8          rr_forceapply : 1;
-       guint8          rr_reqresult : 1;
-       guint8          rr_test : 1;
-       guint16         rr_maxdelay;
-       guint32         rr_reserved;
-};
-#endif /* BYTE_ORDER */
 
 #define rr_type                        rr_hdr.icmp6_type
 #define rr_code                        rr_hdr.icmp6_code
@@ -455,66 +542,37 @@ struct rr_pco_match {             /* match prefix part */
 #define RPM_PCO_SETGLOBAL      3
 #define RPM_PCO_MAX            4
 
-#if BYTE_ORDER == BIG_ENDIAN /* net byte order */
-struct rr_pco_use {            /* use prefix part */
-       guint8  rpu_uselen;
-       guint8  rpu_keeplen;
-       guint8  rpu_mask_onlink : 1;
-       guint8  rpu_mask_autonomous : 1;
-       guint8  rpu_mask_reserved : 6;
-       guint8  rpu_onlink : 1;
-       guint8  rpu_autonomous : 1;
-       guint8  rpu_raflags_reserved : 6;
-       guint32 rpu_vltime;
-       guint32 rpu_pltime;
-       guint32 rpu_decr_vltime : 1;
-       guint32 rpu_decr_pltime : 1;
-       guint32 rpu_flags_reserved : 6;
-       guint32 rpu_reserved : 24;
-       struct e_in6_addr rpu_prefix;
-};
-#elif BYTE_ORDER == LITTLE_ENDIAN
 struct rr_pco_use {            /* use prefix part */
        guint8  rpu_uselen;
        guint8  rpu_keeplen;
-       guint8  rpu_mask_reserved : 6;
-       guint8  rpu_mask_autonomous : 1;
-       guint8  rpu_mask_onlink : 1;
-       guint8  rpu_raflags_reserved : 6;
-       guint8  rpu_autonomous : 1;
-       guint8  rpu_onlink : 1;
+       guint8  rpu_ramask;
+       guint8  rpu_raflags;
        guint32 rpu_vltime;
        guint32 rpu_pltime;
-       guint32 rpu_flags_reserved : 6;
-       guint32 rpu_decr_pltime : 1;
-       guint32 rpu_decr_vltime : 1;
-       guint32 rpu_reserved : 24;
+       guint32 rpu_flags;
        struct e_in6_addr rpu_prefix;
 };
-#endif /* BYTE_ORDER */
 
-#if BYTE_ORDER == BIG_ENDIAN /* net byte order */
-struct rr_result {             /* router renumbering result message */
-       guint8  rrr_reserved;
-       guint8  rrr_flags_reserved : 6;
-       guint8  rrr_outofbound : 1;
-       guint8  rrr_forbidden : 1;
-       guint8  rrr_ordinal;
-       guint8  rrr_matchedlen;
-       guint32 rrr_ifid;
-       struct e_in6_addr rrr_prefix;
-};
-#elif BYTE_ORDER == LITTLE_ENDIAN
+#define ICMP6_RR_PCOUSE_RAFLAGS_ONLINK  0x80
+#define ICMP6_RR_PCOUSE_RAFLAGS_AUTO    0x40
+
+/* network endian */
+#define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME       0x80000000
+#define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME       0x40000000
+
 struct rr_result {             /* router renumbering result message */
-       guint8  rrr_reserved;
-       guint8  rrr_forbidden : 1;
-       guint8  rrr_outofbound : 1;
-       guint8  rrr_flags_reserved : 6;
+       guint16 rrr_flags;
        guint8  rrr_ordinal;
        guint8  rrr_matchedlen;
        guint32 rrr_ifid;
        struct e_in6_addr rrr_prefix;
 };
-#endif /* BYTE_ORDER */
+
+/* network endian */
+#define ICMP6_RR_RESULT_FLAGS_OOB              0x0002
+#define ICMP6_RR_RESULT_FLAGS_FORBIDDEN                0x0001
+
+void capture_ipv6(const guchar *, int, int, packet_counts *);
+
 
 #endif /* __PACKET_IPV6_H_DEFINED__ */