diff options
-rw-r--r-- | epan/dissectors/packet-esis.c | 5 | ||||
-rw-r--r-- | epan/dissectors/packet-isis-hello.c | 41 | ||||
-rw-r--r-- | epan/dissectors/packet-isis-lsp.c | 39 | ||||
-rw-r--r-- | epan/dissectors/packet-isis-snp.c | 51 | ||||
-rw-r--r-- | epan/dissectors/packet-osi-options.c | 6 | ||||
-rw-r--r-- | epan/ftypes/ftype-bytes.c | 80 | ||||
-rw-r--r-- | epan/ftypes/ftypes.h | 1 | ||||
-rw-r--r-- | epan/proto.c | 47 | ||||
-rw-r--r-- | epan/wslua/wslua_field.c | 1 | ||||
-rw-r--r-- | epan/wslua/wslua_proto.c | 3 | ||||
-rw-r--r-- | epan/wslua/wslua_tree.c | 1 | ||||
-rw-r--r-- | rawshark.c | 2 | ||||
-rw-r--r-- | ui/gtk/packet_win.c | 2 |
13 files changed, 180 insertions, 99 deletions
diff --git a/epan/dissectors/packet-esis.c b/epan/dissectors/packet-esis.c index 14e29364d3..90e659aa42 100644 --- a/epan/dissectors/packet-esis.c +++ b/epan/dissectors/packet-esis.c @@ -232,8 +232,7 @@ esis_dissect_redirect_pdu( guint8 len, tvbuff_t *tvb, proto_tree *tree) { proto_tree_add_text( tree, tvb, offset, tmpl + 1, "### Subnetwork Address Section ###"); proto_tree_add_uint_format_value(tree, hf_esis_bsnpal, tvb, offset++, 1, tmpl, "%2u Octets", tmpl); - proto_tree_add_string( tree, hf_esis_bsnpa, tvb, offset, tmpl, - print_system_id( tvb_get_ptr(tvb, offset, tmpl), tmpl ) ); + proto_tree_add_item( tree, hf_esis_bsnpa, tvb, offset, tmpl, ENC_NA); offset += tmpl; len -= ( tmpl + 1 ); tmpl = (int) tvb_get_guint8(tvb, offset); @@ -438,7 +437,7 @@ proto_register_esis(void) { { &hf_esis_bsnpal, { "BSNPAL", "esis.bsnpal", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, { &hf_esis_net, { "NET", "esis.net", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_esis_da, { "DA", "esis.da", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }}, - { &hf_esis_bsnpa, { "BSNPA", "esis.bsnpa", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + { &hf_esis_bsnpa, { "BSNPA", "esis.bsnpa", FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }}, }; /* * diff --git a/epan/dissectors/packet-isis-hello.c b/epan/dissectors/packet-isis-hello.c index 816ee50cdd..d14a316d06 100644 --- a/epan/dissectors/packet-isis-hello.c +++ b/epan/dissectors/packet-isis-hello.c @@ -323,7 +323,6 @@ dissect_hello_restart_clv(tvbuff_t *tvb, packet_info* pinfo _U_, proto_item *restart_flags_item; proto_item *hold_time_item; const char *sep; - const guint8 *neighbor_id; if (length >= 1) { restart_options = tvb_get_guint8(tvb, offset); @@ -364,11 +363,7 @@ dissect_hello_restart_clv(tvbuff_t *tvb, packet_info* pinfo _U_, * set. */ if (length >= 3 + id_length && ISIS_MASK_RESTART_RA(restart_options)) { - neighbor_id = tvb_get_ptr(tvb, offset+3, id_length); - proto_tree_add_bytes_format_value( tree, - hf_isis_hello_clv_restart_neighbor, tvb, offset+3, - id_length, neighbor_id, "%s", - print_system_id( neighbor_id, id_length ) ); + proto_tree_add_item( tree, hf_isis_hello_clv_restart_neighbor, tvb, offset+3, id_length, ENC_NA); } } @@ -621,8 +616,6 @@ static void dissect_hello_ptp_adj_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, int offset, int id_length, int length) { - const guint8 *source_id; - switch(length) { case 1: @@ -635,16 +628,12 @@ dissect_hello_ptp_adj_clv(tvbuff_t *tvb, packet_info* pinfo, case 11: proto_tree_add_item(tree, hf_isis_hello_adjacency_state, tvb, offset, 1, ENC_NA); proto_tree_add_item(tree, hf_isis_hello_extended_local_circuit_id, tvb, offset+1, 4, ENC_BIG_ENDIAN); - source_id = tvb_get_ptr(tvb, offset+5, id_length); - proto_tree_add_bytes_format_value(tree, hf_isis_hello_neighbor_systemid, tvb, - offset+5, id_length, source_id, "%s", print_system_id(source_id, id_length )); + proto_tree_add_item(tree, hf_isis_hello_neighbor_systemid, tvb, offset+5, id_length, ENC_NA); break; case 15: proto_tree_add_item(tree, hf_isis_hello_adjacency_state, tvb, offset, 1, ENC_NA); proto_tree_add_item(tree, hf_isis_hello_extended_local_circuit_id, tvb, offset+1, 4, ENC_BIG_ENDIAN); - source_id = tvb_get_ptr(tvb, offset+5, id_length); - proto_tree_add_bytes_format_value(tree, hf_isis_hello_neighbor_systemid, tvb, - offset+5, id_length, source_id, "%s", print_system_id( source_id, id_length )); + proto_tree_add_item(tree, hf_isis_hello_neighbor_systemid, tvb, offset+5, id_length, ENC_NA); proto_tree_add_item(tree, hf_isis_hello_neighbor_extended_local_circuit_id, tvb, offset+5+id_length, 4, ENC_BIG_ENDIAN); break; default: @@ -959,10 +948,7 @@ dissect_isis_hello(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offs { proto_item *ti; proto_tree *hello_tree; - const guint8 *source_id; int pdu_length; - const guint8 *lan_id; - gchar* system_id; col_set_str(pinfo->cinfo, COL_PROTOCOL, "ISIS HELLO"); @@ -973,12 +959,8 @@ dissect_isis_hello(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offs proto_tree_add_item(hello_tree, hf_isis_hello_circuit_reserved, tvb, offset, 1, ENC_NA); offset += 1; - source_id = tvb_get_ptr(tvb, offset, id_length); - system_id = print_system_id( source_id, id_length ); - proto_tree_add_bytes_format_value(hello_tree, hf_isis_hello_source_id, tvb, - offset, id_length, source_id, - "%s", system_id); - col_append_fstr(pinfo->cinfo, COL_INFO, ", System-ID: %s", system_id); + proto_tree_add_item(hello_tree, hf_isis_hello_source_id, tvb, offset, id_length, ENC_NA); + col_append_fstr(pinfo->cinfo, COL_INFO, ", System-ID: %s", print_system_id( tvb_get_ptr(tvb, offset, id_length), id_length )); offset += id_length; @@ -1000,10 +982,7 @@ dissect_isis_hello(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offs proto_tree_add_item(hello_tree, hf_isis_hello_priority_reserved, tvb, offset, 1, ENC_NA); offset += 1; - lan_id = tvb_get_ptr(tvb, offset, id_length+1); - proto_tree_add_bytes_format_value(hello_tree, hf_isis_hello_lan_id, tvb, - offset, id_length + 1, lan_id, - "%s", print_system_id( lan_id, id_length + 1 ) ); + proto_tree_add_item(hello_tree, hf_isis_hello_lan_id, tvb, offset, id_length + 1, ENC_NA); offset += id_length + 1; } @@ -1076,7 +1055,7 @@ proto_register_isis_hello(void) { &hf_isis_hello_source_id, { "SystemID {Sender of PDU}", "isis.hello.source_id", - FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_isis_hello_holding_timer, { "Holding timer", "isis.hello.holding_timer", @@ -1096,7 +1075,7 @@ proto_register_isis_hello(void) { &hf_isis_hello_lan_id, { "SystemID {Designated IS}", "isis.hello.lan_id", - FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_isis_hello_local_circuit_id, { "Local circuit ID", "isis.hello.local_circuit_id", @@ -1146,7 +1125,7 @@ proto_register_isis_hello(void) { &hf_isis_hello_clv_restart_neighbor, { "Restarting Neighbor ID", "isis.hello.clv_restart.neighbor", - FT_BYTES, BASE_NONE, NULL, 0x0, + FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, "The System ID of the restarting neighbor", HFILL }}, /* Generated from convert_proto_tree_add_text.pl */ @@ -1157,7 +1136,7 @@ proto_register_isis_hello(void) { &hf_isis_hello_checksum, { "Checksum", "isis.hello.checksum", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }}, { &hf_isis_hello_adjacency_state, { "Adjacency State", "isis.hello.adjacency_state", FT_UINT8, BASE_DEC, VALS(adj_state_vals), 0x0, NULL, HFILL }}, { &hf_isis_hello_extended_local_circuit_id, { "Extended Local circuit ID", "isis.hello.extended_local_circuit_id", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }}, - { &hf_isis_hello_neighbor_systemid, { "Neighbor SystemID", "isis.hello.neighbor_systemid", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + { &hf_isis_hello_neighbor_systemid, { "Neighbor SystemID", "isis.hello.neighbor_systemid", FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_isis_hello_neighbor_extended_local_circuit_id, { "Neighbor Extended Local circuit ID", "isis.hello.neighbor_extended_local_circuit_id", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }}, { &hf_isis_hello_is_neighbor, { "IS Neighbor", "isis.hello.is_neighbor", FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }}, }; diff --git a/epan/dissectors/packet-isis-lsp.c b/epan/dissectors/packet-isis-lsp.c index 258e1e1c43..7d90b8a1c3 100644 --- a/epan/dissectors/packet-isis-lsp.c +++ b/epan/dissectors/packet-isis-lsp.c @@ -1667,13 +1667,9 @@ dissect_lsp_eis_neighbors_clv_inner(tvbuff_t *tvb, packet_info *pinfo, proto_tre */ if ( tree ) { if ( is_eis ) { - ti = proto_tree_add_bytes_format_value(tree, hf_isis_lsp_eis_neighbors_es_neighbor, tvb, offset, tlen, - tvb_get_ptr(tvb, offset+4, id_length), "%s", - print_system_id( tvb_get_ptr(tvb, offset+4, id_length), id_length ) ); + ti = proto_tree_add_text(tree, tvb, offset, tlen, "ES Neighbor"); } else { - ti = proto_tree_add_bytes_format_value(tree, hf_isis_lsp_eis_neighbors_is_neighbor, tvb, offset, tlen, - tvb_get_ptr(tvb, offset+4, id_length), "%s", - print_system_id( tvb_get_ptr(tvb, offset+4, id_length), id_length ) ); + ti = proto_tree_add_text(tree, tvb, offset, tlen, "IS Neighbor"); } ntree = proto_item_add_subtree(ti, ett_isis_lsp_clv_is_neighbors); @@ -1692,6 +1688,8 @@ dissect_lsp_eis_neighbors_clv_inner(tvbuff_t *tvb, packet_info *pinfo, proto_tre proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_error_metric, tvb, offset, 1, ENC_NA); proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_error_metric_supported, tvb, offset, 1, ENC_NA); proto_tree_add_item(ntree, hf_isis_lsp_eis_neighbors_error_metric_ie, tvb, offset+3, 1, ENC_NA); + proto_tree_add_item(ntree, is_eis ? hf_isis_lsp_eis_neighbors_es_neighbor : hf_isis_lsp_eis_neighbors_is_neighbor, + tvb, offset+4, id_length, ENC_NA); } offset += tlen; length -= tlen; @@ -1977,8 +1975,8 @@ dissect_lsp_ext_is_reachability_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tre guint clv_code, clv_len; while (length > 0) { - ti = proto_tree_add_bytes_format_value(tree, hf_isis_lsp_ext_is_reachability_is_neighbor, tvb, offset, -1, - tvb_get_ptr(tvb, offset, 7), "%s", print_system_id (tvb_get_ptr(tvb, offset, 7), 7) ); + ti = proto_tree_add_item(tree, hf_isis_lsp_ext_is_reachability_is_neighbor, tvb, offset, 7, ENC_NA); + proto_item_set_len(ti, -1); ntree = proto_item_add_subtree (ti, ett_isis_lsp_part_of_clv_ext_is_reachability ); proto_tree_add_item(ntree, hf_isis_lsp_ext_is_reachability_metric, tvb, offset+7, 3, ENC_BIG_ENDIAN); @@ -2175,11 +2173,8 @@ dissect_lsp_partition_dis_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tre /* * Gotta build a sub-tree for all our pieces */ - if ( tree ) { - proto_tree_add_bytes_format_value( tree, hf_isis_lsp_partition_designated_l2_is, tvb, offset, id_length, - tvb_get_ptr(tvb, offset, id_length), "%s", - print_system_id( tvb_get_ptr(tvb, offset, id_length), id_length ) ); - } + proto_tree_add_item( tree, hf_isis_lsp_partition_designated_l2_is, tvb, offset, id_length, ENC_NA); + length -= id_length; offset += id_length; if ( length > 0 ) { @@ -2602,12 +2597,8 @@ dissect_isis_lsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset offset += 2; offset_checksum = offset; - system_id = print_system_id( tvb_get_ptr(tvb, offset, id_length+2), - id_length+2); - proto_tree_add_bytes_format_value(lsp_tree, hf_isis_lsp_lsp_id, - tvb, offset, id_length + 2, - tvb_get_ptr(tvb, offset, id_length+2), "%s", system_id); - + proto_tree_add_item(lsp_tree, hf_isis_lsp_lsp_id, tvb, offset, id_length + 2, ENC_NA); + system_id = print_system_id( tvb_get_ptr(tvb, offset, id_length+2), id_length+2); col_append_fstr(pinfo->cinfo, COL_INFO, ", LSP-ID: %s", system_id); offset += (id_length + 2); @@ -2720,7 +2711,7 @@ proto_register_isis_lsp(void) BASE_DEC, NULL, 0x0, NULL, HFILL }}, { &hf_isis_lsp_lsp_id, - { "LSP-ID", "isis.lsp.lsp_id", FT_BYTES, + { "LSP-ID", "isis.lsp.lsp_id", FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_isis_lsp_hostname, @@ -2864,22 +2855,22 @@ proto_register_isis_lsp(void) { &hf_isis_lsp_mt_cap_spbm_service_identifier_base_vid, { "Base-VID", "isis.lsp.mt_cap_spbm_service_identifier.base_vid", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }}, { &hf_isis_lsp_mt_cap_mtid, { "MTID", "isis.lsp.mt_cap.mtid", FT_UINT16, BASE_HEX, NULL, 0xfff, NULL, HFILL }}, { &hf_isis_lsp_eis_neighbors_reserved, { "Reserved", "isis.lsp.eis_neighbors_clv_inner.reserved", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }}, - { &hf_isis_lsp_eis_neighbors_es_neighbor, { "ES Neighbor", "isis.lsp.eis_neighbors.es_neighbor", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, - { &hf_isis_lsp_eis_neighbors_is_neighbor, { "IS Neighbor", "isis.lsp.eis_neighbors.is_neighbor", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + { &hf_isis_lsp_eis_neighbors_es_neighbor, { "ES Neighbor", "isis.lsp.eis_neighbors.es_neighbor", FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + { &hf_isis_lsp_eis_neighbors_is_neighbor, { "IS Neighbor", "isis.lsp.eis_neighbors.is_neighbor", FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_isis_lsp_eis_neighbors_default_metric, { "Default Metric", "isis.lsp.eis_neighbors.default_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }}, { &hf_isis_lsp_eis_neighbors_delay_metric, { "Delay Metric", "isis.lsp.eis_neighbors.delay_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }}, { &hf_isis_lsp_eis_neighbors_expense_metric, { "Expense Metric", "isis.lsp.eis_neighbors.expense_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }}, { &hf_isis_lsp_eis_neighbors_error_metric, { "Error Metric", "isis.lsp.eis_neighbors.error_metric", FT_UINT8, BASE_DEC, NULL, 0x3F, NULL, HFILL }}, { &hf_isis_lsp_maximum_link_bandwidth, { "Maximum link bandwidth", "isis.lsp.maximum_link_bandwidth", FT_FLOAT, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_isis_lsp_reservable_link_bandwidth, { "Reservable link bandwidth", "isis.lsp.reservable_link_bandwidth", FT_FLOAT, BASE_NONE, NULL, 0x0, NULL, HFILL }}, - { &hf_isis_lsp_ext_is_reachability_is_neighbor, { "IS neighbor", "isis.lsp.ext_is_reachability.is_neighbor", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + { &hf_isis_lsp_ext_is_reachability_is_neighbor, { "IS neighbor", "isis.lsp.ext_is_reachability.is_neighbor", FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_isis_lsp_ext_is_reachability_metric, { "Metric", "isis.lsp.ext_is_reachability.metric", FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL }}, { &hf_isis_lsp_ext_is_reachability_link_local_identifier, { "Link Local Identifier", "isis.lsp.ext_is_reachability.link_local_identifier", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }}, { &hf_isis_lsp_ext_is_reachability_link_remote_identifier, { "Link Remote Identifier", "isis.lsp.ext_is_reachability.link_remote_identifier", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }}, { &hf_isis_lsp_ext_is_reachability_ipv4_interface_address, { "IPv4 interface address", "isis.lsp.ext_is_reachability.ipv4_interface_address", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_isis_lsp_ext_is_reachability_ipv4_neighbor_address, { "IPv4 neighbor address", "isis.lsp.ext_is_reachability.ipv4_neighbor_address", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_isis_lsp_ext_is_reachability_traffic_engineering_default_metric, { "Traffic engineering default metric", "isis.lsp.ext_is_reachability.traffic_engineering_default_metric", FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL }}, - { &hf_isis_lsp_partition_designated_l2_is, { "Partition designated L2 IS", "isis.lsp.partition_designated_l2_is", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + { &hf_isis_lsp_partition_designated_l2_is, { "Partition designated L2 IS", "isis.lsp.partition_designated_l2_is", FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_isis_lsp_error_metric, { "Error metric", "isis.lsp.error_metric", FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x08, NULL, HFILL }}, { &hf_isis_lsp_expense_metric, { "Expense metric", "isis.lsp.expense_metric", FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x04, NULL, HFILL }}, { &hf_isis_lsp_delay_metric, { "Delay metric", "isis.lsp.delay_metric", FT_BOOLEAN, 8, TFS(&tfs_set_notset), 0x02, NULL, HFILL }}, diff --git a/epan/dissectors/packet-isis-snp.c b/epan/dissectors/packet-isis-snp.c index be178bda04..dd9c58b929 100644 --- a/epan/dissectors/packet-isis-snp.c +++ b/epan/dissectors/packet-isis-snp.c @@ -151,7 +151,6 @@ dissect_snp_lsp_entries_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, { proto_item *ti; proto_tree *subtree; - const guint8 *source_id; while ( length > 0 ) { if ( length < 2+id_length+2+4+2 ) { @@ -163,9 +162,7 @@ dissect_snp_lsp_entries_clv(tvbuff_t *tvb, packet_info* pinfo, proto_tree *tree, ti = proto_tree_add_text(tree, tvb, offset, 2+id_length+2+4+2, "LSP Entry"); subtree = proto_item_add_subtree(ti,ett_isis_csnp_lsp_entry); - source_id = tvb_get_ptr(tvb, offset+2, id_length+2); - proto_tree_add_bytes_format_value(tree, hf_isis_csnp_lsp_id, tvb, - offset+2, 8, source_id, "%s", print_system_id(source_id, id_length+2)); + proto_tree_add_item(tree, hf_isis_csnp_lsp_id, tvb, offset+2, id_length+2, ENC_NA); proto_tree_add_item(subtree, hf_isis_csnp_lsp_seq_num, tvb, offset+2+id_length+2, 4, ENC_BIG_ENDIAN); proto_tree_add_item(subtree, hf_isis_csnp_lsp_remain_life, tvb, offset, 2, ENC_BIG_ENDIAN); @@ -305,8 +302,6 @@ dissect_isis_csnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offse proto_tree *csnp_tree = NULL; guint16 pdu_length; int len; - const guint8 *source_id; - gchar* system_id; col_set_str(pinfo->cinfo, COL_PROTOCOL, "ISIS CSNP"); @@ -318,28 +313,18 @@ dissect_isis_csnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offse offset, 2, pdu_length); offset += 2; - source_id = tvb_get_ptr(tvb, offset, id_length); - system_id = print_system_id( source_id, id_length ); - proto_tree_add_bytes_format_value(csnp_tree, hf_isis_csnp_source_id, tvb, - offset, id_length, source_id, - "%s", system_id); - col_append_fstr(pinfo->cinfo, COL_INFO, ", Source-ID: %s", system_id); + proto_tree_add_item(csnp_tree, hf_isis_csnp_source_id, tvb, offset, id_length, ENC_NA); + col_append_fstr(pinfo->cinfo, COL_INFO, ", Source-ID: %s", print_system_id( tvb_get_ptr(tvb, offset, id_length), id_length )); offset += id_length + 1; - source_id = tvb_get_ptr(tvb, offset, id_length+2); - system_id = print_system_id( source_id, id_length+2 ); - proto_tree_add_bytes_format_value(csnp_tree, hf_isis_csnp_start_lsp_id, tvb, - offset, id_length + 2, source_id, - "%s", system_id); - col_append_fstr(pinfo->cinfo, COL_INFO, ", Start LSP-ID: %s", system_id); + proto_tree_add_item(csnp_tree, hf_isis_csnp_start_lsp_id, tvb, offset, id_length + 2, ENC_NA); + col_append_fstr(pinfo->cinfo, COL_INFO, ", Start LSP-ID: %s", + print_system_id( tvb_get_ptr(tvb, offset, id_length+2), id_length+2 )); offset += id_length + 2; - source_id = tvb_get_ptr(tvb, offset, id_length+2); - system_id = print_system_id( source_id, id_length+2 ); - proto_tree_add_bytes_format_value(csnp_tree, hf_isis_csnp_end_lsp_id, tvb, - offset, id_length + 2, source_id, - "%s", system_id); - col_append_fstr(pinfo->cinfo, COL_INFO, ", End LSP-ID: %s", system_id); + proto_tree_add_item(csnp_tree, hf_isis_csnp_end_lsp_id, tvb, offset, id_length + 2, ENC_NA); + col_append_fstr(pinfo->cinfo, COL_INFO, ", End LSP-ID: %s", + print_system_id( tvb_get_ptr(tvb, offset, id_length+2), id_length+2 )); offset += id_length + 2; len = pdu_length - header_length; @@ -380,8 +365,6 @@ dissect_isis_psnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offse proto_tree *psnp_tree; guint16 pdu_length; int len; - const guint8 *source_id; - gchar* system_id; col_set_str(pinfo->cinfo, COL_PROTOCOL, "ISIS PSNP"); @@ -393,12 +376,8 @@ dissect_isis_psnp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offse offset, 2, pdu_length); offset += 2; - source_id = tvb_get_ptr(tvb, offset, id_length); - system_id = print_system_id( source_id, id_length ); - proto_tree_add_bytes_format_value(psnp_tree, hf_isis_psnp_source_id, tvb, - offset, id_length, source_id, - "%s", system_id); - col_append_fstr(pinfo->cinfo, COL_INFO, ", Source-ID: %s", system_id); + proto_tree_add_item(psnp_tree, hf_isis_psnp_source_id, tvb, offset, id_length, ENC_NA); + col_append_fstr(pinfo->cinfo, COL_INFO, ", Source-ID: %s", print_system_id( tvb_get_ptr(tvb, offset, id_length), id_length )); offset += id_length + 1; @@ -440,16 +419,16 @@ proto_register_isis_csnp(void) BASE_DEC, NULL, 0x0, NULL, HFILL }}, { &hf_isis_csnp_source_id, { "Source-ID", "isis.csnp.source_id", - FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_isis_csnp_start_lsp_id, { "Start LSP-ID", "isis.csnp.start_lsp_id", - FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_isis_csnp_end_lsp_id, { "End LSP-ID", "isis.csnp.end_lsp_id", - FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_isis_csnp_lsp_id, { "LSP-ID", "isis.csnp.lsp_id", - FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_isis_csnp_lsp_seq_num, { "LSP Sequence Number", "isis.csnp.lsp_seq_num", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }}, diff --git a/epan/dissectors/packet-osi-options.c b/epan/dissectors/packet-osi-options.c index 5e0e4ce450..e7b15cfa57 100644 --- a/epan/dissectors/packet-osi-options.c +++ b/epan/dissectors/packet-osi-options.c @@ -564,9 +564,7 @@ dissect_osi_options(guchar opt_len, tvbuff_t *tvb, int offset, proto_tree *tree) break; case OSI_OPT_SNPA_MASK: - proto_tree_add_bytes_format(osi_option_tree, hf_osi_options_snpa_mask, tvb, offset, parm_len, - tvb_get_ptr(tvb, offset, parm_len), "%s", - print_system_id(tvb_get_ptr(tvb, offset, parm_len), parm_len)); + proto_tree_add_item(osi_option_tree, hf_osi_options_snpa_mask, tvb, offset, parm_len, ENC_NA); break; case OSI_OPT_ES_CONFIG_TIMER: @@ -639,7 +637,7 @@ proto_register_osi_options(void) { { &hf_osi_options_security_type, { "Security type", "osi.options.security_type", FT_UINT8, BASE_DEC, VALS(osi_opt_sec_vals), OSI_OPT_SEC_MASK, NULL, HFILL }}, { &hf_osi_options_priority, { "Priority", "osi.options.priority", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }}, { &hf_osi_options_address_mask, { "Address Mask", "osi.options.address_mask", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, - { &hf_osi_options_snpa_mask, { "SNPA Mask", "osi.options.snpa_mask", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, + { &hf_osi_options_snpa_mask, { "SNPA Mask", "osi.options.snpa_mask", FT_SYSTEM_ID, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_osi_options_esct, { "ESCT (seconds)", "osi.options.esct", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }}, { &hf_osi_options_padding, { "Padding", "osi.options.padding", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, }; diff --git a/epan/ftypes/ftype-bytes.c b/epan/ftypes/ftype-bytes.c index de7adac863..ffe7738e31 100644 --- a/epan/ftypes/ftype-bytes.c +++ b/epan/ftypes/ftype-bytes.c @@ -29,6 +29,7 @@ #include <epan/addr_resolv.h> #include <epan/strutil.h> #include <epan/oids.h> +#include <epan/osi-utils.h> #define CMP_MATCHES cmp_matches @@ -134,6 +135,12 @@ rel_oid_to_repr(fvalue_t *fv, ftrepr_t rtype _U_, char *buf) } static void +system_id_to_repr(fvalue_t *fv, ftrepr_t rtype, char *buf) +{ + print_system_id_buf(fv->value.bytes->data,fv->value.bytes->len, buf, bytes_repr_len(fv, rtype)); +} + +static void bytes_to_repr(fvalue_t *fv, ftrepr_t rtype _U_, char *buf) { guint8 *c; @@ -197,6 +204,16 @@ oid_fvalue_set(fvalue_t *fv, gpointer value, gboolean already_copied) fv->value.bytes = (GByteArray *)value; } +static void +system_id_fvalue_set(fvalue_t *fv, gpointer value, gboolean already_copied) +{ + g_assert(already_copied); + + /* Free up the old value, if we have one */ + bytes_fvalue_free(fv); + + fv->value.bytes = (GByteArray *)value; +} static gpointer value_get(fvalue_t *fv) @@ -430,6 +447,30 @@ rel_oid_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value _U_, L return TRUE; } +static gboolean +system_id_from_unparsed(fvalue_t *fv, char *s, gboolean allow_partial_value, LogFunc logfunc) +{ + /* + * Don't log a message if this fails; we'll try looking it + * up as another way if it does, and if that fails, + * we'll log a message. + */ + if (bytes_from_unparsed(fv, s, TRUE, NULL)) { + if (fv->value.bytes->len > MAX_SYSTEMID_LEN) { + logfunc("\"%s\" contains too many bytes to be a valid OSI System-ID.", + s); + return FALSE; + } + + return TRUE; + } + + /* XXX - need better validation of Vines address */ + + logfunc("\"%s\" is not a valid OSI System-ID.", s); + return FALSE; +} + static guint len(fvalue_t *fv) { @@ -901,6 +942,44 @@ ftype_register_bytes(void) slice, }; + static ftype_t system_id_type = { + FT_SYSTEM_ID, /* ftype */ + "FT_SYSTEM_ID", /* name */ + "OSI System-ID", /* pretty_name */ + 0, /* wire_size */ + bytes_fvalue_new, /* new_value */ + bytes_fvalue_free, /* free_value */ + system_id_from_unparsed, /* val_from_unparsed */ + NULL, /* val_from_string */ + system_id_to_repr, /* val_to_string_repr */ + bytes_repr_len, /* len_string_repr */ + + system_id_fvalue_set, /* set_value */ + NULL, /* set_value_uinteger */ + NULL, /* set_value_sinteger */ + NULL, /* set_value_integer64 */ + NULL, /* set_value_floating */ + + value_get, /* get_value */ + NULL, /* get_value_uinteger */ + NULL, /* get_value_sinteger */ + NULL, /* get_value_integer64 */ + NULL, /* get_value_floating */ + + cmp_eq, + cmp_ne, + cmp_gt, + cmp_ge, + cmp_lt, + cmp_le, + cmp_bitwise_and, + cmp_contains, + NULL, /* cmp_matches */ + + len, + slice, + }; + ftype_register(FT_BYTES, &bytes_type); ftype_register(FT_UINT_BYTES, &uint_bytes_type); ftype_register(FT_AX25, &ax25_type); @@ -908,4 +987,5 @@ ftype_register_bytes(void) ftype_register(FT_ETHER, ðer_type); ftype_register(FT_OID, &oid_type); ftype_register(FT_REL_OID, &rel_oid_type); + ftype_register(FT_SYSTEM_ID, &system_id_type); } diff --git a/epan/ftypes/ftypes.h b/epan/ftypes/ftypes.h index 96164f717d..05bd42513e 100644 --- a/epan/ftypes/ftypes.h +++ b/epan/ftypes/ftypes.h @@ -70,6 +70,7 @@ enum ftenum { FT_AX25, FT_VINES, FT_REL_OID, /* RELATIVE-OID */ + FT_SYSTEM_ID, FT_NUM_TYPES /* last item number plus one */ }; diff --git a/epan/proto.c b/epan/proto.c index 09594e0bdc..2a934c23c5 100644 --- a/epan/proto.c +++ b/epan/proto.c @@ -52,6 +52,7 @@ #include "column-utils.h" #include "to_str-int.h" #include "to_str.h" +#include "osi-utils.h" #include "expert.h" #include "show_exception.h" @@ -213,6 +214,10 @@ proto_tree_set_oid(field_info *fi, const guint8* value_ptr, gint length); static void proto_tree_set_oid_tvb(field_info *fi, tvbuff_t *tvb, gint start, gint length); static void +proto_tree_set_system_id(field_info *fi, const guint8* value_ptr, gint length); +static void +proto_tree_set_system_id_tvb(field_info *fi, tvbuff_t *tvb, gint start, gint length); +static void proto_tree_set_boolean(field_info *fi, guint32 value); static void proto_tree_set_float(field_info *fi, float value); @@ -1482,6 +1487,10 @@ proto_tree_new_item(field_info *new_fi, proto_tree *tree, proto_tree_set_oid_tvb(new_fi, tvb, start, length); break; + case FT_SYSTEM_ID: + proto_tree_set_system_id_tvb(new_fi, tvb, start, length); + break; + case FT_FLOAT: /* * NOTE: to support code written when @@ -2516,6 +2525,27 @@ proto_tree_set_oid_tvb(field_info *fi, tvbuff_t *tvb, gint start, gint length) proto_tree_set_oid(fi, tvb_get_ptr(tvb, start, length), length); } +/* Set the FT_SYSTEM_ID value */ +static void +proto_tree_set_system_id(field_info *fi, const guint8* value_ptr, gint length) +{ + GByteArray *bytes; + + DISSECTOR_ASSERT(value_ptr != NULL || length == 0); + + bytes = g_byte_array_new(); + if (length > 0) { + g_byte_array_append(bytes, value_ptr, length); + } + fvalue_set(&fi->value, bytes, TRUE); +} + +static void +proto_tree_set_system_id_tvb(field_info *fi, tvbuff_t *tvb, gint start, gint length) +{ + proto_tree_set_system_id(fi, tvb_get_ptr(tvb, start, length), length); +} + static void proto_tree_set_uint64(field_info *fi, guint64 value) { @@ -4028,6 +4058,16 @@ proto_custom_set(proto_tree* tree, const int field_id, gint occurrence, size-offset_e); break; + case FT_SYSTEM_ID: + bytes = (guint8 *)fvalue_get(&finfo->value); + offset_r += protoo_strlcpy(result+offset_r, + print_system_id(bytes, fvalue_length(&finfo->value)), + size-offset_r); + offset_e += protoo_strlcpy(expr+offset_e, + print_system_id(bytes, fvalue_length(&finfo->value)), + size-offset_e); + break; + case FT_FLOAT: g_snprintf(result+offset_r, size-offset_r, "%." G_STRINGIFY(FLT_DIG) "g", fvalue_get_floating(&finfo->value)); @@ -4075,6 +4115,7 @@ proto_custom_set(proto_tree* tree, const int field_id, gint occurrence, case FT_INT32: case FT_OID: case FT_REL_OID: + case FT_SYSTEM_ID: /* for these types, "expr" is filled in the loop above */ break; @@ -4963,6 +5004,7 @@ static const value_string hf_types[] = { { FT_GUID, "FT_GUID" }, { FT_OID, "FT_OID" }, { FT_REL_OID, "FT_REL_OID" }, + { FT_SYSTEM_ID, "FT_SYSTEM_ID" }, { 0, NULL } }; static const value_string hf_display[] = { @@ -5604,6 +5646,11 @@ proto_item_fill_label(field_info *fi, gchar *label_str) } break; + case FT_SYSTEM_ID: + bytes = (guint8 *)fvalue_get(&fi->value); + label_fill(label_str, 0, hfinfo, print_system_id(bytes, fvalue_length(&fi->value))); + break; + case FT_EUI64: integer64 = fvalue_get_integer64(&fi->value); label_fill_descr(label_str, 0, hfinfo, diff --git a/epan/wslua/wslua_field.c b/epan/wslua/wslua_field.c index e7b706212c..f90682410c 100644 --- a/epan/wslua/wslua_field.c +++ b/epan/wslua/wslua_field.c @@ -158,6 +158,7 @@ WSLUA_METAMETHOD FieldInfo__call(lua_State* L) { case FT_GUID: case FT_PROTOCOL: case FT_REL_OID: + case FT_SYSTEM_ID: case FT_OID: { ByteArray ba = g_byte_array_new(); g_byte_array_append(ba, (const guint8 *)tvb_memdup(wmem_packet_scope(),fi->ds_tvb,fi->start,fi->length),fi->length); diff --git a/epan/wslua/wslua_proto.c b/epan/wslua/wslua_proto.c index 4861822c78..386007648b 100644 --- a/epan/wslua/wslua_proto.c +++ b/epan/wslua/wslua_proto.c @@ -460,6 +460,7 @@ static const wslua_ft_types_t ftenums[] = { {"ftypes.FRAMENUM", FT_FRAMENUM}, {"ftypes.GUID", FT_GUID}, {"ftypes.OID", FT_OID}, + {"ftypes.SYSTEM_ID", FT_SYSTEM_ID}, {"ftypes.REL_OID", FT_REL_OID}, {NULL, FT_NONE} }; @@ -779,6 +780,7 @@ WSLUA_CONSTRUCTOR ProtoField_new(lua_State* L) { /* Creates a new field to be us case FT_UINT_BYTES: case FT_GUID: case FT_OID: + case FT_SYSTEM_ID: case FT_REL_OID: if (base != BASE_NONE) { WSLUA_OPTARG_ERROR(ProtoField_new,BASE,"Base must be base.NONE"); @@ -1256,6 +1258,7 @@ PROTOFIELD_OTHER(ubytes,FT_UINT_BYTES) PROTOFIELD_OTHER(guid,FT_GUID) PROTOFIELD_OTHER(oid,FT_OID) PROTOFIELD_OTHER(rel_oid,FT_REL_OID) +PROTOFIELD_OTHER(systemid,FT_SYSTEM_ID) WSLUA_METAMETHOD ProtoField__tostring(lua_State* L) { /* Returns a string with info about a protofield (for debugging purposes) */ diff --git a/epan/wslua/wslua_tree.c b/epan/wslua/wslua_tree.c index 6246e3862f..62819ec3f6 100644 --- a/epan/wslua/wslua_tree.c +++ b/epan/wslua/wslua_tree.c @@ -226,6 +226,7 @@ static int TreeItem_add_item_any(lua_State *L, gboolean little_endian) { case FT_GUID: case FT_OID: case FT_REL_OID: + case FT_SYSTEM_ID: default: luaL_error(L,"FT_ not yet supported"); return 0; diff --git a/rawshark.c b/rawshark.c index b84d0f2e4f..091319324e 100644 --- a/rawshark.c +++ b/rawshark.c @@ -1256,6 +1256,8 @@ static const char* ftenum_to_string(header_field_info *hfi) return "FT_OID"; case FT_REL_OID: return "FT_REL_OID"; + case FT_SYSTEM_ID: + return "FT_SYSTEM_ID"; case FT_NUM_TYPES: return "FT_NUM_TYPES"; default: diff --git a/ui/gtk/packet_win.c b/ui/gtk/packet_win.c index 9d66fbe1b5..008cc65b42 100644 --- a/ui/gtk/packet_win.c +++ b/ui/gtk/packet_win.c @@ -633,7 +633,7 @@ not_supported: FT_INT64, FT_UINT64, ; should work with FT_INT[8,16,24,32] code FT_FLOAT, FT_DOUBLE, FT_IPXNET, FT_IPv6, FT_ETHER, - FT_GUID, FT_OID, + FT_GUID, FT_OID, FT_SYSTEM_ID FT_UINT_STRING, FT_ABSOLUTE_TIME, FT_RELATIVE_TIME */ |