libosmogsm
0.11.0-dirty
Osmocom GSM library
|
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