aboutsummaryrefslogtreecommitdiffstats
path: root/wireshark
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2010-12-01 00:02:42 +0100
committerHarald Welte <laforge@gnumonks.org>2010-12-01 00:02:42 +0100
commit318105d58dc3bcce38699f34d79c3d9f94ef2b59 (patch)
treeffc8657872ad049da268509462d6fc62fc89a4ac /wireshark
parenta36f0ede252219c4ef024cd2f2de5d6ad224f833 (diff)
wireshark: add patch to make IPA ports configurable preferences
Diffstat (limited to 'wireshark')
-rw-r--r--wireshark/gsm_ipa-configure_ports.patch128
1 files changed, 128 insertions, 0 deletions
diff --git a/wireshark/gsm_ipa-configure_ports.patch b/wireshark/gsm_ipa-configure_ports.patch
new file mode 100644
index 00000000..872cbfaf
--- /dev/null
+++ b/wireshark/gsm_ipa-configure_ports.patch
@@ -0,0 +1,128 @@
+Index: wireshark/epan/dissectors/packet-gsm_ipa.c
+===================================================================
+--- wireshark.orig/epan/dissectors/packet-gsm_ipa.c
++++ wireshark/epan/dissectors/packet-gsm_ipa.c
+@@ -32,6 +32,14 @@
+
+ #include <epan/packet.h>
+ #include <epan/ipproto.h>
++#include <epan/prefs.h>
++
++#define IPA_TCP_PORTS "3002,3003,3006,5000"
++#define IPA_UDP_PORTS "3006"
++
++static dissector_handle_t ipa_handle;
++static range_t *global_ipa_tcp_ports = NULL;
++static range_t *global_ipa_udp_ports = NULL;
+
+ /* Initialize the protocol and registered fields */
+ static int proto_ipa = -1;
+@@ -60,11 +68,6 @@
+
+ static dissector_handle_t sub_handles[SUB_MAX];
+
+-#define TCP_PORT_ABISIP_PRIM 3002
+-#define TCP_PORT_ABISIP_SEC 3003
+-#define TCP_PORT_ABISIP_INST 3006
+-#define TCP_PORT_AIP_PRIM 5000
+-
+ #define ABISIP_RSL_MAX 0x20
+ #define IPA_MGCP 0xfc
+ #define AIP_SCCP 0xfd
+@@ -249,8 +252,12 @@
+ }
+ }
+
++void proto_reg_handoff_gsm_ipa(void);
++
+ void proto_register_ipa(void)
+ {
++ module_t *ipa_module;
++
+ static hf_register_info hf[] = {
+ {&hf_ipa_data_len,
+ {"DataLen", "ipa.data_len",
+@@ -298,21 +305,71 @@
+ proto_register_subtree_array(ett, array_length(ett));
+
+ register_dissector("gsm_ipa", dissect_ipa, proto_ipa);
++
++ range_convert_str(&global_ipa_tcp_ports, IPA_TCP_PORTS, MAX_TCP_PORT);
++ range_convert_str(&global_ipa_udp_ports, IPA_UDP_PORTS, MAX_UDP_PORT);
++ ipa_module = prefs_register_protocol(proto_ipa,
++ proto_reg_handoff_gsm_ipa);
++
++ prefs_register_range_preference(ipa_module, "tcp_ports",
++ "GSM IPA TCP Port(s)",
++ "Set the port(s) for ip.access IPA"
++ " (default: " IPA_TCP_PORTS ")",
++ &global_ipa_tcp_ports, MAX_TCP_PORT);
++ prefs_register_range_preference(ipa_module, "udp_ports",
++ "GSM IPA UDP Port(s)",
++ "Set the port(s) for ip.access IPA"
++ " (default: " IPA_UDP_PORTS ")",
++ &global_ipa_udp_ports, MAX_UDP_PORT);
++}
++
++static void ipa_tcp_delete_callback(guint32 port)
++{
++ if (port)
++ dissector_delete("tcp.port", port, ipa_handle);
++}
++
++static void ipa_udp_delete_callback(guint32 port)
++{
++ if (port)
++ dissector_delete("udp.port", port, ipa_handle);
++}
++
++static void ipa_tcp_add_callback(guint32 port)
++{
++ if (port)
++ dissector_add("tcp.port", port, ipa_handle);
++}
++
++static void ipa_udp_add_callback(guint32 port)
++{
++ if (port)
++ dissector_add("udp.port", port, ipa_handle);
+ }
+
+ void proto_reg_handoff_gsm_ipa(void)
+ {
+- dissector_handle_t ipa_handle;
++ static gboolean ipa_initialized = FALSE;
++ static range_t *ipa_tcp_ports, *ipa_udp_ports;
++
++ if (!ipa_initialized) {
++ sub_handles[SUB_RSL] = find_dissector("gsm_abis_rsl");
++ sub_handles[SUB_OML] = find_dissector("gsm_abis_oml");
++ sub_handles[SUB_SCCP] = find_dissector("sccp");
++ sub_handles[SUB_MGCP] = find_dissector("mgcp");
++
++ ipa_handle = create_dissector_handle(dissect_ipa, proto_ipa);
++ ipa_initialized = TRUE;
++ } else {
++ range_foreach(ipa_tcp_ports, ipa_tcp_delete_callback);
++ g_free(ipa_tcp_ports);
++ range_foreach(ipa_udp_ports, ipa_udp_delete_callback);
++ g_free(ipa_udp_ports);
++ }
++
++ ipa_tcp_ports = range_copy(global_ipa_tcp_ports);
++ ipa_udp_ports = range_copy(global_ipa_udp_ports);
+
+- sub_handles[SUB_RSL] = find_dissector("gsm_abis_rsl");
+- sub_handles[SUB_OML] = find_dissector("gsm_abis_oml");
+- sub_handles[SUB_SCCP] = find_dissector("sccp");
+- sub_handles[SUB_MGCP] = find_dissector("mgcp");
+-
+- ipa_handle = create_dissector_handle(dissect_ipa, proto_ipa);
+- dissector_add("tcp.port", TCP_PORT_ABISIP_PRIM, ipa_handle);
+- dissector_add("tcp.port", TCP_PORT_ABISIP_SEC, ipa_handle);
+- dissector_add("tcp.port", TCP_PORT_ABISIP_INST, ipa_handle);
+- dissector_add("tcp.port", TCP_PORT_AIP_PRIM, ipa_handle);
+- dissector_add("udp.port", TCP_PORT_ABISIP_INST, ipa_handle);
++ range_foreach(ipa_tcp_ports, ipa_tcp_add_callback);
++ range_foreach(ipa_udp_ports, ipa_udp_add_callback);
+ }