aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-gsmtap.c
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2011-06-05 19:58:02 +0000
committerAnders Broman <anders.broman@ericsson.com>2011-06-05 19:58:02 +0000
commit70f488cea7d3dd52798e40f2a7df6b27e7f9025b (patch)
treedcb61d2a5bde44d99874fcba1bd784b11a203365 /epan/dissectors/packet-gsmtap.c
parent7cd35baaafb5f43174889b8802edc6c887a1cec5 (diff)
From Ivan Kluchnikov:
GSMTAP carries payload in various formats of WiMAX interfaces. It uses the wimax plugin to decode the WiMAX bursts. https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=5964 svn path=/trunk/; revision=37557
Diffstat (limited to 'epan/dissectors/packet-gsmtap.c')
-rw-r--r--epan/dissectors/packet-gsmtap.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/epan/dissectors/packet-gsmtap.c b/epan/dissectors/packet-gsmtap.c
index 554317e47a..37f76ede3c 100644
--- a/epan/dissectors/packet-gsmtap.c
+++ b/epan/dissectors/packet-gsmtap.c
@@ -37,6 +37,9 @@
*
* It has also been used for Tetra by the OsmocomTETRA project.
* (http://tetra.osmocom.org/)
+ *
+ * GSMTAP also carries payload in various formats of WiMAX interfaces.
+ * It uses the wimax plugin to decode the WiMAX bursts.
*/
#ifdef HAVE_CONFIG_H
@@ -55,6 +58,7 @@
#define GSMTAP_TYPE_SIM 0x04
#define GSMTAP_TYPE_TETRA_I1 0x05 /* tetra air interface */
#define GSMTAP_TTPE_TETRA_I1_BURST 0x06 /* tetra air interface */
+#define GSMTAP_TYPE_WMX_BURST 0x07 /* WiMAX burst */
#define GSMTAP_BURST_UNKNOWN 0x00
#define GSMTAP_BURST_FCCH 0x01
@@ -66,6 +70,13 @@
#define GSMTAP_BURST_DUMMY 0x07
#define GSMTAP_BURST_ACCESS 0x08
#define GSMTAP_BURST_NONE 0x09
+/* WiMAX bursts */
+#define GSMTAP_BURST_CDMA_CODE 0x10 /* WiMAX CDMA Code Attribute burst */
+#define GSMTAP_BURST_FCH 0x11 /* WiMAX FCH burst */
+#define GSMTAP_BURST_FFB 0x12 /* WiMAX Fast Feedback burst */
+#define GSMTAP_BURST_PDU 0x13 /* WiMAX PDU burst */
+#define GSMTAP_BURST_HACK 0x14 /* WiMAX HARQ ACK burst */
+#define GSMTAP_BURST_PHY_ATTRIBUTES 0x15 /* WiMAX PHY Attributes burst */
#define GSMTAP_CHANNEL_UNKNOWN 0x00
#define GSMTAP_CHANNEL_BCCH 0x01
@@ -145,6 +156,13 @@ enum {
GSMTAP_SUB_UM,
GSMTAP_SUB_UM_LAPDM,
GSMTAP_SUB_ABIS,
+ /* WiMAX sub handles */
+ GSMTAP_SUB_CDMA_CODE,
+ GSMTAP_SUB_FCH,
+ GSMTAP_SUB_FFB,
+ GSMTAP_SUB_PDU,
+ GSMTAP_SUB_HACK,
+ GSMTAP_SUB_PHY_ATTRIBUTES,
GSMTAP_SUB_MAX
};
@@ -161,6 +179,13 @@ static const value_string gsmtap_bursts[] = {
{ GSMTAP_BURST_NORMAL, "NORMAL" },
{ GSMTAP_BURST_DUMMY, "DUMMY" },
{ GSMTAP_BURST_ACCESS, "RACH" },
+ /* WiMAX bursts */
+ { GSMTAP_BURST_CDMA_CODE, "CDMA Code" },
+ { GSMTAP_BURST_FCH, "FCH" },
+ { GSMTAP_BURST_FFB, "Fast Feedback" },
+ { GSMTAP_BURST_PDU, "PDU" },
+ { GSMTAP_BURST_HACK, "HACK" },
+ { GSMTAP_BURST_PHY_ATTRIBUTES, "PHY Attributes" },
{ 0, NULL },
};
@@ -221,6 +246,7 @@ static const value_string gsmtap_types[] = {
{ GSMTAP_TYPE_SIM, "SIM" },
{ GSMTAP_TYPE_TETRA_I1, "TETRA V+D"},
{ GSMTAP_TTPE_TETRA_I1_BURST, "TETRA V+D burst"},
+ { GSMTAP_TYPE_WMX_BURST,"WiMAX burst" },
{ 0, NULL },
};
@@ -366,6 +392,9 @@ dissect_gsmtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
else if (type == GSMTAP_TYPE_TETRA_I1)
proto_tree_add_item(gsmtap_tree, hf_gsmtap_tetra_channel_type,
tvb, offset+12, 1, FALSE);
+ else if (type == GSMTAP_TYPE_WMX_BURST)
+ proto_tree_add_item(gsmtap_tree, hf_gsmtap_burst_type,
+ tvb, offset+12, 1, FALSE);
proto_tree_add_item(gsmtap_tree, hf_gsmtap_antenna,
tvb, offset+13, 1, FALSE);
proto_tree_add_item(gsmtap_tree, hf_gsmtap_subslot,
@@ -400,6 +429,31 @@ dissect_gsmtap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
case GSMTAP_TYPE_TETRA_I1:
handle_tetra(tvb_get_guint8(tvb, offset+12), payload_tvb, pinfo, tree);
return;
+ case GSMTAP_TYPE_WMX_BURST:
+ switch (sub_type) {
+ case GSMTAP_BURST_CDMA_CODE:
+ sub_handle = GSMTAP_SUB_CDMA_CODE;
+ break;
+ case GSMTAP_BURST_FCH:
+ sub_handle = GSMTAP_SUB_FCH;
+ break;
+ case GSMTAP_BURST_FFB:
+ sub_handle = GSMTAP_SUB_FFB;
+ break;
+ case GSMTAP_BURST_PDU:
+ sub_handle = GSMTAP_SUB_PDU;
+ break;
+ case GSMTAP_BURST_HACK:
+ sub_handle = GSMTAP_SUB_HACK;
+ break;
+ case GSMTAP_BURST_PHY_ATTRIBUTES:
+ sub_handle = GSMTAP_SUB_PHY_ATTRIBUTES;
+ break;
+ default:
+ sub_handle = GSMTAP_SUB_DATA;
+ break;
+ }
+ break;
case GSMTAP_TYPE_UM_BURST:
default:
sub_handle = GSMTAP_SUB_DATA;
@@ -472,6 +526,12 @@ proto_reg_handoff_gsmtap(void)
sub_handles[GSMTAP_SUB_UM] = find_dissector("gsm_a_ccch");
sub_handles[GSMTAP_SUB_UM_LAPDM] = find_dissector("lapdm");
sub_handles[GSMTAP_SUB_ABIS] = find_dissector("gsm_a_dtap");
+ sub_handles[GSMTAP_SUB_CDMA_CODE] = find_dissector("wimax_cdma_code_burst_handler");
+ sub_handles[GSMTAP_SUB_FCH] = find_dissector("wimax_fch_burst_handler");
+ sub_handles[GSMTAP_SUB_FFB] = find_dissector("wimax_ffb_burst_handler");
+ sub_handles[GSMTAP_SUB_PDU] = find_dissector("wimax_pdu_burst_handler");
+ sub_handles[GSMTAP_SUB_HACK] = find_dissector("wimax_hack_burst_handler");
+ sub_handles[GSMTAP_SUB_PHY_ATTRIBUTES] = find_dissector("wimax_phy_attributes_burst_handler");
gsmtap_handle = create_dissector_handle(dissect_gsmtap, proto_gsmtap);
dissector_add_uint("udp.port", GSMTAP_UDP_PORT, gsmtap_handle);
}