diff options
author | Anders Broman <anders.broman@ericsson.com> | 2010-03-04 05:56:59 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2010-03-04 05:56:59 +0000 |
commit | ffbdfc3285c73d4d79bb62c074925684683a5f71 (patch) | |
tree | a9a97f79e84d25f8fa0d32f4bd6bcddc1934cb37 /asn1/rua | |
parent | 7923c40e07fce55301588705d108f50812415941 (diff) | |
download | wireshark-ffbdfc3285c73d4d79bb62c074925684683a5f71.tar.gz |
From Mark Wallis:
Improvements to new RUA Iuh dissector
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=4552
Removed check_col() from the patch as it's no longer needed.
svn path=/trunk/; revision=32108
Diffstat (limited to 'asn1/rua')
-rw-r--r-- | asn1/rua/packet-rua-template.c | 34 | ||||
-rw-r--r-- | asn1/rua/rua.cnf | 107 |
2 files changed, 110 insertions, 31 deletions
diff --git a/asn1/rua/packet-rua-template.c b/asn1/rua/packet-rua-template.c index 233e998995..43aaaf098d 100644 --- a/asn1/rua/packet-rua-template.c +++ b/asn1/rua/packet-rua-template.c @@ -36,6 +36,7 @@ #include <epan/packet.h> #include <epan/sctpppids.h> #include <epan/asn1.h> +#include <epan/prefs.h> #include "packet-per.h" @@ -47,6 +48,8 @@ #define PNAME "UTRAN Iuh interface RUA signalling" #define PSNAME "RUA" #define PFNAME "rua" +/* Dissector to use SCTP PPID 19 or a configured SCTP port. IANA assigned port = 29169*/ +#define SCTP_PORT_RUA 29169; #include "packet-rua-val.h" @@ -60,12 +63,14 @@ static int ett_rua = -1; /* initialise sub-dissector handles */ static dissector_handle_t ranap_handle = NULL; +static dissector_handle_t rua_ranap_handle = NULL; #include "packet-rua-ett.c" /* Global variables */ static guint32 ProcedureCode; static guint32 ProtocolIE_ID; +static guint global_sctp_port = SCTP_PORT_RUA; /* Dissector tables */ static dissector_table_t rua_ies_dissector_table; @@ -80,6 +85,8 @@ 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); +void proto_reg_handoff_rua(void); + #include "packet-rua-fn.c" static int dissect_ProtocolIEFieldValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) @@ -125,6 +132,7 @@ dissect_rua(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) /*--- proto_register_rua -------------------------------------------*/ void proto_register_rua(void) { +module_t *rua_module; /* List of fields */ @@ -155,6 +163,9 @@ void proto_register_rua(void) { rua_proc_imsg_dissector_table = register_dissector_table("rua.proc.imsg", "RUA-ELEMENTARY-PROCEDURE InitiatingMessage", FT_UINT32, BASE_DEC); rua_proc_sout_dissector_table = register_dissector_table("rua.proc.sout", "RUA-ELEMENTARY-PROCEDURE SuccessfulOutcome", FT_UINT32, BASE_DEC); rua_proc_uout_dissector_table = register_dissector_table("rua.proc.uout", "RUA-ELEMENTARY-PROCEDURE UnsuccessfulOutcome", FT_UINT32, BASE_DEC); + + rua_module = prefs_register_protocol(proto_rua, proto_reg_handoff_rua); + prefs_register_uint_preference(rua_module, "port", "RUA SCTP Port", "Set the port for RUA messages (Default of 29169)", 10, &global_sctp_port); } @@ -163,12 +174,21 @@ void proto_register_rua(void) { void proto_reg_handoff_rua(void) { - dissector_handle_t rua_handle; - - rua_handle = find_dissector("rua"); - ranap_handle = find_dissector("ranap"); - dissector_add("sctp.ppi", RUA_PAYLOAD_PROTOCOL_ID, rua_handle); - dissector_add_handle("sctp.port", rua_handle); /* for "decode-as" */ - + static gboolean initialized = FALSE; + static dissector_handle_t rua_handle; + static guint sctp_port; + + if (!initialized) { + rua_handle = find_dissector("rua"); + rua_ranap_handle = find_dissector("ranap"); + dissector_add("sctp.ppi", RUA_PAYLOAD_PROTOCOL_ID, rua_handle); + initialized = TRUE; #include "packet-rua-dis-tab.c" + + } else { + dissector_delete("sctp.port", sctp_port, rua_handle); + } + /* Set our port number for future use */ + sctp_port = global_sctp_port; + dissector_add("sctp.port", sctp_port, rua_handle); } diff --git a/asn1/rua/rua.cnf b/asn1/rua/rua.cnf index 18a503d489..75a5652338 100644 --- a/asn1/rua/rua.cnf +++ b/asn1/rua/rua.cnf @@ -34,7 +34,6 @@ PrivateIE-Field/id private_ie_field_id #.OMIT_ASSIGNMENT Presence ProtocolIE-ContainerList -ProtocolIE-Single-Container #.END #.FN_PARS ProtocolIE-ID VAL_PTR = &ProtocolIE_ID @@ -50,10 +49,10 @@ ProtocolIE-Single-Container #.FN_PARS ProcedureCode VAL_PTR = &ProcedureCode #.FN_FTR ProcedureCode - col_add_fstr(actx->pinfo->cinfo, COL_INFO, "%s ", - val_to_str(ProcedureCode, rua_ProcedureCode_vals, - "unknown message")); -#.END + col_add_fstr(actx->pinfo->cinfo, COL_INFO, "%s ", + val_to_str(ProcedureCode, rua_ProcedureCode_vals, + "Unknown Message")); + col_set_fence(actx->pinfo->cinfo, COL_INFO); /* Protect the Procedure Code COL_INFO from subdissector overwrites */ #.FN_PARS InitiatingMessage/value FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_InitiatingMessageValue @@ -61,38 +60,98 @@ ProtocolIE-Single-Container #.FN_PARS UnsuccessfulOutcome/value FN_VARIANT=_pdu_new TYPE_REF_FN=dissect_UnsuccessfulOutcomeValue -#.FN_BODY RANAP-Message VAL_PTR = &ranap_message_tvb - tvbuff_t *ranap_message_tvb=NULL; +#.FN_BODY Connect /* Set COL_INFO to Connect */ + col_append_str(actx->pinfo->cinfo, COL_INFO, "CONNECT" ); + col_append_fstr(actx->pinfo->cinfo, COL_INFO, " "); + +%(DEFAULT_BODY)s + +#.FN_BODY DirectTransfer /* Set COL_INFO to DirectTransfer */ + col_append_str(actx->pinfo->cinfo, COL_INFO, "DIRECT_TRANSFER" ); + col_append_fstr(actx->pinfo->cinfo, COL_INFO, " "); + +%(DEFAULT_BODY)s + +#.FN_BODY Disconnect /* Set COL_INFO to Disconnect */ + col_append_str(actx->pinfo->cinfo, COL_INFO, "DISCONNECT" ); + col_append_fstr(actx->pinfo->cinfo, COL_INFO, " "); + +%(DEFAULT_BODY)s + +#.FN_BODY ConnectionlessTransfer /* Set COL_INFO to ConnectionlessTransfer */ + col_append_str(actx->pinfo->cinfo, COL_INFO, "CONNECTIONLESS_TRANSFER" ); + col_append_fstr(actx->pinfo->cinfo, COL_INFO, " "); %(DEFAULT_BODY)s - if (ranap_message_tvb) - call_dissector(ranap_handle,ranap_message_tvb,%(ACTX)s->pinfo, proto_tree_get_root(tree)); +#.FN_BODY ErrorIndication /* Set COL_INFO to Error Indication and protect it */ + col_append_str(actx->pinfo->cinfo, COL_INFO, "ERROR_INDICATION" ); + col_append_fstr(actx->pinfo->cinfo, COL_INFO, " "); + col_set_fence(actx->pinfo->cinfo, COL_INFO); +%(DEFAULT_BODY)s + +#.FN_BODY PrivateMessage /* Set COL_INFO to Private Message */ + col_append_str(actx->pinfo->cinfo, COL_INFO, "PRIVATE_MESSAGE" ); + col_append_fstr(actx->pinfo->cinfo, COL_INFO, " "); + +%(DEFAULT_BODY)s + +#.FN_BODY RANAP-Message VAL_PTR = &ranap_message_tvb + tvbuff_t *ranap_message_tvb=NULL; +%(DEFAULT_BODY)s + if ((tvb_length(ranap_message_tvb)>0)&&(rua_ranap_handle)) { /* RUA has a RANAP-PDU, let RANAP append to COL_PROTOCOL i.e. RUA/RANAP */ + if (check_col(actx->pinfo->cinfo, COL_PROTOCOL)) { + /* Protect RUA entries in the protocol and info columns from subdissector overwrites*/ + col_append_str(actx->pinfo->cinfo, COL_PROTOCOL, "/"); + col_set_fence(actx->pinfo->cinfo, COL_PROTOCOL); + } + call_dissector(rua_ranap_handle,ranap_message_tvb,%(ACTX)s->pinfo, tree); + } else { /* RUA does not have a RANAP-PDU so protect existing RUA Elementary Procedure as COL_INFO */ + col_set_fence(actx->pinfo->cinfo, COL_INFO); + } #.END +#.ASSIGN_VALUE_TO_TYPE # RUA ASN.1 does not have constants assigned to types, +# ProcedureCode +id-Connect ProcedureCode +id-DirectTransfer ProcedureCode +id-Disconnect ProcedureCode +id-ConnectionlessTransfer ProcedureCode +id-ErrorIndication ProcedureCode +id-privateMessage ProcedureCode + +# ProtocolIE-ID +id-Cause ProtocolIE-ID +id-CriticalityDiagnostics ProtocolIE-ID +id-Context-ID ProtocolIE-ID +id-RANAP-Message ProtocolIE-ID +id-IntraDomainNasNodeSelector ProtocolIE-ID +id-Establishment-Cause ProtocolIE-ID +id-CN-DomainIndicator ProtocolIE-ID +#.END + #.REGISTER_NEW #RUA-PROTOCOL-IES -Cause N rua.ies id-Cause -CriticalityDiagnostics N rua.ies id-CriticalityDiagnostics -Context-ID N rua.ies id-Context-ID -RANAP-Message N rua.ies id-RANAP-Message -IntraDomainNasNodeSelector N rua.ies id-IntraDomainNasNodeSelector -Establishment-Cause N rua.ies id-Establishment-Cause -CN-DomainIndicator N rua.ies id-CN-DomainIndicator +Cause N rua.ies id-Cause +CriticalityDiagnostics N rua.ies id-CriticalityDiagnostics +Context-ID N rua.ies id-Context-ID +RANAP-Message N rua.ies id-RANAP-Message +IntraDomainNasNodeSelector N rua.ies id-IntraDomainNasNodeSelector +Establishment-Cause N rua.ies id-Establishment-Cause +CN-DomainIndicator N rua.ies id-CN-DomainIndicator #RUA-PROTOCOL-EXTENSION -CSGMembershipStatus N rua.extension id-CSGMembershipStatus +CSGMembershipStatus N rua.extension id-CSGMembershipStatus #RUA-ELEMENTARY-PROCEDURE -Connect N rua.proc.imsg id-Connect -DirectTransfer N rua.proc.imsg id-DirectTransfer -Disconnect N rua.proc.imsg id-Disconnect -ConnectionlessTransfer N rua.proc.imsg id-ConnectionlessTransfer -ErrorIndication N rua.proc.imsg id-ErrorIndication -PrivateMessage N rua.proc.imsg id-privateMessage - +Connect N rua.proc.imsg id-Connect +DirectTransfer N rua.proc.imsg id-DirectTransfer +Disconnect N rua.proc.imsg id-Disconnect +ConnectionlessTransfer N rua.proc.imsg id-ConnectionlessTransfer +ErrorIndication N rua.proc.imsg id-ErrorIndication +PrivateMessage N rua.proc.imsg id-privateMessage #.END |