[wiresehark] Update the HSL patch for wireshark RSL dissector

now it correctly parses BSSGP and displays some more HSL specific IEs
diff --git a/wireshark/0005-rsl-hsl.patch b/wireshark/0005-rsl-hsl.patch
index bb6b226..c778af5 100644
--- a/wireshark/0005-rsl-hsl.patch
+++ b/wireshark/0005-rsl-hsl.patch
@@ -1,8 +1,17 @@
 Index: wireshark/epan/dissectors/packet-rsl.c
 ===================================================================
---- wireshark.orig/epan/dissectors/packet-rsl.c	2011-01-13 10:03:21.000000000 +0100
-+++ wireshark/epan/dissectors/packet-rsl.c	2011-01-13 11:00:13.000000000 +0100
-@@ -207,6 +207,7 @@
+--- wireshark.orig/epan/dissectors/packet-rsl.c	2011-01-13 12:51:02.000000000 +0100
++++ wireshark/epan/dissectors/packet-rsl.c	2011-01-13 20:26:51.000000000 +0100
+@@ -137,6 +137,8 @@
+ static int hf_rsl_cstat_lost_pkts		= -1;
+ static int hf_rsl_cstat_ia_jitter		= -1;
+ static int hf_rsl_cstat_avg_tx_dly		= -1;
++/* HSL */
++static int hf_rsl_hsl_bts_serno			= -1;
+ 
+ /* Initialize the subtree pointers */
+ static int ett_rsl = -1;
+@@ -207,6 +209,7 @@
  static proto_tree *top_tree;
  static dissector_handle_t gsm_a_ccch_handle;
  static dissector_handle_t gsm_a_dtap_handle;
@@ -10,7 +19,7 @@
  
  static gboolean is_si2q = FALSE;
  
-@@ -239,9 +240,11 @@
+@@ -239,9 +242,11 @@
  	{  0x08,		"TRX Management messages" },
  	{  0x16,		"Location Services messages" },
  	{  0x3f,		"ip.access Vendor Specific messages" },
@@ -22,26 +31,35 @@
  
  /*
   * 9.2 MESSAGE TYPE
-@@ -353,6 +356,14 @@
+@@ -353,6 +358,22 @@
  #define RSL_IE_IPAC_RTP_MPLEX		0xfd
  #define RSL_IE_IPAC_RTP_MPLEX_ID	0xfe
  
 +/* Vendor-Specific messages of HSL femtocell. There is no public documentation
 + * about those extensions, all information in this dissector is based on lawful
 + * protocol reverse enginering by Harald Welte <laforge@gnumonks.org> */
++#define RSL_MSG_TYPE_HSL_IDENTIFY	0x80
 +#define RSL_MSG_TYPE_HSL_CONN_TRAU	0x81
 +#define RSL_MSG_TYPE_HSL_BSSGP		0x82
 +#define RSL_MSG_TYPE_HSL_GPRS_TS_ALLOC	0x83
 +#define RSL_MSG_TYPE_HSL_L1_PRIM	0x8a
 +
++#define RSL_IE_HSL_BTS_SERNO		0xc0
++#define RSL_IE_HSL_TRAU_PARAMS		0xc1
++#define RSL_IE_HSL_L1_PRIM		0xc4
++#define RSL_IE_HSL_BTS_VERSION		0xc5
++#define RSL_IE_HSL_UNKNOWN_VERSION1	0xc6
++#define RSL_IE_HSL_UNKNOWN_VERSION2	0xc7
++
  static const value_string rsl_msg_type_vals[] = {
  	  /* 	0 0 0 0 - - - - Radio Link Layer Management messages: */
  	{  0x01,	"DATA REQuest" },								/* 8.3.1 */
-@@ -434,6 +445,11 @@
+@@ -434,6 +455,12 @@
  	{  0x77,	"ip.access DLCX" },
  	{  0x78,	"ip.access DLCX ACK" },
  	{  0x79,	"ip.access DLCX NACK" },
 +	/* HSL */
++	{  0x80,	"HSL IDENTIFY" },
 +	{  0x81,	"HSL CONNECT TRAU" },
 +	{  0x82,	"HSL BSSGP" },
 +	{  0x83,	"HSL GPRS TS ALLOC" },
@@ -49,38 +67,78 @@
  	{ 0,		NULL }
  };
  
-@@ -3279,17 +3295,47 @@
- }
+@@ -573,6 +600,7 @@
+ 			Not used
  
- static int
-+dissct_rsl_hsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
-+{
-+	guint8	msg_type;
-+	tvbuff_t *next_tvb;
-+
-+	msg_type = tvb_get_guint8(tvb, offset)&0x7f;
-+	offset++;
-+
-+	switch (msg_type) {
-+	case RSL_MSG_TYPE_HSL_CONN_TRAU:
-+		proto_tree_add_item(tree, hf_rsl_remote_ip, tvb,
-+					    offset+6, 4, FALSE);
-+		break;
-+	case RSL_MSG_TYPE_HSL_BSSGP:
-+		next_tvb = tvb_new_subset(tvb, offset, -1, tvb_length(tvb));
-+		call_dissector(bssgp_handle, next_tvb, pinfo, tree);
-+		break;
-+	case RSL_MSG_TYPE_HSL_GPRS_TS_ALLOC:
-+		break;
-+	case RSL_MSG_TYPE_HSL_L1_PRIM:
-+		break;
-+	}
-+	return offset;
-+}
-+
-+static int
- dissct_rsl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
- {
+ 	*/
++	/* ip.access */
+ 	{ 0xe0,		"SRTP Configuration" },
+ 	{ 0xe1,		"BSC Proxy UDP Port" },
+ 	{ 0xe2,		"BSC Multiplex Timeout" },
+@@ -591,6 +619,13 @@
+ 	{ 0xfc,		"RTP Payload Type 2" },
+ 	{ 0xfd,		"RTP Multiplex" },
+ 	{ 0xfe,		"RTP Multiplex Identifier" },
++	/* HSL */
++	{ 0xc0,		"HSL Serial Number" },
++	{ 0xc1,		"HSL TRAU Parameters" },
++	{ 0xc4,		"HSL L1 Primitive" },
++	{ 0xc5,		"HSL BTS SW Version" },
++	{ 0xc6,		"HSL Unknown Version" },
++	{ 0xc7,		"HSL Unknown Version" },
+ 	{ 0,			NULL }
+ };
+ 
+@@ -714,6 +749,13 @@
+ 		[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 },
++		/* HSL */
++		[RSL_IE_HSL_BTS_SERNO]		= { TLV_TYPE_TLV,0 },
++		[RSL_IE_HSL_TRAU_PARAMS]	= { TLV_TYPE_TLV,0 },
++		[RSL_IE_HSL_L1_PRIM]		= { TLV_TYPE_TV, 0 },
++		[RSL_IE_HSL_BTS_VERSION]	= { TLV_TYPE_TLV, 0 },
++		[RSL_IE_HSL_UNKNOWN_VERSION1]	= { TLV_TYPE_TLV, 0 },
++		[RSL_IE_HSL_UNKNOWN_VERSION2]	= { TLV_TYPE_TLV, 0 },
+ 	},
+ };
+ 
+@@ -3120,7 +3162,7 @@
+ 	guint16 local_port = 0;
+ 	address src_addr;
+ 
+-	msg_type = tvb_get_guint8(tvb, offset)&0x7f;
++	msg_type = tvb_get_guint8(tvb, offset)&0xff;
+ 	offset++;
+ 
+ #if 0
+@@ -3259,6 +3301,25 @@
+ 			proto_tree_add_item(ie_tree, hf_rsl_cstat_avg_tx_dly, tvb,
+ 					    offset+24, 4, FALSE);
+ 			break;
++		/* HSL */
++		case RSL_IE_HSL_BTS_SERNO:
++			proto_tree_add_item(ie_tree, hf_rsl_hsl_bts_serno, tvb,
++					    offset, len, FALSE);
++			break;
++		case RSL_IE_HSL_TRAU_PARAMS:
++			proto_tree_add_item(tree, hf_rsl_remote_port, tvb,
++					    offset+2, 2, FALSE);
++			proto_tree_add_item(tree, hf_rsl_remote_ip, tvb,
++					    offset+4, 4, FALSE);
++			/* FIXME: other fields !! */
++			break;
++		case RSL_IE_L3_INF:
++			if (msg_type == RSL_MSG_TYPE_HSL_BSSGP) {
++				tvbuff_t *next_tvb;
++				next_tvb = tvb_new_subset(tvb, offset, -1, len);
++				call_dissector(bssgp_handle, next_tvb, pinfo, tree);
++			}
++			break;
+ 		}
+ 		offset += len;
+ 	}
+@@ -3284,10 +3345,12 @@
  	guint8	msg_disc, msg_type;
  
  	msg_disc = tvb_get_guint8(tvb, offset++) >> 1;
@@ -90,16 +148,12 @@
  
 -	if (msg_disc == RSL_MSGDISC_IPACCESS) {
 +	switch (msg_disc) {
++	case RSL_MSGDISC_HSL:
 +	case RSL_MSGDISC_IPACCESS:
  		offset = dissct_rsl_ipaccess_msg(tvb, pinfo, tree, offset);
  		return offset;
-+	case RSL_MSGDISC_HSL:
-+		offset = dissct_rsl_hsl_msg(tvb, pinfo, tree, offset);
-+		return offset;
  	}
- 	offset++;
- 
-@@ -3924,7 +3970,7 @@
+@@ -3924,7 +3987,7 @@
  	col_set_str(pinfo->cinfo, COL_PROTOCOL, "RSL");
  	col_clear(pinfo->cinfo, COL_INFO);
  
@@ -108,7 +162,7 @@
  
  	if (check_col(pinfo->cinfo, COL_INFO)){
  		col_append_fstr(pinfo->cinfo, COL_INFO, "%s ",val_to_str(msg_type, rsl_msg_type_vals,"unknown %u"));
-@@ -3955,6 +4001,7 @@
+@@ -3955,6 +4018,7 @@
  
  	gsm_a_ccch_handle = find_dissector("gsm_a_ccch");
  	gsm_a_dtap_handle = find_dissector("gsm_a_dtap");
@@ -116,7 +170,7 @@
  }
  
  /* Register the protocol with Wireshark */
-@@ -3975,7 +4022,7 @@
+@@ -3975,7 +4039,7 @@
  		},
  		{ &hf_rsl_msg_type,
  			{ "Message type",           "rsl.msg_type",
@@ -125,3 +179,15 @@
  			NULL, HFILL }
  		},
  		{ &hf_rsl_ie_id,
+@@ -4392,6 +4456,11 @@
+ 			{ "Average Tx Delay", "rsl.ipacc.cstat.avg_tx_delay",
+ 			  FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }
+ 		},
++		/* HSL */
++		{ &hf_rsl_hsl_bts_serno,
++			{ "BTS Serial Number", "rsl.hsl.bts_serno",
++			  FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }
++		},
+ 	};
+ 	static gint *ett[] = {
+ 		&ett_rsl,