aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-juniper.c
diff options
context:
space:
mode:
authorJaap Keuter <jaap.keuter@xs4all.nl>2021-07-15 17:30:16 +0200
committerWireshark GitLab Utility <gerald+gitlab-utility@wireshark.org>2021-07-16 08:10:34 +0000
commitfba16c88f4cf47fb987f8382e325eeecd3b6ae64 (patch)
treee4b7d69cbbe1cedbf47dc313dfa1b0449f5e64a6 /epan/dissectors/packet-juniper.c
parent796819c955b9dd508d73bb640d56c2625f866862 (diff)
JUNIPER: Set proper item length for protocol layer
Diffstat (limited to 'epan/dissectors/packet-juniper.c')
-rw-r--r--epan/dissectors/packet-juniper.c48
1 files changed, 24 insertions, 24 deletions
diff --git a/epan/dissectors/packet-juniper.c b/epan/dissectors/packet-juniper.c
index a82ca6dc99..c650ee47a8 100644
--- a/epan/dissectors/packet-juniper.c
+++ b/epan/dissectors/packet-juniper.c
@@ -417,8 +417,6 @@ static gint ett_juniper_st_ip = -1;
static gint ett_juniper_st_esp = -1;
static gint ett_juniper_st_unknown = -1;
-static dissector_handle_t ipv4_handle;
-
static dissector_table_t payload_table;
static int dissect_juniper_payload_proto(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_tree *juniper_subtree, guint proto, guint offset);
@@ -629,23 +627,28 @@ dissect_juniper_payload_proto(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre
ti = proto_tree_add_uint(juniper_subtree, hf_juniper_payload_type, tvb, offset, 0, proto);
proto_item_set_generated(ti);
- if (proto == 0xa248)
+ switch (proto)
{
- proto_tree_add_item(juniper_subtree, hf_juniper_unknown_data, tvb, offset, 4, ENC_NA);
- next_tvb = tvb_new_subset_remaining(tvb, offset+4);
- call_dissector(ipv4_handle, next_tvb, pinfo, tree);
+ /* XXX - 0xa248 stands for ??? */
+ case 0xa248:
+ proto_tree_add_item(juniper_subtree, hf_juniper_unknown_data, tvb, offset, 4, ENC_NA);
+ offset += 4;
+ proto = JUNIPER_PROTO_IP;
+ break;
+
+ default:
+ break;
}
- else
- {
- next_tvb = tvb_new_subset_remaining(tvb, offset);
- if (!dissector_try_uint(payload_table, proto, next_tvb, pinfo, tree))
- {
- /* XXX - left in for posterity, dissection was never done */
- /* case JUNIPER_PROTO_OAM: FIXME call OAM dissector without leading HEC byte */
+ proto_item_set_len(juniper_subtree, offset);
+ next_tvb = tvb_new_subset_remaining(tvb, offset);
- call_data_dissector(next_tvb, pinfo, tree);
- }
+ if (!dissector_try_uint(payload_table, proto, next_tvb, pinfo, tree))
+ {
+ /* XXX - left in for posterity, dissection was never done */
+ /* case JUNIPER_PROTO_OAM: FIXME call OAM dissector without leading HEC byte */
+
+ call_data_dissector(next_tvb, pinfo, tree);
}
return 0;
@@ -1230,7 +1233,6 @@ dissect_juniper_svcs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void*
static int dissect_juniper_vn(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, void* data _U_)
{
- proto_item *ti;
proto_tree* juniper_subtree;
guint offset = 0;
guint32 tlv_type, tlv_len;
@@ -1240,7 +1242,7 @@ static int dissect_juniper_vn(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tre
col_clear(pinfo->cinfo, COL_INFO);
juniper_subtree = proto_tree_add_subtree(tree, tvb, offset, 20,
- ett_juniper, &ti, "Juniper Virtual Network Information");
+ ett_juniper, NULL, "Juniper Virtual Network Information");
tlv_type = tvb_get_guint8(tvb, offset);
tlv_len = tvb_get_guint8(tvb, (offset + 1));
@@ -1274,7 +1276,7 @@ static int dissect_juniper_vn(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tre
}
offset+=tlv_len;
- dissect_juniper_payload_proto(tvb, pinfo, tree, ti, JUNIPER_PROTO_ETHER, offset);
+ dissect_juniper_payload_proto(tvb, pinfo, tree, juniper_subtree, JUNIPER_PROTO_ETHER, offset);
return tvb_captured_length(tvb);
}
@@ -1292,7 +1294,7 @@ static int dissect_juniper_st(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tre
col_clear(pinfo->cinfo, COL_INFO);
juniper_subtree = proto_tree_add_subtree(tree, tvb, offset, 70,
- ett_juniper, &ti, "Juniper Secure Tunnel Information");
+ ett_juniper, NULL, "Juniper Secure Tunnel Information");
bytes_processed = dissect_juniper_header(tvb, pinfo, tree, juniper_subtree, &flags);
if (bytes_processed < 1) {
@@ -1302,7 +1304,7 @@ static int dissect_juniper_st(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tre
offset += bytes_processed;
/* Dissect lower layers */
- eth_tree = proto_tree_add_subtree(juniper_subtree, tvb, offset, 14, ett_juniper_st_eth, &ti, "Tunnel Ethernet Header");
+ eth_tree = proto_tree_add_subtree(juniper_subtree, tvb, offset, 14, ett_juniper_st_eth, NULL, "Tunnel Ethernet Header");
proto_tree_add_item(eth_tree, hf_juniper_st_eth_dst, tvb, offset, 6, ENC_NA);
offset += 6;
proto_tree_add_item(eth_tree, hf_juniper_st_eth_src, tvb, offset, 6, ENC_NA);
@@ -1322,13 +1324,13 @@ static int dissect_juniper_st(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tre
if (ip_proto != IP_PROTO_ESP) {
return tvb_captured_length(tvb);
}
- esp_tree = proto_tree_add_subtree(juniper_subtree, tvb, offset, 8, ett_juniper_st_esp, &ti, "Tunnel ESP Header");
+ esp_tree = proto_tree_add_subtree(juniper_subtree, tvb, offset, 8, ett_juniper_st_esp, NULL, "Tunnel ESP Header");
proto_tree_add_item(esp_tree, hf_juniper_st_esp_spi, tvb, offset, 4, ENC_NA);
offset += 4;
proto_tree_add_item(esp_tree, hf_juniper_st_esp_seq, tvb, offset, 4, ENC_NA);
offset += 4;
/* 16 bytes unknown data remains in example trace */
- proto_tree_add_subtree(juniper_subtree, tvb, offset, 16, ett_juniper_st_unknown, &ti, "Tunnel Unknown Data");
+ proto_tree_add_subtree(juniper_subtree, tvb, offset, 16, ett_juniper_st_unknown, NULL, "Tunnel Unknown Data");
offset += 16;
break;
default:
@@ -1662,8 +1664,6 @@ proto_reg_handoff_juniper(void)
dissector_handle_t juniper_vn_handle;
dissector_handle_t juniper_st_handle;
- ipv4_handle = find_dissector_add_dependency("ip", proto_juniper);
-
juniper_atm2_handle = create_dissector_handle(dissect_juniper_atm2, proto_juniper);
juniper_atm1_handle = create_dissector_handle(dissect_juniper_atm1, proto_juniper);
juniper_pppoe_handle = create_dissector_handle(dissect_juniper_pppoe, proto_juniper);