summaryrefslogtreecommitdiff
path: root/asn1/rua
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2010-03-04 05:56:59 +0000
committerAnders Broman <anders.broman@ericsson.com>2010-03-04 05:56:59 +0000
commitffbdfc3285c73d4d79bb62c074925684683a5f71 (patch)
treea9a97f79e84d25f8fa0d32f4bd6bcddc1934cb37 /asn1/rua
parent7923c40e07fce55301588705d108f50812415941 (diff)
downloadwireshark-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.c34
-rw-r--r--asn1/rua/rua.cnf107
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