libosmogsm  0.11.0-dirty
Osmocom GSM library
include/osmocom/gsm/protocol/gsm_08_58.h
Go to the documentation of this file.
00001 
00004 /*
00005  * (C) 2008 by Harald Welte <laforge@gnumonks.org>
00006  * All Rights Reserved
00007  *
00008  * This program is free software; you can redistribute it and/or modify
00009  * it under the terms of the GNU General Public License as published by
00010  * the Free Software Foundation; either version 2 of the License, or
00011  * (at your option) any later version.
00012  *
00013  * This program is distributed in the hope that it will be useful,
00014  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016  * GNU General Public License for more details.
00017  *
00018  * You should have received a copy of the GNU General Public License along
00019  * with this program; if not, write to the Free Software Foundation, Inc.,
00020  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
00021  *
00022  */
00023 
00024 #pragma once
00025 
00026 #include <stdint.h>
00027 
00033 struct abis_rsl_common_hdr {
00034         uint8_t msg_discr;      
00035         uint8_t msg_type;       
00036         uint8_t data[0];        
00037 } __attribute__ ((packed));
00038 
00039 /* RSL RLL header (Chapter 8.3) */
00040 struct abis_rsl_rll_hdr {
00041         struct abis_rsl_common_hdr c;
00042         uint8_t ie_chan;        
00043         uint8_t chan_nr;        
00044         uint8_t ie_link_id;     
00045         uint8_t link_id;        
00046         uint8_t data[0];        
00047 } __attribute__ ((packed));
00048 
00049 /* RSL Dedicated Channel header (Chapter 8.3 and 8.4) */
00050 struct abis_rsl_dchan_hdr {
00051         struct abis_rsl_common_hdr c;
00052         uint8_t ie_chan;        
00053         uint8_t chan_nr;        
00054         uint8_t data[0];        
00055 } __attribute__ ((packed));
00056 
00057 /* RSL Common Channel header (Chapter 8.5) */
00058 struct abis_rsl_cchan_hdr {
00059         struct abis_rsl_common_hdr c;
00060         uint8_t ie_chan;        
00061         uint8_t chan_nr;        
00062         uint8_t data[0];        
00063 } __attribute__ ((packed));
00064 
00065 
00066 /* Chapter 9.1 */
00067 /* RSL Message Discriminator: RLL */
00068 #define ABIS_RSL_MDISC_RLL              0x02
00069 /* RSL Message Discriminator: Dedicated Channel */
00070 #define ABIS_RSL_MDISC_DED_CHAN         0x08
00071 /* RSL Message Discriminator: Common Channel */
00072 #define ABIS_RSL_MDISC_COM_CHAN         0x0c
00073 /* RSL Message Discriminator: TRX Management */
00074 #define ABIS_RSL_MDISC_TRX              0x10
00075 /* RSL Message Discriminator: Location Service */
00076 #define ABIS_RSL_MDISC_LOC              0x20
00077 /* RSL Message Discriminator: ip.access */
00078 #define ABIS_RSL_MDISC_IPACCESS         0x7e
00079 #define ABIS_RSL_MDISC_TRANSP           0x01
00080 
00081 /* Check if given RSL message discriminator is transparent */
00082 #define ABIS_RSL_MDISC_IS_TRANSP(x)     (x & 0x01)
00083 
00084 /* RSL Message Type (Chapter 9.1) */
00085 enum abis_rsl_msgtype {
00086         /* Radio Link Layer Management */
00087         RSL_MT_DATA_REQ                 = 0x01,
00088         RSL_MT_DATA_IND,
00089         RSL_MT_ERROR_IND,
00090         RSL_MT_EST_REQ,
00091         RSL_MT_EST_CONF,
00092         RSL_MT_EST_IND,
00093         RSL_MT_REL_REQ,
00094         RSL_MT_REL_CONF,
00095         RSL_MT_REL_IND,
00096         RSL_MT_UNIT_DATA_REQ,
00097         RSL_MT_UNIT_DATA_IND,           /* 0x0b */
00098         RSL_MT_SUSP_REQ,                /* non-standard elements */
00099         RSL_MT_SUSP_CONF,
00100         RSL_MT_RES_REQ,
00101         RSL_MT_RECON_REQ,               /* 0x0f */
00102 
00103         /* Common Channel Management / TRX Management */
00104         RSL_MT_BCCH_INFO                        = 0x11,
00105         RSL_MT_CCCH_LOAD_IND,
00106         RSL_MT_CHAN_RQD,
00107         RSL_MT_DELETE_IND,
00108         RSL_MT_PAGING_CMD,
00109         RSL_MT_IMMEDIATE_ASSIGN_CMD,
00110         RSL_MT_SMS_BC_REQ,
00111         RSL_MT_CHAN_CONF,               /* non-standard element */
00112         /* empty */
00113         RSL_MT_RF_RES_IND                       = 0x19,
00114         RSL_MT_SACCH_FILL,
00115         RSL_MT_OVERLOAD,
00116         RSL_MT_ERROR_REPORT,
00117         RSL_MT_SMS_BC_CMD,
00118         RSL_MT_CBCH_LOAD_IND,
00119         RSL_MT_NOT_CMD,                 /* 0x1f */
00120 
00121         /* Dedicate Channel Management */
00122         RSL_MT_CHAN_ACTIV                       = 0x21,
00123         RSL_MT_CHAN_ACTIV_ACK,
00124         RSL_MT_CHAN_ACTIV_NACK,
00125         RSL_MT_CONN_FAIL,
00126         RSL_MT_DEACTIVATE_SACCH,
00127         RSL_MT_ENCR_CMD,
00128         RSL_MT_HANDO_DET,
00129         RSL_MT_MEAS_RES,
00130         RSL_MT_MODE_MODIFY_REQ,
00131         RSL_MT_MODE_MODIFY_ACK,
00132         RSL_MT_MODE_MODIFY_NACK,
00133         RSL_MT_PHY_CONTEXT_REQ,
00134         RSL_MT_PHY_CONTEXT_CONF,
00135         RSL_MT_RF_CHAN_REL,
00136         RSL_MT_MS_POWER_CONTROL,
00137         RSL_MT_BS_POWER_CONTROL,                /* 0x30 */
00138         RSL_MT_PREPROC_CONFIG,
00139         RSL_MT_PREPROC_MEAS_RES,
00140         RSL_MT_RF_CHAN_REL_ACK,
00141         RSL_MT_SACCH_INFO_MODIFY,
00142         RSL_MT_TALKER_DET,
00143         RSL_MT_LISTENER_DET,
00144         RSL_MT_REMOTE_CODEC_CONF_REP,
00145         RSL_MT_RTD_REP,
00146         RSL_MT_PRE_HANDO_NOTIF,
00147         RSL_MT_MR_CODEC_MOD_REQ,
00148         RSL_MT_MR_CODEC_MOD_ACK,
00149         RSL_MT_MR_CODEC_MOD_NACK,
00150         RSL_MT_MR_CODEC_MOD_PER,
00151         RSL_MT_TFO_REP,
00152         RSL_MT_TFO_MOD_REQ,             /* 0x3f */
00153         RSL_MT_LOCATION_INFO            = 0x41,
00154 
00155         /* ip.access specific RSL message types */
00156         RSL_MT_IPAC_DIR_RETR_ENQ        = 0x40,
00157         RSL_MT_IPAC_PDCH_ACT            = 0x48,
00158         RSL_MT_IPAC_PDCH_ACT_ACK,
00159         RSL_MT_IPAC_PDCH_ACT_NACK,
00160         RSL_MT_IPAC_PDCH_DEACT          = 0x4b,
00161         RSL_MT_IPAC_PDCH_DEACT_ACK,
00162         RSL_MT_IPAC_PDCH_DEACT_NACK,
00163         RSL_MT_IPAC_CONNECT_MUX         = 0x50,
00164         RSL_MT_IPAC_CONNECT_MUX_ACK,
00165         RSL_MT_IPAC_CONNECT_MUX_NACK,
00166         RSL_MT_IPAC_BIND_MUX            = 0x53,
00167         RSL_MT_IPAC_BIND_MUX_ACK,
00168         RSL_MT_IPAC_BIND_MUX_NACK,
00169         RSL_MT_IPAC_DISC_MUX            = 0x56,
00170         RSL_MT_IPAC_DISC_MUX_ACK,
00171         RSL_MT_IPAC_DISC_MUX_NACK,
00172         RSL_MT_IPAC_MEAS_PREPROC_DFT    = 0x60,         /*Extented Common Channel Management */
00173         RSL_MT_IPAC_HO_CAN_ENQ          = 0x61,
00174         RSL_MT_IPAC_HO_CAN_RES          = 0x62,
00175         RSL_MT_IPAC_CRCX                = 0x70,         /* Bind to local BTS RTP port */
00176         RSL_MT_IPAC_CRCX_ACK,
00177         RSL_MT_IPAC_CRCX_NACK,
00178         RSL_MT_IPAC_MDCX                = 0x73,
00179         RSL_MT_IPAC_MDCX_ACK,
00180         RSL_MT_IPAC_MDCX_NACK,
00181         RSL_MT_IPAC_DLCX_IND            = 0x76,
00182         RSL_MT_IPAC_DLCX                = 0x77,
00183         RSL_MT_IPAC_DLCX_ACK,
00184         RSL_MT_IPAC_DLCX_NACK,
00185 };
00186 
00188 enum abis_rsl_msgtype_siemens {
00189         RSL_MT_SIEMENS_MRPCI            = 0x41,
00190         RSL_MT_SIEMENS_INTRAC_HO_COND_IND = 0x42,
00191         RSL_MT_SIEMENS_INTERC_HO_COND_IND = 0x43,
00192         RSL_MT_SIEMENS_FORCED_HO_REQ    = 0x44,
00193         RSL_MT_SIEMENS_PREF_AREA_REQ    = 0x45,
00194         RSL_MT_SIEMENS_PREF_AREA        = 0x46,
00195         RSL_MT_SIEMENS_START_TRACE      = 0x47,
00196         RSL_MT_SIEMENS_START_TRACE_ACK  = 0x48,
00197         RSL_MT_SIEMENS_STOP_TRACE       = 0x49,
00198         RSL_MT_SIEMENS_TRMR             = 0x4a,
00199         RSL_MT_SIEMENS_HO_FAIL_IND      = 0x4b,
00200         RSL_MT_SIEMENS_STOP_TRACE_ACK   = 0x4c,
00201         RSL_MT_SIEMENS_UPLF             = 0x4d,
00202         RSL_MT_SIEMENS_UPLB             = 0x4e,
00203         RSL_MT_SIEMENS_SET_SYS_INFO_10  = 0x4f,
00204         RSL_MT_SIEMENS_MODIF_COND_IND   = 0x50,
00205 };
00206 
00208 enum abis_rsl_msgtype_ericsson {
00209         RSL_MT_ERICSSON_IMM_ASS_SENT    = 0x10,
00210 };
00211 
00213 enum abis_rsl_ie {
00214         RSL_IE_CHAN_NR                  = 0x01,
00215         RSL_IE_LINK_IDENT,
00216         RSL_IE_ACT_TYPE,
00217         RSL_IE_BS_POWER,
00218         RSL_IE_CHAN_IDENT,
00219         RSL_IE_CHAN_MODE,
00220         RSL_IE_ENCR_INFO,
00221         RSL_IE_FRAME_NUMBER,
00222         RSL_IE_HANDO_REF,
00223         RSL_IE_L1_INFO,
00224         RSL_IE_L3_INFO,
00225         RSL_IE_MS_IDENTITY,
00226         RSL_IE_MS_POWER,
00227         RSL_IE_PAGING_GROUP,
00228         RSL_IE_PAGING_LOAD,
00229         RSL_IE_PYHS_CONTEXT             = 0x10,
00230         RSL_IE_ACCESS_DELAY,
00231         RSL_IE_RACH_LOAD,
00232         RSL_IE_REQ_REFERENCE,
00233         RSL_IE_RELEASE_MODE,
00234         RSL_IE_RESOURCE_INFO,
00235         RSL_IE_RLM_CAUSE,
00236         RSL_IE_STARTNG_TIME,
00237         RSL_IE_TIMING_ADVANCE,
00238         RSL_IE_UPLINK_MEAS,
00239         RSL_IE_CAUSE,
00240         RSL_IE_MEAS_RES_NR,
00241         RSL_IE_MSG_ID,
00242         /* reserved */
00243         RSL_IE_SYSINFO_TYPE             = 0x1e,
00244         RSL_IE_MS_POWER_PARAM,
00245         RSL_IE_BS_POWER_PARAM,
00246         RSL_IE_PREPROC_PARAM,
00247         RSL_IE_PREPROC_MEAS,
00248         RSL_IE_IMM_ASS_INFO,            /* Phase 1 (3.6.0), later Full below */
00249         RSL_IE_SMSCB_INFO               = 0x24,
00250         RSL_IE_MS_TIMING_OFFSET,
00251         RSL_IE_ERR_MSG,
00252         RSL_IE_FULL_BCCH_INFO,
00253         RSL_IE_CHAN_NEEDED,
00254         RSL_IE_CB_CMD_TYPE,
00255         RSL_IE_SMSCB_MSG,
00256         RSL_IE_FULL_IMM_ASS_INFO,
00257         RSL_IE_SACCH_INFO,
00258         RSL_IE_CBCH_LOAD_INFO,
00259         RSL_IE_SMSCB_CHAN_INDICATOR,
00260         RSL_IE_GROUP_CALL_REF,
00261         RSL_IE_CHAN_DESC                = 0x30,
00262         RSL_IE_NCH_DRX_INFO,
00263         RSL_IE_CMD_INDICATOR,
00264         RSL_IE_EMLPP_PRIO,
00265         RSL_IE_UIC,
00266         RSL_IE_MAIN_CHAN_REF,
00267         RSL_IE_MR_CONFIG,
00268         RSL_IE_MR_CONTROL,
00269         RSL_IE_SUP_CODEC_TYPES,
00270         RSL_IE_CODEC_CONFIG,
00271         RSL_IE_RTD,
00272         RSL_IE_TFO_STATUS,
00273         RSL_IE_LLP_APDU,
00274         /* Siemens vendor-specific */
00275         RSL_IE_SIEMENS_MRPCI            = 0x40,
00276         RSL_IE_SIEMENS_PREF_AREA_TYPE   = 0x43,
00277         RSL_IE_SIEMENS_ININ_CELL_HO_PAR = 0x45,
00278         RSL_IE_SIEMENS_TRACE_REF_NR     = 0x46,
00279         RSL_IE_SIEMENS_INT_TRACE_IDX    = 0x47,
00280         RSL_IE_SIEMENS_L2_HDR_INFO      = 0x48,
00281         RSL_IE_SIEMENS_HIGHEST_RATE     = 0x4e,
00282         RSL_IE_SIEMENS_SUGGESTED_RATE   = 0x4f,
00283 
00284         /* ip.access */
00285         RSL_IE_IPAC_SRTP_CONFIG = 0xe0,
00286         RSL_IE_IPAC_PROXY_UDP   = 0xe1,
00287         RSL_IE_IPAC_BSCMPL_TOUT = 0xe2,
00288         RSL_IE_IPAC_REMOTE_IP   = 0xf0,
00289         RSL_IE_IPAC_REMOTE_PORT = 0xf1,
00290         RSL_IE_IPAC_RTP_PAYLOAD = 0xf2,
00291         RSL_IE_IPAC_LOCAL_PORT  = 0xf3,
00292         RSL_IE_IPAC_SPEECH_MODE = 0xf4,
00293         RSL_IE_IPAC_LOCAL_IP    = 0xf5,
00294         RSL_IE_IPAC_CONN_STAT   = 0xf6,
00295         RSL_IE_IPAC_HO_C_PARMS  = 0xf7,
00296         RSL_IE_IPAC_CONN_ID     = 0xf8,
00297         RSL_IE_IPAC_RTP_CSD_FMT = 0xf9,
00298         RSL_IE_IPAC_RTP_JIT_BUF = 0xfa,
00299         RSL_IE_IPAC_RTP_COMPR   = 0xfb,
00300         RSL_IE_IPAC_RTP_PAYLOAD2= 0xfc,
00301         RSL_IE_IPAC_RTP_MPLEX   = 0xfd,
00302         RSL_IE_IPAC_RTP_MPLEX_ID= 0xfe,
00303 };
00304 
00305 /* Ericsson specific IEs, clash with above partially, so they're not
00306  * part of the enum */
00307 #define RSL_IE_ERIC_PAGING_GROUP        0x0e
00308 #define RSL_IE_ERIC_INST_NR             0x48
00309 #define RSL_IE_ERIC_PGSL_TIMERS         0x49
00310 #define RSL_IE_ERIC_REPEAT_DL_FACCH     0x4a
00311 #define RSL_IE_ERIC_POWER_INFO          0xf0
00312 #define RSL_IE_ERIC_MOBILE_ID           0xf1
00313 #define RSL_IE_ERIC_BCCH_MAPPING        0xf2
00314 #define RSL_IE_ERIC_PACKET_PAG_IND      0xf3
00315 #define RSL_IE_ERIC_CNTR_CTRL           0xf4
00316 #define RSL_IE_ERIC_CNTR_CTRL_ACK       0xf5
00317 #define RSL_IE_ERIC_CNTR_REPORT         0xf6
00318 #define RSL_IE_ERIC_ICP_CONN            0xf7
00319 #define RSL_IE_ERIC_EMR_SUPPORT         0xf8
00320 #define RSL_IE_ERIC_EGPRS_REQ_REF       0xf9
00321 #define RSL_IE_ERIC_VGCS_REL            0xfa
00322 #define RSL_IE_ERIC_REP_PER_NCH         0xfb
00323 #define RSL_IE_ERIC_NY2                 0xfc
00324 #define RSL_IE_ERIC_T3115               0xfd
00325 #define RSL_IE_ERIC_ACTIVATE_FLAG       0xfe
00326 #define RSL_IE_ERIC_FULL_NCH_INFO       0xff
00327 
00328 /* IPAC MEAS_PREPROC AVERAGING METHOD */
00329 enum {
00330         IPAC_UNWEIGHTED_AVE = 0,
00331         IPAC_WEIGHTED_AVE,
00332         IPAC_MEDIAN_AVE
00333 };
00334 
00335 /* IPAC MEAS_PREPROC AVERAGING PARAMID */
00336 enum {
00337         IPAC_RXLEV_AVE = 0,
00338         IPAC_RXQUAL_AVE,
00339         IPAC_MS_BTS_DIS_AVE
00340 };
00341 
00342 /* IPAC MEAS_PREPROC HO CAUSES */
00343 enum {
00344         IPAC_HO_RQD_CAUSE_L_RXLEV_UL_H = 0x01,
00345         IPAC_HO_RQD_CAUSE_L_RXLEV_DL_H,
00346         IPAC_HO_RQD_CAUSE_L_RXQUAL_UL_H,
00347         IPAC_HO_RQD_CAUSE_L_RXQUAL_DL_H,
00348         IPAC_HO_RQD_CAUSE_RXLEV_UL_IH,
00349         IPAC_HO_RQD_CAUSE_RXLEV_DL_IH,
00350         IPAC_HO_RQD_CAUSE_MAX_MS_RANGE,
00351         IPAC_HO_RQD_CAUSE_POWER_BUDGET,
00352         IPAC_HO_RQD_CAUSE_ENQUIRY,
00353         IPAC_HO_RQD_CAUSE_ENQUIRY_FAILED,
00354         IPAC_HO_RQD_CAUSE_NORMAL3G,
00355         IPAC_HO_RQD_CAUSE_EMERGENCY3G,
00356         IPAC_HO_RQD_CAUSE_SERVICE_PREFERRED3G,
00357         IPAC_HO_RQD_CAUSE_O_M_SHUTDOWN,
00358         IPAC_HO_RQD_CAUSE_QUALITY_PROMOTION,
00359         IPAC_HO_RQD_CAUSE_LOAD_PROMOTION,
00360         IPAC_HO_RQD_CAUSE_LOAD_DEMOTION,
00361         IPAC_HO_RQD_CAUSE_MAX,
00362 };
00363 
00364 /* Chapter 9.3.1 */
00365 #define RSL_CHAN_NR_MASK        0xf8
00366 #define RSL_CHAN_NR_1           0x08    /*< bit to add for 2nd,... lchan */
00367 #define RSL_CHAN_Bm_ACCHs       0x08
00368 #define RSL_CHAN_Lm_ACCHs       0x10    /* .. 0x18 */
00369 #define RSL_CHAN_SDCCH4_ACCH    0x20    /* .. 0x38 */
00370 #define RSL_CHAN_SDCCH8_ACCH    0x40    /* ...0x78 */
00371 #define RSL_CHAN_BCCH           0x80
00372 #define RSL_CHAN_RACH           0x88
00373 #define RSL_CHAN_PCH_AGCH       0x90
00374 #define RSL_CHAN_OSMO_PDCH      0xc0    /*< non-standard, for dyn TS */
00375 
00376 /* Chapter 9.3.3 */
00377 #define RSL_ACT_TYPE_INITIAL    0x00
00378 #define RSL_ACT_TYPE_REACT      0x80
00379 #define RSL_ACT_INTRA_IMM_ASS   0x00
00380 #define RSL_ACT_INTRA_NORM_ASS  0x01
00381 #define RSL_ACT_INTER_ASYNC     0x02
00382 #define RSL_ACT_INTER_SYNC      0x03
00383 #define RSL_ACT_SECOND_ADD      0x04
00384 #define RSL_ACT_SECOND_MULTI    0x05
00385 #define RSL_ACT_OSMO_PDCH       0x0f    /*< non-standard, for dyn TS */
00386 
00388 struct rsl_ie_chan_mode {
00389         uint8_t dtx_dtu;
00390         uint8_t spd_ind;
00391         uint8_t chan_rt;
00392         uint8_t chan_rate;
00393 } __attribute__ ((packed));
00394 #define RSL_CMOD_DTXu           0x01    /* uplink */
00395 #define RSL_CMOD_DTXd           0x02    /* downlink */
00396 enum rsl_cmod_spd {
00397         RSL_CMOD_SPD_SPEECH     = 0x01,
00398         RSL_CMOD_SPD_DATA       = 0x02,
00399         RSL_CMOD_SPD_SIGN       = 0x03,
00400 };
00401 #define RSL_CMOD_CRT_SDCCH      0x01
00402 #define RSL_CMOD_CRT_TCH_Bm     0x08    /* full-rate */
00403 #define RSL_CMOD_CRT_TCH_Lm     0x09    /* half-rate */
00404 /* FIXME: More CRT types */
00405 /* Speech */
00406 #define RSL_CMOD_SP_GSM1        0x01
00407 #define RSL_CMOD_SP_GSM2        0x11
00408 #define RSL_CMOD_SP_GSM3        0x21
00409 /* non-transparent data */
00410 #define RSL_CMOD_CSD_NT_43k5    0x74
00411 #define RSL_CMOD_CSD_NT_28k8    0x71
00412 #define RSL_CMOD_CSD_NT_14k5    0x58
00413 #define RSL_CMOD_CSD_NT_12k0    0x50
00414 #define RSL_CMOD_CSD_NT_6k0     0x51
00415 /* legacy #defines with wrong name */
00416 #define RSL_CMOD_SP_NT_14k5     RSL_CMOD_CSD_NT_14k5
00417 #define RSL_CMOD_SP_NT_12k0     RSL_CMOD_CSD_NT_12k0
00418 #define RSL_CMOD_SP_NT_6k0      RSL_CMOD_CSD_NT_6k0
00419 /* transparent data */
00420 #define RSL_CMOD_CSD_T_32000    0x38
00421 #define RSL_CMOD_CSD_T_29000    0x39
00422 #define RSL_CMOD_CSD_T_14400    0x18
00423 #define RSL_CMOD_CSD_T_9600     0x10
00424 #define RSL_CMOD_CSD_T_4800     0x11
00425 #define RSL_CMOD_CSD_T_2400     0x12
00426 #define RSL_CMOD_CSD_T_1200     0x13
00427 #define RSL_CMOD_CSD_T_600      0x14
00428 #define RSL_CMOD_CSD_T_1200_75  0x15
00429 
00431 struct rsl_ie_chan_ident {
00432         /* GSM 04.08 10.5.2.5 */
00433         struct {
00434                 uint8_t iei;
00435                 uint8_t chan_nr;        /* enc_chan_nr */
00436                 uint8_t oct3;
00437                 uint8_t oct4;
00438         } chan_desc;
00439 #if 0   /* spec says we need this but Abissim doesn't use it */
00440         struct {
00441                 uint8_t tag;
00442                 uint8_t len;
00443         } mobile_alloc;
00444 #endif
00445 } __attribute__ ((packed));
00446 
00447 /* Chapter 9.3.22 */
00448 #define RLL_CAUSE_T200_EXPIRED          0x01
00449 #define RLL_CAUSE_REEST_REQ             0x02
00450 #define RLL_CAUSE_UNSOL_UA_RESP         0x03
00451 #define RLL_CAUSE_UNSOL_DM_RESP         0x04
00452 #define RLL_CAUSE_UNSOL_DM_RESP_MF      0x05
00453 #define RLL_CAUSE_UNSOL_SPRV_RESP       0x06
00454 #define RLL_CAUSE_SEQ_ERR               0x07
00455 #define RLL_CAUSE_UFRM_INC_PARAM        0x08
00456 #define RLL_CAUSE_SFRM_INC_PARAM        0x09
00457 #define RLL_CAUSE_IFRM_INC_MBITS        0x0a
00458 #define RLL_CAUSE_IFRM_INC_LEN          0x0b
00459 #define RLL_CAUSE_FRM_UNIMPL            0x0c
00460 #define RLL_CAUSE_SABM_MF               0x0d
00461 #define RLL_CAUSE_SABM_INFO_NOTALL      0x0e
00462 
00463 /* Chapter 9.3.26 */
00464 #define RSL_ERRCLS_NORMAL               0x00
00465 #define RSL_ERRCLS_RESOURCE_UNAVAIL     0x20
00466 #define RSL_ERRCLS_SERVICE_UNAVAIL      0x30
00467 #define RSL_ERRCLS_SERVICE_UNIMPL       0x40
00468 #define RSL_ERRCLS_INVAL_MSG            0x50
00469 #define RSL_ERRCLS_PROTO_ERROR          0x60
00470 #define RSL_ERRCLS_INTERWORKING         0x70
00471 
00472 /* normal event */
00473 #define RSL_ERR_RADIO_IF_FAIL           0x00
00474 #define RSL_ERR_RADIO_LINK_FAIL         0x01
00475 #define RSL_ERR_HANDOVER_ACC_FAIL       0x02
00476 #define RSL_ERR_TALKER_ACC_FAIL         0x03
00477 #define RSL_ERR_OM_INTERVENTION         0x07
00478 #define RSL_ERR_NORMAL_UNSPEC           0x0f
00479 #define RSL_ERR_T_MSRFPCI_EXP           0x18
00480 /* resource unavailable */
00481 #define RSL_ERR_EQUIPMENT_FAIL          0x20
00482 #define RSL_ERR_RR_UNAVAIL              0x21
00483 #define RSL_ERR_TERR_CH_FAIL            0x22
00484 #define RSL_ERR_CCCH_OVERLOAD           0x23
00485 #define RSL_ERR_ACCH_OVERLOAD           0x24
00486 #define RSL_ERR_PROCESSOR_OVERLOAD      0x25
00487 #define RSL_ERR_RES_UNAVAIL             0x2f
00488 /* service or option not available */
00489 #define RSL_ERR_TRANSC_UNAVAIL          0x30
00490 #define RSL_ERR_SERV_OPT_UNAVAIL        0x3f
00491 /* service or option not implemented */
00492 #define RSL_ERR_ENCR_UNIMPL             0x40
00493 #define RSL_ERR_SERV_OPT_UNIMPL         0x4f
00494 /* invalid message */
00495 #define RSL_ERR_RCH_ALR_ACTV_ALLOC      0x50
00496 #define RSL_ERR_INVALID_MESSAGE         0x5f
00497 /* protocol error */
00498 #define RSL_ERR_MSG_DISCR               0x60
00499 #define RSL_ERR_MSG_TYPE                0x61
00500 #define RSL_ERR_MSG_SEQ                 0x62
00501 #define RSL_ERR_IE_ERROR                0x63
00502 #define RSL_ERR_MAND_IE_ERROR           0x64
00503 #define RSL_ERR_OPT_IE_ERROR            0x65
00504 #define RSL_ERR_IE_NONEXIST             0x66
00505 #define RSL_ERR_IE_LENGTH               0x67
00506 #define RSL_ERR_IE_CONTENT              0x68
00507 #define RSL_ERR_PROTO                   0x6f
00508 /* interworking */
00509 #define RSL_ERR_INTERWORKING            0x7f
00510 
00511 /* Chapter 9.3.30 */
00512 #define RSL_SYSTEM_INFO_8       0x00
00513 #define RSL_SYSTEM_INFO_1       0x01
00514 #define RSL_SYSTEM_INFO_2       0x02
00515 #define RSL_SYSTEM_INFO_3       0x03
00516 #define RSL_SYSTEM_INFO_4       0x04
00517 #define RSL_SYSTEM_INFO_5       0x05
00518 #define RSL_SYSTEM_INFO_6       0x06
00519 #define RSL_SYSTEM_INFO_7       0x07
00520 #define RSL_SYSTEM_INFO_16      0x08
00521 #define RSL_SYSTEM_INFO_17      0x09
00522 #define RSL_SYSTEM_INFO_2bis    0x0a
00523 #define RSL_SYSTEM_INFO_2ter    0x0b
00524 #define RSL_SYSTEM_INFO_5bis    0x0d
00525 #define RSL_SYSTEM_INFO_5ter    0x0e
00526 #define RSL_SYSTEM_INFO_10      0x0f
00527 #define RSL_EXT_MEAS_ORDER      0x47
00528 #define RSL_MEAS_INFO           0x48
00529 #define RSL_SYSTEM_INFO_13      0x28
00530 #define RSL_ERIC_SYSTEM_INFO_13 0x0C
00531 #define RSL_SYSTEM_INFO_2quater 0x29
00532 #define RSL_SYSTEM_INFO_9       0x2a
00533 #define RSL_SYSTEM_INFO_18      0x2b
00534 #define RSL_SYSTEM_INFO_19      0x2c
00535 #define RSL_SYSTEM_INFO_20      0x2d
00536 
00537 /* Chapter 9.3.40 */
00538 #define RSL_CHANNEED_ANY        0x00
00539 #define RSL_CHANNEED_SDCCH      0x01
00540 #define RSL_CHANNEED_TCH_F      0x02
00541 #define RSL_CHANNEED_TCH_ForH   0x03
00542 
00544 struct rsl_ie_cb_cmd_type {
00545         uint8_t last_block:2;
00546         uint8_t spare:1;
00547         uint8_t def_bcast:1;
00548         uint8_t command:4;
00549 } __attribute__ ((packed));
00550 /* ->command */
00551 #define RSL_CB_CMD_TYPE_NORMAL          0x00
00552 #define RSL_CB_CMD_TYPE_SCHEDULE        0x08
00553 #define RSL_CB_CMD_TYPE_DEFAULT         0x0e
00554 #define RSL_CB_CMD_TYPE_NULL            0x0f
00555 /* ->def_bcast */
00556 #define RSL_CB_CMD_DEFBCAST_NORMAL      0
00557 #define RSL_CB_CMD_DEFBCAST_NULL        1
00558 /* ->last_block */
00559 #define RSL_CB_CMD_LASTBLOCK_4          0
00560 #define RSL_CB_CMD_LASTBLOCK_1          1
00561 #define RSL_CB_CMD_LASTBLOCK_2          2
00562 #define RSL_CB_CMD_LASTBLOCK_3          3
00563 
00564 /* Chapter 3.3.2.3 Brocast control channel */
00565 /* CCCH-CONF, NC is not combined */
00566 #define RSL_BCCH_CCCH_CONF_1_NC 0x00
00567 #define RSL_BCCH_CCCH_CONF_1_C  0x01
00568 #define RSL_BCCH_CCCH_CONF_2_NC 0x02
00569 #define RSL_BCCH_CCCH_CONF_3_NC 0x04
00570 #define RSL_BCCH_CCCH_CONF_4_NC 0x06
00571 
00572 /* BS-PA-MFRMS */
00573 #define RSL_BS_PA_MFRMS_2       0x00
00574 #define RSL_BS_PA_MFRMS_3       0x01
00575 #define RSL_BS_PA_MFRMS_4       0x02
00576 #define RSL_BS_PA_MFRMS_5       0x03
00577 #define RSL_BS_PA_MFRMS_6       0x04
00578 #define RSL_BS_PA_MFRMS_7       0x05
00579 #define RSL_BS_PA_MFRMS_8       0x06
00580 #define RSL_BS_PA_MFRMS_9       0x07
00581 
00582 /* RSL_IE_IPAC_RTP_PAYLOAD[2] */
00583 enum rsl_ipac_rtp_payload {
00584         RSL_IPAC_RTP_GSM        = 1,
00585         RSL_IPAC_RTP_EFR,
00586         RSL_IPAC_RTP_AMR,
00587         RSL_IPAC_RTP_CSD,
00588         RSL_IPAC_RTP_MUX,
00589 };
00590 
00591 /* RSL_IE_IPAC_SPEECH_MODE, lower four bits */
00592 enum rsl_ipac_speech_mode_s {
00593         RSL_IPAC_SPEECH_GSM_FR = 0,     /* GSM FR (Type 1, FS) */
00594         RSL_IPAC_SPEECH_GSM_EFR = 1,    /* GSM EFR (Type 2, FS) */
00595         RSL_IPAC_SPEECH_GSM_AMR_FR = 2, /* GSM AMR/FR (Type 3, FS) */
00596         RSL_IPAC_SPEECH_GSM_HR = 3,     /* GSM HR (Type 1, HS) */
00597         RSL_IPAC_SPEECH_GSM_AMR_HR = 5, /* GSM AMR/hr (Type 3, HS) */
00598         RSL_IPAC_SPEECH_AS_RTP = 0xf,   /* As specified by RTP Payload IE */
00599 };
00600 /* RSL_IE_IPAC_SPEECH_MODE, upper four bits */
00601 enum rsl_ipac_speech_mode_m {
00602         RSL_IPAC_SPEECH_M_RXTX = 0,     /* Send and Receive */
00603         RSL_IPAC_SPEECH_M_RX = 1,       /* Receive only */
00604         RSL_IPAC_SPEECH_M_TX = 2,       /* Send only */
00605 };
00606 
00607 /* RSL_IE_IPAC_RTP_CSD_FMT, lower four bits */
00608 enum rsl_ipac_rtp_csd_format_d {
00609         RSL_IPAC_RTP_CSD_EXT_TRAU = 0,
00610         RSL_IPAC_RTP_CSD_NON_TRAU = 1,
00611         RSL_IPAC_RTP_CSD_TRAU_BTS = 2,
00612         RSL_IPAC_RTP_CSD_IWF_FREE = 3,
00613 };
00614 /* RSL_IE_IPAC_RTP_CSD_FMT, upper four bits */
00615 enum rsl_ipac_rtp_csd_format_ir {
00616         RSL_IPAC_RTP_CSD_IR_8k = 0,
00617         RSL_IPAC_RTP_CSD_IR_16k = 1,
00618         RSL_IPAC_RTP_CSD_IR_32k = 2,
00619         RSL_IPAC_RTP_CSD_IR_64k = 3,
00620 };
00621 
00622 /* Siemens vendor-specific RSL extensions */
00623 struct rsl_mrpci {
00624         uint8_t power_class:3,
00625                  vgcs_capable:1,
00626                  vbs_capable:1,
00627                  gsm_phase:2;
00628 } __attribute__ ((packed));
00629 
00630 enum rsl_mrpci_pwrclass {
00631         RSL_MRPCI_PWRC_1        = 0,
00632         RSL_MRPCI_PWRC_2        = 1,
00633         RSL_MRPCI_PWRC_3        = 2,
00634         RSL_MRPCI_PWRC_4        = 3,
00635         RSL_MRPCI_PWRC_5        = 4,
00636 };
00637 enum rsl_mrpci_phase {
00638         RSL_MRPCI_PHASE_1       = 0,
00639         /* reserved */
00640         RSL_MRPCI_PHASE_2       = 2,
00641         RSL_MRPCI_PHASE_2PLUS   = 3,
00642 };
00643 
00644 /* 9.3.20 Release Mode */
00645 enum rsl_rel_mode {
00646         RSL_REL_NORMAL          = 0,
00647         RSL_REL_LOCAL_END       = 1,
00648 };
00649 
00651 enum rsl_ipac_embedded_ie {
00652         RSL_IPAC_EIE_RXLEV              = 0x00,
00653         RSL_IPAC_EIE_RXQUAL             = 0x01,
00654         RSL_IPAC_EIE_FREQ_ERR           = 0x02,
00655         RSL_IPAC_EIE_TIMING_ERR         = 0x03,
00656         RSL_IPAC_EIE_MEAS_AVG_CFG       = 0x04,
00657         RSL_IPAC_EIE_BS_PWR_CTL         = 0x05,
00658         RSL_IPAC_EIE_MS_PWR_CTL         = 0x06,
00659         RSL_IPAC_EIE_HANDO_THRESH       = 0x07,
00660         RSL_IPAC_EIE_NCELL_DEFAULTS     = 0x08,
00661         RSL_IPAC_EIE_NCELL_LIST         = 0x09,
00662         RSL_IPAC_EIE_PC_THRESH_COMP     = 0x0a,
00663         RSL_IPAC_EIE_HO_THRESH_COMP     = 0x0b,
00664         RSL_IPAC_EIE_HO_CAUSE           = 0x0c,
00665         RSL_IPAC_EIE_HO_CANDIDATES      = 0x0d,
00666         RSL_IPAC_EIE_NCELL_BA_CHG_LIST  = 0x0e,
00667         RSL_IPAC_EIE_NUM_OF_MS          = 0x10,
00668         RSL_IPAC_EIE_HO_CAND_EXT        = 0x11,
00669         RSL_IPAC_EIE_NCELL_DEF_EXT      = 0x12,
00670         RSL_IPAC_EIE_NCELL_LIST_EXT     = 0x13,
00671         RSL_IPAC_EIE_MASTER_KEY         = 0x14,
00672         RSL_IPAC_EIE_MASTER_SALT        = 0x15,
00673         /* additional IPAC measurement pre-processing related IEI */
00674         RSL_IPAC_EIE_MEAS_TRANS_RES     = 0x16,
00675         RSL_IPAC_EIE_3G_HO_PARAM        = 0x17,
00676         RSL_IPAC_EIE_3G_NCELL_LIST      = 0x18,
00677         RSL_IPAC_EIE_SDCCH_CTL_PARAM    = 0x1a,
00678         RSL_IPAC_EIE_AMR_CONV_THRESH    = 0x1b,
00679 
00680 };
00681 
00682 struct ipac_preproc_ave_cfg {
00683         uint8_t h_reqave:5,
00684                 param_id:2,
00685                 reserved:1;
00686         uint8_t h_reqt:5,
00687                 ave_method:3;
00688 }__attribute__ ((packed));
00689 
00690 struct ipac_preproc_ho_thresh {
00691         uint8_t l_rxlev_ul_h:6,
00692                 reserved_l_rxlev_ul:2;
00693         uint8_t l_rxlev_dl_h:6,
00694                 reserved_l_rxlev_dl:2;
00695         uint8_t rxlev_ul_ih:6,
00696                 reserved_rxlev_ul:2;
00697         uint8_t rxlev_dl_ih:6,
00698                 reserved_rxlev_dl:2;
00699         uint8_t l_rxqual_ul_h:3,
00700                 reserved_rxlqual_ul:1,
00701                 l_rxqual_dl_h:3,
00702                 reserved_rxqual_dl:1;
00703         uint8_t ms_range_max:6,
00704                 reserved_ms_range:2;
00705 }__attribute__ ((packed));
00706 
00707 struct ipac_preproc_ho_comp {
00708         uint8_t p5:5,
00709                 reserved_p5:3;
00710         uint8_t n5:5,
00711                 reserved_n5:3;
00712         uint8_t p6:5,
00713                 reserved_p6:3;
00714         uint8_t n6:5,
00715                 reserved_n6:3;
00716         uint8_t p7:5,
00717                 reserved_p7:3;
00718         uint8_t n7:5,
00719                 reserved_n7:3;
00720         uint8_t p8:5,
00721                 reserved_p8:3;
00722         uint8_t n8:5,
00723                 reserved_n8:3;
00724         uint8_t ho_interval:5,
00725                 reserved_ho:3;
00726         uint8_t reserved;
00727 
00728 }__attribute__ ((packed));
00729 
00730 struct ipac_preproc_ho_candidates {
00731         uint8_t bsic:6,
00732                 reserved0:2;
00733         uint8_t bcch_freq:5,
00734                 ba_used:1,
00735                 s:1,
00736                 reserved1:1;
00737 }__attribute__ ((packed));
00738 
00739 struct ipac_preproc_ncell_dflts {
00740         uint8_t rxlev_min_def:6,
00741                 reserved_rxlev_min_def:2;
00742         uint8_t ho_margin_def:5,
00743                 reserved_ho_margin_def:3;
00744         uint8_t ms_txpwr_max_def:5,
00745                 reserved_ms_txpwr_max_def:3;
00746 }__attribute__ ((packed));
00747 
00748 struct ipac_preproc_ho_ctl_param {
00749         uint8_t sdcch_ho_gsm:1,
00750                 sdcch_ho_umts:1,
00751                 reserved:6;
00752 }__attribute__ ((packed));
00753 
00754 struct ipac_preproc_cfg {
00755         uint8_t meas_rep_mode;
00756         uint32_t meas_mode_flags;
00757         struct ipac_preproc_ave_cfg ms_ave_cfg[3];
00758         struct ipac_preproc_ave_cfg ave_cfg;
00759         struct ipac_preproc_ho_thresh ho_thresh;
00760         struct ipac_preproc_ho_comp ho_comp;
00761         struct ipac_preproc_ncell_dflts ncell_dflts;
00762         struct ipac_preproc_ho_ctl_param ho_ctl_param;
00763 };
00764 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines