xref: /libbtbb/wireshark/plugins-legacy/btle/wireshark-1.8-btle-ppi.patch (revision e018180df8c9bd1ca869d5329a027253be1a76ec)
1*e018180dSDominic SpillIndex: wireshark-1.8.2/epan/dissectors/packet-ppi.c
2*e018180dSDominic Spill===================================================================
3*e018180dSDominic Spill--- wireshark-1.8.2.orig/epan/dissectors/packet-ppi.c	2013-02-01 12:18:18.208820553 -0800
4*e018180dSDominic Spill+++ wireshark-1.8.2/epan/dissectors/packet-ppi.c	2013-02-01 12:18:50.000000000 -0800
5*e018180dSDominic Spill@@ -181,6 +181,7 @@
6*e018180dSDominic Spill     PPI_VECTOR_INFO              = 30003, /* currently available in draft from. [email protected] */
7*e018180dSDominic Spill     PPI_SENSOR_INFO              = 30004,
8*e018180dSDominic Spill     PPI_ANTENNA_INFO             = 30005,
9*e018180dSDominic Spill+    PPI_BTLE                     = 30006,
10*e018180dSDominic Spill     CACE_PRIVATE                 = 0xCACE
11*e018180dSDominic Spill     /* All others RESERVED.  Contact the WinPcap team for an assignment */
12*e018180dSDominic Spill } ppi_field_type;
13*e018180dSDominic Spill@@ -319,7 +320,7 @@
14*e018180dSDominic Spill
15*e018180dSDominic Spill static dissector_handle_t data_handle;
16*e018180dSDominic Spill static dissector_handle_t ieee80211_ht_handle;
17*e018180dSDominic Spill-static dissector_handle_t ppi_gps_handle, ppi_vector_handle, ppi_sensor_handle, ppi_antenna_handle;
18*e018180dSDominic Spill+static dissector_handle_t ppi_gps_handle, ppi_vector_handle, ppi_sensor_handle, ppi_antenna_handle, ppi_btle_handle;
19*e018180dSDominic Spill
20*e018180dSDominic Spill
21*e018180dSDominic Spill static const true_false_string tfs_ppi_head_flag_alignment = { "32-bit aligned", "Not aligned" };
22*e018180dSDominic Spill@@ -881,7 +882,19 @@
23*e018180dSDominic Spill                 call_dissector(ppi_antenna_handle, next_tvb, pinfo, ppi_tree);
24*e018180dSDominic Spill             }
25*e018180dSDominic Spill             break;
26*e018180dSDominic Spill-
27*e018180dSDominic Spill+        case PPI_BTLE:
28*e018180dSDominic Spill+            if (ppi_btle_handle == NULL)
29*e018180dSDominic Spill+            {
30*e018180dSDominic Spill+                proto_tree_add_text(ppi_tree, tvb, offset, data_len,
31*e018180dSDominic Spill+                                    "%s (%u bytes)", val_to_str(data_type, (value_string *)&vs_ppi_field_type, "BTLE: "), data_len);
32*e018180dSDominic Spill+            }
33*e018180dSDominic Spill+            else /* we found a suitable dissector */
34*e018180dSDominic Spill+            {
35*e018180dSDominic Spill+                /* skip over the ppi_fieldheader, and pass it off to the dedicated BTLE dissetor */
36*e018180dSDominic Spill+                next_tvb = tvb_new_subset(tvb, offset + 4, data_len - 4 , -1);
37*e018180dSDominic Spill+                call_dissector(ppi_btle_handle, next_tvb, pinfo, ppi_tree);
38*e018180dSDominic Spill+            }
39*e018180dSDominic Spill+            break;
40*e018180dSDominic Spill         default:
41*e018180dSDominic Spill             if (tree)
42*e018180dSDominic Spill                 proto_tree_add_text(ppi_tree, tvb, offset, data_len,
43*e018180dSDominic Spill@@ -1365,6 +1378,7 @@
44*e018180dSDominic Spill     ppi_vector_handle = find_dissector("ppi_vector");
45*e018180dSDominic Spill     ppi_sensor_handle = find_dissector("ppi_sensor");
46*e018180dSDominic Spill     ppi_antenna_handle = find_dissector("ppi_antenna");
47*e018180dSDominic Spill+    ppi_btle_handle = find_dissector("ppi_btle");
48*e018180dSDominic Spill
49*e018180dSDominic Spill     dissector_add_uint("wtap_encap", WTAP_ENCAP_PPI, ppi_handle);
50*e018180dSDominic Spill }
51*e018180dSDominic SpillIndex: wireshark-1.8.2/epan/dissectors/packet-ppi-btle.c
52*e018180dSDominic Spill===================================================================
53*e018180dSDominic Spill--- /dev/null	1970-01-01 00:00:00.000000000 +0000
54*e018180dSDominic Spill+++ wireshark-1.8.2/epan/dissectors/packet-ppi-btle.c	2013-02-01 13:37:09.020642835 -0800
55*e018180dSDominic Spill@@ -0,0 +1,179 @@
56*e018180dSDominic Spill+/* packet-ppi-btle.c
57*e018180dSDominic Spill+ * Routines for PPI-BTLE  dissection
58*e018180dSDominic Spill+ * Copyright 2013, Mike Ryan, mikeryan /at/ isecpartners /dot/ com
59*e018180dSDominic Spill+ *
60*e018180dSDominic Spill+ * $Id$
61*e018180dSDominic Spill+ *
62*e018180dSDominic Spill+ * Wireshark - Network traffic analyzer
63*e018180dSDominic Spill+ * By Gerald Combs <[email protected]>
64*e018180dSDominic Spill+ * Copyright 1998 Gerald Combs
65*e018180dSDominic Spill+ *
66*e018180dSDominic Spill+ * Copied from packet-ppi-gps.c
67*e018180dSDominic Spill+ *
68*e018180dSDominic Spill+ * This program is free software; you can redistribute it and/or modify
69*e018180dSDominic Spill+ * it under the terms of the GNU General Public License as published by
70*e018180dSDominic Spill+ * the Free Software Foundation; either version 2 of the License, or
71*e018180dSDominic Spill+ * (at your option) any later version.
72*e018180dSDominic Spill+ *
73*e018180dSDominic Spill+ * This program is distributed in the hope that it will be useful,
74*e018180dSDominic Spill+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
75*e018180dSDominic Spill+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
76*e018180dSDominic Spill+ * GNU General Public License for more details.
77*e018180dSDominic Spill+ *
78*e018180dSDominic Spill+ * You should have received a copy of the GNU General Public License along
79*e018180dSDominic Spill+ * with this program; if not, write to the Free Software Foundation, Inc.,
80*e018180dSDominic Spill+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
81*e018180dSDominic Spill+ */
82*e018180dSDominic Spill+
83*e018180dSDominic Spill+#ifdef HAVE_CONFIG_H
84*e018180dSDominic Spill+# include "config.h"
85*e018180dSDominic Spill+#endif
86*e018180dSDominic Spill+
87*e018180dSDominic Spill+#include <glib.h>
88*e018180dSDominic Spill+#include <epan/packet.h>
89*e018180dSDominic Spill+
90*e018180dSDominic Spill+#define PPI_BTLE_MINTAGLEN  12
91*e018180dSDominic Spill+#define PPI_BTLE_MAXTAGLEN  12
92*e018180dSDominic Spill+
93*e018180dSDominic Spill+/* protocol */
94*e018180dSDominic Spill+static int proto_ppi_btle = -1;
95*e018180dSDominic Spill+
96*e018180dSDominic Spill+static int hf_ppi_btle_version = -1;
97*e018180dSDominic Spill+static int hf_ppi_btle_channel = -1;
98*e018180dSDominic Spill+static int hf_ppi_btle_clkn_high = -1;
99*e018180dSDominic Spill+static int hf_ppi_btle_clk100ns = -1;
100*e018180dSDominic Spill+static int hf_ppi_btle_rssi_max = -1;
101*e018180dSDominic Spill+static int hf_ppi_btle_rssi_min = -1;
102*e018180dSDominic Spill+static int hf_ppi_btle_rssi_avg = -1;
103*e018180dSDominic Spill+static int hf_ppi_btle_rssi_count = -1;
104*e018180dSDominic Spill+
105*e018180dSDominic Spill+static gint ett_ppi_btle = -1;
106*e018180dSDominic Spill+
107*e018180dSDominic Spill+static void
108*e018180dSDominic Spill+dissect_ppi_btle(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
109*e018180dSDominic Spill+    /* These are locals used for processing the current tvb */
110*e018180dSDominic Spill+    guint length;
111*e018180dSDominic Spill+    guint version;
112*e018180dSDominic Spill+    guint32 channel, clkn_high, clk100ns;
113*e018180dSDominic Spill+    guint8 urssi_max, urssi_min, urssi_avg;
114*e018180dSDominic Spill+    gint8 rssi_max, rssi_min, rssi_avg;
115*e018180dSDominic Spill+    guint rssi_count;
116*e018180dSDominic Spill+
117*e018180dSDominic Spill+    proto_tree *ppi_btle_tree = NULL;
118*e018180dSDominic Spill+    proto_tree *pt, *present_tree = NULL;
119*e018180dSDominic Spill+
120*e018180dSDominic Spill+    proto_item *ti = NULL;
121*e018180dSDominic Spill+
122*e018180dSDominic Spill+    /* Clear out stuff in the info column */
123*e018180dSDominic Spill+    col_clear(pinfo->cinfo,COL_INFO);
124*e018180dSDominic Spill+
125*e018180dSDominic Spill+    /* Setup basic column info */
126*e018180dSDominic Spill+    if (check_col(pinfo->cinfo, COL_INFO))
127*e018180dSDominic Spill+        col_add_fstr(pinfo->cinfo, COL_INFO, "PPI_BTLE Capture");
128*e018180dSDominic Spill+
129*e018180dSDominic Spill+    /* Create the basic dissection tree*/
130*e018180dSDominic Spill+    if (tree)
131*e018180dSDominic Spill+        ti = proto_tree_add_protocol_format(tree, proto_ppi_btle, tvb, 0, length, "BTLE:");
132*e018180dSDominic Spill+
133*e018180dSDominic Spill+    /* Sanity check length of tag */
134*e018180dSDominic Spill+    length = tvb_length(tvb);
135*e018180dSDominic Spill+    if (length < PPI_BTLE_MINTAGLEN) {
136*e018180dSDominic Spill+        if (tree)
137*e018180dSDominic Spill+            proto_item_append_text(ti, "Invalid PPI-BTLE length  (got %d, %d min)", length, PPI_BTLE_MAXTAGLEN);
138*e018180dSDominic Spill+        return;
139*e018180dSDominic Spill+    }
140*e018180dSDominic Spill+
141*e018180dSDominic Spill+    if (tree) {
142*e018180dSDominic Spill+        channel = tvb_get_letohs(tvb, 1);
143*e018180dSDominic Spill+        clkn_high = tvb_get_guint8(tvb, 3);
144*e018180dSDominic Spill+        clk100ns = tvb_get_letohl(tvb, 4);
145*e018180dSDominic Spill+        urssi_max = tvb_get_guint8(tvb, 8);
146*e018180dSDominic Spill+        urssi_min = tvb_get_guint8(tvb, 9);
147*e018180dSDominic Spill+        urssi_avg = tvb_get_guint8(tvb, 10);
148*e018180dSDominic Spill+        rssi_count = tvb_get_guint8(tvb, 11);
149*e018180dSDominic Spill+
150*e018180dSDominic Spill+        rssi_max = *(gint8 *)&urssi_max;
151*e018180dSDominic Spill+        rssi_min = *(gint8 *)&urssi_min;
152*e018180dSDominic Spill+        rssi_avg = *(gint8 *)&urssi_avg;
153*e018180dSDominic Spill+
154*e018180dSDominic Spill+        ppi_btle_tree= proto_item_add_subtree(ti, ett_ppi_btle);
155*e018180dSDominic Spill+        proto_tree_add_uint(ppi_btle_tree, hf_ppi_btle_version, tvb, 0, 1, version);
156*e018180dSDominic Spill+        proto_tree_add_uint(ppi_btle_tree, hf_ppi_btle_channel, tvb, 1, 2, channel);
157*e018180dSDominic Spill+        proto_tree_add_uint(ppi_btle_tree, hf_ppi_btle_clkn_high, tvb, 3, 1, clkn_high);
158*e018180dSDominic Spill+        proto_tree_add_uint(ppi_btle_tree, hf_ppi_btle_clk100ns, tvb, 4, 4, clk100ns);
159*e018180dSDominic Spill+        proto_tree_add_int(ppi_btle_tree, hf_ppi_btle_rssi_max, tvb, 8, 1, rssi_max);
160*e018180dSDominic Spill+        proto_tree_add_int(ppi_btle_tree, hf_ppi_btle_rssi_min, tvb, 9, 1, rssi_min);
161*e018180dSDominic Spill+        proto_tree_add_int(ppi_btle_tree, hf_ppi_btle_rssi_avg, tvb, 10, 1, rssi_avg);
162*e018180dSDominic Spill+        proto_tree_add_uint(ppi_btle_tree, hf_ppi_btle_rssi_count, tvb, 11, 1, rssi_count);
163*e018180dSDominic Spill+    }
164*e018180dSDominic Spill+
165*e018180dSDominic Spill+    version = tvb_get_guint8(tvb, 0);
166*e018180dSDominic Spill+    if (version > 0) {
167*e018180dSDominic Spill+        if (tree)
168*e018180dSDominic Spill+            proto_item_append_text(ti, "Warning: New version of PPI-BTLE (length %d, I can only decode first %d bytes)", length, PPI_BTLE_MAXTAGLEN);
169*e018180dSDominic Spill+    }
170*e018180dSDominic Spill+
171*e018180dSDominic Spill+    /* perform tag-specific max length sanity checking */
172*e018180dSDominic Spill+    else if (length > PPI_BTLE_MAXTAGLEN ) {
173*e018180dSDominic Spill+        if (tree)
174*e018180dSDominic Spill+            proto_item_append_text(ti, "Invalid PPI-BTLE length  (got %d, %d max)", length, PPI_BTLE_MAXTAGLEN);
175*e018180dSDominic Spill+        return;
176*e018180dSDominic Spill+    }
177*e018180dSDominic Spill+
178*e018180dSDominic Spill+    return;
179*e018180dSDominic Spill+}
180*e018180dSDominic Spill+
181*e018180dSDominic Spill+void
182*e018180dSDominic Spill+proto_register_ppi_btle(void) {
183*e018180dSDominic Spill+    /* The following array initializes those header fields declared above to the values displayed */
184*e018180dSDominic Spill+    static hf_register_info hf[] = {
185*e018180dSDominic Spill+
186*e018180dSDominic Spill+        { &hf_ppi_btle_version,
187*e018180dSDominic Spill+          { "Version", "ppi_btle.version",
188*e018180dSDominic Spill+            FT_UINT8, BASE_DEC, NULL, 0x0,
189*e018180dSDominic Spill+            NULL, HFILL } },
190*e018180dSDominic Spill+
191*e018180dSDominic Spill+        { &hf_ppi_btle_channel,
192*e018180dSDominic Spill+          { "Channel", "ppi_btle.channel",
193*e018180dSDominic Spill+            FT_UINT16, BASE_DEC, NULL, 0x0,
194*e018180dSDominic Spill+            "MHz", HFILL } },
195*e018180dSDominic Spill+
196*e018180dSDominic Spill+        { &hf_ppi_btle_clkn_high,
197*e018180dSDominic Spill+          { "clkn_high", "ppi_btle.clkn_high",
198*e018180dSDominic Spill+            FT_UINT8, BASE_DEC, NULL, 0x0,
199*e018180dSDominic Spill+            "High bits of native clock", HFILL } },
200*e018180dSDominic Spill+
201*e018180dSDominic Spill+        { &hf_ppi_btle_clk100ns,
202*e018180dSDominic Spill+          { "clk100ns", "ppi_btle.clk100ns",
203*e018180dSDominic Spill+            FT_UINT32, BASE_DEC, NULL, 0x0,
204*e018180dSDominic Spill+            "100 ns clock", HFILL } },
205*e018180dSDominic Spill+
206*e018180dSDominic Spill+        // RSSI
207*e018180dSDominic Spill+        { &hf_ppi_btle_rssi_max,
208*e018180dSDominic Spill+          { "Max RSSI", "ppi_btle.rssi_max",
209*e018180dSDominic Spill+            FT_INT8, BASE_DEC, NULL, 0x0,
210*e018180dSDominic Spill+            NULL, HFILL } },
211*e018180dSDominic Spill+        { &hf_ppi_btle_rssi_min,
212*e018180dSDominic Spill+          { "Min RSSI", "ppi_btle.rssi_min",
213*e018180dSDominic Spill+            FT_INT8, BASE_DEC, NULL, 0x0,
214*e018180dSDominic Spill+            NULL, HFILL } },
215*e018180dSDominic Spill+        { &hf_ppi_btle_rssi_avg,
216*e018180dSDominic Spill+          { "Average RSSI", "ppi_btle.rssi_avg",
217*e018180dSDominic Spill+            FT_INT8, BASE_DEC, NULL, 0x0,
218*e018180dSDominic Spill+            NULL, HFILL } },
219*e018180dSDominic Spill+        { &hf_ppi_btle_rssi_count,
220*e018180dSDominic Spill+          { "RSSI Count", "ppi_btle.rssi_count",
221*e018180dSDominic Spill+            FT_UINT8, BASE_DEC, NULL, 0x0,
222*e018180dSDominic Spill+            NULL, HFILL } },
223*e018180dSDominic Spill+
224*e018180dSDominic Spill+    };
225*e018180dSDominic Spill+
226*e018180dSDominic Spill+    static gint *ett[] = {
227*e018180dSDominic Spill+        &ett_ppi_btle,
228*e018180dSDominic Spill+    };
229*e018180dSDominic Spill+
230*e018180dSDominic Spill+    proto_ppi_btle = proto_register_protocol("PPI Ubertooth BTLE tag decoder", "PPI BTLE Decoder", "ppi_btle");
231*e018180dSDominic Spill+    proto_register_field_array(proto_ppi_btle, hf, array_length(hf));
232*e018180dSDominic Spill+    proto_register_subtree_array(ett, array_length(ett));
233*e018180dSDominic Spill+    register_dissector("ppi_btle", dissect_ppi_btle, proto_ppi_btle);
234*e018180dSDominic Spill+}
235*e018180dSDominic SpillIndex: wireshark-1.8.2/epan/dissectors/Makefile.common
236*e018180dSDominic Spill===================================================================
237*e018180dSDominic Spill--- wireshark-1.8.2.orig/epan/dissectors/Makefile.common	2013-01-29 11:46:35.429559060 -0800
238*e018180dSDominic Spill+++ wireshark-1.8.2/epan/dissectors/Makefile.common	2013-01-29 11:56:46.541536579 -0800
239*e018180dSDominic Spill@@ -881,6 +881,7 @@
240*e018180dSDominic Spill 	packet-ppi-gps.c	\
241*e018180dSDominic Spill 	packet-ppi-sensor.c	\
242*e018180dSDominic Spill 	packet-ppi-vector.c	\
243*e018180dSDominic Spill+	packet-ppi-btle.c	\
244*e018180dSDominic Spill 	packet-ppp.c		\
245*e018180dSDominic Spill 	packet-pppoe.c		\
246*e018180dSDominic Spill 	packet-pptp.c		\
247