aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2005-09-12 06:21:35 +0000
committerGuy Harris <guy@alum.mit.edu>2005-09-12 06:21:35 +0000
commit39fd819fb4f986330167e4f1d51ecb00f07cf775 (patch)
tree221a7573bb57f01d4f28be59a4a1e5d7f9b9c909
parentf9b16868836047da2a15384419d576f08eea8e29 (diff)
Don't collide with the "regular" IPv6 defintions in at least some
platforms in ipv6-utils.h. svn path=/trunk/; revision=15764
-rw-r--r--epan/addr_and_mask.c6
-rw-r--r--epan/addr_resolv.c13
-rw-r--r--epan/dissectors/packet-bgp.c2
-rw-r--r--epan/dissectors/packet-dns.c4
-rw-r--r--epan/dissectors/packet-ipv6.c4
-rw-r--r--epan/dissectors/packet-isis-lsp.c4
-rw-r--r--epan/dissectors/packet-isup.c13
-rw-r--r--epan/ipv6-utils.h37
8 files changed, 30 insertions, 53 deletions
diff --git a/epan/addr_and_mask.c b/epan/addr_and_mask.c
index 3dd2941034..26cb16c417 100644
--- a/epan/addr_and_mask.c
+++ b/epan/addr_and_mask.c
@@ -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);
}
diff --git a/epan/addr_resolv.c b/epan/addr_resolv.c
index cb130081c8..154da5c12d 100644
--- a/epan/addr_resolv.c
+++ b/epan/addr_resolv.c
@@ -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);
}
diff --git a/epan/dissectors/packet-bgp.c b/epan/dissectors/packet-bgp.c
index ae47708b74..2b7bd4fbf6 100644
--- a/epan/dissectors/packet-bgp.c
+++ b/epan/dissectors/packet-bgp.c
@@ -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));
diff --git a/epan/dissectors/packet-dns.c b/epan/dissectors/packet-dns.c
index 0fa5ce15e8..8f236ee438 100644
--- a/epan/dissectors/packet-dns.c
+++ b/epan/dissectors/packet-dns.c
@@ -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++;
}
diff --git a/epan/dissectors/packet-ipv6.c b/epan/dissectors/packet-ipv6.c
index 5371b9e0c8..45a73a4d1c 100644
--- a/epan/dissectors/packet-ipv6.c
+++ b/epan/dissectors/packet-ipv6.c
@@ -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,
diff --git a/epan/dissectors/packet-isis-lsp.c b/epan/dissectors/packet-isis-lsp.c
index a88d6d8b01..edffaf2af9 100644
--- a/epan/dissectors/packet-isis-lsp.c
+++ b/epan/dissectors/packet-isis-lsp.c
@@ -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)
diff --git a/epan/dissectors/packet-isup.c b/epan/dissectors/packet-isup.c
index 8e8e20ca14..681992a791 100644
--- a/epan/dissectors/packet-isup.c
+++ b/epan/dissectors/packet-isup.c
@@ -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;
diff --git a/epan/ipv6-utils.h b/epan/ipv6-utils.h
index 129bd58e96..79a5d37fc1 100644
--- a/epan/ipv6-utils.h
+++ b/epan/ipv6-utils.h
@@ -29,32 +29,21 @@
#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__ */