logging: introduce library-internal logging categories
[osmocom-bb.git] / include / osmocom / core / gsmtap.h
1 #ifndef _GSMTAP_H
2 #define _GSMTAP_H
3
4 /* gsmtap header, pseudo-header in front of the actua GSM payload */
5
6 /* GSMTAP is a generic header format for GSM protocol captures,
7  * it uses the IANA-assigned UDP port number 4729 and carries
8  * payload in various formats of GSM interfaces such as Um MAC
9  * blocks or Um bursts.
10  *
11  * Example programs generating GSMTAP data are airprobe
12  * (http://airprobe.org/) or OsmocomBB (http://bb.osmocom.org/)
13  */
14
15 #include <stdint.h>
16
17 #define GSMTAP_VERSION          0x02
18
19 #define GSMTAP_TYPE_UM          0x01
20 #define GSMTAP_TYPE_ABIS        0x02
21 #define GSMTAP_TYPE_UM_BURST    0x03    /* raw burst bits */
22 #define GSMTAP_TYPE_SIM         0x04
23 #define GSMTAP_TYPE_TETRA_I1            0x05    /* tetra air interface */
24 #define GSMTAP_TYPE_TETRA_I1_BURST      0x06    /* tetra air interface */
25
26 /* sub-types for TYPE_UM_BURST */
27 #define GSMTAP_BURST_UNKNOWN            0x00
28 #define GSMTAP_BURST_FCCH               0x01
29 #define GSMTAP_BURST_PARTIAL_SCH        0x02
30 #define GSMTAP_BURST_SCH                0x03
31 #define GSMTAP_BURST_CTS_SCH            0x04
32 #define GSMTAP_BURST_COMPACT_SCH        0x05
33 #define GSMTAP_BURST_NORMAL             0x06
34 #define GSMTAP_BURST_DUMMY              0x07
35 #define GSMTAP_BURST_ACCESS             0x08
36 #define GSMTAP_BURST_NONE               0x09
37
38 /* sub-types for TYPE_UM */
39 #define GSMTAP_CHANNEL_UNKNOWN  0x00
40 #define GSMTAP_CHANNEL_BCCH     0x01
41 #define GSMTAP_CHANNEL_CCCH     0x02
42 #define GSMTAP_CHANNEL_RACH     0x03
43 #define GSMTAP_CHANNEL_AGCH     0x04
44 #define GSMTAP_CHANNEL_PCH      0x05
45 #define GSMTAP_CHANNEL_SDCCH    0x06
46 #define GSMTAP_CHANNEL_SDCCH4   0x07
47 #define GSMTAP_CHANNEL_SDCCH8   0x08
48 #define GSMTAP_CHANNEL_TCH_F    0x09
49 #define GSMTAP_CHANNEL_TCH_H    0x0a
50 #define GSMTAP_CHANNEL_ACCH     0x80
51
52 /* sub-types for TYPE_TETRA_AIR */
53 #define GSMTAP_TETRA_BSCH       0x01
54 #define GSMTAP_TETRA_AACH       0x02
55 #define GSMTAP_TETRA_SCH_HU     0x03
56 #define GSMTAP_TETRA_SCH_HD     0x04
57 #define GSMTAP_TETRA_SCH_F      0x05
58 #define GSMTAP_TETRA_BNCH       0x06
59 #define GSMTAP_TETRA_STCH       0x07
60 #define GSMTAP_TETRA_TCH_F      0x08
61
62 /* flags for the ARFCN */
63 #define GSMTAP_ARFCN_F_PCS      0x8000
64 #define GSMTAP_ARFCN_F_UPLINK   0x4000
65 #define GSMTAP_ARFCN_MASK       0x3fff
66
67 /* IANA-assigned well-known UDP port for GSMTAP messages */
68 #define GSMTAP_UDP_PORT                 4729
69
70 struct gsmtap_hdr {
71         uint8_t version;        /* version, set to 0x01 currently */
72         uint8_t hdr_len;        /* length in number of 32bit words */
73         uint8_t type;           /* see GSMTAP_TYPE_* */
74         uint8_t timeslot;       /* timeslot (0..7 on Um) */
75
76         uint16_t arfcn;         /* ARFCN (frequency) */
77         int8_t signal_dbm;      /* signal level in dBm */
78         int8_t snr_db;          /* signal/noise ratio in dB */
79
80         uint32_t frame_number;  /* GSM Frame Number (FN) */
81
82         uint8_t sub_type;       /* Type of burst/channel, see above */
83         uint8_t antenna_nr;     /* Antenna Number */
84         uint8_t sub_slot;       /* sub-slot within timeslot */
85         uint8_t res;            /* reserved for future use (RFU) */
86
87 } __attribute__((packed));
88
89 #endif /* _GSMTAP_H */