aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2010-08-24 00:24:44 +0000
committerGerald Combs <gerald@wireshark.org>2010-08-24 00:24:44 +0000
commita875855c394808d0bde1aad922ccf47fc85c96dd (patch)
tree8cd025bec1d3c23e1ad3903c0e24ed670c82fb5d /epan
parentb4addc04fedcd78769b3fb81df44588ae2368690 (diff)
Display ISATAP encapsulated IPv4 addresses.
svn path=/trunk/; revision=33900
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-ipv6.c35
1 files changed, 33 insertions, 2 deletions
diff --git a/epan/dissectors/packet-ipv6.c b/epan/dissectors/packet-ipv6.c
index 20c410ed1d..43c62095ab 100644
--- a/epan/dissectors/packet-ipv6.c
+++ b/epan/dissectors/packet-ipv6.c
@@ -101,12 +101,15 @@ static int hf_ipv6_hlim = -1;
static int hf_ipv6_src = -1;
static int hf_ipv6_src_host = -1;
static int hf_ipv6_src_sa_mac = -1;
+static int hf_ipv6_src_isatap_ipv4 = -1;
static int hf_ipv6_dst = -1;
static int hf_ipv6_dst_host = -1;
static int hf_ipv6_dst_sa_mac = -1;
+static int hf_ipv6_dst_isatap_ipv4 = -1;
static int hf_ipv6_addr = -1;
static int hf_ipv6_host = -1;
static int hf_ipv6_sa_mac = -1;
+static int hf_ipv6_isatap_ipv4 = -1;
static int hf_ipv6_opt_pad1 = -1;
static int hf_ipv6_opt_padn = -1;
static int hf_ipv6_dst_opt = -1;
@@ -1424,7 +1427,7 @@ dissect_ipv6(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
16, name);
PROTO_ITEM_SET_GENERATED(ti);
PROTO_ITEM_SET_HIDDEN(ti);
- if (tvb_get_guint8(tvb, offset + IP6H_SRC + 8) & 0x02 && tvb_get_ntohs(tvb, offset + IP6H_SRC + 11) == 0xfffe) {
+ if (tvb_get_guint8(tvb, offset + IP6H_SRC + 8) & 0x02 && tvb_get_ntohs(tvb, offset + IP6H_SRC + 11) == 0xfffe) { /* RFC 4291 appendix A */
mac_addr = ep_alloc(6);
tvb_memcpy(tvb, mac_addr, offset + IP6H_SRC + 8, 3);
tvb_memcpy(tvb, mac_addr+3, offset+ IP6H_SRC + 13, 3);
@@ -1436,6 +1439,14 @@ dissect_ipv6(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
offset + IP6H_SRC + 8, 6, mac_addr);
PROTO_ITEM_SET_GENERATED(ti);
PROTO_ITEM_SET_HIDDEN(ti);
+ } else if ((tvb_get_ntohl(tvb, offset + IP6H_SRC + 8) & 0xfcffffff) == 0x00005efe) { /* RFC 5214 section 6.1 */
+ ti = proto_tree_add_item(ipv6_tree, hf_ipv6_src_isatap_ipv4, tvb,
+ offset + IP6H_SRC + 12, 4, FALSE);
+ PROTO_ITEM_SET_GENERATED(ti);
+ ti = proto_tree_add_item(ipv6_tree, hf_ipv6_isatap_ipv4, tvb,
+ offset + IP6H_SRC + 12, 4, FALSE);
+ PROTO_ITEM_SET_GENERATED(ti);
+ PROTO_ITEM_SET_HIDDEN(ti);
}
/* Adds different items for the destination address */
@@ -1459,7 +1470,7 @@ dissect_ipv6(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
16, name);
PROTO_ITEM_SET_GENERATED(ti);
PROTO_ITEM_SET_HIDDEN(ti);
- if (tvb_get_guint8(tvb, offset + IP6H_DST + 8) & 0x02 && tvb_get_ntohs(tvb, offset + IP6H_DST + 11) == 0xfffe) {
+ if (tvb_get_guint8(tvb, offset + IP6H_DST + 8) & 0x02 && tvb_get_ntohs(tvb, offset + IP6H_DST + 11) == 0xfffe) { /* RFC 4291 appendix A */
mac_addr = ep_alloc(6);
tvb_memcpy(tvb, mac_addr, offset + IP6H_DST + 8, 3);
tvb_memcpy(tvb, mac_addr+3, offset+ IP6H_DST + 13, 3);
@@ -1471,6 +1482,14 @@ dissect_ipv6(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
offset + IP6H_DST + 8, 6, mac_addr);
PROTO_ITEM_SET_GENERATED(ti);
PROTO_ITEM_SET_HIDDEN(ti);
+ } else if ((tvb_get_ntohl(tvb, offset + IP6H_DST + 8) & 0xfcffffff) == 0x00005efe) { /* RFC 5214 section 6.1 */
+ ti = proto_tree_add_item(ipv6_tree, hf_ipv6_dst_isatap_ipv4, tvb,
+ offset + IP6H_DST + 12, 4, FALSE);
+ PROTO_ITEM_SET_GENERATED(ti);
+ ti = proto_tree_add_item(ipv6_tree, hf_ipv6_isatap_ipv4, tvb,
+ offset + IP6H_DST + 12, 4, FALSE);
+ PROTO_ITEM_SET_GENERATED(ti);
+ PROTO_ITEM_SET_HIDDEN(ti);
}
}
@@ -1707,6 +1726,10 @@ proto_register_ipv6(void)
{ "Source SA MAC", "ipv6.src_sa_mac",
FT_ETHER, BASE_NONE, NULL, 0x0,
"Source IPv6 Stateless Autoconfiguration MAC Address", HFILL }},
+ { &hf_ipv6_src_isatap_ipv4,
+ { "Source ISATAP IPv4", "ipv6.src_isatap_ipv4",
+ FT_IPv4, BASE_NONE, NULL, 0x0,
+ "Source IPv6 ISATAP Encapsulated IPv4 Address", HFILL }},
{ &hf_ipv6_dst,
{ "Destination", "ipv6.dst",
FT_IPv6, BASE_NONE, NULL, 0x0,
@@ -1719,6 +1742,10 @@ proto_register_ipv6(void)
{ "Destination SA MAC", "ipv6.dst_sa_mac",
FT_ETHER, BASE_NONE, NULL, 0x0,
"Destination IPv6 Stateless Autoconfiguration MAC Address", HFILL }},
+ { &hf_ipv6_dst_isatap_ipv4,
+ { "Destination ISATAP IPv4", "ipv6.dst_isatap_ipv4",
+ FT_IPv4, BASE_NONE, NULL, 0x0,
+ "Destination IPv6 ISATAP Encapsulated IPv4 Address", HFILL }},
{ &hf_ipv6_addr,
{ "Address", "ipv6.addr",
FT_IPv6, BASE_NONE, NULL, 0x0,
@@ -1732,6 +1759,10 @@ proto_register_ipv6(void)
{ "SA MAC", "ipv6.sa_mac",
FT_ETHER, BASE_NONE, NULL, 0x0,
"IPv6 Stateless Autoconfiguration MAC Address", HFILL }},
+ { &hf_ipv6_isatap_ipv4,
+ { "ISATAP IPv4", "ipv6.isatap_ipv4",
+ FT_IPv4, BASE_NONE, NULL, 0x0,
+ "IPv6 ISATAP Encapsulated IPv4 Address", HFILL }},
{ &hf_ipv6_opt_pad1,
{ "Pad1", "ipv6.opt.pad1",
FT_NONE, BASE_NONE, NULL, 0x0,