From 31d0fb16d75daf0bc8350dee6cc0332c294c4bc9 Mon Sep 17 00:00:00 2001 From: Jeff Morriss Date: Sat, 26 Jul 2008 02:04:19 +0000 Subject: From Neil Piercy via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=2637 : Make the RANAP SSN configurable. svn path=/trunk/; revision=25837 --- asn1/ranap/packet-ranap-template.c | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) (limited to 'asn1') diff --git a/asn1/ranap/packet-ranap-template.c b/asn1/ranap/packet-ranap-template.c index b4680c7921..fc1f58fc21 100644 --- a/asn1/ranap/packet-ranap-template.c +++ b/asn1/ranap/packet-ranap-template.c @@ -1,6 +1,6 @@ /* packet-ranap.c * Routines for UMTS Node B Application Part(RANAP) packet dissection - * Copyright 2005, Anders Broman + * Copyright 2005, Anders Broman * * $Id$ * @@ -38,6 +38,7 @@ #include #include #include +#include #include "packet-ber.h" #include "packet-per.h" @@ -51,7 +52,7 @@ #pragma warning(disable:4146) #endif -#define SCCP_SSN_RANAP 0x8E +#define SCCP_SSN_RANAP 142 #define PNAME "Radio Access Network Application Part" #define PSNAME "RANAP" @@ -77,6 +78,9 @@ static guint32 ProcedureCode; static guint32 ProtocolIE_ID; static guint32 ProtocolExtensionID; +/* Initialise the Preferences */ +static gint global_ranap_sccp_ssn = SCCP_SSN_RANAP; + /* Dissector tables */ static dissector_table_t ranap_ies_dissector_table; static dissector_table_t ranap_ies_p1_dissector_table; @@ -96,6 +100,7 @@ static int dissect_InitiatingMessageValue(tvbuff_t *tvb, packet_info *pinfo, pro static int dissect_SuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); static int dissect_UnsuccessfulOutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); static int dissect_OutcomeValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); +void proto_reg_handoff_ranap(void); #include "packet-ranap-fn.c" @@ -152,14 +157,14 @@ dissect_ranap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) /* create the ranap protocol tree */ ranap_item = proto_tree_add_item(tree, proto_ranap, tvb, 0, -1, FALSE); ranap_tree = proto_item_add_subtree(ranap_item, ett_ranap); - + dissect_RANAP_PDU_PDU(tvb, pinfo, ranap_tree); if (pinfo->sccp_info) { sccp_msg_info_t* sccp_msg = pinfo->sccp_info; - + if (sccp_msg->data.co.assoc) sccp_msg->data.co.assoc->payload = SCCP_PLOAD_RANAP; - + if (! sccp_msg->data.co.label && ProcedureCode != 0xFFFFFFFF) { const gchar* str = val_to_str(ProcedureCode, ranap_ProcedureCode_vals,"Unknown RANAP"); sccp_msg->data.co.label = se_strdup(str); @@ -169,6 +174,7 @@ dissect_ranap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) /*--- proto_register_ranap -------------------------------------------*/ void proto_register_ranap(void) { + module_t *ranap_module; /* List of fields */ @@ -193,7 +199,7 @@ void proto_register_ranap(void) { /* Register fields and subtrees */ proto_register_field_array(proto_ranap, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); - + /* Register dissector */ register_dissector("ranap", dissect_ranap, proto_ranap); ranap_handle = find_dissector("ranap"); @@ -210,6 +216,10 @@ void proto_register_ranap(void) { nas_pdu_dissector_table = register_dissector_table("ranap.nas_pdu", "RANAP NAS PDU", FT_UINT8, BASE_DEC); + ranap_module = prefs_register_protocol(proto_ranap, proto_reg_handoff_ranap); + prefs_register_uint_preference(ranap_module, "sccp_ssn", "SCCP SSN for RANAP", + "The SCCP SubSystem Number for RANAP (default 142)", 10, + &global_ranap_sccp_ssn); } @@ -217,8 +227,17 @@ void proto_register_ranap(void) { void proto_reg_handoff_ranap(void) { + static int initialized = FALSE; + static gint local_ranap_sccp_ssn; + + if (!initialized) { + initialized = TRUE; + } else { + dissector_delete("sccp.ssn", local_ranap_sccp_ssn, ranap_handle); + } - dissector_add("sccp.ssn", SCCP_SSN_RANAP, ranap_handle); + dissector_add("sccp.ssn", global_ranap_sccp_ssn, ranap_handle); + local_ranap_sccp_ssn = global_ranap_sccp_ssn; #include "packet-ranap-dis-tab.c" } -- cgit v1.2.3