aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-isis-lsp.c
diff options
context:
space:
mode:
authorAlexis La Goutte <alexis.lagoutte@gmail.com>2015-06-07 21:23:47 +0200
committerAnders Broman <a.broman58@gmail.com>2015-06-23 04:59:42 +0000
commit167f9b7aab5ad89a9fa4e6b4ebb46a274f7b0f37 (patch)
tree5c65ce133173e255babe9a12513e97fb30a869fe /epan/dissectors/packet-isis-lsp.c
parent61e127a8ca9f63356190e53635f1d0e16dbb7827 (diff)
IS-IS (LSP): Remove proto_tree_add_text call
Part 2 ! Change-Id: Iaa46f3d785cbff6b397edf5bd54c0c3cf65a7264 Reviewed-on: https://code.wireshark.org/review/8822 Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com> Reviewed-by: Michael Mann <mmann78@netscape.net> Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-isis-lsp.c')
-rw-r--r--epan/dissectors/packet-isis-lsp.c241
1 files changed, 173 insertions, 68 deletions
diff --git a/epan/dissectors/packet-isis-lsp.c b/epan/dissectors/packet-isis-lsp.c
index b70ca67c95..29f97ad31e 100644
--- a/epan/dissectors/packet-isis-lsp.c
+++ b/epan/dissectors/packet-isis-lsp.c
@@ -193,8 +193,13 @@ static int hf_isis_lsp_adj_sid_system_id = -1;
static int hf_isis_lsp_sid_sli_label = -1;
static int hf_isis_lsp_sid_sli_index = -1;
static int hf_isis_lsp_sid_sli_ipv6 = -1;
+static int hf_isis_lsp_spb_reserved = -1;
static int hf_isis_lsp_spb_sr_bit = -1;
static int hf_isis_lsp_spb_spvid = -1;
+static int hf_isis_lsp_spb_short_mac_address_t = -1;
+static int hf_isis_lsp_spb_short_mac_address_r = -1;
+static int hf_isis_lsp_spb_short_mac_address_reserved = -1;
+static int hf_isis_lsp_spb_short_mac_address = -1;
/* TLV 149 items draft-previdi-isis-segment-routing-extensions */
static int hf_isis_lsp_sl_binding_flags = -1;
static int hf_isis_lsp_sl_binding_flags_f = -1;
@@ -230,6 +235,10 @@ static int hf_isis_lsp_mt_cap_spb_instance_cist_external_root_path_cost = -1;
static int hf_isis_lsp_rt_capable_tree_used_id_starting_tree_no = -1;
static int hf_isis_lsp_mt_cap_spb_instance_bridge_priority = -1;
static int hf_isis_lsp_mt_cap_spbm_service_identifier_base_vid = -1;
+static int hf_isis_lsp_mt_cap_spbm_service_identifier_t = -1;
+static int hf_isis_lsp_mt_cap_spbm_service_identifier_r = -1;
+static int hf_isis_lsp_mt_cap_spbm_service_identifier_reserved = -1;
+static int hf_isis_lsp_mt_cap_spbm_service_identifier_i_sid = -1;
static int hf_isis_lsp_64_bit_administrative_tag = -1;
static int hf_isis_lsp_grp_macaddr_number_of_sources = -1;
static int hf_isis_lsp_grp_ipv4addr_number_of_sources = -1;
@@ -277,6 +286,15 @@ static int hf_isis_lsp_rt_capable_vlan_group_primary_vlan_id = -1;
static int hf_isis_lsp_rt_capable_interested_vlans_multicast_ipv4 = -1;
static int hf_isis_lsp_rt_capable_interested_vlans_multicast_ipv6 = -1;
static int hf_isis_lsp_mt_cap_spb_instance_number_of_trees = -1;
+static int hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_u = -1;
+static int hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_m = -1;
+static int hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_a = -1;
+static int hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_reserved = -1;
+static int hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_ect = -1;
+static int hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_base_vid = -1;
+static int hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_spvid = -1;
+static int hf_isis_lsp_mt_cap_spb_opaque_algorithm = -1;
+static int hf_isis_lsp_mt_cap_spb_opaque_information = -1;
static int hf_isis_lsp_mt_cap_spbm_service_identifier_b_mac = -1;
static int hf_isis_lsp_ipv6_reachability_distribution = -1;
static int hf_isis_lsp_ipv6_reachability_distribution_internal = -1;
@@ -1673,6 +1691,14 @@ dissect_isis_lsp_clv_mt_cap_spb_instance(tvbuff_t *tvb, packet_info *pinfo,
const int FIXED_LEN = NUM_TREES_OFFSET + NUM_TREES_LEN;
const int VLAN_ID_TUPLE_LEN = 8;
+ static const int *lsp_cap_spb_instance_vlanid_tuple[] = {
+ &hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_u,
+ &hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_m,
+ &hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_a,
+ &hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_reserved,
+ NULL
+ };
+
if (sublen < FIXED_LEN) {
proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
"Short SPB Digest subTLV (%d vs %d)", sublen, FIXED_LEN);
@@ -1720,24 +1746,15 @@ dissect_isis_lsp_clv_mt_cap_spb_instance(tvbuff_t *tvb, packet_info *pinfo,
return;
}
else {
- const guint8 flags = tvb_get_guint8(tvb, subofs);
- const guint8 *ect_id = tvb_get_ptr(tvb, subofs + 1, 4);
- const guint8 *bvid_spvid = tvb_get_ptr(tvb, subofs + 1 + 4, 3);
- const guint16 bvid = (0xff0 & (((guint16)bvid_spvid[0]) << 4)) | (0x0f & (bvid_spvid[1] >> 4));
- const guint16 spvid = (0xf00 & (((guint16)bvid_spvid[1]) << 8)) | (0xff & (bvid_spvid[2]));
- proto_tree_add_text( subtree, tvb, subofs, VLAN_ID_TUPLE_LEN,
- " U: %u, M: %u, A: %u, ECT: %02x-%02x-%02x-%02x, BVID: 0x%03x (%d),%s SPVID: 0x%03x (%d)",
- (flags >> 7) & 1,
- (flags >> 6) & 1,
- (flags >> 5) & 1,
- ect_id[0], ect_id[1], ect_id[2], ect_id[3],
- bvid, bvid,
- ( bvid < 10 ? " "
- : bvid < 100 ? " "
- : bvid < 1000 ? " "
- : ""),
- spvid, spvid);
- subofs += VLAN_ID_TUPLE_LEN;
+ proto_tree_add_bitmask_list(subtree, tvb, subofs, 1, lsp_cap_spb_instance_vlanid_tuple, ENC_BIG_ENDIAN);
+ subofs += 1;
+
+ proto_tree_add_item(subtree, hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_ect, tvb, subofs, 4, ENC_BIG_ENDIAN);
+ subofs += 4;
+ proto_tree_add_item(subtree, hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_base_vid, tvb, subofs, 3, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_spvid, tvb, subofs, 3, ENC_BIG_ENDIAN);
+ subofs += 3;
+
sublen -= VLAN_ID_TUPLE_LEN;
--num_trees;
}
@@ -1751,10 +1768,13 @@ dissect_isis_lsp_clv_mt_cap_spb_instance(tvbuff_t *tvb, packet_info *pinfo,
}
static void
dissect_isis_lsp_clv_mt_cap_spb_oalg(tvbuff_t *tvb,
- proto_tree *tree, int offset, int subtype, int sublen)
+ proto_tree *tree, int offset, int subtype _U_, int sublen _U_)
{
- proto_tree_add_text( tree, tvb, offset, -1,
- "MT-Cap SPB Opaque Algorithm: Type: 0x%02x, Length: %d", subtype, sublen);
+
+ proto_tree_add_item(tree, hf_isis_lsp_mt_cap_spb_opaque_algorithm, tvb, offset, 4, ENC_BIG_ENDIAN);
+ offset += 4;
+ proto_tree_add_item(tree, hf_isis_lsp_mt_cap_spb_opaque_information, tvb, offset, -1, ENC_NA);
+
}
static void
dissect_isis_lsp_clv_mt_cap_spbm_service_identifier(tvbuff_t *tvb, packet_info *pinfo,
@@ -1769,6 +1789,13 @@ dissect_isis_lsp_clv_mt_cap_spbm_service_identifier(tvbuff_t *tvb, packet_info *
const int ISID_LEN = 4;
+ static const int *lsp_cap_spbm_service_identifier[] = {
+ &hf_isis_lsp_mt_cap_spbm_service_identifier_t,
+ &hf_isis_lsp_mt_cap_spbm_service_identifier_r,
+ &hf_isis_lsp_mt_cap_spbm_service_identifier_reserved,
+ NULL
+ };
+
if (sublen < FIXED_LEN) {
proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
"Short SPBM Service Identifier and Unicast Address subTLV (%d vs %d)", sublen, FIXED_LEN);
@@ -1793,19 +1820,17 @@ dissect_isis_lsp_clv_mt_cap_spbm_service_identifier(tvbuff_t *tvb, packet_info *
while (sublen > 0) {
if (sublen < ISID_LEN) {
proto_tree_add_expert_format(subtree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "Short ISID entry (%d vs %d)", sublen, ISID_LEN);
+ "Short ISID entry (%d vs %d)", sublen, 4);
return;
}
else {
- const guint32 isid = tvb_get_ntohl(tvb, subofs);
- proto_tree_add_text( subtree, tvb, subofs, ISID_LEN,
- " T: %u, R: %u, ISID: 0x%06x (%d)",
- (isid >> 31) & 1,
- (isid >> 30) & 1,
- isid & 0x00ffffff,
- isid & 0x00ffffff);
- subofs += ISID_LEN;
- sublen -= ISID_LEN;
+ proto_tree_add_bitmask_list(subtree, tvb, subofs, 1, lsp_cap_spbm_service_identifier, ENC_BIG_ENDIAN);
+ subofs += 1;
+ sublen -= 1;
+
+ proto_tree_add_item(subtree, hf_isis_lsp_mt_cap_spbm_service_identifier_i_sid, tvb, subofs, 3, ENC_BIG_ENDIAN);
+ subofs += 3;
+ sublen -= 3;
}
}
}
@@ -1814,63 +1839,52 @@ static void
dissect_isis_lsp_clv_mt_cap_spbv_mac_address(tvbuff_t *tvb, packet_info *pinfo,
proto_tree *tree, int offset, int subtype, int sublen)
{
- guint16 fixed_data;
- guint16 spvid;
- guint8 sr_bit;
- const int GMAC_LEN = 6; /* GMAC Address */
- const int SPVID_LEN = 2; /* SPVID */
- const int MAC_TUPLE_LEN = 7;
- const int SPVID_OFFSET = 0;
- const int FIXED_LEN = SPVID_OFFSET + SPVID_LEN;
+ static const int *lsp_spb_short_mac_address[] = {
+ &hf_isis_lsp_spb_short_mac_address_t,
+ &hf_isis_lsp_spb_short_mac_address_r,
+ &hf_isis_lsp_spb_short_mac_address_reserved,
+ NULL
+ };
- if (sublen < FIXED_LEN) {
+
+ if (sublen < 2) {
proto_tree_add_expert_format(tree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "Short SPBV Mac Address subTLV (%d vs %d)", sublen, FIXED_LEN);
+ "Short SPBV Mac Address subTLV (%d vs %d)", sublen, 2);
return;
}
else {
proto_tree *subtree;
int subofs = offset;
- fixed_data = tvb_get_ntohs(tvb, subofs);
- spvid = (fixed_data & 0x0FFF);
- sr_bit = (fixed_data & 0x3000) >> 12;
/*************************/
subtree = proto_tree_add_subtree_format( tree, tvb, offset-2, sublen+2, ett_isis_lsp_clv_mt_cap_spbv_mac_address, NULL,
"SPBV Mac Address: Type: 0x%02x, Length: %d", subtype, sublen);
/*************************/
- proto_tree_add_uint(subtree, hf_isis_lsp_spb_sr_bit,
- tvb, subofs, 1, sr_bit);
- proto_tree_add_uint(subtree, hf_isis_lsp_spb_spvid,
- tvb, subofs, 2, spvid);
+ proto_tree_add_item(subtree, hf_isis_lsp_spb_reserved, tvb, subofs, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_isis_lsp_spb_sr_bit, tvb, subofs, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(subtree, hf_isis_lsp_spb_spvid, tvb, subofs, 2, ENC_BIG_ENDIAN);
- subofs += FIXED_LEN;
- sublen -= FIXED_LEN;
+ subofs += 2;
+ sublen -= 2;
/*************************/
while (sublen > 0) {
- if (sublen < MAC_TUPLE_LEN) {
+ if (sublen < 7) {
proto_tree_add_expert_format(subtree, pinfo, &ei_isis_lsp_short_packet, tvb, offset, -1,
- "Short MAC Address entry (%d vs %d)", sublen, MAC_TUPLE_LEN);
+ "Short MAC Address entry (%d vs %d)", sublen, 7);
return;
}
else {
- const guint32 tr_bit = tvb_get_guint8(tvb, subofs);
- const guint8 *gmac = tvb_get_ptr(tvb, subofs + 1, GMAC_LEN);
- proto_tree_add_text( subtree, tvb, subofs, MAC_TUPLE_LEN,
- " T: %u, R: %u, MAC: %02x-%02x-%02x-%02x-%02x-%02x",
- (tr_bit >> 7) & 1,
- (tr_bit >> 6) & 1,
- gmac[0],
- gmac[1],
- gmac[2],
- gmac[3],
- gmac[4],
- gmac[5]);
- subofs += MAC_TUPLE_LEN;
- sublen -= MAC_TUPLE_LEN;
+ proto_tree_add_bitmask_list(subtree, tvb, subofs, 1, lsp_spb_short_mac_address, ENC_BIG_ENDIAN);
+ subofs += 1;
+ sublen -= 1;
+
+ proto_tree_add_item(subtree, hf_isis_lsp_spb_short_mac_address, tvb, subofs, 6, ENC_NA);
+
+ subofs += 6;
+ sublen -= 6;
}
}
}
@@ -3823,15 +3837,41 @@ proto_register_isis_lsp(void)
NULL, HFILL }
},
+ { &hf_isis_lsp_spb_reserved,
+ { "SR Bit", "isis.lsp.spb.reserved",
+ FT_UINT16, BASE_DEC, NULL, 0xC000,
+ NULL, HFILL }
+ },
+
{ &hf_isis_lsp_spb_sr_bit,
{ "SR Bit", "isis.lsp.spb.sr_bit",
- FT_UINT8, BASE_DEC, NULL, 0,
+ FT_UINT16, BASE_DEC, NULL, 0x3000,
NULL, HFILL }
},
{ &hf_isis_lsp_spb_spvid,
{ "SPVID", "isis.lsp.spb.spvid",
- FT_UINT16, BASE_HEX_DEC, NULL, 0,
+ FT_UINT16, BASE_HEX_DEC, NULL, 0x0FFF,
+ NULL, HFILL }
+ },
+ { &hf_isis_lsp_spb_short_mac_address_t,
+ { "T", "isis.lsp.spb.mac_address.t",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }
+ },
+ { &hf_isis_lsp_spb_short_mac_address_r,
+ { "R", "isis.lsp.spb.mac_address.r",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }
+ },
+ { &hf_isis_lsp_spb_short_mac_address_reserved,
+ { "Reserved", "isis.lsp.spb.mac_address.reserved",
+ FT_UINT8, BASE_DEC, NULL, 0x3F,
+ NULL, HFILL }
+ },
+ { &hf_isis_lsp_spb_short_mac_address,
+ { "MAC Address", "isis.lsp.spb.mac_address",
+ FT_ETHER, BASE_NONE, NULL, 0x00,
NULL, HFILL }
},
/* TLV 149 draft-previdi-isis-segmentrouting-extensions */
@@ -4341,6 +4381,51 @@ proto_register_isis_lsp(void)
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
+ { &hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_u,
+ { "U", "isis.lsp.mt_cap_spb_instance.vlanid_tuple.u",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ "Set if this bridge is currently using this ECT-ALGORITHM for I-SIDs it sources or sinks", HFILL }
+ },
+ { &hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_m,
+ { "M", "isis.lsp.mt_cap_spb_instance.vlanid_tuple.m",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ "indicates if this is SPBM or SPBV mode", HFILL }
+ },
+ { &hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_a,
+ { "A", "isis.lsp.mt_cap_spb_instance.vlanid_tuple.a",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ "When set, declares this is an SPVID with auto-allocation", HFILL }
+ },
+ { &hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_reserved,
+ { "Reserved", "isis.lsp.mt_cap_spb_instance.vlanid_tuple.reserved",
+ FT_UINT8, BASE_HEX, NULL, 0x1F,
+ NULL, HFILL }
+ },
+ { &hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_ect,
+ { "ECT-ALGORITHM", "isis.lsp.mt_cap_spb_instance.vlanid_tuple.ect",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_base_vid,
+ { "Base VID", "isis.lsp.mt_cap_spb_instance.vlanid_tuple.basevid",
+ FT_UINT24, BASE_DEC, NULL, 0xFFF000,
+ NULL, HFILL }
+ },
+ { &hf_isis_lsp_mt_cap_spb_instance_vlanid_tuple_spvid,
+ { "SPVID", "isis.lsp.mt_cap_spb_instance.vlanid_tuple.spvid",
+ FT_UINT24, BASE_DEC, NULL, 0xFFF000,
+ NULL, HFILL }
+ },
+ { &hf_isis_lsp_mt_cap_spb_opaque_algorithm,
+ { "Algorithm", "isis.lsp.mt_cap_spb_opaque.algorithm",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_isis_lsp_mt_cap_spb_opaque_information,
+ { "information", "isis.lsp.mt_cap_spb_opaque.information",
+ FT_BYTES, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
{ &hf_isis_lsp_mt_cap_spbm_service_identifier_b_mac,
{ "B-MAC", "isis.lsp.mt_cap_spbm_service_identifier.b_mac",
FT_ETHER, BASE_NONE, NULL, 0x0,
@@ -4351,6 +4436,26 @@ proto_register_isis_lsp(void)
FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
NULL, HFILL }
},
+ { &hf_isis_lsp_mt_cap_spbm_service_identifier_t,
+ { "T", "isis.lsp.mt_cap_spbm_service_identifier.t",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }
+ },
+ { &hf_isis_lsp_mt_cap_spbm_service_identifier_r,
+ { "R", "isis.lsp.mt_cap_spbm_service_identifier.r",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }
+ },
+ { &hf_isis_lsp_mt_cap_spbm_service_identifier_reserved,
+ { "Reserved", "isis.lsp.mt_cap_spbm_service_identifier.reserved",
+ FT_UINT8, BASE_HEX, NULL, 0x3F,
+ NULL, HFILL }
+ },
+ { &hf_isis_lsp_mt_cap_spbm_service_identifier_i_sid,
+ { "I-SID", "isis.lsp.mt_cap_spbm_service_identifier.i_sid",
+ FT_UINT24, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }
+ },
{ &hf_isis_lsp_mt_cap_mtid,
{ "Topology ID", "isis.lsp.mt_cap.mtid",
FT_UINT16, BASE_DEC|BASE_RANGE_STRING, RVALS(mtid_strings), 0x0fff,