| module PCUIF_Types { |
| |
| import from General_Types all; |
| import from Osmocom_Types all; |
| |
| /* Osmocom PCU Interface Types, as per osmo-pcu/include/osmocom/pcu/pcuif_proto.h */ |
| |
| const charstring PCU_SOCK_DEFAULT := "/tmp/pcu_bts"; |
| const uint32_t PCU_IF_VERSION := 9; |
| |
| type enumerated PCUIF_MsgType { |
| PCU_IF_MSG_DATA_REQ ('00'O), |
| PCU_IF_MSG_DATA_CNF ('01'O), |
| PCU_IF_MSG_DATA_IND ('02'O), |
| PCU_IF_MSG_SUSP_REQ ('03'O), |
| PCU_IF_MSG_RTS_REQ ('10'O), |
| PCU_IF_MSG_DATA_CNF_DT ('11'O), |
| PCU_IF_MSG_RACH_IND ('22'O), |
| PCU_IF_MSG_INFO_IND ('32'O), |
| PCU_IF_MSG_ACT_REQ ('40'O), |
| PCU_IF_MSG_TIME_IND ('52'O), |
| PCU_IF_MSG_PAG_REQ ('60'O), |
| PCU_IF_MSG_TXT_IND ('70'O) |
| } with { variant "FIELDLENGTH(8)" }; |
| |
| type enumerated PCUIF_Sapi { |
| PCU_IF_SAPI_UNKNOWN ('00'O), |
| PCU_IF_SAPI_RACH ('01'O), |
| PCU_IF_SAPI_AGCH ('02'O), |
| PCU_IF_SAPI_PCH ('03'O), |
| PCU_IF_SAPI_BCCH ('04'O), |
| PCU_IF_SAPI_PDTCH ('05'O), |
| PCU_IF_SAPI_PRACH ('06'O), |
| PCU_IF_SAPI_PTCCH ('07'O), |
| PCU_IF_SAPI_AGCH_DT ('08'O) |
| } with { variant "FIELDLENGTH(8)" }; |
| |
| type record PCUIF_Flags { |
| boolean bts_active, |
| boolean sysmo_direct_dsp, |
| BIT14 spare, |
| boolean cs1, |
| boolean cs2, |
| boolean cs3, |
| boolean cs4, |
| boolean mcs1, |
| boolean mcs2, |
| boolean mcs3, |
| boolean mcs4, |
| boolean mcs5, |
| boolean mcs6, |
| boolean mcs7, |
| boolean mcs8, |
| boolean mcs9, |
| BIT3 spare2 |
| } with { variant "" }; |
| |
| type enumerated PCUIF_TextType { |
| PCU_VERSION (0), |
| PCU_OML_ALERT (1) |
| } with { variant "FIELDLENGTH(8)" }; |
| |
| type charstring PCUIF_Text length(128) with { variant "FIELDLENGTH(128)" }; |
| |
| type record PCUIF_txt_ind { |
| PCUIF_TextType txt_type, |
| PCUIF_Text text |
| } with { variant "" }; |
| |
| type octetstring OCT162 length(162) with { variant "FIELDLENGTH(162)" }; |
| |
| type record PCUIF_data { |
| PCUIF_Sapi sapi, |
| uint8_t len, |
| OCT162 data, |
| uint32_t fn, |
| uint16_t arfcn, |
| uint8_t trx_nr, |
| uint8_t ts_nr, |
| uint8_t block_nr, |
| int8_t rssi, |
| uint16_t ber10k, |
| int16_t ta_offs_qbits, |
| int16_t lqual_cb |
| } with { variant "" }; |
| |
| type record PCUIF_data_cnf_dt { |
| PCUIF_Sapi sapi, |
| OCT4 tlli, |
| uint32_t fn, |
| uint16_t arfcn, |
| uint8_t trx_nr, |
| uint8_t ts_nr, |
| uint8_t block_nr, |
| int8_t rssi, |
| uint16_t ber10k, |
| int16_t ta_offs_qbits, |
| int16_t lqual_cb |
| } with { variant "" }; |
| |
| type record PCUIF_rts_req { |
| PCUIF_Sapi sapi, |
| OCT3 spare, |
| uint32_t fn, |
| uint16_t arfcn, |
| uint8_t trx_nr, |
| uint8_t ts_nr, |
| uint8_t block_nr |
| } with { variant "" }; |
| |
| type record PCUIF_rach_ind { |
| PCUIF_Sapi sapi, |
| uint16_t ra, |
| int16_t qta, |
| uint32_t fn, |
| uint16_t arfcn, |
| uint8_t is_11bit, |
| uint8_t burst_type |
| } with { variant "" }; |
| |
| type record PCUIF_InfoTrx { |
| uint16_t arfcn, |
| BIT8 pdch_mask, |
| OCT1 spare, |
| OCT8 tsc, |
| uint32_t hLayer1 |
| } with { variant "" }; |
| |
| type record PCUIF_info_ind { |
| uint32_t version, |
| PCUIF_Flags flags, |
| record length(8) of PCUIF_InfoTrx trx, |
| uint8_t bsic, |
| |
| uint16_t mcc, |
| uint16_t mnc, |
| uint8_t mnc_3_digits, |
| uint16_t lac, |
| uint16_t rac, |
| |
| uint16_t nsei, |
| record length(7) of uint8_t nse_timer, |
| record length(11) of uint8_t cell_timer, |
| |
| uint16_t cell_id, |
| uint16_t repeat_time, |
| uint8_t repeat_count, |
| uint16_t bvci, |
| uint8_t t3142, |
| uint8_t t3169, |
| uint8_t t3191, |
| uint8_t t3193_10ms, |
| uint8_t t3195, |
| uint8_t t3101, |
| uint8_t t3103, |
| uint8_t t3105, |
| uint8_t cv_countdown, |
| uint16_t dl_tbf_ext, |
| uint16_t ul_tbf_ext, |
| uint8_t initial_cs, |
| uint8_t initial_mcs, |
| |
| record length(2) of uint16_t nsvci, |
| record length(2) of uint16_t local_pprt, |
| record length(2) of uint16_t remote_port, |
| record length(2) of uint32_t remote_ip |
| } with { variant "" } |
| |
| type record PCUIF_act_req { |
| uint8_t is_activate, |
| uint8_t trx_nr, |
| uint8_t ts_nr, |
| OCT1 spare |
| } with { variant "" }; |
| |
| type record PCUIF_time_ind { |
| uint32_t fn |
| } with { variant "" }; |
| |
| type record PCUIF_pag_req { |
| PCUIF_Sapi sapi, |
| uint8_t chan_needed, |
| OCT9 identity_lv |
| } with { variant "" }; |
| |
| type record PCUIF_susp_req { |
| OCT4 tlli, |
| OCT6 ra_id, |
| uint8_t cause |
| } with { variant "" }; |
| |
| |
| type union PCUIF_MsgUnion { |
| PCUIF_data data_req, |
| PCUIF_data data_cnf, |
| PCUIF_data_cnf_dt data_cnf_dt, |
| PCUIF_data data_ind, |
| PCUIF_susp_req susp_req, |
| PCUIF_rts_req rts_req, |
| PCUIF_rach_ind rach_ind, |
| PCUIF_txt_ind txt_ind, |
| PCUIF_info_ind info_ind, |
| PCUIF_act_req act_req, |
| PCUIF_time_ind time_ind, |
| PCUIF_pag_req pag_req |
| } with { variant "" }; |
| |
| type record PCUIF_Message { |
| PCUIF_MsgType msg_type, |
| uint8_t bts_nr, |
| OCT2 spare, |
| PCUIF_MsgUnion u |
| } with { variant (u) "CROSSTAG( |
| data_req, msg_type = PCU_IF_MSG_DATA_REQ; |
| data_cnf, msg_type = PCU_IF_MSG_DATA_CNF; |
| data_cnf_dt, msg_type = PCU_IF_MSG_DATA_CNF_DT; |
| data_ind, msg_type = PCU_IF_MSG_DATA_IND; |
| susp_req, msg_type = PCU_IF_MSG_SUSP_REQ; |
| rts_req, msg_type = PCU_IF_MSG_RTS_REQ; |
| rach_ind, msg_type = PCU_IF_MSG_RACH_IND; |
| txt_ind, msg_type = PCU_IF_MSG_TXT_IND; |
| info_ind, msg_type = PCU_IF_MSG_INFO_IND; |
| act_req, msg_type = PCU_IF_MSG_ACT_REQ; |
| time_ind, msg_type = PCU_IF_MSG_TIME_IND; |
| pag_req, msg_type = PCU_IF_MSG_PAG_REQ)" |
| variant "PADDING(1696)" /* 212 * 8 */ |
| }; |
| |
| external function enc_PCUIF_Message(in PCUIF_Message pdu) return octetstring |
| with { extension "prototype(convert) encode(RAW)" }; |
| external function dec_PCUIF_Message(in octetstring stream) return PCUIF_Message |
| with { extension "prototype(convert) decode(RAW)" }; |
| |
| |
| template PCUIF_Message tr_PCUIF_RTS_REQ(template uint8_t bts_nr := ?, |
| template uint8_t trx_nr := ?, |
| template uint8_t ts_nr := ?, |
| template PCUIF_Sapi sapi := ?, |
| template uint32_t fn := ?, |
| template uint8_t block_nr := ? |
| ) := { |
| msg_type := PCU_IF_MSG_RTS_REQ, |
| bts_nr := bts_nr, |
| spare := ?, |
| u := { |
| rts_req := { |
| sapi := sapi, |
| spare := ?, |
| fn := fn, |
| arfcn := ?, |
| trx_nr := trx_nr, |
| ts_nr := ts_nr, |
| block_nr := block_nr |
| } |
| } |
| } |
| |
| template (value) PCUIF_Message ts_PCUIF_TXT_IND(uint8_t bts_nr, PCUIF_TextType tt, charstring text) := { |
| msg_type := PCU_IF_MSG_TXT_IND, |
| bts_nr := bts_nr, |
| spare := '0000'O, |
| u := { |
| txt_ind := { |
| txt_type := tt, |
| text := text |
| } |
| } |
| } |
| |
| template (value) PCUIF_Message ts_PCUIF_ACT_REQ(uint8_t bts_nr, uint8_t trx_nr, uint8_t ts_nr) := { |
| msg_type := PCU_IF_MSG_ACT_REQ, |
| bts_nr := bts_nr, |
| spare := '0000'O, |
| u := { |
| act_req := { |
| is_activate := 1, |
| trx_nr := trx_nr, |
| ts_nr := ts_nr, |
| spare := '00'O |
| } |
| } |
| } |
| |
| template (value) PCUIF_Message ts_PCUIF_DEACT_REQ(uint8_t bts_nr, uint8_t trx_nr, uint8_t ts_nr) := { |
| msg_type := PCU_IF_MSG_ACT_REQ, |
| bts_nr := bts_nr, |
| spare := '0000'O, |
| u := { |
| act_req := { |
| is_activate := 0, |
| trx_nr := trx_nr, |
| ts_nr := ts_nr, |
| spare := '00'O |
| } |
| } |
| } |
| |
| template PCUIF_Message tr_PCUIF_DATA_IND(template uint8_t bts_nr := ?, |
| template uint8_t trx_nr := ?, |
| template uint8_t ts_nr := ?, |
| template uint8_t block_nr := ?, |
| template PCUIF_Sapi sapi := ?, |
| template OCT162 data := ?) := { |
| msg_type := PCU_IF_MSG_DATA_IND, |
| bts_nr := bts_nr, |
| spare := ?, |
| u := { |
| data_ind := { |
| sapi := sapi, |
| len := ?, |
| data := data, |
| fn := ?, |
| arfcn := ?, |
| trx_nr := trx_nr, |
| ts_nr := ts_nr, |
| block_nr := block_nr, |
| rssi := ?, |
| ber10k := ?, |
| ta_offs_qbits := ?, |
| lqual_cb := ? |
| } |
| } |
| } |
| |
| template (value) PCUIF_Message ts_PCUIF_DATA_REQ(uint8_t bts_nr, uint8_t trx_nr, |
| uint8_t ts_nr, uint8_t block_nr, |
| uint32_t fn, PCUIF_Sapi sapi, |
| octetstring data) := { |
| msg_type := PCU_IF_MSG_DATA_REQ, |
| bts_nr := bts_nr, |
| spare := '0000'O, |
| u := { |
| data_req := { |
| sapi := sapi, |
| len := lengthof(data), |
| data := data, |
| fn := fn, |
| arfcn := 0, /* unused in BTS */ |
| trx_nr := trx_nr, |
| ts_nr := ts_nr, |
| block_nr := block_nr, |
| /* measurement parameters below unused on Tx */ |
| rssi := 0, |
| ber10k := 0, |
| ta_offs_qbits := 0, |
| lqual_cb := 0 |
| } |
| } |
| } |
| |
| template PCUIF_Message tr_PCUIF_DATA_CNF(template uint8_t bts_nr := ?, |
| template uint8_t trx_nr := ?, |
| template uint8_t ts_nr := ?, |
| template PCUIF_Sapi sapi := ?, |
| template octetstring data := ?) := { |
| msg_type := PCU_IF_MSG_DATA_CNF, |
| bts_nr := bts_nr, |
| spare := ?, |
| u := { |
| data_cnf := { |
| sapi := sapi, |
| len := ?, |
| data := data, |
| fn := ?, |
| arfcn := ?, |
| trx_nr := trx_nr, |
| ts_nr := ts_nr, |
| block_nr := ?, |
| rssi := ?, |
| ber10k := ?, |
| ta_offs_qbits := ?, |
| lqual_cb := ? |
| } |
| } |
| } |
| |
| template PCUIF_Message tr_PCUIF_RACH_IND(template uint8_t bts_nr := ?, |
| template uint16_t ra := ?, |
| template uint8_t is_11bit := ?, |
| template uint8_t burst_type := ?, |
| template uint32_t fn := ?) := { |
| msg_type := PCU_IF_MSG_RACH_IND, |
| bts_nr := bts_nr, |
| spare := ?, |
| u := { |
| rach_ind := { |
| sapi := PCU_IF_SAPI_RACH, |
| ra := ra, |
| qta := ?, |
| fn := fn, |
| arfcn := ?, |
| is_11bit := is_11bit, |
| burst_type := burst_type |
| } |
| } |
| } |
| |
| template PCUIF_Message tr_PCUIF_PAG_REQ(template uint8_t bts_nr := ?, |
| template OCT9 id_lv := ?, |
| template uint8_t chan_needed := ?, |
| template PCUIF_Sapi sapi := ?) := { |
| msg_type := PCU_IF_MSG_PAG_REQ, |
| bts_nr := bts_nr, |
| spare := ?, |
| u := { |
| pag_req := { |
| sapi := ?, |
| chan_needed := chan_needed, |
| identity_lv := id_lv |
| } |
| } |
| } |
| |
| template PCUIF_Message tr_PCUIF_INFO_IND(template uint8_t bts_nr := ?, |
| template PCUIF_Flags flags := ?, |
| template uint32_t version := PCU_IF_VERSION) := { |
| msg_type := PCU_IF_MSG_INFO_IND, |
| bts_nr := bts_nr, |
| spare := ?, |
| u := { |
| info_ind := { |
| version := version, |
| flags := flags, |
| trx := ?, |
| bsic := ?, |
| mcc := ?, |
| mnc :=?, |
| mnc_3_digits := ?, |
| lac := ?, |
| rac := ?, |
| nsei := ?, |
| nse_timer := ?, |
| cell_timer := ?, |
| cell_id := ?, |
| repeat_time := ?, |
| repeat_count := ?, |
| bvci := ?, |
| t3142 := ?, |
| t3169 := ?, |
| t3191 := ?, |
| t3193_10ms := ?, |
| t3195 := ?, |
| t3101 := ?, |
| t3103 := ?, |
| t3105 := ?, |
| cv_countdown := ?, |
| dl_tbf_ext := ?, |
| ul_tbf_ext := ?, |
| initial_cs := ?, |
| initial_mcs := ?, |
| nsvci := ?, |
| local_pprt := ?, |
| remote_port := ?, |
| remote_ip := ? |
| } |
| } |
| } |
| |
| |
| } with { encode "RAW" variant "BYTEORDER(first)" }; |