diff --git a/wireshark/gsm_ipa-configure_ports.patch b/wireshark/gsm_ipa-configure_ports.patch
new file mode 100644
index 0000000..872cbfa
--- /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);
+ }
