blob: cda1e48b9b0a5e54a4609d2e114e173bbf5bdc04 [file] [log] [blame]
Harald Welte64f38c02016-04-20 17:12:24 +02001#ifndef _GSM48_GPRS_H
2#define _GSM48_GPRS_H
3
4#include <stdint.h>
Maxa337b9c2016-06-27 15:51:34 +02005#include <stdbool.h>
Harald Welte64f38c02016-04-20 17:12:24 +02006#include <osmocom/gsm/protocol/gsm_04_08.h>
Maxa337b9c2016-06-27 15:51:34 +02007#include <osmocom/crypt/gprs_cipher.h>
Harald Welte64f38c02016-04-20 17:12:24 +02008
9/* Table 10.4 / 10.4a, GPRS Mobility Management (GMM) */
10#define GSM48_MT_GMM_ATTACH_REQ 0x01
11#define GSM48_MT_GMM_ATTACH_ACK 0x02
12#define GSM48_MT_GMM_ATTACH_COMPL 0x03
13#define GSM48_MT_GMM_ATTACH_REJ 0x04
14#define GSM48_MT_GMM_DETACH_REQ 0x05
15#define GSM48_MT_GMM_DETACH_ACK 0x06
16
17#define GSM48_MT_GMM_RA_UPD_REQ 0x08
18#define GSM48_MT_GMM_RA_UPD_ACK 0x09
19#define GSM48_MT_GMM_RA_UPD_COMPL 0x0a
20#define GSM48_MT_GMM_RA_UPD_REJ 0x0b
21
22#define GSM48_MT_GMM_PTMSI_REALL_CMD 0x10
23#define GSM48_MT_GMM_PTMSI_REALL_COMPL 0x11
24#define GSM48_MT_GMM_AUTH_CIPH_REQ 0x12
25#define GSM48_MT_GMM_AUTH_CIPH_RESP 0x13
26#define GSM48_MT_GMM_AUTH_CIPH_REJ 0x14
Harald Welte82f94ef2016-05-05 23:33:27 +020027#define GSM48_MT_GMM_AUTH_CIPH_FAIL 0x1C
Harald Welte64f38c02016-04-20 17:12:24 +020028#define GSM48_MT_GMM_ID_REQ 0x15
29#define GSM48_MT_GMM_ID_RESP 0x16
30#define GSM48_MT_GMM_STATUS 0x20
31#define GSM48_MT_GMM_INFO 0x21
32
33/* Table 10.4a, GPRS Session Management (GSM) */
34#define GSM48_MT_GSM_ACT_PDP_REQ 0x41
35#define GSM48_MT_GSM_ACT_PDP_ACK 0x42
36#define GSM48_MT_GSM_ACT_PDP_REJ 0x43
37#define GSM48_MT_GSM_REQ_PDP_ACT 0x44
38#define GSM48_MT_GSM_REQ_PDP_ACT_REJ 0x45
39#define GSM48_MT_GSM_DEACT_PDP_REQ 0x46
40#define GSM48_MT_GSM_DEACT_PDP_ACK 0x47
41#define GSM48_MT_GSM_ACT_AA_PDP_REQ 0x50
42#define GSM48_MT_GSM_ACT_AA_PDP_ACK 0x51
43#define GSM48_MT_GSM_ACT_AA_PDP_REJ 0x52
44#define GSM48_MT_GSM_DEACT_AA_PDP_REQ 0x53
45#define GSM48_MT_GSM_DEACT_AA_PDP_ACK 0x54
46#define GSM48_MT_GSM_STATUS 0x55
47
48/* Chapter 10.5.5.2 / Table 10.5.135 */
49#define GPRS_ATT_T_ATTACH 1
50#define GPRS_ATT_T_ATT_WHILE_IMSI 2
51#define GPRS_ATT_T_COMBINED 3
52
53extern const struct value_string *gprs_att_t_strs;
Maxf5f773f2016-07-05 19:17:19 +020054extern const struct value_string gprs_msgt_gmm_names[];
Harald Welte64f38c02016-04-20 17:12:24 +020055
56/* Chapter 10.5.5.5 / Table 10.5.138 */
57#define GPRS_DET_T_MO_GPRS 1
58#define GPRS_DET_T_MO_IMSI 2
59#define GPRS_DET_T_MO_COMBINED 3
60/* Network to MS direction */
61#define GPRS_DET_T_MT_REATT_REQ 1
62#define GPRS_DET_T_MT_REATT_NOTREQ 2
63#define GPRS_DET_T_MT_IMSI 3
64
65extern const struct value_string *gprs_det_t_mo_strs;
66extern const struct value_string *gprs_det_t_mt_strs;
67
68/* Chapter 10.5.5.18 / Table 105.150 */
69#define GPRS_UPD_T_RA 0
70#define GPRS_UPD_T_RA_LA 1
71#define GPRS_UPD_T_RA_LA_IMSI_ATT 2
72#define GPRS_UPD_T_PERIODIC 3
73
74extern const struct value_string *gprs_upd_t_strs;
75
Neels Hofmeyr0318f6b2016-08-29 13:18:56 +020076/* Table 10.4 in 3GPP TS 24.008 (successor to 04.08) */
77#define GSM48_MT_GMM_SERVICE_REQ 0x0c
78#define GSM48_MT_GMM_SERVICE_ACK 0x0d
79#define GSM48_MT_GMM_SERVICE_REJ 0x0e
80
Harald Welte64f38c02016-04-20 17:12:24 +020081enum gsm48_gprs_ie_mm {
82 GSM48_IE_GMM_CIPH_CKSN = 0x08, /* 10.5.1.2 */
83 GSM48_IE_GMM_TIMER_READY = 0x17, /* 10.5.7.3 */
84 GSM48_IE_GMM_ALLOC_PTMSI = 0x18, /* 10.5.1.4 */
85 GSM48_IE_GMM_PTMSI_SIG = 0x19, /* 10.5.5.8 */
86 GSM48_IE_GMM_AUTH_RAND = 0x21, /* 10.5.3.1 */
87 GSM48_IE_GMM_AUTH_SRES = 0x22, /* 10.5.3.2 */
88 GSM48_IE_GMM_IMEISV = 0x23, /* 10.5.1.4 */
89 GSM48_IE_GMM_CAUSE = 0x25, /* 10.5.5.14 */
90 GSM48_IE_GMM_DRX_PARAM = 0x27, /* 10.5.5.6 */
Harald Welte82f94ef2016-05-05 23:33:27 +020091 GSM48_IE_GMM_AUTN = 0x28, /* 10.5.3.1.1 */
92 GSM48_IE_GMM_AUTH_RES_EXT = 0x29, /* 10.5.3.2.1 */
93 GSM48_IE_GMM_AUTH_FAIL_PAR = 0x30, /* 10.5.3.2.2 */
Harald Welte64f38c02016-04-20 17:12:24 +020094 GSM48_IE_GMM_MS_NET_CAPA = 0x31, /* 10.5.5.12 */
95 GSM48_IE_GMM_PDP_CTX_STATUS = 0x32, /* 10.5.7.1 */
96 GSM48_IE_GMM_PS_LCS_CAPA = 0x33, /* 10.5.5.22 */
97 GSM48_IE_GMM_GMM_MBMS_CTX_ST = 0x35, /* 10.5.7.6 */
98};
99
100enum gsm48_gprs_ie_sm {
101 GSM48_IE_GSM_APN = 0x28, /* 10.5.6.1 */
102 GSM48_IE_GSM_PROTO_CONF_OPT = 0x27, /* 10.5.6.3 */
103 GSM48_IE_GSM_PDP_ADDR = 0x2b, /* 10.5.6.4 */
104 GSM48_IE_GSM_AA_TMR = 0x29, /* 10.5.7.3 */
105 GSM48_IE_GSM_NAME_FULL = 0x43, /* 10.5.3.5a */
106 GSM48_IE_GSM_NAME_SHORT = 0x45, /* 10.5.3.5a */
107 GSM48_IE_GSM_TIMEZONE = 0x46, /* 10.5.3.8 */
108 GSM48_IE_GSM_UTC_AND_TZ = 0x47, /* 10.5.3.9 */
109 GSM48_IE_GSM_LSA_ID = 0x48, /* 10.5.3.11 */
110
111 /* Fake IEs that are not present on the Layer3 air interface,
112 * but which we use to simplify internal APIs */
113 OSMO_IE_GSM_REQ_QOS = 0xfd,
114 OSMO_IE_GSM_REQ_PDP_ADDR = 0xfe,
115 OSMO_IE_GSM_SUB_QOS = 0xff,
116};
117
118/* Chapter 9.4.15 / Table 9.4.15 */
119struct gsm48_ra_upd_ack {
120 uint8_t force_stby:4, /* 10.5.5.7 */
121 upd_result:4; /* 10.5.5.17 */
122 uint8_t ra_upd_timer; /* 10.5.7.3 */
123 struct gsm48_ra_id ra_id; /* 10.5.5.15 */
124 uint8_t data[0];
125} __attribute__((packed));
126
127/* Chapter 10.5.7.3 */
128enum gsm48_gprs_tmr_unit {
129 GPRS_TMR_2SECONDS = 0 << 5,
130 GPRS_TMR_MINUTE = 1 << 5,
131 GPRS_TMR_6MINUTE = 2 << 5,
132 GPRS_TMR_DEACTIVATED = 7 << 5,
133};
134
135#define GPRS_TMR_UNIT_MASK (7 << 5)
136#define GPRS_TMR_FACT_MASK ((1 << 5)-1)
137
138/* Chapter 9.4.2 / Table 9.4.2 */
139struct gsm48_attach_ack {
140 uint8_t att_result:4, /* 10.5.5.7 */
141 force_stby:4; /* 10.5.5.1 */
142 uint8_t ra_upd_timer; /* 10.5.7.3 */
143 uint8_t radio_prio; /* 10.5.7.2 */
144 struct gsm48_ra_id ra_id; /* 10.5.5.15 */
145 uint8_t data[0];
146} __attribute__((packed));
147
148/* Chapter 9.4.9 / Table 9.4.9 */
149struct gsm48_auth_ciph_req {
150 uint8_t ciph_alg:4, /* 10.5.5.3 */
151 imeisv_req:4; /* 10.5.5.10 */
152 uint8_t force_stby:4, /* 10.5.5.7 */
153 ac_ref_nr:4; /* 10.5.5.19 */
154 uint8_t data[0];
155} __attribute__((packed));
156/* optional: TV RAND, TV CKSN */
157
158struct gsm48_auth_ciph_resp {
159 uint8_t ac_ref_nr:4,
160 spare:4;
161 uint8_t data[0];
162} __attribute__((packed));
163
164/* Chapter 9.5.1 / Table 9.5.1 */
165struct gsm48_act_pdp_ctx_req {
166 uint8_t req_nsapi;
167 uint8_t req_llc_sapi;
168 uint8_t data[0];
169} __attribute__((packed));
170
171/* Chapter 10.5.5.14 / Table 10.5.147 */
172enum gsm48_gmm_cause {
173 GMM_CAUSE_IMSI_UNKNOWN = 0x02,
174 GMM_CAUSE_ILLEGAL_MS = 0x03,
Harald Welte82f94ef2016-05-05 23:33:27 +0200175 GMM_CAUSE_IMEI_NOT_ACCEPTED = 0x05,
Harald Welte64f38c02016-04-20 17:12:24 +0200176 GMM_CAUSE_ILLEGAL_ME = 0x06,
177 GMM_CAUSE_GPRS_NOTALLOWED = 0x07,
178 GMM_CAUSE_GPRS_OTHER_NOTALLOWED = 0x08,
179 GMM_CAUSE_MS_ID_NOT_DERIVED = 0x09,
180 GMM_CAUSE_IMPL_DETACHED = 0x0a,
181 GMM_CAUSE_PLMN_NOTALLOWED = 0x0b,
182 GMM_CAUSE_LA_NOTALLOWED = 0x0c,
183 GMM_CAUSE_ROAMING_NOTALLOWED = 0x0d,
184 GMM_CAUSE_NO_GPRS_PLMN = 0x0e,
Harald Welte82f94ef2016-05-05 23:33:27 +0200185 GMM_CAUSE_NO_SUIT_CELL_IN_LA = 0x0f,
Harald Welte64f38c02016-04-20 17:12:24 +0200186 GMM_CAUSE_MSC_TEMP_NOTREACH = 0x10,
187 GMM_CAUSE_NET_FAIL = 0x11,
Harald Welte82f94ef2016-05-05 23:33:27 +0200188 GMM_CAUSE_MAC_FAIL = 0x14,
189 GMM_CAUSE_SYNC_FAIL = 0x15,
Harald Welte64f38c02016-04-20 17:12:24 +0200190 GMM_CAUSE_CONGESTION = 0x16,
Harald Welte82f94ef2016-05-05 23:33:27 +0200191 GMM_CAUSE_GSM_AUTH_UNACCEPT = 0x17,
192 GMM_CAUSE_NOT_AUTH_FOR_CSG = 0x19,
193 GMM_CAUSE_SMS_VIA_GPRS_IN_RA = 0x1c,
194 GMM_CAUSE_NO_PDP_ACTIVATED = 0x28,
Harald Welte64f38c02016-04-20 17:12:24 +0200195 GMM_CAUSE_SEM_INCORR_MSG = 0x5f,
196 GMM_CAUSE_INV_MAND_INFO = 0x60,
197 GMM_CAUSE_MSGT_NOTEXIST_NOTIMPL = 0x61,
198 GMM_CAUSE_MSGT_INCOMP_P_STATE = 0x62,
199 GMM_CAUSE_IE_NOTEXIST_NOTIMPL = 0x63,
200 GMM_CAUSE_COND_IE_ERR = 0x64,
201 GMM_CAUSE_MSG_INCOMP_P_STATE = 0x65,
202 GMM_CAUSE_PROTO_ERR_UNSPEC = 0x6f,
203};
204
205extern const struct value_string *gsm48_gmm_cause_names;
206
207/* Chapter 10.4.6.6 / Table 10.5.157 */
208enum gsm48_gsm_cause {
209 GSM_CAUSE_INSUFF_RSRC = 0x1a,
210 GSM_CAUSE_MISSING_APN = 0x1b,
211 GSM_CAUSE_UNKNOWN_PDP = 0x1c,
212 GSM_CAUSE_AUTH_FAILED = 0x1d,
213 GSM_CAUSE_ACT_REJ_GGSN = 0x1e,
214 GSM_CAUSE_ACT_REJ_UNSPEC = 0x1f,
215 GSM_CAUSE_SERV_OPT_NOTSUPP = 0x20,
216 GSM_CAUSE_REQ_SERV_OPT_NOTSUB = 0x21,
217 GSM_CAUSE_SERV_OPT_TEMP_OOO = 0x22,
218 GSM_CAUSE_NSAPI_IN_USE = 0x23,
219 GSM_CAUSE_DEACT_REGULAR = 0x24,
220 GSM_CAUSE_QOS_NOT_ACCEPTED = 0x25,
221 GSM_CAUSE_NET_FAIL = 0x26,
222 GSM_CAUSE_REACT_RQD = 0x27,
223 GSM_CAUSE_FEATURE_NOTSUPP = 0x28,
224 GSM_CAUSE_INVALID_TRANS_ID = 0x51,
225 GSM_CAUSE_SEM_INCORR_MSG = 0x5f,
226 GSM_CAUSE_INV_MAND_INFO = 0x60,
227 GSM_CAUSE_MSGT_NOTEXIST_NOTIMPL = 0x61,
228 GSM_CAUSE_MSGT_INCOMP_P_STATE = 0x62,
229 GSM_CAUSE_IE_NOTEXIST_NOTIMPL = 0x63,
230 GSM_CAUSE_COND_IE_ERR = 0x64,
231 GSM_CAUSE_MSG_INCOMP_P_STATE = 0x65,
232 GSM_CAUSE_PROTO_ERR_UNSPEC = 0x6f,
233};
234
235extern const struct value_string *gsm48_gsm_cause_names;
236
237/* Section 6.1.2.2: Session management states on the network side */
238enum gsm48_pdp_state {
239 PDP_S_INACTIVE,
240 PDP_S_ACTIVE_PENDING,
241 PDP_S_ACTIVE,
242 PDP_S_INACTIVE_PENDING,
243 PDP_S_MODIFY_PENDING,
244};
245
246/* Table 10.5.155/3GPP TS 24.008 */
247enum gsm48_pdp_type_org {
248 PDP_TYPE_ORG_ETSI = 0x00,
249 PDP_TYPE_ORG_IETF = 0x01,
250};
251enum gsm48_pdp_type_nr {
252 PDP_TYPE_N_ETSI_RESERVED = 0x00,
253 PDP_TYPE_N_ETSI_PPP = 0x01,
254 PDP_TYPE_N_IETF_IPv4 = 0x21,
255 PDP_TYPE_N_IETF_IPv6 = 0x57,
256};
257
258/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */
259enum gsm48_qos_reliab_class {
260 GSM48_QOS_RC_LLC_ACK_RLC_ACK_DATA_PROT = 2,
261 GSM48_QOS_RC_LLC_UN_RLC_ACK_DATA_PROT = 3,
262 GSM48_QOS_RC_LLC_UN_RLC_UN_PROT_DATA = 4,
263 GSM48_QOS_RC_LLC_UN_RLC_UN_DATA_UN = 5,
264};
265
266/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */
267enum gsm48_qos_preced_class {
268 GSM48_QOS_PC_HIGH = 1,
269 GSM48_QOS_PC_NORMAL = 2,
270 GSM48_QOS_PC_LOW = 3,
271};
272
273/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */
274enum gsm48_qos_peak_tput {
275 GSM48_QOS_PEAK_TPUT_1000bps = 1,
276 GSM48_QOS_PEAK_TPUT_2000bps = 2,
277 GSM48_QOS_PEAK_TPUT_4000bps = 3,
278 GSM48_QOS_PEAK_TPUT_8000bps = 4,
279 GSM48_QOS_PEAK_TPUT_16000bps = 5,
280 GSM48_QOS_PEAK_TPUT_32000bps = 6,
281 GSM48_QOS_PEAK_TPUT_64000bps = 7,
282 GSM48_QOS_PEAK_TPUT_128000bps = 8,
283 GSM48_QOS_PEAK_TPUT_256000bps = 9,
284};
285
286/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */
287enum gsm48_qos_mean_tput {
288 GSM48_QOS_MEAN_TPUT_100bph = 1,
289 GSM48_QOS_MEAN_TPUT_200bph = 2,
290 GSM48_QOS_MEAN_TPUT_500bph = 3,
291 GSM48_QOS_MEAN_TPUT_1000bph = 4,
292 GSM48_QOS_MEAN_TPUT_2000bph = 5,
293 GSM48_QOS_MEAN_TPUT_5000bph = 6,
294 GSM48_QOS_MEAN_TPUT_10000bph = 7,
295 GSM48_QOS_MEAN_TPUT_20000bph = 8,
296 GSM48_QOS_MEAN_TPUT_50000bph = 9,
297 GSM48_QOS_MEAN_TPUT_100kbph = 10,
298 GSM48_QOS_MEAN_TPUT_200kbph = 11,
299 GSM48_QOS_MEAN_TPUT_500kbph = 0xc,
300 GSM48_QOS_MEAN_TPUT_1Mbph = 0xd,
301 GSM48_QOS_MEAN_TPUT_2Mbph = 0xe,
302 GSM48_QOS_MEAN_TPUT_5Mbph = 0xf,
303 GSM48_QOS_MEAN_TPUT_10Mbph = 0x10,
304 GSM48_QOS_MEAN_TPUT_20Mbph = 0x11,
305 GSM48_QOS_MEAN_TPUT_50Mbph = 0x12,
306 GSM48_QOS_MEAN_TPUT_BEST_EFFORT = 0x1f,
307};
308
309/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */
310enum gsm48_qos_err_sdu {
311 GSM48_QOS_ERRSDU_NODETECT = 1,
312 GSM48_QOS_ERRSDU_YES = 2,
313 GSM48_QOS_ERRSDU_NO = 3,
314};
315
316/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */
317enum gsm48_qos_deliv_order {
318 GSM48_QOS_DO_ORDERED = 1,
319 GSM48_QOS_DO_UNORDERED = 2,
320};
321
322/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */
323enum gsm48_qos_traf_class {
324 GSM48_QOS_TC_CONVERSATIONAL = 1,
325 GSM48_QOS_TC_STREAMING = 2,
326 GSM48_QOS_TC_INTERACTIVE = 3,
327 GSM48_QOS_TC_BACKGROUND = 4,
328};
329
330/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */
331enum gsm48_qos_max_sdu_size {
332 /* values below in 10 octet granularity */
333 GSM48_QOS_MAXSDU_1502 = 0x97,
334 GSM48_QOS_MAXSDU_1510 = 0x98,
335 GSM48_QOS_MAXSDU_1520 = 0x99,
336};
337
338/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */
339enum gsm48_qos_max_bitrate {
340 GSM48_QOS_MBRATE_1k = 0x01,
341 GSM48_QOS_MBRATE_63k = 0x3f,
342 GSM48_QOS_MBRATE_64k = 0x40,
343 GSM48_QOS_MBRATE_568k = 0x7f,
344 GSM48_QOS_MBRATE_576k = 0x80,
345 GSM48_QOS_MBRATE_8640k = 0xfe,
346 GSM48_QOS_MBRATE_0k = 0xff,
347};
348
349/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */
350enum gsm48_qos_resid_ber {
351 GSM48_QOS_RBER_5e_2 = 0x01,
352 GSM48_QOS_RBER_1e_2 = 0x02,
353 GSM48_QOS_RBER_5e_3 = 0x03,
354 GSM48_QOS_RBER_4e_3 = 0x04,
355 GSM48_QOS_RBER_1e_3 = 0x05,
356 GSM48_QOS_RBER_1e_4 = 0x06,
357 GSM48_QOS_RBER_1e_5 = 0x07,
358 GSM48_QOS_RBER_1e_6 = 0x08,
359 GSM48_QOS_RBER_6e_8 = 0x09,
360};
361
362/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */
363enum gsm48_qos_sdu_err {
364 GSM48_QOS_SERR_1e_2 = 0x01,
365 GSM48_QOS_SERR_7e_2 = 0x02,
366 GSM48_QOS_SERR_1e_3 = 0x03,
367 GSM48_QOS_SERR_1e_4 = 0x04,
368 GSM48_QOS_SERR_1e_5 = 0x05,
369 GSM48_QOS_SERR_1e_6 = 0x06,
370 GSM48_QOS_SERR_1e_1 = 0x07,
371};
372
Neels Hofmeyr0318f6b2016-08-29 13:18:56 +0200373/* 3GPP 24.008 / Chapter 10.5.5.20 / Table 10.5.153a */
374enum gsm48_gmm_service_type {
375 GPRS_SERVICE_T_SIGNALLING = 0x00,
376 GPRS_SERVICE_T_DATA = 0x01,
377 GPRS_SERVICE_T_PAGING_RESP = 0x02,
378 GPRS_SERVICE_T_MBMS_MC_SERV = 0x03,
379 GPRS_SERVICE_T_MBMS_BC_SERV = 0x04,
380};
381
382extern const struct value_string *gprs_service_t_strs;
383
Maxa337b9c2016-06-27 15:51:34 +0200384bool gprs_ms_net_cap_gea_supported(const uint8_t *ms_net_cap, uint8_t cap_len,
385 enum gprs_ciph_algo gea);
386
Harald Welte64f38c02016-04-20 17:12:24 +0200387/* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */
388struct gsm48_qos {
389 /* octet 3 */
390 uint8_t reliab_class:3;
391 uint8_t delay_class:3;
392 uint8_t spare:2;
393 /* octet 4 */
394 uint8_t preced_class:3;
395 uint8_t spare2:1;
396 uint8_t peak_tput:4;
397 /* octet 5 */
398 uint8_t mean_tput:5;
399 uint8_t spare3:3;
400 /* octet 6 */
401 uint8_t deliv_err_sdu:3;
402 uint8_t deliv_order:2;
403 uint8_t traf_class:3;
404 /* octet 7 */
405 uint8_t max_sdu_size;
406 /* octet 8 */
407 uint8_t max_bitrate_up;
408 /* octet 9 */
409 uint8_t max_bitrate_down;
410 /* octet 10 */
411 uint8_t sdu_err_ratio:4;
412 uint8_t resid_ber:4;
413 /* octet 11 */
414 uint8_t handling_prio:2;
415 uint8_t xfer_delay:6;
416 /* octet 12 */
417 uint8_t guar_bitrate_up;
418 /* octet 13 */
419 uint8_t guar_bitrate_down;
420 /* octet 14 */
421 uint8_t src_stats_desc:4;
422 uint8_t sig_ind:1;
423 uint8_t spare5:3;
424 /* octet 15 */
425 uint8_t max_bitrate_down_ext;
426 /* octet 16 */
427 uint8_t guar_bitrate_down_ext;
428};
429
430
431#endif /* _GSM48_GPRS_H */