libosmocore 0.3.6
Osmocom core library
include/osmocom/core/gsmtap.h
00001 #ifndef _GSMTAP_H
00002 #define _GSMTAP_H
00003 
00004 /* gsmtap header, pseudo-header in front of the actua GSM payload */
00005 
00006 /* GSMTAP is a generic header format for GSM protocol captures,
00007  * it uses the IANA-assigned UDP port number 4729 and carries
00008  * payload in various formats of GSM interfaces such as Um MAC
00009  * blocks or Um bursts.
00010  *
00011  * Example programs generating GSMTAP data are airprobe
00012  * (http://airprobe.org/) or OsmocomBB (http://bb.osmocom.org/)
00013  */
00014 
00015 #include <stdint.h>
00016 
00017 #define GSMTAP_VERSION          0x02
00018 
00019 #define GSMTAP_TYPE_UM          0x01
00020 #define GSMTAP_TYPE_ABIS        0x02
00021 #define GSMTAP_TYPE_UM_BURST    0x03    /* raw burst bits */
00022 #define GSMTAP_TYPE_SIM         0x04
00023 #define GSMTAP_TYPE_TETRA_I1            0x05    /* tetra air interface */
00024 #define GSMTAP_TYPE_TETRA_I1_BURST      0x06    /* tetra air interface */
00025 
00026 /* sub-types for TYPE_UM_BURST */
00027 #define GSMTAP_BURST_UNKNOWN            0x00
00028 #define GSMTAP_BURST_FCCH               0x01
00029 #define GSMTAP_BURST_PARTIAL_SCH        0x02
00030 #define GSMTAP_BURST_SCH                0x03
00031 #define GSMTAP_BURST_CTS_SCH            0x04
00032 #define GSMTAP_BURST_COMPACT_SCH        0x05
00033 #define GSMTAP_BURST_NORMAL             0x06
00034 #define GSMTAP_BURST_DUMMY              0x07
00035 #define GSMTAP_BURST_ACCESS             0x08
00036 #define GSMTAP_BURST_NONE               0x09
00037 
00038 /* sub-types for TYPE_UM */
00039 #define GSMTAP_CHANNEL_UNKNOWN  0x00
00040 #define GSMTAP_CHANNEL_BCCH     0x01
00041 #define GSMTAP_CHANNEL_CCCH     0x02
00042 #define GSMTAP_CHANNEL_RACH     0x03
00043 #define GSMTAP_CHANNEL_AGCH     0x04
00044 #define GSMTAP_CHANNEL_PCH      0x05
00045 #define GSMTAP_CHANNEL_SDCCH    0x06
00046 #define GSMTAP_CHANNEL_SDCCH4   0x07
00047 #define GSMTAP_CHANNEL_SDCCH8   0x08
00048 #define GSMTAP_CHANNEL_TCH_F    0x09
00049 #define GSMTAP_CHANNEL_TCH_H    0x0a
00050 #define GSMTAP_CHANNEL_ACCH     0x80
00051 
00052 /* sub-types for TYPE_TETRA_AIR */
00053 #define GSMTAP_TETRA_BSCH       0x01
00054 #define GSMTAP_TETRA_AACH       0x02
00055 #define GSMTAP_TETRA_SCH_HU     0x03
00056 #define GSMTAP_TETRA_SCH_HD     0x04
00057 #define GSMTAP_TETRA_SCH_F      0x05
00058 #define GSMTAP_TETRA_BNCH       0x06
00059 #define GSMTAP_TETRA_STCH       0x07
00060 #define GSMTAP_TETRA_TCH_F      0x08
00061 
00062 /* flags for the ARFCN */
00063 #define GSMTAP_ARFCN_F_PCS      0x8000
00064 #define GSMTAP_ARFCN_F_UPLINK   0x4000
00065 #define GSMTAP_ARFCN_MASK       0x3fff
00066 
00067 /* IANA-assigned well-known UDP port for GSMTAP messages */
00068 #define GSMTAP_UDP_PORT                 4729
00069 
00070 struct gsmtap_hdr {
00071         uint8_t version;        /* version, set to 0x01 currently */
00072         uint8_t hdr_len;        /* length in number of 32bit words */
00073         uint8_t type;           /* see GSMTAP_TYPE_* */
00074         uint8_t timeslot;       /* timeslot (0..7 on Um) */
00075 
00076         uint16_t arfcn;         /* ARFCN (frequency) */
00077         int8_t signal_dbm;      /* signal level in dBm */
00078         int8_t snr_db;          /* signal/noise ratio in dB */
00079 
00080         uint32_t frame_number;  /* GSM Frame Number (FN) */
00081 
00082         uint8_t sub_type;       /* Type of burst/channel, see above */
00083         uint8_t antenna_nr;     /* Antenna Number */
00084         uint8_t sub_slot;       /* sub-slot within timeslot */
00085         uint8_t res;            /* reserved for future use (RFU) */
00086 
00087 } __attribute__((packed));
00088 
00089 #endif /* _GSMTAP_H */