aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-sgsap.c
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2014-01-22 06:13:17 +0000
committerAnders Broman <anders.broman@ericsson.com>2014-01-22 06:13:17 +0000
commitee88d38b4e84149974e05ee57f4089582d0e124b (patch)
tree89c2c25f86d6b50c0a57b86425e0b713d5a73870 /epan/dissectors/packet-sgsap.c
parent31116b5a6bdaaba98a0d7e4730dc50a3a530765d (diff)
Add a SCTP port range preference.
svn path=/trunk/; revision=54898
Diffstat (limited to 'epan/dissectors/packet-sgsap.c')
-rw-r--r--epan/dissectors/packet-sgsap.c36
1 files changed, 23 insertions, 13 deletions
diff --git a/epan/dissectors/packet-sgsap.c b/epan/dissectors/packet-sgsap.c
index abf13ae5cc..e28d24339d 100644
--- a/epan/dissectors/packet-sgsap.c
+++ b/epan/dissectors/packet-sgsap.c
@@ -31,6 +31,7 @@
#include <glib.h>
#include <epan/packet.h>
#include <epan/asn1.h>
+#include <epan/prefs.h>
#include "packet-gsm_a_common.h"
#include "packet-e212.h"
@@ -39,18 +40,18 @@
#define PSNAME "SGSAP"
#define PFNAME "sgsap"
-/* The registered SCTP port number for SGsAP is 29118.
- * The payload protocol identifier to be used for SGsAP is 0.
- */
-#define SCTP_PORT_SGSAP 29118
void proto_register_sgsap(void);
void proto_reg_handoff_sgsap(void);
/* Global variables */
static dissector_handle_t gsm_a_dtap_handle;
-static guint gbl_sgsapSctpPort=SCTP_PORT_SGSAP;
+/* The registered SCTP port number for SGsAP is 29118.
+ * The payload protocol identifier to be used for SGsAP is 0.
+ */
+#define SGSAP_SCTP_PORT_RANGE "29118"
+static range_t *global_sgsap_port_range;
/* Initialize the protocol and registered fields */
static int proto_sgsap = -1;
@@ -1447,6 +1448,7 @@ dissect_sgsap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
void proto_register_sgsap(void) {
guint i;
guint last_offset;
+ module_t *sgsap_module;
/* List of fields */
@@ -1553,6 +1555,17 @@ void proto_register_sgsap(void) {
/* Register dissector */
register_dissector(PFNAME, dissect_sgsap, proto_sgsap);
+
+ /* Set default SCTP ports */
+ range_convert_str(&global_sgsap_port_range, SGSAP_SCTP_PORT_RANGE, MAX_SCTP_PORT);
+
+ sgsap_module = prefs_register_protocol(proto_sgsap, proto_reg_handoff_sgsap);
+
+ prefs_register_range_preference(sgsap_module, "sctp_ports",
+ "SGsAP SCTP port numbers",
+ "Port numbers used for SGsAP traffic "
+ "(default " SGSAP_SCTP_PORT_RANGE ")",
+ &global_sgsap_port_range, MAX_SCTP_PORT);
}
void
@@ -1563,7 +1576,7 @@ proto_reg_handoff_sgsap(void)
*/
static gboolean Initialized = FALSE;
static dissector_handle_t sgsap_handle;
- static guint SctpPort;
+ static range_t *sgsap_port_range;
sgsap_handle = find_dissector("sgsap");
gsm_a_dtap_handle = find_dissector("gsm_a_dtap");
@@ -1572,14 +1585,11 @@ proto_reg_handoff_sgsap(void)
dissector_add_handle("sctp.port", sgsap_handle); /* for "decode-as" */
Initialized=TRUE;
} else {
- if (SctpPort != 0) {
- dissector_delete_uint("sctp.port", SctpPort, sgsap_handle);
- }
+ dissector_delete_uint_range("sctp.port", sgsap_port_range, sgsap_handle);
+ g_free(sgsap_port_range);
}
- SctpPort = gbl_sgsapSctpPort;
- if (SctpPort != 0) {
- dissector_add_uint("sctp.port", SctpPort, sgsap_handle);
- }
+ sgsap_port_range = range_copy(global_sgsap_port_range);
+ dissector_add_uint_range("sctp.port", sgsap_port_range, sgsap_handle);
}