libosmogsm  0.11.0-dirty
Osmocom GSM library
include/osmocom/gsm/protocol/gsm_04_08_gprs.h
Go to the documentation of this file.
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 */
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines