From 48f2a191de62686c2ffdb97e46b5cc6bb61a868d Mon Sep 17 00:00:00 2001
From: Holger Hans Peter Freyther <zecke@selfish.org>
Date: Tue, 11 Jan 2011 15:16:19 +0100
Subject: [PATCH 3/4] lucent-hnb

Add lucent hnb patch from OpenBSC
---
 epan/CMakeLists.txt                 |    1 +
 epan/dissectors/Makefile.common     |    1 +
 epan/dissectors/packet-lucent_hnb.c |  103 +++++++++++++++++++++++++++++++++++
 3 files changed, 105 insertions(+), 0 deletions(-)
 create mode 100644 epan/dissectors/packet-lucent_hnb.c

diff --git a/epan/CMakeLists.txt b/epan/CMakeLists.txt
index 9217ec0..ac76ab9 100644
--- a/epan/CMakeLists.txt
+++ b/epan/CMakeLists.txt
@@ -728,6 +728,7 @@ set(DISSECTOR_SRC
 	dissectors/packet-lpd.c
 	dissectors/packet-lsc.c
 	dissectors/packet-ltp.c
+	dissectors/packet-lucent_hnb.c
 	dissectors/packet-lwapp.c
 	dissectors/packet-lwres.c
 	dissectors/packet-m2pa.c
diff --git a/epan/dissectors/Makefile.common b/epan/dissectors/Makefile.common
index 4c7094b..9931f28 100644
--- a/epan/dissectors/Makefile.common
+++ b/epan/dissectors/Makefile.common
@@ -638,6 +638,7 @@ DISSECTOR_SRC = \
 	packet-lpd.c		\
 	packet-lsc.c		\
 	packet-ltp.c		\
+	packet-lucent_hnb.c	\
 	packet-lwapp.c		\
 	packet-lwres.c		\
 	packet-m2pa.c		\
diff --git a/epan/dissectors/packet-lucent_hnb.c b/epan/dissectors/packet-lucent_hnb.c
new file mode 100644
index 0000000..296f98b
--- /dev/null
+++ b/epan/dissectors/packet-lucent_hnb.c
@@ -0,0 +1,103 @@
+/* packet-lucent_hnb.c
+ * Routines for packet dissection of Alcatel/Lucent HomeNodeB
+ * Copyright 2009 by Harald Welte <laforge@gnumonks.org>
+ *
+ * This protocol decoder is based entirely on reverse engineering, i.e.
+ * on educated guesses.
+ *
+ * $Id: packet-lucent_hnb.c 29254 2009-07-31 19:19:25Z gerald $
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#define LHNB_SCTP_PPI_MM	1
+#define LHNB_SCTP_PPI_GMM	6
+
+#define LHNB_SCTP_PORT		6005
+
+#include <glib.h>
+
+#include <epan/packet.h>
+
+/* Initialize the protocol and registered fields */
+static int proto_lhnb = -1;
+
+static int hf_lhnb_length = -1;
+
+/* Initialize the subtree pointers */
+static gint ett_lhnb = -1;
+
+static dissector_handle_t ranap_handle;
+
+/* Code to actually dissect the packets */
+static void
+dissect_lhnb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+
+	int offset = 0;
+	u_int16_t len;
+	tvbuff_t *next_tvb;
+
+	col_set_str(pinfo->cinfo, COL_PROTOCOL, "LHNB");
+	col_clear(pinfo->cinfo, COL_INFO);
+
+	proto_tree_add_item(tree, hf_lhnb_length, tvb, offset+2, 2, FALSE);
+	len = tvb_get_ntohs(tvb, offset+2);
+	next_tvb = tvb_new_subset(tvb, offset+2+6, len-4, -1);
+
+	call_dissector(ranap_handle, next_tvb, pinfo, tree);
+}
+
+void proto_register_lucent_hnb(void)
+{
+	static hf_register_info hf[] = {
+		{&hf_lhnb_length,
+		 {"Length", "lhnb.len",
+		  FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL}
+		 },
+	};
+
+	static gint *ett[] = {
+		&ett_lhnb,
+	};
+
+	proto_lhnb =
+	    proto_register_protocol("Alcatel/Lucent HomeNodeB",
+				    "Lucent HNB", "lhnb");
+
+	proto_register_field_array(proto_lhnb, hf, array_length(hf));
+	proto_register_subtree_array(ett, array_length(ett));
+}
+
+void proto_reg_handoff_lucent_hnb(void)
+{
+	dissector_handle_t lhnb_handle;
+
+	ranap_handle = find_dissector("ranap");
+
+	lhnb_handle = create_dissector_handle(dissect_lhnb, proto_lhnb);
+
+	dissector_add("sctp.ppi", LHNB_SCTP_PPI_MM, lhnb_handle);
+	dissector_add("sctp.ppi", LHNB_SCTP_PPI_GMM, lhnb_handle);
+	dissector_add("sctp.port", LHNB_SCTP_PORT, lhnb_handle);
+}
-- 
1.7.3.4

