wireshark: update extension of RSL dissector with ip.access nanoBTS support

This patch removes the C99 structure initialization which is not allowed
by the wireshark project (since it has to compile with non-C99 compliant
compilers).

It also adds a new option to enable/disable the dissection of vendor
specific ip.access nanoBTS RSL messages.

Tested with file:
ipaccess-startup-mo_to_mo_call-proxy.pcap
diff --git a/wireshark/0004-rsl-ipaccess.patch b/wireshark/0004-rsl-ipaccess.patch
index 6f2b8c1..e68c362 100644
--- a/wireshark/0004-rsl-ipaccess.patch
+++ b/wireshark/0004-rsl-ipaccess.patch
@@ -1,15 +1,16 @@
 From 54882db58b6ec12da6b80071e0ac2344d42df24c Mon Sep 17 00:00:00 2001
+
 From: Holger Hans Peter Freyther <zecke@selfish.org>
-Date: Tue, 11 Jan 2011 16:22:33 +0100
+
 Subject: [PATCH 4/4] rsl-ipaccess
 
 Add vendor specific commands for RSL.
 ---
- epan/dissectors/packet-rsl.c |  522 +++++++++++++++++++++++++++++++++++++++++-
- 1 files changed, 515 insertions(+), 7 deletions(-)
+ epan/dissectors/packet-rsl.c |  544 +++++++++++++++++++++++++++++++++++++++++-
+ 1 files changed, 536 insertions(+), 8 deletions(-)
 
 diff --git a/epan/dissectors/packet-rsl.c b/epan/dissectors/packet-rsl.c
-index bf83f6f..d858e1a 100644
+index bf83f6f..213ae28 100644
 --- a/epan/dissectors/packet-rsl.c
 +++ b/epan/dissectors/packet-rsl.c
 @@ -2,6 +2,7 @@
@@ -20,8 +21,11 @@
   *
   * $Id$
   *
-@@ -42,6 +43,8 @@
+@@ -40,8 +41,11 @@
+ #include <epan/packet.h>
+ #include <epan/proto.h>
  #include <epan/lapd_sapi.h>
++#include <epan/prefs.h>
  
  #include "packet-gsm_a_common.h"
 +#include "packet-rtp.h"
@@ -29,7 +33,7 @@
  
  /* Initialize the protocol and registered fields */
  static int proto_rsl		= -1;
-@@ -116,6 +119,24 @@ static int hf_rsl_emlpp_prio		= -1;
+@@ -116,6 +120,24 @@ static int hf_rsl_emlpp_prio		= -1;
  static int hf_rsl_rtd				= -1;
  static int hf_rsl_delay_ind			= -1;
  static int hf_rsl_tfo				= -1;
@@ -54,7 +58,7 @@
  
  /* Initialize the subtree pointers */
  static int ett_rsl = -1;
-@@ -173,6 +194,15 @@ static int ett_ie_cause = -1;
+@@ -173,6 +195,15 @@ static int ett_ie_cause = -1;
  static int ett_ie_meas_res_no = -1;
  static int ett_ie_message_id = -1;
  static int ett_ie_sys_info_type = -1;
@@ -70,7 +74,17 @@
  
  static proto_tree *top_tree;
  static dissector_handle_t gsm_a_ccch_handle;
-@@ -208,8 +238,11 @@ static const value_string rsl_msg_disc_vals[] = {
+@@ -180,6 +211,9 @@ static dissector_handle_t gsm_a_dtap_handle;
+ 
+ static gboolean is_si2q = FALSE;
+ 
++/* Decode things as nanoBTS traces */
++static gboolean global_rsl_use_nano_bts = TRUE;
++
+ /* Forward declarations */
+ static int dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset);
+ 
+@@ -208,8 +242,11 @@ static const value_string rsl_msg_disc_vals[] = {
  	{  0x06,		"Common Channel Management messages" },
  	{  0x08,		"TRX Management messages" },
  	{  0x16,		"Location Services messages" },
@@ -82,7 +96,7 @@
  /*
   * 9.2 MESSAGE TYPE
   */
-@@ -276,6 +309,49 @@ static const value_string rsl_msg_disc_vals[] = {
+@@ -276,6 +313,49 @@ static const value_string rsl_msg_disc_vals[] = {
  	/* 	0 1 - - - - - - Location Services messages: */
  #define RSL_MSG_LOC_INF					65	/* 8.7.1 */
  
@@ -132,7 +146,7 @@
  
  static const value_string rsl_msg_type_vals[] = {
  	  /* 	0 0 0 0 - - - - Radio Link Layer Management messages: */
-@@ -338,6 +414,26 @@ static const value_string rsl_msg_type_vals[] = {
+@@ -338,6 +418,26 @@ static const value_string rsl_msg_type_vals[] = {
  	{  0x3f,	"TFO MODification REQuest" },					/* 8.4.31 */
  	/* 	0 1 - - - - - - Location Services messages: */
  	{  0x41,	"Location Information" },						/* 8.7.1 */
@@ -159,7 +173,7 @@
  	{ 0,		NULL }
  };
  
-@@ -371,10 +467,10 @@ static const value_string rsl_msg_type_vals[] = {
+@@ -371,10 +471,10 @@ static const value_string rsl_msg_type_vals[] = {
  #define RSL_IE_MESSAGE_ID		28
  
  #define RSL_IE_SYS_INFO_TYPE	30
@@ -174,7 +188,7 @@
  #define RSL_IE_FULL_IMM_ASS_INF			35
  #define RSL_IE_SMSCB_INF				36
  #define RSL_IE_FULL_MS_TIMING_OFFSET	37
-@@ -477,6 +573,24 @@ static const value_string rsl_ie_type_vals[] = {
+@@ -477,6 +577,24 @@ static const value_string rsl_ie_type_vals[] = {
  			Not used
  
  	*/
@@ -199,7 +213,7 @@
  	{ 0,			NULL }
  };
  
-@@ -513,6 +627,96 @@ static const value_string rsl_ch_no_Cbits_vals[] = {
+@@ -513,6 +631,27 @@ static const value_string rsl_ch_no_Cbits_vals[] = {
  	{ 0,			NULL }
  };
  
@@ -221,82 +235,13 @@
 +	struct tlv_def def[0xff];
 +};
 +
-+static const struct tlv_definition rsl_att_tlvdef = {
-+	.def = {
-+		[RSL_IE_CH_NO]			= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_LINK_ID]		= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_ACT_TYPE]		= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_BS_POW]			= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_CH_ID]			= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_CH_MODE]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_ENC_INF]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_FRAME_NO]		= { TLV_TYPE_FIXED, 2 },
-+		[RSL_IE_HO_REF]			= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_L1_INF]			= { TLV_TYPE_FIXED, 2 },
-+		[RSL_IE_L3_INF]			= { TLV_TYPE_TL16V, 0 },
-+		[RSL_IE_MS_ID]			= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_MS_POW]			= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_PAGING_GRP]		= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_PAGING_LOAD]		= { TLV_TYPE_FIXED, 2 },
-+		[RSL_IE_PHY_CTX]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_ACCESS_DELAY]		= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_RACH_LOAD]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_REQ_REF]		= { TLV_TYPE_FIXED, 3 },
-+		[RSL_IE_REL_MODE]		= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_RESOURCE_INF]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_RLM_CAUSE]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_STARTING_TIME]		= { TLV_TYPE_FIXED, 2 },
-+		[RSL_IE_TIMING_ADV]		= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_UPLINK_MEAS]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_CAUSE]			= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_MEAS_RES_NO]		= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_MESSAGE_ID]		= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_SYS_INFO_TYPE]		= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_MS_POWER_PARAM]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_BS_POWER_PARAM]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_PREPROC_PARAM]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_PREPROC_MEAS]		= { TLV_TYPE_TLV, 0 },
-+		//[RSL_IE_IMM_ASS_INFO]		= { TLV_TYPE_TLV, 0 },
-+		//[RSL_IE_SMSCB_INFO]		= { TLV_TYPE_FIXED, 23 },
-+		//[RSL_IE_MS_TIMING_OFFSET]	= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_ERR_MSG]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_FULL_BCCH_INF]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_CH_NEEDED]		= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_CB_CMD_TYPE]		= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_SMSCB_MESS]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_FULL_IMM_ASS_INF]	= { TLV_TYPE_TLV, 0 },
-+		//[RSL_IE_SACCH_INFO]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_CBCH_LOAD_INF]		= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_SMSCB_CH_IND]		= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_GRP_CALL_REF]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_CH_DESC]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_NCH_DRX_INF]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_CMD_IND]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_EMLPP_PRIO]		= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_UIC]			= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_MAIN_CH_REF]		= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_MULTIRATE_CONF]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_MULTIRATE_CNTRL]	= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_SUP_CODEC_TYPES]	= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_CODEC_CONF]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_RTD]			= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_TFO_STATUS]		= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_LLP_APDU]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_IPAC_REMOTE_IP]		= { TLV_TYPE_FIXED, 4 },
-+		[RSL_IE_IPAC_REMOTE_PORT]	= { TLV_TYPE_FIXED, 2 },
-+		[RSL_IE_IPAC_LOCAL_IP]		= { TLV_TYPE_FIXED, 4 },
-+		[RSL_IE_IPAC_CONN_STAT]		= { TLV_TYPE_TLV, 0 },
-+		[RSL_IE_IPAC_LOCAL_PORT]	= { TLV_TYPE_FIXED, 2 },
-+		[RSL_IE_IPAC_SPEECH_MODE]	= { TLV_TYPE_TV, 0 },
-+		[RSL_IE_IPAC_CONN_ID]		= { TLV_TYPE_FIXED, 2 },
-+		[RSL_IE_IPAC_RTP_PAYLOAD2]	= { TLV_TYPE_TV, 0 },
-+	},
-+};
++/* This structure is initialized in proto_register_rsl() */
++static struct tlv_definition rsl_att_tlvdef;
 +
  /* 9.3.1 Channel number			9.3.1	M TV 2 */
  static int
  dissect_rsl_ie_ch_no(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, gboolean is_mandatory)
-@@ -2045,7 +2249,6 @@ dissect_rsl_ie_err_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int
+@@ -2045,7 +2184,6 @@ dissect_rsl_ie_err_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int
  	proto_item_set_len(ti, length+2);
  
  	proto_tree_add_item(ie_tree, hf_rsl_ie_length, tvb, offset, 1, FALSE);
@@ -304,7 +249,7 @@
  
  	/* Received Message */
  	offset = dissct_rsl_msg(tvb, pinfo, ie_tree, offset);
-@@ -2910,12 +3113,184 @@ dissect_rsl_ie_tfo_transp_cont(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
+@@ -2910,12 +3048,184 @@ dissect_rsl_ie_tfo_transp_cont(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
  }
  
  static int
@@ -490,7 +435,7 @@
  	offset++;
  
  	switch (msg_type){
-@@ -3483,6 +3858,18 @@ dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
+@@ -3483,6 +3793,18 @@ dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
  		/* LLP APDU 9.3.58 M LV 2-N */
  		offset = dissect_rsl_ie_llp_apdu(tvb, pinfo, tree, offset, TRUE);
  		break;
@@ -509,7 +454,7 @@
  	default:
  		break;
  	}
-@@ -3490,6 +3877,40 @@ dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
+@@ -3490,6 +3812,40 @@ dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
  	return offset;
  
  }
@@ -550,7 +495,20 @@
  static void
  dissect_rsl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
  {
-@@ -3517,7 +3938,6 @@ dissect_rsl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+@@ -3512,12 +3868,19 @@ dissect_rsl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+ 	top_tree = tree;
+ 	if (tree) {
+ 		ti = proto_tree_add_item(tree, proto_rsl, tvb, 0, -1, FALSE);
++
++		/* if nanoBTS specific vendor messages are not enabled, skip */
++		if (!global_rsl_use_nano_bts) {
++			guint8 msg_disc = tvb_get_guint8(tvb, offset) >> 1;
++
++			if (msg_disc == RSL_MSGDISC_IPACCESS)
++				return;
++		}
+ 		rsl_tree = proto_item_add_subtree(ti, ett_rsl);
+ 
  		/* 9.1 Message discriminator */
  		proto_tree_add_item(rsl_tree, hf_rsl_msg_dsc, tvb, offset, 1, FALSE);
  		proto_tree_add_item(rsl_tree, hf_rsl_T_bit, tvb, offset, 1, FALSE);
@@ -558,7 +516,7 @@
  
  		offset = dissct_rsl_msg(tvb, pinfo, rsl_tree, offset);
  
-@@ -3892,6 +4312,86 @@ void proto_register_rsl(void)
+@@ -3892,6 +4255,86 @@ void proto_register_rsl(void)
  			FT_UINT8, BASE_DEC, VALS(rsl_emlpp_prio_vals), 0x03,
  			NULL, HFILL }
  		},
@@ -645,7 +603,7 @@
  	};
  	static gint *ett[] = {
  		&ett_rsl,
-@@ -3949,6 +4449,14 @@ void proto_register_rsl(void)
+@@ -3949,7 +4392,88 @@ void proto_register_rsl(void)
  		&ett_ie_meas_res_no,
  		&ett_ie_message_id,
  		&ett_ie_sys_info_type,
@@ -658,8 +616,90 @@
 +		&ett_ie_local_ip,
 +		&ett_ie_rtp_payload,
  	};
++	module_t *rsl_module;
++
++#define RSL_ATT_TLVDEF(_attr, _type, _fixed_len)		\
++	rsl_att_tlvdef.def[_attr].type = _type;			\
++	rsl_att_tlvdef.def[_attr].fixed_len = _fixed_len;	\
++
++	RSL_ATT_TLVDEF(RSL_IE_CH_NO,		TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_LINK_ID,		TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_ACT_TYPE,		TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_BS_POW,		TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_CH_ID,		TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_CH_MODE,		TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_ENC_INF,		TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_FRAME_NO,		TLV_TYPE_FIXED,		2);
++	RSL_ATT_TLVDEF(RSL_IE_HO_REF,		TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_L1_INF,		TLV_TYPE_FIXED,		2);
++	RSL_ATT_TLVDEF(RSL_IE_L3_INF,		TLV_TYPE_TL16V,		0);
++	RSL_ATT_TLVDEF(RSL_IE_MS_ID,		TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_MS_POW,		TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_PAGING_GRP,	TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_PAGING_LOAD,	TLV_TYPE_FIXED,		2);
++	RSL_ATT_TLVDEF(RSL_IE_PHY_CTX,		TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_ACCESS_DELAY,	TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_RACH_LOAD,	TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_REQ_REF,		TLV_TYPE_FIXED,		3);
++	RSL_ATT_TLVDEF(RSL_IE_REL_MODE,		TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_RESOURCE_INF,	TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_RLM_CAUSE,	TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_STARTING_TIME,	TLV_TYPE_FIXED,		2);
++	RSL_ATT_TLVDEF(RSL_IE_TIMING_ADV,	TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_UPLINK_MEAS,	TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_CAUSE,		TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_MEAS_RES_NO,	TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_MESSAGE_ID,	TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_SYS_INFO_TYPE,	TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_MS_POWER_PARAM,	TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_BS_POWER_PARAM,	TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_PREPROC_PARAM,	TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_PREPROC_MEAS,	TLV_TYPE_TLV,		0);
++//	RSL_ATT_TLVDEF(RSL_IE_IMM_ASS_INFO,	TLV_TYPE_TLV,		0);
++//	RSL_ATT_TLVDEF(RSL_IE_SMSCB_INFO,	TLV_TYPE_FIXED,		23);
++//	RSL_ATT_TLVDEF(RSL_IE_MS_TIMING_OFFSET,	TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_ERR_MSG,		TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_FULL_BCCH_INF,	TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_CH_NEEDED,	TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_CB_CMD_TYPE,	TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_SMSCB_MESS,	TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_FULL_IMM_ASS_INF,	TLV_TYPE_TLV,		0);
++//	RSL_ATT_TLVDEF(RSL_IE_SACCH_INFO,	TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_CBCH_LOAD_INF,	TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_SMSCB_CH_IND,	TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_GRP_CALL_REF,	TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_CH_DESC,		TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_NCH_DRX_INF,	TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_CMD_IND,		TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_EMLPP_PRIO,	TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_UIC,		TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_MAIN_CH_REF,	TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_MULTIRATE_CONF,	TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_MULTIRATE_CNTRL,	TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_SUP_CODEC_TYPES,	TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_CODEC_CONF,	TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_RTD,		TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_TFO_STATUS,	TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_LLP_APDU,		TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_IPAC_REMOTE_IP,	TLV_TYPE_FIXED,		4);
++	RSL_ATT_TLVDEF(RSL_IE_IPAC_REMOTE_PORT,	TLV_TYPE_FIXED,		2);
++	RSL_ATT_TLVDEF(RSL_IE_IPAC_LOCAL_IP,	TLV_TYPE_FIXED,		4);
++	RSL_ATT_TLVDEF(RSL_IE_IPAC_CONN_STAT,	TLV_TYPE_TLV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_IPAC_LOCAL_PORT,	TLV_TYPE_FIXED,		2);
++	RSL_ATT_TLVDEF(RSL_IE_IPAC_SPEECH_MODE,	TLV_TYPE_TV,		0);
++	RSL_ATT_TLVDEF(RSL_IE_IPAC_CONN_ID,	TLV_TYPE_FIXED,		2);
++	RSL_ATT_TLVDEF(RSL_IE_IPAC_RTP_PAYLOAD2,TLV_TYPE_TV,		0);
  
  	/* Register the protocol name and description */
--- 
-1.7.3.4
-
+ 	proto_rsl = proto_register_protocol("Radio Signalling Link (RSL)",
+@@ -3960,5 +4484,9 @@ void proto_register_rsl(void)
+ 
+ 	register_dissector("gsm_abis_rsl", dissect_rsl, proto_rsl);
+ 
++	rsl_module = prefs_register_protocol(proto_rsl, proto_reg_handoff_rsl);
++	prefs_register_bool_preference(rsl_module, "use_ipaccess_rsl",
++			"Use nanoBTS definitions",
++			"Use ipaccess nanoBTS specific definitions for RSL",
++			&global_rsl_use_nano_bts);
+ }
+-