Don't collide with the "regular" IPv6 defintions in at least some
authorguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 12 Sep 2005 06:21:35 +0000 (06:21 +0000)
committerguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 12 Sep 2005 06:21:35 +0000 (06:21 +0000)
platforms in ipv6-utils.h.

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@15764 f5534014-38df-0310-8fa8-9805f1628bb7

epan/addr_and_mask.c
epan/addr_resolv.c
epan/dissectors/packet-bgp.c
epan/dissectors/packet-dns.c
epan/dissectors/packet-ipv6.c
epan/dissectors/packet-isis-lsp.c
epan/dissectors/packet-isup.c
epan/ipv6-utils.h

index 3dd2941034f57b82149030c7de6d204b87a6b52b..26cb16c4171ae4e7a732b935526aa61d4fdec9d9 100644 (file)
@@ -64,10 +64,10 @@ ipv6_addr_and_mask(tvbuff_t *tvb, int offset, struct e_in6_addr *addr,
                return -1;
 
        addr_len = (prefix_len + 7) / 8;
-       memset(addr->u6_addr.u6_addr8, 0, 16);
-       tvb_memcpy(tvb, addr->u6_addr.u6_addr8, offset, addr_len);
+       memset(addr->bytes, 0, 16);
+       tvb_memcpy(tvb, addr->bytes, offset, addr_len);
        if (prefix_len % 8) {
-               addr->u6_addr.u6_addr8[addr_len - 1] &=
+               addr->bytes[addr_len - 1] &=
                    ((0xff00 >> (prefix_len % 8)) & 0xff);
        }
 
index cb130081c8b9b730f961fe6e30542f646b91c53d..154da5c12d33ee52d6708093158babfe49a279dd 100644 (file)
@@ -146,7 +146,7 @@ typedef struct hashipv4 {
 /* hash table used for IPv6 lookup */
 
 #define HASH_IPV6_ADDRESS(addr)        \
-       ((((addr).s6_addr8[14] << 8)|((addr).s6_addr8[15])) & (HASHHOSTSIZE - 1))
+       ((((addr).bytes[14] << 8)|((addr).bytes[15])) & (HASHHOSTSIZE - 1))
 
 typedef struct hashipv6 {
   struct e_in6_addr    addr;
@@ -540,7 +540,7 @@ static const gchar *solve_address_to_name(address *addr)
     return get_hostname(ipv4_addr);
 
   case AT_IPv6:
-    memcpy(&ipv6_addr.s6_addr, addr->data, sizeof ipv6_addr.s6_addr);
+    memcpy(&ipv6_addr.bytes, addr->data, sizeof ipv6_addr.bytes);
     return get_hostname6(&ipv6_addr);
 
   case AT_STRINGZ:
@@ -1775,17 +1775,10 @@ extern const gchar *get_hostname6(struct e_in6_addr *addr)
 {
   gboolean found;
 
-#ifdef INET6
   if (!(g_resolv_flags & RESOLV_NETWORK))
     return ip6_to_str(addr);
-#ifdef SOLARIS8_INET6
-  if (IN6_IS_ADDR_LINKLOCAL((struct in6_addr*)addr) || IN6_IS_ADDR_MULTICAST((struct in6_addr*)addr))
-#else
-  if (IN6_IS_ADDR_LINKLOCAL(addr) || IN6_IS_ADDR_MULTICAST(addr))
-#endif
+  if (E_IN6_IS_ADDR_LINKLOCAL(addr) || E_IN6_IS_ADDR_MULTICAST(addr))
     return ip6_to_str(addr);
-#endif
-
   return host_name_lookup6(addr, &found);
 }
 
index ae47708b74d6ab37fcfdd2319872723b0546a42f..2b7bd4fbf66804b162e12294e9c150c5d782b4de 100644 (file)
@@ -449,7 +449,7 @@ decode_prefix6(proto_tree *tree, int hf_addr, tvbuff_t *tvb, gint offset,
        tag, plen);
     if (hf_addr != -1) {
        proto_tree_add_ipv6(prefix_tree, hf_addr, tvb, offset + 1, length,
-           addr.s6_addr);
+           addr.bytes);
     } else {
        proto_tree_add_text(prefix_tree, tvb, offset + 1, length,
            "%s prefix: %s", tag, ip6_to_str(&addr));
index 0fa5ce15e8e8a113c7cb496d412dbe60da384e4e..8f236ee43819d04620eae01f703e71e418553208 100644 (file)
@@ -1540,10 +1540,10 @@ dissect_dns_answer(tvbuff_t *tvb, int offset, int dns_data_offset,
       suf_octet_count = suf_len ? (suf_len - 1) / 8 + 1 : 0;
       /* Pad prefix */
       for (suf_offset = 0; suf_offset < 16 - suf_octet_count; suf_offset++) {
-        suffix.s6_addr8[suf_offset] = 0;
+        suffix.bytes[suf_offset] = 0;
       }
       for (; suf_offset < 16; suf_offset++) {
-        suffix.s6_addr8[suf_offset] = tvb_get_guint8(tvb, cur_offset);
+        suffix.bytes[suf_offset] = tvb_get_guint8(tvb, cur_offset);
         cur_offset++;
       }
 
index 5371b9e0c8cfa26418b57b02650fd3897326f4e6..45a73a4d1c65023f17ac99e4dc099cc6329082a8 100644 (file)
@@ -637,10 +637,10 @@ dissect_ipv6(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 
     proto_tree_add_ipv6_hidden(ipv6_tree, hf_ipv6_addr, tvb,
                               offset + offsetof(struct ip6_hdr, ip6_src), 16,
-                              ipv6.ip6_src.s6_addr8);
+                              ipv6.ip6_src.bytes);
     proto_tree_add_ipv6_hidden(ipv6_tree, hf_ipv6_addr, tvb,
                               offset + offsetof(struct ip6_hdr, ip6_dst), 16,
-                              ipv6.ip6_dst.s6_addr8);
+                              ipv6.ip6_dst.bytes);
 
     proto_tree_add_ipv6_format(ipv6_tree, hf_ipv6_src, tvb,
                offset + offsetof(struct ip6_hdr, ip6_src), 16,
index a88d6d8b01aba45f724ea441ef4478ba2002ccd4..edffaf2af975d889344d084d5504346cd87dec29 100644 (file)
@@ -802,7 +802,7 @@ dissect_lsp_ipv6_reachability_clv(tvbuff_t *tvb, proto_tree *tree, int offset,
        if (!tree) return;
 
        while (length > 0) {
-       memset (prefix.s6_addr, 0, 16);
+               memset (prefix.bytes, 0, 16);
                ctrl_info = tvb_get_guint8(tvb, offset+4);
                bit_length = tvb_get_guint8(tvb, offset+5);
                byte_length = (bit_length + 7) / 8;
@@ -811,7 +811,7 @@ dissect_lsp_ipv6_reachability_clv(tvbuff_t *tvb, proto_tree *tree, int offset,
                                "IPv6 prefix has an invalid length: %d bytes", byte_length );
                        return;
                }
-               tvb_memcpy (tvb, prefix.s6_addr, offset+6, byte_length);
+               tvb_memcpy (tvb, prefix.bytes, offset+6, byte_length);
                metric = tvb_get_ntohl(tvb, offset);
                subclvs_len = 0;
                if ((ctrl_info & 0x20) != 0)
index 8e8e20ca14b23b7eb624c273ca50f0e137b32125..681992a7919d4668bbc3ea4c807c58d937e42421 100644 (file)
@@ -1953,9 +1953,6 @@ dissect_nsap(tvbuff_t *parameter_tvb,gint offset,gint len, proto_tree *parameter
        guint8 afi, cc_length = 0;
        guint8 length = 0, address_digit_pair = 0;
        guint icp,  cc, id_code, cc_offset;
-       guint32    addr;
-       struct e_in6_addr ipv6_addr;
-
 
        afi = tvb_get_guint8(parameter_tvb, offset);
 
@@ -1969,18 +1966,16 @@ dissect_nsap(tvbuff_t *parameter_tvb,gint offset,gint len, proto_tree *parameter
                        icp = tvb_get_ntohs(parameter_tvb, offset);
                        proto_tree_add_uint(parameter_tree, hf_iana_icp, parameter_tvb, offset, 1, icp );
                        if ( icp == 0 ){ /* IPv6 addr */
-                               tvb_get_ipv6(parameter_tvb, ( offset + 2 ), &ipv6_addr);
-                               proto_tree_add_text(parameter_tree, parameter_tvb, offset + 2 , 3,
+                               proto_tree_add_text(parameter_tree, parameter_tvb, offset + 2 , 17,
                                    "DSP = %s", tvb_bytes_to_str(parameter_tvb, offset + 2, 17));
-                                           proto_tree_add_ipv6(parameter_tree, hf_nsap_ipv6_addr, parameter_tvb, offset,
-                                                       16, (guint8 *)&ipv6_addr);
+                               proto_tree_add_item(parameter_tree, hf_nsap_ipv6_addr, parameter_tvb, offset,
+                                   16, FALSE);
 
                        }
                        else { /* IPv4 addr */
-                               addr = tvb_get_ipv4(parameter_tvb, ( offset + 2 ));
                                proto_tree_add_text(parameter_tree, parameter_tvb, offset + 2 , 3,
                                    "DSP = %s", tvb_bytes_to_str(parameter_tvb, offset + 2, 17));
-                               proto_tree_add_ipv4(parameter_tree, hf_nsap_ipv4_addr, parameter_tvb, offset + 2, 4, addr);
+                               proto_tree_add_item(parameter_tree, hf_nsap_ipv4_addr, parameter_tvb, offset + 2, 4, FALSE);
                        }
                        
                        break;
index 129bd58e960ec47d378b05fd9a0e39b7e232dbe7..79a5d37fc1589c8ff523b04d3e5a54c876630f30 100644 (file)
 #define __IPV6_UTILS_H__
 
 struct e_in6_addr {
-       union {
-               guint32  u6_addr32[4];
-               guint16  u6_addr16[8];
-               guint8   u6_addr8[16];
-       } u6_addr;                      /* 128 bit IP6 address */
+       guint8   bytes[16];             /* 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
+/*
+ * Unicast Scope
+ * Note that we must check topmost 10 bits only, not 16 bits (see RFC2373).
+ */
+#define E_IN6_IS_ADDR_LINKLOCAL(a)     \
+       (((a)->bytes[0] == 0xfe) && (((a)->bytes[1] & 0xc0) == 0x80))
+#define E_IN6_IS_ADDR_SITELOCAL(a)     \
+       (((a)->bytes[0] == 0xfe) && (((a)->bytes[1] & 0xc0) == 0xc0))
 
-#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
+/*
+ * Multicast
+ */
+#define E_IN6_IS_ADDR_MULTICAST(a)     ((a)->bytes[0] == 0xff)
 
 #endif /* __IPV6_UTILS_H__ */