blob: b3942be2f54d4b959e1c5d539519b57e71e5d682 [file] [log] [blame]
Neels Hofmeyr17518fe2017-06-20 04:35:06 +02001/*! \file gsm_44_318.h
2 * Definitions according to 3GPP TS 44.318 6.8.0 Release 6. */
3
Sylvain Munaut12ba7782014-06-16 10:13:40 +02004#pragma once
Harald Welte226ef1d2011-10-10 09:20:58 +02005
6#include <stdint.h>
Neels Hofmeyrb2600392018-11-16 00:20:39 +01007#include <osmocom/core/endian.h>
Harald Welte226ef1d2011-10-10 09:20:58 +02008
Harald Welte53c815b2012-06-23 21:54:46 +02009/* Table 11.1.1.2.1: Protocol Discriminator */
10enum gan_pdisc {
11 GA_PDISC_RC = 0,
12 GA_PDISC_CSR = 1,
13 GA_PDISC_PSR = 2,
14};
15
Harald Welte226ef1d2011-10-10 09:20:58 +020016/* Table 11.1.1.4.1: Message types for URR */
17
18enum gan_msg_type {
19 GA_MT_RC_DISCOVERY_REQUEST = 0x01,
20 GA_MT_RC_DISCOVERY_ACCEPT = 0x02,
21 GA_MT_RC_DISCOVERY_REJECT = 0x03,
22
23 GA_MT_RC_REGISTER_REQUEST = 0x10,
24 GA_MT_RC_REGISTER_ACCEPT = 0x11,
25 GA_MT_RC_REGISTER_REDIRECT = 0x12,
26 GA_MT_RC_REGISTER_REJECT = 0x13,
27 GA_MT_RC_DEREGISTER = 0x14,
28 GA_MT_RC_REGISTER_UPDATE_UL = 0x15,
29 GA_MT_RC_REGISTER_UPDATE_DL = 0x16,
30 GA_MT_RC_CELL_BCAST_INFO = 0x17,
31
32 GA_MT_CSR_CIPH_MODE_CMD = 0x20,
33 GA_MT_CSR_CIPH_MODE_COMPL = 0x21,
34
35 GA_MT_CSR_ACT_CHAN = 0x30,
36 GA_MT_CSR_ACT_CHAN_ACK = 0x31,
37 GA_MT_CSR_ACT_CHAN_COMPL = 0x32,
38 GA_MT_CSR_ACT_CHAN_FAIL = 0x33,
39 GA_MT_CSR_CHAN_MODE_MOD = 0x34,
40 GA_MT_CSR_CHAN_MODE_MOD_ACK = 0x35,
41
42 GA_MT_CSR_RELEASE = 0x40,
43 GA_MT_CSR_RELEASE_COMPL = 0x41,
44 GA_MT_CSR_CLEAR_REQ = 0x42,
45
46 GA_MT_CSR_HO_ACCESS = 0x50,
47 GA_MT_CSR_HO_COMPL = 0x51,
48 GA_MT_CSR_UL_QUAL_IND = 0x52,
49 GA_MT_CSR_HO_INFO = 0x53,
50 GA_MT_CSR_HO_CMD = 0x54,
51 GA_MT_CSR_HO_FAIL = 0x55,
52
53 GA_MT_CSR_PAGING_REQ = 0x60,
54 GA_MT_CSR_PAGING_RESP = 0x61,
55
56 GA_MT_CSR_UL_DIRECT_XFER = 0x70,
57 GA_MT_CSR_DL_DIRECT_XFER = 0x72,
58 GA_MT_CSR_STATUS = 0x73,
59 GA_MT_RC_KEEPALIVE = 0x74,
60 GA_MT_CSR_CM_ENQ = 0x75,
61 GA_MT_CSR_CM_CHANGE = 0x76,
Harald Weltec2a25c62012-06-24 20:30:20 +020062 GA_MT_PSR_GPRS_SUSPEND_REQ = 0x77,
63 GA_RC_SYNC_INFO = 0x78,
64 GA_CSR_UTRAN_CM_CHG = 0x79,
Harald Welte226ef1d2011-10-10 09:20:58 +020065
66 GA_MT_CSR_REQUEST = 0x80,
67 GA_MT_CSR_REQUEST_ACCEPT = 0x81,
68 GA_MT_CSR_REQUEST_REJECT = 0x82,
69};
70
71/* All tables in 10.1.x and 10.2.x / Table 11.2.1 */
72enum gan_iei {
73 GA_IE_MI = 1,
74 GA_IE_GAN_RELEASE_IND = 2,
75 GA_IE_RADIO_IE = 3,
76 GA_IE_GERAN_CELL_ID = 4,
77 GA_IE_LAC = 5,
78 GA_IE_GERAN_COV_IND = 6,
79 GA_IE_GAN_CM = 7,
80 GA_IE_GEO_LOC = 8,
81 GA_IE_DEF_SEGW_IP = 9,
82 GA_IE_DEF_SEGW_FQDN = 10,
83 GA_IE_REDIR_CTR = 11,
84 GA_IE_DISCOV_REJ_CAUSE = 12,
85 GA_IE_GANC_CELL_DESC = 13,
86 GA_IE_GANC_CTRL_CH_DESC = 14,
87 GA_IE_GERAN_CELL_ID_LIST= 15,
88 GA_IE_TU3907_TIMER = 16,
89 GA_IE_RR_STATE = 17,
90 GA_IE_RAI = 18,
91 GA_IE_GAN_BAND = 19,
92 GA_IE_GARC_GACSR_STATE = 20,
93 GA_IE_REG_REJ_CAUSE = 21,
94 GA_IE_TU3906_TIMER = 22,
95 GA_IE_TU3910_TIMER = 23,
Harald Welte327009e2012-06-29 21:14:52 +020096 GA_IE_TU3902_TIMER = 24,
Harald Welte226ef1d2011-10-10 09:20:58 +020097 GA_IE_L3_MSG = 26,
98 GA_IE_CHAN_MODE = 27,
99 GA_IE_MS_CLASSMARK2 = 28,
100 GA_IE_RR_CAUSE = 29,
101 GA_EI_CIPH_MODE_SET = 30,
102 GA_IE_GPRS_RESUMPTION = 31,
103 GA_IE_HO_FROM_GAN_CMD = 32,
104 GA_IE_UL_QUAL_IND = 33,
105 GA_IE_TLLI = 34,
106 GA_IE_PFI = 35,
107 GA_IE_SUSP_CAUSE = 36,
Harald Welte327009e2012-06-29 21:14:52 +0200108 GA_IE_TU3920_TIMER = 37,
Harald Welte226ef1d2011-10-10 09:20:58 +0200109 GA_IE_REQD_QOS = 38,
Harald Welte4498a0a2012-06-23 20:46:48 +0200110 GA_IE_P_DEACT_CAUSE = 39,
Harald Welte226ef1d2011-10-10 09:20:58 +0200111 GA_IE_REQD_UL_RATE = 40,
112 GA_IE_RAC = 41,
113 GA_IE_AP_LOCATION = 42,
114 GA_IE_TU4001_TIMER = 43,
115 GA_IE_LOC_STATUS = 44,
116 GA_IE_CIPH_RESP = 45,
117 GA_IE_CIPH_RAND = 46,
118 GA_IE_CIPH_MAC = 47,
119 GA_IE_CKSN = 48,
120 GA_IE_SAPI_ID = 49,
121 GA_IE_EST_CAUSE = 50,
122 GA_IE_CHAN_NEEDED = 51,
123 GA_IE_PDU_IN_ERROR = 52,
124 GA_IE_SAMPLE_SIZE = 53,
125 GA_IE_PAYLOAD_TYPE = 54,
126 GA_IE_MULTIRATE_CONF = 55,
127 GA_IE_MS_CLASSMARK3 = 56,
128 GA_IE_LLC_PDU = 57,
129 GA_IE_LOC_BLACKL_IND = 58,
130 GA_IE_RESET_IND = 59,
131 GA_IE_TU4003_TIMER = 60,
132 GA_IE_AP_SERV_NAME = 61,
133 GA_IE_SERV_ZONE_INFO = 62,
134 GA_IE_RTP_RED_CONF = 63,
135 GA_IE_UTRAN_CLASSMARK = 64,
136 GA_IE_CM_ENQ_MASK = 65,
137 GA_IE_UTRAN_CELLID_LIST = 66,
138 GA_IE_SERV_GANC_TBL_IND = 67,
139 GA_IE_AP_REG_IND = 68,
140 GA_IE_GAN_PLMN_LIST = 69,
141 GA_IE_REQD_GAN_SERV = 71,
142 GA_IE_BCAST_CONTAINER = 72,
143 GA_IE_3G_CELL_ID = 73,
144 GA_IE_MS_RADIO_ID = 96,
145 GA_IE_DEF_GANC_IP = 97,
146 GA_IE_DEF_GANC_FQDN = 98,
147 GA_IE_GPRS_IP_ADDR = 99,
Harald Welte4498a0a2012-06-23 20:46:48 +0200148 GA_IE_GPRS_UDP_PORT = 100,
Harald Welte226ef1d2011-10-10 09:20:58 +0200149 GA_IE_GANC_TCP_PORT = 103,
150 GA_IE_RTP_UDP_PORT = 104,
151 GA_IE_RTCP_UDP_PORT = 105,
152 GA_IE_GERAN_RCV_SIGL_LIST = 106,
153 GA_IE_UTRAN_RCV_SIGL_LIST = 107,
154};
155
156/* 11.1.1 GA-RC and GA-CSR Message header IE */
157struct gan_rc_csr_hdr {
Neels Hofmeyrb2600392018-11-16 00:20:39 +0100158#if OSMO_IS_LITTLE_ENDIAN
Harald Welte226ef1d2011-10-10 09:20:58 +0200159 uint16_t len;
160 uint8_t pdisc:4,
161 skip_ind:4;
162 uint8_t msg_type;
Harald Welte53c815b2012-06-23 21:54:46 +0200163 uint8_t data[0];
Neels Hofmeyrb2600392018-11-16 00:20:39 +0100164#elif OSMO_IS_BIG_ENDIAN
165/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianess.py) */
166 uint16_t len;
167 uint8_t skip_ind:4, pdisc:4;
168 uint8_t msg_type;
169 uint8_t data[0];
170#endif
Harald Welte226ef1d2011-10-10 09:20:58 +0200171} __attribute__((packed));
172
Harald Welte2b1ab862012-06-24 16:52:46 +0200173/* 11.2.14.1: GAN Control Channel Description IE */
174struct gan_cch_desc_ie {
Neels Hofmeyrb2600392018-11-16 00:20:39 +0100175#if OSMO_IS_LITTLE_ENDIAN
Harald Welte72739942012-06-24 19:46:37 +0200176 uint8_t spare:1,
177 ecmc:1,
178 nmo:2,
179 gprs:1,
180 dtm:1,
181 att:1,
182 mscr:1;
Harald Welte72739942012-06-24 19:46:37 +0200183 uint8_t t3212;
Harald Welte2b1ab862012-06-24 16:52:46 +0200184 uint8_t rac;
Harald Welte72739942012-06-24 19:46:37 +0200185 uint8_t sgsnr:1,
186 ecmp:1,
187 re:1,
188 pfcfm:1,
189 tgecs:2,
190 spare2:2;
Harald Welte2b1ab862012-06-24 16:52:46 +0200191 uint8_t access_class[2];
Neels Hofmeyrb2600392018-11-16 00:20:39 +0100192#elif OSMO_IS_BIG_ENDIAN
193/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianess.py) */
194 uint8_t mscr:1, att:1, dtm:1, gprs:1, nmo:2, ecmc:1, spare:1;
195 uint8_t t3212;
196 uint8_t rac;
197 uint8_t spare2:2, tgecs:2, pfcfm:1, re:1, ecmp:1, sgsnr:1;
198 uint8_t access_class[2];
199#endif
Harald Welte2b1ab862012-06-24 16:52:46 +0200200} __attribute__((packed));