diff options
author | John Thacker <johnthacker@gmail.com> | 2021-10-27 19:00:56 -0400 |
---|---|---|
committer | John Thacker <johnthacker@gmail.com> | 2021-10-27 19:30:57 -0400 |
commit | 50b4944aaf675aa542531c2d7ff028354e5fc4ce (patch) | |
tree | 54ca5103dea10df9fa6ac675be2d62d8644acb73 | |
parent | 31d04f9ee748d7500f36f36b1e3ee0d53b563b27 (diff) |
BSSAP: Simplify code
Remove now unused defines. Add the BSAP and BSSAP-LE pinos to the tree
as the parent protocol (so that the BSSAP default proto preference can
be selected from the Packet Details and Packet List).
Set the BSSAP+ Decode As preference with the newer Decode As API, so
that we don't need a preference callback.
-rw-r--r-- | epan/dissectors/packet-bssap.c | 52 |
1 files changed, 17 insertions, 35 deletions
diff --git a/epan/dissectors/packet-bssap.c b/epan/dissectors/packet-bssap.c index a4e4883809..81fc878ecf 100644 --- a/epan/dissectors/packet-bssap.c +++ b/epan/dissectors/packet-bssap.c @@ -41,13 +41,6 @@ enum bssap_proto { BSSAP_LE, }; -#define GSM_INTERFACE 0 -#define LB_INTERFACE 1 - -#define BSSAP_OR_BSAP_DEFAULT BSSAP - -#define GSM_OR_LB_INTERFACE_DEFAULT GSM_INTERFACE - #define PDU_TYPE_OFFSET 0 #define PDU_TYPE_LENGTH 1 @@ -86,7 +79,7 @@ static const value_string bsap_pdu_type_acro_values[] = { #define SPARE_MASK 0x38 #define SAPI_MASK 0x07 -static guint global_bssap_ssn = 98; +#define BSSAP_PLUS_SSN 98 static const value_string bssap_cc_values[] = { { 0x00, "not further specified" }, @@ -608,7 +601,7 @@ dissect_bsap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) /* * create the bsap protocol tree */ - bssap_item = proto_tree_add_item(tree, proto_bsap, tvb, 0, -1, ENC_NA); + bssap_item = proto_tree_add_protocol_format(tree, proto_bssap, tvb, 0, -1, "BSAP"); bssap_tree = proto_item_add_subtree(bssap_item, ett_bssap); bssap_info = wmem_new(pinfo->pool, bssap_info_t); @@ -639,7 +632,7 @@ dissect_bssap_le(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data /* * create the bssap_le protocol tree */ - bssap_item = proto_tree_add_item(tree, proto_bssap_le, tvb, 0, -1, ENC_NA); + bssap_item = proto_tree_add_protocol_format(tree, proto_bssap, tvb, 0, -1, "BSSAP-LE"); bssap_tree = proto_item_add_subtree(bssap_item, ett_bssap); bssap_info = wmem_new(pinfo->pool, bssap_info_t); @@ -1619,7 +1612,7 @@ static int dissect_bssap_plus(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre sccp_info->data.co.assoc->payload = SCCP_PLOAD_BSSAP; /* create the BSSAP+ protocol tree */ - bssap_item = proto_tree_add_item(tree, proto_bssap, tvb, 0, -1, ENC_NA); + bssap_item = proto_tree_add_item(tree, proto_bssap_plus, tvb, 0, -1, ENC_NA); bssap_tree = proto_item_add_subtree(bssap_item, ett_bssap); message_type = tvb_get_guint8(tvb, offset); @@ -2583,7 +2576,7 @@ proto_register_bssap(void) expert_bssap = expert_register_protocol(proto_bssap); expert_register_field_array(expert_bssap, ei, array_length(ei)); - bssap_module = prefs_register_protocol(proto_bssap, proto_reg_handoff_bssap); + bssap_module = prefs_register_protocol(proto_bssap, NULL); prefs_register_obsolete_preference(bssap_module, "bsap_or_bssap"); prefs_register_obsolete_preference(bssap_module, "gsm_or_lb_interface"); @@ -2600,11 +2593,10 @@ proto_register_bssap(void) default_protocol_options, FALSE); - bssap_plus_module = prefs_register_protocol(proto_bssap_plus, proto_reg_handoff_bssap); - prefs_register_uint_preference(bssap_plus_module, "ssn", - "Subsystem number used for BSSAP+", - "Set Subsystem number used for BSSAP+", - 10, &global_bssap_ssn); + /* No explicit preferences anymore, but it does have an automatic Decode As + * preference, so we don't register the module itself obsolete */ + bssap_plus_module = prefs_register_protocol(proto_bssap_plus, NULL); + prefs_register_obsolete_preference(bssap_plus_module, "ssn"); bssap_dissector_table = register_dissector_table("bssap.pdu_type", "BSSAP Message Type", proto_bssap, FT_UINT8, BASE_DEC); bsap_dissector_table = register_dissector_table("bsap.pdu_type", "BSAP Message Type", proto_bssap, FT_UINT8, BASE_DEC); @@ -2614,31 +2606,21 @@ proto_register_bssap(void) void proto_reg_handoff_bssap(void) { - static gboolean initialized = FALSE; static dissector_handle_t bssap_plus_handle; - static guint old_bssap_ssn; - if (!initialized) { - heur_dissector_add("sccp", dissect_bssap_heur, "BSSAP over SCCP", "bssap_sccp", proto_bssap, HEURISTIC_ENABLE); - heur_dissector_add("sua", dissect_bssap_heur, "BSSAP over SUA", "bssap_sua", proto_bssap, HEURISTIC_ENABLE); - /* BSSAP+ */ - bssap_plus_handle = create_dissector_handle(dissect_bssap_plus, proto_bssap_plus); + heur_dissector_add("sccp", dissect_bssap_heur, "BSSAP over SCCP", "bssap_sccp", proto_bssap, HEURISTIC_ENABLE); + heur_dissector_add("sua", dissect_bssap_heur, "BSSAP over SUA", "bssap_sua", proto_bssap, HEURISTIC_ENABLE); + /* BSSAP+ */ + bssap_plus_handle = create_dissector_handle(dissect_bssap_plus, proto_bssap_plus); - rrlp_handle = find_dissector_add_dependency("rrlp", proto_bssap_plus); - gsm_bssmap_le_dissector_handle = find_dissector_add_dependency("gsm_bssmap_le", proto_bssap); - gsm_a_bssmap_dissector_handle = find_dissector_add_dependency("gsm_a_bssmap", proto_bssap); - - initialized = TRUE; - } else { - dissector_delete_uint("sccp.ssn", old_bssap_ssn, bssap_plus_handle); - } + rrlp_handle = find_dissector_add_dependency("rrlp", proto_bssap_plus); + gsm_bssmap_le_dissector_handle = find_dissector_add_dependency("gsm_bssmap_le", proto_bssap); + gsm_a_bssmap_dissector_handle = find_dissector_add_dependency("gsm_a_bssmap", proto_bssap); dissector_add_for_decode_as("sccp.ssn", bssap_handle); dissector_add_for_decode_as("sccp.ssn", bsap_handle); dissector_add_for_decode_as("sccp.ssn", bssap_le_handle); - - dissector_add_uint("sccp.ssn", global_bssap_ssn, bssap_plus_handle); - old_bssap_ssn = global_bssap_ssn; + dissector_add_uint_with_preference("sccp.ssn", BSSAP_PLUS_SSN, bssap_plus_handle); } /* |