libosmocore  0.9.3
Osmocom core library
include/osmocom/core/gsmtap.h
00001 #pragma once
00002 
00003 /* gsmtap header, pseudo-header in front of the actua GSM payload */
00004 
00005 /* GSMTAP is a generic header format for GSM protocol captures,
00006  * it uses the IANA-assigned UDP port number 4729 and carries
00007  * payload in various formats of GSM interfaces such as Um MAC
00008  * blocks or Um bursts.
00009  *
00010  * Example programs generating GSMTAP data are airprobe
00011  * (http://airprobe.org/) or OsmocomBB (http://bb.osmocom.org/)
00012  */
00013 
00014 #include <stdint.h>
00015 
00016 /* ====== DO NOT MAKE UNAPPROVED MODIFICATIONS HERE ===== */
00017 
00018 /* The GSMTAP format definition is maintained in libosmocore,
00019  * specifically the latest version can always be obtained from
00020  * http://cgit.osmocom.org/cgit/libosmocore/tree/include/osmocom/core/gsmtap.h
00021  *
00022  * If you want to introduce new protocol/burst/channel types or extend
00023  * GSMTAP in any way, please contact the GSMTAP maintainer at either the
00024  * public openbsc@lists.osmocom.org mailing list, or privately at
00025  * Harald Welte <laforge@gnumonks.org>.
00026  *
00027  * Your cooperation ensures that all projects will use the same GSMTAP
00028  * definitions and remain compatible with each other.
00029  */
00030 
00031 #define GSMTAP_VERSION          0x02
00032 
00033 #define GSMTAP_TYPE_UM          0x01
00034 #define GSMTAP_TYPE_ABIS        0x02
00035 #define GSMTAP_TYPE_UM_BURST    0x03    /* raw burst bits */
00036 #define GSMTAP_TYPE_SIM         0x04
00037 #define GSMTAP_TYPE_TETRA_I1            0x05    /* tetra air interface */
00038 #define GSMTAP_TYPE_TETRA_I1_BURST      0x06    /* tetra air interface */
00039 #define GSMTAP_TYPE_WMX_BURST   0x07    /* WiMAX burst */
00040 #define GSMTAP_TYPE_GB_LLC      0x08 /* GPRS Gb interface: LLC */
00041 #define GSMTAP_TYPE_GB_SNDCP    0x09 /* GPRS Gb interface: SNDCP */
00042 #define GSMTAP_TYPE_GMR1_UM     0x0a    /* GMR-1 L2 packets */
00043 #define GSMTAP_TYPE_UMTS_RLC_MAC        0x0b
00044 #define GSMTAP_TYPE_UMTS_RRC    0x0c
00045 #define GSMTAP_TYPE_LTE_RRC     0x0d    /* LTE interface */
00046 #define GSMTAP_TYPE_LTE_MAC     0x0e    /* LTE MAC interface */ 
00047 
00048 /* ====== DO NOT MAKE UNAPPROVED MODIFICATIONS HERE ===== */
00049 
00050 /* sub-types for TYPE_UM_BURST */
00051 #define GSMTAP_BURST_UNKNOWN            0x00
00052 #define GSMTAP_BURST_FCCH               0x01
00053 #define GSMTAP_BURST_PARTIAL_SCH        0x02
00054 #define GSMTAP_BURST_SCH                0x03
00055 #define GSMTAP_BURST_CTS_SCH            0x04
00056 #define GSMTAP_BURST_COMPACT_SCH        0x05
00057 #define GSMTAP_BURST_NORMAL             0x06
00058 #define GSMTAP_BURST_DUMMY              0x07
00059 #define GSMTAP_BURST_ACCESS             0x08
00060 #define GSMTAP_BURST_NONE               0x09
00061 /* WiMAX bursts */
00062 #define GSMTAP_BURST_CDMA_CODE          0x10    /* WiMAX CDMA Code Attribute burst */
00063 #define GSMTAP_BURST_FCH                0x11    /* WiMAX FCH burst */
00064 #define GSMTAP_BURST_FFB                0x12    /* WiMAX Fast Feedback burst */
00065 #define GSMTAP_BURST_PDU                0x13    /* WiMAX PDU burst */
00066 #define GSMTAP_BURST_HACK               0x14    /* WiMAX HARQ ACK burst */
00067 #define GSMTAP_BURST_PHY_ATTRIBUTES     0x15    /* WiMAX PHY Attributes burst */
00068 
00069 /* ====== DO NOT MAKE UNAPPROVED MODIFICATIONS HERE ===== */
00070 
00071 /* sub-types for TYPE_UM */
00072 #define GSMTAP_CHANNEL_UNKNOWN  0x00
00073 #define GSMTAP_CHANNEL_BCCH     0x01
00074 #define GSMTAP_CHANNEL_CCCH     0x02
00075 #define GSMTAP_CHANNEL_RACH     0x03
00076 #define GSMTAP_CHANNEL_AGCH     0x04
00077 #define GSMTAP_CHANNEL_PCH      0x05
00078 #define GSMTAP_CHANNEL_SDCCH    0x06
00079 #define GSMTAP_CHANNEL_SDCCH4   0x07
00080 #define GSMTAP_CHANNEL_SDCCH8   0x08
00081 #define GSMTAP_CHANNEL_TCH_F    0x09
00082 #define GSMTAP_CHANNEL_TCH_H    0x0a
00083 #define GSMTAP_CHANNEL_PACCH    0x0b
00084 #define GSMTAP_CHANNEL_CBCH52   0x0c
00085 #define GSMTAP_CHANNEL_PDCH     0x0d
00086 #define GSMTAP_CHANNEL_PTCCH    0x0e
00087 #define GSMTAP_CHANNEL_CBCH51   0x0f
00088 
00089 /* GPRS Coding Scheme CS1..4 */
00090 #define GSMTAP_GPRS_CS_BASE     0x20
00091 #define GSMTAP_GPRS_CS(N)       (GSMTAP_GPRS_CS_BASE + N)
00092 /* (E) GPRS Coding Scheme MCS0..9 */
00093 #define GSMTAP_GPRS_MCS_BASE    0x30
00094 #define GSMTAP_GPRS_MCS(N)      (GSMTAP_GPRS_MCS_BASE + N)
00095 
00096 #define GSMTAP_CHANNEL_ACCH     0x80
00097 
00098 /* ====== DO NOT MAKE UNAPPROVED MODIFICATIONS HERE ===== */
00099 
00100 /* sub-types for TYPE_TETRA_AIR */
00101 #define GSMTAP_TETRA_BSCH       0x01
00102 #define GSMTAP_TETRA_AACH       0x02
00103 #define GSMTAP_TETRA_SCH_HU     0x03
00104 #define GSMTAP_TETRA_SCH_HD     0x04
00105 #define GSMTAP_TETRA_SCH_F      0x05
00106 #define GSMTAP_TETRA_BNCH       0x06
00107 #define GSMTAP_TETRA_STCH       0x07
00108 #define GSMTAP_TETRA_TCH_F      0x08
00109 
00110 /* ====== DO NOT MAKE UNAPPROVED MODIFICATIONS HERE ===== */
00111 
00112 /* sub-types for TYPE_GMR1_UM */
00113 #define GSMTAP_GMR1_UNKNOWN     0x00
00114 #define GSMTAP_GMR1_BCCH        0x01
00115 #define GSMTAP_GMR1_CCCH        0x02    /* either AGCH or PCH */
00116 #define GSMTAP_GMR1_PCH         0x03
00117 #define GSMTAP_GMR1_AGCH        0x04
00118 #define GSMTAP_GMR1_BACH        0x05
00119 #define GSMTAP_GMR1_RACH        0x06
00120 #define GSMTAP_GMR1_CBCH        0x07
00121 #define GSMTAP_GMR1_SDCCH       0x08
00122 #define GSMTAP_GMR1_TACCH       0x09
00123 #define GSMTAP_GMR1_GBCH        0x0a
00124 
00125 #define GSMTAP_GMR1_SACCH       0x01    /* to be combined with _TCH{6,9}   */
00126 #define GSMTAP_GMR1_FACCH       0x02    /* to be combines with _TCH{3,6,9} */
00127 #define GSMTAP_GMR1_DKAB        0x03    /* to be combined with _TCH3 */
00128 #define GSMTAP_GMR1_TCH3        0x10
00129 #define GSMTAP_GMR1_TCH6        0x14
00130 #define GSMTAP_GMR1_TCH9        0x18
00131 
00132 /* ====== DO NOT MAKE UNAPPROVED MODIFICATIONS HERE ===== */
00133 
00134 #define GSMTAP_UMTS_CH_PCCH     0x01
00135 #define GSMTAP_UMTS_CH_CCCH     0x02
00136 #define GSMTAP_UMTS_CH_DCCH     0x03
00137 
00138 /* sub-types for TYPE_LTE_RRC */
00139 #define GSMTAP_LTE_CH_BCCH      0x01
00140 #define GSMTAP_LTE_CH_CCCH      0x02
00141 #define GSMTAP_LTE_CH_DCCH      0x03
00142 #define GSMTAP_LTE_CH_MCCH      0x04
00143 #define GSMTAP_LTE_CH_PCCH      0x05
00144 #define GSMTAP_LTE_CH_DTCH      0x06
00145 #define GSMTAP_LTE_CH_MTCH      0x07
00146 
00147 /* flags for the ARFCN */
00148 #define GSMTAP_ARFCN_F_PCS      0x8000
00149 #define GSMTAP_ARFCN_F_UPLINK   0x4000
00150 #define GSMTAP_ARFCN_MASK       0x3fff
00151 
00152 /* IANA-assigned well-known UDP port for GSMTAP messages */
00153 #define GSMTAP_UDP_PORT                 4729
00154 
00155 /* UMTS RRC message types */
00156 enum {
00157         GSMTAP_RRC_SUB_DL_DCCH_Message = 0,
00158         GSMTAP_RRC_SUB_UL_DCCH_Message,
00159         GSMTAP_RRC_SUB_DL_CCCH_Message,
00160         GSMTAP_RRC_SUB_UL_CCCH_Message,
00161         GSMTAP_RRC_SUB_PCCH_Message,
00162         GSMTAP_RRC_SUB_DL_SHCCH_Message,
00163         GSMTAP_RRC_SUB_UL_SHCCH_Message,
00164         GSMTAP_RRC_SUB_BCCH_FACH_Message,
00165         GSMTAP_RRC_SUB_BCCH_BCH_Message,
00166         GSMTAP_RRC_SUB_MCCH_Message,
00167         GSMTAP_RRC_SUB_MSCH_Message,
00168         GSMTAP_RRC_SUB_HandoverToUTRANCommand,
00169         GSMTAP_RRC_SUB_InterRATHandoverInfo,
00170         GSMTAP_RRC_SUB_SystemInformation_BCH,
00171         GSMTAP_RRC_SUB_System_Information_Container,
00172         GSMTAP_RRC_SUB_UE_RadioAccessCapabilityInfo,
00173         GSMTAP_RRC_SUB_MasterInformationBlock,
00174         GSMTAP_RRC_SUB_SysInfoType1,
00175         GSMTAP_RRC_SUB_SysInfoType2,
00176         GSMTAP_RRC_SUB_SysInfoType3,
00177         GSMTAP_RRC_SUB_SysInfoType4,
00178         GSMTAP_RRC_SUB_SysInfoType5,
00179         GSMTAP_RRC_SUB_SysInfoType5bis,
00180         GSMTAP_RRC_SUB_SysInfoType6,
00181         GSMTAP_RRC_SUB_SysInfoType7,
00182         GSMTAP_RRC_SUB_SysInfoType8,
00183         GSMTAP_RRC_SUB_SysInfoType9,
00184         GSMTAP_RRC_SUB_SysInfoType10,
00185         GSMTAP_RRC_SUB_SysInfoType11,
00186         GSMTAP_RRC_SUB_SysInfoType11bis,
00187         GSMTAP_RRC_SUB_SysInfoType12,
00188         GSMTAP_RRC_SUB_SysInfoType13,
00189         GSMTAP_RRC_SUB_SysInfoType13_1,
00190         GSMTAP_RRC_SUB_SysInfoType13_2,
00191         GSMTAP_RRC_SUB_SysInfoType13_3,
00192         GSMTAP_RRC_SUB_SysInfoType13_4,
00193         GSMTAP_RRC_SUB_SysInfoType14,
00194         GSMTAP_RRC_SUB_SysInfoType15,
00195         GSMTAP_RRC_SUB_SysInfoType15bis,
00196         GSMTAP_RRC_SUB_SysInfoType15_1,
00197         GSMTAP_RRC_SUB_SysInfoType15_1bis,
00198         GSMTAP_RRC_SUB_SysInfoType15_2,
00199         GSMTAP_RRC_SUB_SysInfoType15_2bis,
00200         GSMTAP_RRC_SUB_SysInfoType15_2ter,
00201         GSMTAP_RRC_SUB_SysInfoType15_3,
00202         GSMTAP_RRC_SUB_SysInfoType15_3bis,
00203         GSMTAP_RRC_SUB_SysInfoType15_4,
00204         GSMTAP_RRC_SUB_SysInfoType15_5,
00205         GSMTAP_RRC_SUB_SysInfoType15_6,
00206         GSMTAP_RRC_SUB_SysInfoType15_7,
00207         GSMTAP_RRC_SUB_SysInfoType15_8,
00208         GSMTAP_RRC_SUB_SysInfoType16,
00209         GSMTAP_RRC_SUB_SysInfoType17,
00210         GSMTAP_RRC_SUB_SysInfoType18,
00211         GSMTAP_RRC_SUB_SysInfoType19,
00212         GSMTAP_RRC_SUB_SysInfoType20,
00213         GSMTAP_RRC_SUB_SysInfoType21,
00214         GSMTAP_RRC_SUB_SysInfoType22,
00215         GSMTAP_RRC_SUB_SysInfoTypeSB1,
00216         GSMTAP_RRC_SUB_SysInfoTypeSB2,
00217         GSMTAP_RRC_SUB_ToTargetRNC_Container,
00218         GSMTAP_RRC_SUB_TargetRNC_ToSourceRNC_Container,
00219 
00220         GSMTAP_RRC_SUB_MAX
00221 };
00222 
00223 /* LTE RRC message types */
00224 enum {
00225     GSMTAP_LTE_RRC_SUB_DL_CCCH_Message = 0,
00226     GSMTAP_LTE_RRC_SUB_DL_DCCH_Message,
00227     GSMTAP_LTE_RRC_SUB_UL_CCCH_Message,
00228     GSMTAP_LTE_RRC_SUB_UL_DCCH_Message,
00229     GSMTAP_LTE_RRC_SUB_BCCH_BCH_Message,
00230     GSMTAP_LTE_RRC_SUB_BCCH_DL_SCH_Message,
00231     GSMTAP_LTE_RRC_SUB_PCCH_Message,
00232     GSMTAP_LTE_RRC_SUB_MCCH_Message,
00233 
00234     GSMTAP_LTE_RRC_SUB_MAX
00235 };
00236 
00237 /* ====== DO NOT MAKE UNAPPROVED MODIFICATIONS HERE ===== */
00238 struct gsmtap_hdr {
00239         uint8_t version;        /* version, set to 0x01 currently */
00240         uint8_t hdr_len;        /* length in number of 32bit words */
00241         uint8_t type;           /* see GSMTAP_TYPE_* */
00242         uint8_t timeslot;       /* timeslot (0..7 on Um) */
00243 
00244         uint16_t arfcn;         /* ARFCN (frequency) */
00245         int8_t signal_dbm;      /* signal level in dBm */
00246         int8_t snr_db;          /* signal/noise ratio in dB */
00247 
00248         uint32_t frame_number;  /* GSM Frame Number (FN) */
00249 
00250         uint8_t sub_type;       /* Type of burst/channel, see above */
00251         uint8_t antenna_nr;     /* Antenna Number */
00252         uint8_t sub_slot;       /* sub-slot within timeslot */
00253         uint8_t res;            /* reserved for future use (RFU) */
00254 
00255 } __attribute__((packed));