diff options
-rw-r--r-- | epan/addr_and_mask.c | 6 | ||||
-rw-r--r-- | epan/addr_resolv.c | 13 | ||||
-rw-r--r-- | epan/dissectors/packet-bgp.c | 2 | ||||
-rw-r--r-- | epan/dissectors/packet-dns.c | 4 | ||||
-rw-r--r-- | epan/dissectors/packet-ipv6.c | 4 | ||||
-rw-r--r-- | epan/dissectors/packet-isis-lsp.c | 4 | ||||
-rw-r--r-- | epan/dissectors/packet-isup.c | 13 | ||||
-rw-r--r-- | epan/ipv6-utils.h | 37 |
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__ */ |