diff options
Diffstat (limited to 'epan/dissectors')
-rw-r--r-- | epan/dissectors/packet-gsmtap.c | 60 |
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); } |