libosmogsm
0.11.0-dirty
Osmocom GSM library
|
00001 00003 #ifndef _GSM48_GPRS_H 00004 #define _GSM48_GPRS_H 00005 00006 #include <stdint.h> 00007 #include <stdbool.h> 00008 #include <osmocom/gsm/protocol/gsm_04_08.h> 00009 #include <osmocom/crypt/gprs_cipher.h> 00010 00011 /* Table 10.4 / 10.4a, GPRS Mobility Management (GMM) */ 00012 #define GSM48_MT_GMM_ATTACH_REQ 0x01 00013 #define GSM48_MT_GMM_ATTACH_ACK 0x02 00014 #define GSM48_MT_GMM_ATTACH_COMPL 0x03 00015 #define GSM48_MT_GMM_ATTACH_REJ 0x04 00016 #define GSM48_MT_GMM_DETACH_REQ 0x05 00017 #define GSM48_MT_GMM_DETACH_ACK 0x06 00018 00019 #define GSM48_MT_GMM_RA_UPD_REQ 0x08 00020 #define GSM48_MT_GMM_RA_UPD_ACK 0x09 00021 #define GSM48_MT_GMM_RA_UPD_COMPL 0x0a 00022 #define GSM48_MT_GMM_RA_UPD_REJ 0x0b 00023 00024 #define GSM48_MT_GMM_PTMSI_REALL_CMD 0x10 00025 #define GSM48_MT_GMM_PTMSI_REALL_COMPL 0x11 00026 #define GSM48_MT_GMM_AUTH_CIPH_REQ 0x12 00027 #define GSM48_MT_GMM_AUTH_CIPH_RESP 0x13 00028 #define GSM48_MT_GMM_AUTH_CIPH_REJ 0x14 00029 #define GSM48_MT_GMM_AUTH_CIPH_FAIL 0x1C 00030 #define GSM48_MT_GMM_ID_REQ 0x15 00031 #define GSM48_MT_GMM_ID_RESP 0x16 00032 #define GSM48_MT_GMM_STATUS 0x20 00033 #define GSM48_MT_GMM_INFO 0x21 00034 00035 /* Table 10.4a, GPRS Session Management (GSM) */ 00036 #define GSM48_MT_GSM_ACT_PDP_REQ 0x41 00037 #define GSM48_MT_GSM_ACT_PDP_ACK 0x42 00038 #define GSM48_MT_GSM_ACT_PDP_REJ 0x43 00039 #define GSM48_MT_GSM_REQ_PDP_ACT 0x44 00040 #define GSM48_MT_GSM_REQ_PDP_ACT_REJ 0x45 00041 #define GSM48_MT_GSM_DEACT_PDP_REQ 0x46 00042 #define GSM48_MT_GSM_DEACT_PDP_ACK 0x47 00043 #define GSM48_MT_GSM_ACT_AA_PDP_REQ 0x50 00044 #define GSM48_MT_GSM_ACT_AA_PDP_ACK 0x51 00045 #define GSM48_MT_GSM_ACT_AA_PDP_REJ 0x52 00046 #define GSM48_MT_GSM_DEACT_AA_PDP_REQ 0x53 00047 #define GSM48_MT_GSM_DEACT_AA_PDP_ACK 0x54 00048 #define GSM48_MT_GSM_STATUS 0x55 00049 00050 /* Chapter 10.5.5.2 / Table 10.5.135 */ 00051 #define GPRS_ATT_T_ATTACH 1 00052 #define GPRS_ATT_T_ATT_WHILE_IMSI 2 00053 #define GPRS_ATT_T_COMBINED 3 00054 00055 extern const struct value_string *gprs_att_t_strs; 00056 extern const struct value_string gprs_msgt_gmm_names[]; 00057 00058 /* Chapter 10.5.5.5 / Table 10.5.138 */ 00059 #define GPRS_DET_T_MO_GPRS 1 00060 #define GPRS_DET_T_MO_IMSI 2 00061 #define GPRS_DET_T_MO_COMBINED 3 00062 /* Network to MS direction */ 00063 #define GPRS_DET_T_MT_REATT_REQ 1 00064 #define GPRS_DET_T_MT_REATT_NOTREQ 2 00065 #define GPRS_DET_T_MT_IMSI 3 00066 00067 extern const struct value_string *gprs_det_t_mo_strs; 00068 extern const struct value_string *gprs_det_t_mt_strs; 00069 00070 /* Chapter 10.5.5.18 / Table 105.150 */ 00071 #define GPRS_UPD_T_RA 0 00072 #define GPRS_UPD_T_RA_LA 1 00073 #define GPRS_UPD_T_RA_LA_IMSI_ATT 2 00074 #define GPRS_UPD_T_PERIODIC 3 00075 00076 extern const struct value_string *gprs_upd_t_strs; 00077 00078 /* Table 10.4 in 3GPP TS 24.008 (successor to 04.08) */ 00079 #define GSM48_MT_GMM_SERVICE_REQ 0x0c 00080 #define GSM48_MT_GMM_SERVICE_ACK 0x0d 00081 #define GSM48_MT_GMM_SERVICE_REJ 0x0e 00082 00083 enum gsm48_gprs_ie_mm { 00084 GSM48_IE_GMM_CIPH_CKSN = 0x08, /* 10.5.1.2 */ 00085 GSM48_IE_GMM_TIMER_READY = 0x17, /* 10.5.7.3 */ 00086 GSM48_IE_GMM_ALLOC_PTMSI = 0x18, /* 10.5.1.4 */ 00087 GSM48_IE_GMM_PTMSI_SIG = 0x19, /* 10.5.5.8 */ 00088 GSM48_IE_GMM_AUTH_RAND = 0x21, /* 10.5.3.1 */ 00089 GSM48_IE_GMM_AUTH_SRES = 0x22, /* 10.5.3.2 */ 00090 GSM48_IE_GMM_IMEISV = 0x23, /* 10.5.1.4 */ 00091 GSM48_IE_GMM_CAUSE = 0x25, /* 10.5.5.14 */ 00092 GSM48_IE_GMM_DRX_PARAM = 0x27, /* 10.5.5.6 */ 00093 GSM48_IE_GMM_AUTN = 0x28, /* 10.5.3.1.1 */ 00094 GSM48_IE_GMM_AUTH_RES_EXT = 0x29, /* 10.5.3.2.1 */ 00095 GSM48_IE_GMM_AUTH_FAIL_PAR = 0x30, /* 10.5.3.2.2 */ 00096 GSM48_IE_GMM_MS_NET_CAPA = 0x31, /* 10.5.5.12 */ 00097 GSM48_IE_GMM_PDP_CTX_STATUS = 0x32, /* 10.5.7.1 */ 00098 GSM48_IE_GMM_PS_LCS_CAPA = 0x33, /* 10.5.5.22 */ 00099 GSM48_IE_GMM_GMM_MBMS_CTX_ST = 0x35, /* 10.5.7.6 */ 00100 }; 00101 00102 enum gsm48_gprs_ie_sm { 00103 GSM48_IE_GSM_APN = 0x28, /* 10.5.6.1 */ 00104 GSM48_IE_GSM_PROTO_CONF_OPT = 0x27, /* 10.5.6.3 */ 00105 GSM48_IE_GSM_PDP_ADDR = 0x2b, /* 10.5.6.4 */ 00106 GSM48_IE_GSM_AA_TMR = 0x29, /* 10.5.7.3 */ 00107 GSM48_IE_GSM_NAME_FULL = 0x43, /* 10.5.3.5a */ 00108 GSM48_IE_GSM_NAME_SHORT = 0x45, /* 10.5.3.5a */ 00109 GSM48_IE_GSM_TIMEZONE = 0x46, /* 10.5.3.8 */ 00110 GSM48_IE_GSM_UTC_AND_TZ = 0x47, /* 10.5.3.9 */ 00111 GSM48_IE_GSM_LSA_ID = 0x48, /* 10.5.3.11 */ 00112 00113 /* Fake IEs that are not present on the Layer3 air interface, 00114 * but which we use to simplify internal APIs */ 00115 OSMO_IE_GSM_CHARG_CHAR = 0xfc, 00116 OSMO_IE_GSM_REQ_QOS = 0xfd, 00117 OSMO_IE_GSM_REQ_PDP_ADDR = 0xfe, 00118 OSMO_IE_GSM_SUB_QOS = 0xff, 00119 }; 00120 00121 /* Chapter 9.4.15 / Table 9.4.15 */ 00122 struct gsm48_ra_upd_ack { 00123 uint8_t force_stby:4, /* 10.5.5.7 */ 00124 upd_result:4; /* 10.5.5.17 */ 00125 uint8_t ra_upd_timer; /* 10.5.7.3 */ 00126 struct gsm48_ra_id ra_id; /* 10.5.5.15 */ 00127 uint8_t data[0]; 00128 } __attribute__((packed)); 00129 00130 /* Chapter 10.5.7.3 */ 00131 enum gsm48_gprs_tmr_unit { 00132 GPRS_TMR_2SECONDS = 0 << 5, 00133 GPRS_TMR_MINUTE = 1 << 5, 00134 GPRS_TMR_6MINUTE = 2 << 5, 00135 GPRS_TMR_DEACTIVATED = 7 << 5, 00136 }; 00137 00138 #define GPRS_TMR_UNIT_MASK (7 << 5) 00139 #define GPRS_TMR_FACT_MASK ((1 << 5)-1) 00140 00141 /* Chapter 9.4.2 / Table 9.4.2 */ 00142 struct gsm48_attach_ack { 00143 uint8_t att_result:4, /* 10.5.5.7 */ 00144 force_stby:4; /* 10.5.5.1 */ 00145 uint8_t ra_upd_timer; /* 10.5.7.3 */ 00146 uint8_t radio_prio; /* 10.5.7.2 */ 00147 struct gsm48_ra_id ra_id; /* 10.5.5.15 */ 00148 uint8_t data[0]; 00149 } __attribute__((packed)); 00150 00151 /* Chapter 9.4.9 / Table 9.4.9 */ 00152 struct gsm48_auth_ciph_req { 00153 uint8_t ciph_alg:4, /* 10.5.5.3 */ 00154 imeisv_req:4; /* 10.5.5.10 */ 00155 uint8_t force_stby:4, /* 10.5.5.7 */ 00156 ac_ref_nr:4; /* 10.5.5.19 */ 00157 uint8_t data[0]; 00158 } __attribute__((packed)); 00159 /* optional: TV RAND, TV CKSN */ 00160 00161 struct gsm48_auth_ciph_resp { 00162 uint8_t ac_ref_nr:4, 00163 spare:4; 00164 uint8_t data[0]; 00165 } __attribute__((packed)); 00166 00167 /* Chapter 9.5.1 / Table 9.5.1 */ 00168 struct gsm48_act_pdp_ctx_req { 00169 uint8_t req_nsapi; 00170 uint8_t req_llc_sapi; 00171 uint8_t data[0]; 00172 } __attribute__((packed)); 00173 00174 /* Chapter 10.5.5.14 / Table 10.5.147 */ 00175 enum gsm48_gmm_cause { 00176 GMM_CAUSE_IMSI_UNKNOWN = 0x02, 00177 GMM_CAUSE_ILLEGAL_MS = 0x03, 00178 GMM_CAUSE_IMEI_NOT_ACCEPTED = 0x05, 00179 GMM_CAUSE_ILLEGAL_ME = 0x06, 00180 GMM_CAUSE_GPRS_NOTALLOWED = 0x07, 00181 GMM_CAUSE_GPRS_OTHER_NOTALLOWED = 0x08, 00182 GMM_CAUSE_MS_ID_NOT_DERIVED = 0x09, 00183 GMM_CAUSE_IMPL_DETACHED = 0x0a, 00184 GMM_CAUSE_PLMN_NOTALLOWED = 0x0b, 00185 GMM_CAUSE_LA_NOTALLOWED = 0x0c, 00186 GMM_CAUSE_ROAMING_NOTALLOWED = 0x0d, 00187 GMM_CAUSE_NO_GPRS_PLMN = 0x0e, 00188 GMM_CAUSE_NO_SUIT_CELL_IN_LA = 0x0f, 00189 GMM_CAUSE_MSC_TEMP_NOTREACH = 0x10, 00190 GMM_CAUSE_NET_FAIL = 0x11, 00191 GMM_CAUSE_MAC_FAIL = 0x14, 00192 GMM_CAUSE_SYNC_FAIL = 0x15, 00193 GMM_CAUSE_CONGESTION = 0x16, 00194 GMM_CAUSE_GSM_AUTH_UNACCEPT = 0x17, 00195 GMM_CAUSE_NOT_AUTH_FOR_CSG = 0x19, 00196 GMM_CAUSE_SMS_VIA_GPRS_IN_RA = 0x1c, 00197 GMM_CAUSE_NO_PDP_ACTIVATED = 0x28, 00198 GMM_CAUSE_SEM_INCORR_MSG = 0x5f, 00199 GMM_CAUSE_INV_MAND_INFO = 0x60, 00200 GMM_CAUSE_MSGT_NOTEXIST_NOTIMPL = 0x61, 00201 GMM_CAUSE_MSGT_INCOMP_P_STATE = 0x62, 00202 GMM_CAUSE_IE_NOTEXIST_NOTIMPL = 0x63, 00203 GMM_CAUSE_COND_IE_ERR = 0x64, 00204 GMM_CAUSE_MSG_INCOMP_P_STATE = 0x65, 00205 GMM_CAUSE_PROTO_ERR_UNSPEC = 0x6f, 00206 }; 00207 00208 extern const struct value_string *gsm48_gmm_cause_names; 00209 00210 /* Chapter 10.4.6.6 / Table 10.5.157 */ 00211 enum gsm48_gsm_cause { 00212 GSM_CAUSE_OPER_DET_BARR = 0x08, 00213 GSM_CAUSE_MBMS_CAP_INSUF = 0x18, 00214 GSM_CAUSE_LLC_SNDCP_FAIL = 0x19, 00215 GSM_CAUSE_INSUFF_RSRC = 0x1a, 00216 GSM_CAUSE_MISSING_APN = 0x1b, 00217 GSM_CAUSE_UNKNOWN_PDP = 0x1c, 00218 GSM_CAUSE_AUTH_FAILED = 0x1d, 00219 GSM_CAUSE_ACT_REJ_GGSN = 0x1e, 00220 GSM_CAUSE_ACT_REJ_UNSPEC = 0x1f, 00221 GSM_CAUSE_SERV_OPT_NOTSUPP = 0x20, 00222 GSM_CAUSE_REQ_SERV_OPT_NOTSUB = 0x21, 00223 GSM_CAUSE_SERV_OPT_TEMP_OOO = 0x22, 00224 GSM_CAUSE_NSAPI_IN_USE = 0x23, 00225 GSM_CAUSE_DEACT_REGULAR = 0x24, 00226 GSM_CAUSE_QOS_NOT_ACCEPTED = 0x25, 00227 GSM_CAUSE_NET_FAIL = 0x26, 00228 GSM_CAUSE_REACT_RQD = 0x27, 00229 GSM_CAUSE_FEATURE_NOTSUPP = 0x28, 00230 GSM_CAUSE_INVALID_TRANS_ID = 0x51, 00231 GSM_CAUSE_SEM_INCORR_MSG = 0x5f, 00232 GSM_CAUSE_INV_MAND_INFO = 0x60, 00233 GSM_CAUSE_MSGT_NOTEXIST_NOTIMPL = 0x61, 00234 GSM_CAUSE_MSGT_INCOMP_P_STATE = 0x62, 00235 GSM_CAUSE_IE_NOTEXIST_NOTIMPL = 0x63, 00236 GSM_CAUSE_COND_IE_ERR = 0x64, 00237 GSM_CAUSE_MSG_INCOMP_P_STATE = 0x65, 00238 GSM_CAUSE_PROTO_ERR_UNSPEC = 0x6f, 00239 }; 00240 00241 extern const struct value_string *gsm48_gsm_cause_names; 00242 00243 /* Section 6.1.2.2: Session management states on the network side */ 00244 enum gsm48_pdp_state { 00245 PDP_S_INACTIVE, 00246 PDP_S_ACTIVE_PENDING, 00247 PDP_S_ACTIVE, 00248 PDP_S_INACTIVE_PENDING, 00249 PDP_S_MODIFY_PENDING, 00250 }; 00251 00252 /* Table 10.5.155/3GPP TS 24.008 */ 00253 enum gsm48_pdp_type_org { 00254 PDP_TYPE_ORG_ETSI = 0x00, 00255 PDP_TYPE_ORG_IETF = 0x01, 00256 }; 00257 enum gsm48_pdp_type_nr { 00258 PDP_TYPE_N_ETSI_RESERVED = 0x00, 00259 PDP_TYPE_N_ETSI_PPP = 0x01, 00260 PDP_TYPE_N_IETF_IPv4 = 0x21, 00261 PDP_TYPE_N_IETF_IPv6 = 0x57, 00262 }; 00263 00264 /* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */ 00265 enum gsm48_qos_reliab_class { 00266 GSM48_QOS_RC_LLC_ACK_RLC_ACK_DATA_PROT = 2, 00267 GSM48_QOS_RC_LLC_UN_RLC_ACK_DATA_PROT = 3, 00268 GSM48_QOS_RC_LLC_UN_RLC_UN_PROT_DATA = 4, 00269 GSM48_QOS_RC_LLC_UN_RLC_UN_DATA_UN = 5, 00270 }; 00271 00272 /* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */ 00273 enum gsm48_qos_preced_class { 00274 GSM48_QOS_PC_HIGH = 1, 00275 GSM48_QOS_PC_NORMAL = 2, 00276 GSM48_QOS_PC_LOW = 3, 00277 }; 00278 00279 /* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */ 00280 enum gsm48_qos_peak_tput { 00281 GSM48_QOS_PEAK_TPUT_1000bps = 1, 00282 GSM48_QOS_PEAK_TPUT_2000bps = 2, 00283 GSM48_QOS_PEAK_TPUT_4000bps = 3, 00284 GSM48_QOS_PEAK_TPUT_8000bps = 4, 00285 GSM48_QOS_PEAK_TPUT_16000bps = 5, 00286 GSM48_QOS_PEAK_TPUT_32000bps = 6, 00287 GSM48_QOS_PEAK_TPUT_64000bps = 7, 00288 GSM48_QOS_PEAK_TPUT_128000bps = 8, 00289 GSM48_QOS_PEAK_TPUT_256000bps = 9, 00290 }; 00291 00292 /* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */ 00293 enum gsm48_qos_mean_tput { 00294 GSM48_QOS_MEAN_TPUT_100bph = 1, 00295 GSM48_QOS_MEAN_TPUT_200bph = 2, 00296 GSM48_QOS_MEAN_TPUT_500bph = 3, 00297 GSM48_QOS_MEAN_TPUT_1000bph = 4, 00298 GSM48_QOS_MEAN_TPUT_2000bph = 5, 00299 GSM48_QOS_MEAN_TPUT_5000bph = 6, 00300 GSM48_QOS_MEAN_TPUT_10000bph = 7, 00301 GSM48_QOS_MEAN_TPUT_20000bph = 8, 00302 GSM48_QOS_MEAN_TPUT_50000bph = 9, 00303 GSM48_QOS_MEAN_TPUT_100kbph = 10, 00304 GSM48_QOS_MEAN_TPUT_200kbph = 11, 00305 GSM48_QOS_MEAN_TPUT_500kbph = 0xc, 00306 GSM48_QOS_MEAN_TPUT_1Mbph = 0xd, 00307 GSM48_QOS_MEAN_TPUT_2Mbph = 0xe, 00308 GSM48_QOS_MEAN_TPUT_5Mbph = 0xf, 00309 GSM48_QOS_MEAN_TPUT_10Mbph = 0x10, 00310 GSM48_QOS_MEAN_TPUT_20Mbph = 0x11, 00311 GSM48_QOS_MEAN_TPUT_50Mbph = 0x12, 00312 GSM48_QOS_MEAN_TPUT_BEST_EFFORT = 0x1f, 00313 }; 00314 00315 /* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */ 00316 enum gsm48_qos_err_sdu { 00317 GSM48_QOS_ERRSDU_NODETECT = 1, 00318 GSM48_QOS_ERRSDU_YES = 2, 00319 GSM48_QOS_ERRSDU_NO = 3, 00320 }; 00321 00322 /* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */ 00323 enum gsm48_qos_deliv_order { 00324 GSM48_QOS_DO_ORDERED = 1, 00325 GSM48_QOS_DO_UNORDERED = 2, 00326 }; 00327 00328 /* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */ 00329 enum gsm48_qos_traf_class { 00330 GSM48_QOS_TC_CONVERSATIONAL = 1, 00331 GSM48_QOS_TC_STREAMING = 2, 00332 GSM48_QOS_TC_INTERACTIVE = 3, 00333 GSM48_QOS_TC_BACKGROUND = 4, 00334 }; 00335 00336 /* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */ 00337 enum gsm48_qos_max_sdu_size { 00338 /* values below in 10 octet granularity */ 00339 GSM48_QOS_MAXSDU_1502 = 0x97, 00340 GSM48_QOS_MAXSDU_1510 = 0x98, 00341 GSM48_QOS_MAXSDU_1520 = 0x99, 00342 }; 00343 00344 /* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */ 00345 enum gsm48_qos_max_bitrate { 00346 GSM48_QOS_MBRATE_1k = 0x01, 00347 GSM48_QOS_MBRATE_63k = 0x3f, 00348 GSM48_QOS_MBRATE_64k = 0x40, 00349 GSM48_QOS_MBRATE_568k = 0x7f, 00350 GSM48_QOS_MBRATE_576k = 0x80, 00351 GSM48_QOS_MBRATE_8640k = 0xfe, 00352 GSM48_QOS_MBRATE_0k = 0xff, 00353 }; 00354 00355 /* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */ 00356 enum gsm48_qos_resid_ber { 00357 GSM48_QOS_RBER_5e_2 = 0x01, 00358 GSM48_QOS_RBER_1e_2 = 0x02, 00359 GSM48_QOS_RBER_5e_3 = 0x03, 00360 GSM48_QOS_RBER_4e_3 = 0x04, 00361 GSM48_QOS_RBER_1e_3 = 0x05, 00362 GSM48_QOS_RBER_1e_4 = 0x06, 00363 GSM48_QOS_RBER_1e_5 = 0x07, 00364 GSM48_QOS_RBER_1e_6 = 0x08, 00365 GSM48_QOS_RBER_6e_8 = 0x09, 00366 }; 00367 00368 /* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */ 00369 enum gsm48_qos_sdu_err { 00370 GSM48_QOS_SERR_1e_2 = 0x01, 00371 GSM48_QOS_SERR_7e_2 = 0x02, 00372 GSM48_QOS_SERR_1e_3 = 0x03, 00373 GSM48_QOS_SERR_1e_4 = 0x04, 00374 GSM48_QOS_SERR_1e_5 = 0x05, 00375 GSM48_QOS_SERR_1e_6 = 0x06, 00376 GSM48_QOS_SERR_1e_1 = 0x07, 00377 }; 00378 00379 /* 3GPP 24.008 / Chapter 10.5.5.20 / Table 10.5.153a */ 00380 enum gsm48_gmm_service_type { 00381 GPRS_SERVICE_T_SIGNALLING = 0x00, 00382 GPRS_SERVICE_T_DATA = 0x01, 00383 GPRS_SERVICE_T_PAGING_RESP = 0x02, 00384 GPRS_SERVICE_T_MBMS_MC_SERV = 0x03, 00385 GPRS_SERVICE_T_MBMS_BC_SERV = 0x04, 00386 }; 00387 00388 extern const struct value_string *gprs_service_t_strs; 00389 00390 bool gprs_ms_net_cap_gea_supported(const uint8_t *ms_net_cap, uint8_t cap_len, 00391 enum gprs_ciph_algo gea); 00392 00393 /* Figure 10.5.138/24.008 / Chapter 10.5.6.5 */ 00394 struct gsm48_qos { 00395 /* octet 3 */ 00396 uint8_t reliab_class:3; 00397 uint8_t delay_class:3; 00398 uint8_t spare:2; 00399 /* octet 4 */ 00400 uint8_t preced_class:3; 00401 uint8_t spare2:1; 00402 uint8_t peak_tput:4; 00403 /* octet 5 */ 00404 uint8_t mean_tput:5; 00405 uint8_t spare3:3; 00406 /* octet 6 */ 00407 uint8_t deliv_err_sdu:3; 00408 uint8_t deliv_order:2; 00409 uint8_t traf_class:3; 00410 /* octet 7 */ 00411 uint8_t max_sdu_size; 00412 /* octet 8 */ 00413 uint8_t max_bitrate_up; 00414 /* octet 9 */ 00415 uint8_t max_bitrate_down; 00416 /* octet 10 */ 00417 uint8_t sdu_err_ratio:4; 00418 uint8_t resid_ber:4; 00419 /* octet 11 */ 00420 uint8_t handling_prio:2; 00421 uint8_t xfer_delay:6; 00422 /* octet 12 */ 00423 uint8_t guar_bitrate_up; 00424 /* octet 13 */ 00425 uint8_t guar_bitrate_down; 00426 /* octet 14 */ 00427 uint8_t src_stats_desc:4; 00428 uint8_t sig_ind:1; 00429 uint8_t spare5:3; 00430 /* octet 15 */ 00431 uint8_t max_bitrate_down_ext; 00432 /* octet 16 */ 00433 uint8_t guar_bitrate_down_ext; 00434 }; 00435 00436 00437 #endif /* _GSM48_GPRS_H */