829 lines
19 KiB
Plaintext
829 lines
19 KiB
Plaintext
/* Osmocom PCU Interface Types, as per osmo-pcu/include/osmocom/pcu/pcuif_proto.h
|
|
* (C) 2018-2019 Harald Welte <laforge@gnumonks.org>
|
|
* contributions by Vadim Yanitskiy <axilirator@gmail.com>
|
|
* All rights reserved.
|
|
*
|
|
* Released under the terms of GNU General Public License, Version 2 or
|
|
* (at your option) any later version.
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
module PCUIF_Types {
|
|
|
|
import from General_Types all;
|
|
import from Osmocom_Types all;
|
|
|
|
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_APP_INFO_REQ ('04'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(null_terminated)" };
|
|
|
|
type record PCUIF_txt_ind {
|
|
PCUIF_TextType txt_type,
|
|
PCUIF_Text text
|
|
} with { variant "" };
|
|
|
|
type record PCUIF_data {
|
|
PCUIF_Sapi sapi,
|
|
uint8_t len,
|
|
octetstring data length(162),
|
|
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 (data) "FIELDLENGTH(162), ALIGN(left)" };
|
|
|
|
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 enumerated PCUIF_BurstType {
|
|
BURST_TYPE_NONE (0),
|
|
BURST_TYPE_0 (1),
|
|
BURST_TYPE_1 (2),
|
|
BURST_TYPE_2 (3)
|
|
} with { variant "FIELDLENGTH(8)" };
|
|
|
|
type record PCUIF_rach_ind {
|
|
PCUIF_Sapi sapi,
|
|
uint16_t ra,
|
|
int16_t qta,
|
|
uint32_t fn,
|
|
uint16_t arfcn,
|
|
uint8_t is_11bit,
|
|
PCUIF_BurstType burst_type,
|
|
uint8_t trx_nr,
|
|
uint8_t ts_nr
|
|
} with { variant "" };
|
|
|
|
type record PCUIF_InfoTrx {
|
|
uint16_t arfcn,
|
|
BIT8 pdch_mask,
|
|
OCT1 spare,
|
|
OCT8 tsc,
|
|
uint32_t hLayer1
|
|
} with { variant (pdch_mask) "BITORDER(msb)" };
|
|
type record length(8) of PCUIF_InfoTrx PCUIF_InfoTrxs;
|
|
|
|
type record PCUIF_info_ind {
|
|
uint32_t version,
|
|
PCUIF_Flags flags,
|
|
PCUIF_InfoTrxs 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 OCT4 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_app_info_req {
|
|
uint8_t application_type,
|
|
uint8_t len,
|
|
octetstring data
|
|
} with {
|
|
variant (len) "LENGTHTO(data)"
|
|
}
|
|
|
|
type record PCUIF_susp_req {
|
|
OCT4 tlli,
|
|
OCT6 ra_id,
|
|
uint8_t cause
|
|
} with {
|
|
variant (tlli) "BYTEORDER(last)"
|
|
};
|
|
|
|
|
|
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,
|
|
PCUIF_app_info_req app_info_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;
|
|
app_info_req, msg_type = PCU_IF_MSG_APP_INFO_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)" };
|
|
|
|
|
|
/* Generic template for matching messages by type and/or the BTS number */
|
|
template PCUIF_Message tr_PCUIF_MSG(template PCUIF_MsgType msg_type := ?,
|
|
template uint8_t bts_nr := ?) := {
|
|
msg_type := msg_type,
|
|
bts_nr := bts_nr,
|
|
spare := ?,
|
|
u := ?
|
|
}
|
|
|
|
template (value) PCUIF_Message ts_PCUIF_RTS_REQ(template (value) uint8_t bts_nr,
|
|
template (value) uint8_t trx_nr,
|
|
template (value) uint8_t ts_nr,
|
|
template (value) PCUIF_Sapi sapi,
|
|
template (value) uint32_t fn,
|
|
template (value) uint16_t arfcn,
|
|
template (value) uint8_t block_nr
|
|
) := {
|
|
msg_type := PCU_IF_MSG_RTS_REQ,
|
|
bts_nr := bts_nr,
|
|
spare := '0000'O,
|
|
u := {
|
|
rts_req := {
|
|
sapi := sapi,
|
|
spare := '000000'O,
|
|
fn := fn,
|
|
arfcn := arfcn,
|
|
trx_nr := trx_nr,
|
|
ts_nr := ts_nr,
|
|
block_nr := block_nr
|
|
}
|
|
}
|
|
}
|
|
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 PCUIF_Message tr_PCUIF_TXT_IND(template uint8_t bts_nr, template PCUIF_TextType tt,
|
|
template 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 PCUIF_Message tr_PCUIF_ACT_REQ(template uint8_t bts_nr, template uint8_t trx_nr,
|
|
template 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_DEACT_REQ(template uint8_t bts_nr, template uint8_t trx_nr,
|
|
template 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 (value) PCUIF_Message ts_PCUIF_DATA_IND(template (value) uint8_t bts_nr,
|
|
template (value) uint8_t trx_nr,
|
|
template (value) uint8_t ts_nr,
|
|
template (value) uint8_t block_nr,
|
|
template (value) PCUIF_Sapi sapi,
|
|
template (value) octetstring data,
|
|
template (value) uint32_t fn,
|
|
template (value) uint16_t arfcn,
|
|
template (value) int8_t rssi := -80,
|
|
template (value) uint16_t ber10k := 0,
|
|
template (value) int16_t ta_offs_qbits := 0,
|
|
template (value) uint16_t lqual_cb := 10) := {
|
|
msg_type := PCU_IF_MSG_DATA_IND,
|
|
bts_nr := bts_nr,
|
|
spare := '0000'O,
|
|
u := {
|
|
data_ind := {
|
|
sapi := sapi,
|
|
len := lengthof(valueof(data)),
|
|
data := data,
|
|
fn := fn,
|
|
arfcn := arfcn,
|
|
trx_nr := trx_nr,
|
|
ts_nr := ts_nr,
|
|
block_nr := block_nr,
|
|
rssi := rssi,
|
|
ber10k := ber10k,
|
|
ta_offs_qbits := ta_offs_qbits,
|
|
lqual_cb := lqual_cb
|
|
}
|
|
}
|
|
}
|
|
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 octetstring 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_REQ(template uint8_t bts_nr,
|
|
template uint8_t trx_nr,
|
|
template uint8_t ts_nr,
|
|
template uint8_t block_nr := ?,
|
|
template uint32_t fn := ?,
|
|
template PCUIF_Sapi sapi := ?,
|
|
template octetstring data := ?) := {
|
|
msg_type := PCU_IF_MSG_DATA_REQ,
|
|
bts_nr := bts_nr,
|
|
spare := '0000'O,
|
|
u := {
|
|
data_req := {
|
|
sapi := sapi,
|
|
len := ?,
|
|
data := data,
|
|
fn := fn,
|
|
arfcn := ?, /* 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 (value) PCUIF_Message ts_PCUIF_DATA_CNF(template (value) uint8_t bts_nr,
|
|
template (value) uint8_t trx_nr,
|
|
template (value) uint8_t ts_nr,
|
|
template (value) uint8_t block_nr,
|
|
template (value) uint32_t fn,
|
|
template (value) uint16_t arfcn,
|
|
template (value) PCUIF_Sapi sapi,
|
|
template (value) octetstring data) := {
|
|
msg_type := PCU_IF_MSG_DATA_CNF,
|
|
bts_nr := bts_nr,
|
|
spare := '0000'O,
|
|
u := {
|
|
data_cnf := {
|
|
sapi := sapi,
|
|
len := 0, /* overwritten */
|
|
data := data,
|
|
fn := fn,
|
|
arfcn := arfcn,
|
|
trx_nr := trx_nr,
|
|
ts_nr := ts_nr,
|
|
block_nr := block_nr,
|
|
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 (value) PCUIF_Message ts_PCUIF_RACH_IND(template (value) uint8_t bts_nr,
|
|
template (value) uint8_t trx_nr,
|
|
template (value) uint8_t ts_nr,
|
|
template (value) uint16_t ra,
|
|
template (value) uint8_t is_11bit,
|
|
template (value) PCUIF_BurstType burst_type,
|
|
template (value) uint32_t fn,
|
|
template (value) uint16_t arfcn,
|
|
template (value) int16_t qta := 0,
|
|
template (value) PCUIF_Sapi sapi := PCU_IF_SAPI_RACH
|
|
) := {
|
|
msg_type := PCU_IF_MSG_RACH_IND,
|
|
bts_nr := bts_nr,
|
|
spare := '0000'O,
|
|
u := {
|
|
rach_ind := {
|
|
sapi := sapi,
|
|
ra := ra,
|
|
qta := qta,
|
|
fn := fn,
|
|
arfcn := arfcn,
|
|
is_11bit := is_11bit,
|
|
burst_type := burst_type,
|
|
trx_nr := trx_nr,
|
|
ts_nr := ts_nr
|
|
}
|
|
}
|
|
}
|
|
template PCUIF_Message tr_PCUIF_RACH_IND(template uint8_t bts_nr := ?,
|
|
template uint8_t trx_nr := ?,
|
|
template uint8_t ts_nr := ?,
|
|
template uint16_t ra := ?,
|
|
template uint8_t is_11bit := ?,
|
|
template PCUIF_BurstType burst_type := ?,
|
|
template uint32_t fn := ?,
|
|
template PCUIF_Sapi sapi := PCU_IF_SAPI_RACH) := {
|
|
msg_type := PCU_IF_MSG_RACH_IND,
|
|
bts_nr := bts_nr,
|
|
spare := ?,
|
|
u := {
|
|
rach_ind := {
|
|
sapi := sapi,
|
|
ra := ra,
|
|
qta := ?,
|
|
fn := fn,
|
|
arfcn := ?,
|
|
is_11bit := is_11bit,
|
|
burst_type := burst_type,
|
|
trx_nr := trx_nr,
|
|
ts_nr := ts_nr
|
|
}
|
|
}
|
|
}
|
|
|
|
template (value) PCUIF_Message ts_PCUIF_PAG_REQ(template (value) uint8_t bts_nr,
|
|
template (value) OCT9 id_lv,
|
|
template (value) uint8_t chan_needed,
|
|
template (value) PCUIF_Sapi sapi) := {
|
|
msg_type := PCU_IF_MSG_PAG_REQ,
|
|
bts_nr := bts_nr,
|
|
spare := '0000'O,
|
|
u := {
|
|
pag_req := {
|
|
sapi := sapi,
|
|
chan_needed := chan_needed,
|
|
identity_lv := id_lv
|
|
}
|
|
}
|
|
}
|
|
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
|
|
}
|
|
}
|
|
}
|
|
|
|
const PCUIF_Flags c_PCUIF_Flags_default := {
|
|
bts_active := true,
|
|
sysmo_direct_dsp := false,
|
|
spare := '00000000000000'B,
|
|
cs1 := true,
|
|
cs2 := true,
|
|
cs3 := true,
|
|
cs4 := true,
|
|
mcs1 := true,
|
|
mcs2 := true,
|
|
mcs3 := true,
|
|
mcs4 := true,
|
|
mcs5 := true,
|
|
mcs6 := true,
|
|
mcs7 := true,
|
|
mcs8 := true,
|
|
mcs9 := true,
|
|
spare2 := '000'B
|
|
};
|
|
|
|
template (value) PCUIF_InfoTrx ts_PCUIF_InfoTrx(template (value) uint16_t arfcn := 871,
|
|
template (value) BIT8 pdch_mask := '00000001'B,
|
|
OCT1 tsc := '07'O) := {
|
|
arfcn := arfcn,
|
|
pdch_mask := pdch_mask,
|
|
spare := '00'O,
|
|
tsc := tsc & tsc & tsc & tsc & tsc & tsc & tsc & tsc,
|
|
hLayer1 := 0
|
|
}
|
|
|
|
template (value) PCUIF_InfoTrx ts_PCUIF_InfoTrxNULL := ts_PCUIF_InfoTrx(0, '00000000'B, '00'O);
|
|
|
|
template (value) PCUIF_InfoTrxs ts_PCUIF_InfoTrxs_def := {
|
|
ts_PCUIF_InfoTrx, ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL,
|
|
ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL };
|
|
|
|
template (value) PCUIF_Message ts_PCUIF_INFO_IND(template (value) uint8_t bts_nr,
|
|
template (value) PCUIF_info_ind info_ind) := {
|
|
msg_type := PCU_IF_MSG_INFO_IND,
|
|
bts_nr := bts_nr,
|
|
spare := '0000'O,
|
|
u := {
|
|
info_ind := info_ind
|
|
}
|
|
}
|
|
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 := ?
|
|
}
|
|
}
|
|
}
|
|
|
|
template (value) PCUIF_Message ts_PCUIF_TIME_IND(template (value) uint8_t bts_nr,
|
|
template (value) uint32_t fn) := {
|
|
msg_type := PCU_IF_MSG_TIME_IND,
|
|
bts_nr := bts_nr,
|
|
spare := '0000'O,
|
|
u := {
|
|
time_ind := {
|
|
fn := fn
|
|
}
|
|
}
|
|
}
|
|
template PCUIF_Message tr_PCUIF_TIME_IND(template uint8_t bts_nr,
|
|
template uint32_t fn) := {
|
|
msg_type := PCU_IF_MSG_TIME_IND,
|
|
bts_nr := bts_nr,
|
|
spare := ?,
|
|
u := {
|
|
time_ind := {
|
|
fn := fn
|
|
}
|
|
}
|
|
}
|
|
|
|
template (value) PCUIF_Message ts_PCUIF_SUSP_REQ(template (value) uint8_t bts_nr,
|
|
template (value) OCT4 tlli,
|
|
template (value) OCT6 ra_id,
|
|
template (value) uint8_t cause) := {
|
|
msg_type := PCU_IF_MSG_SUSP_REQ,
|
|
bts_nr := bts_nr,
|
|
spare := '0000'O,
|
|
u := {
|
|
susp_req := {
|
|
tlli := tlli,
|
|
ra_id := ra_id,
|
|
cause := cause
|
|
}
|
|
}
|
|
}
|
|
template PCUIF_Message tr_PCUIF_SUSP_REQ(template uint8_t bts_nr,
|
|
template OCT4 tlli,
|
|
template OCT6 ra_id,
|
|
template uint8_t cause) := {
|
|
msg_type := PCU_IF_MSG_SUSP_REQ,
|
|
bts_nr := bts_nr,
|
|
spare := '0000'O,
|
|
u := {
|
|
susp_req := {
|
|
tlli := tlli,
|
|
ra_id := ra_id,
|
|
cause := cause
|
|
}
|
|
}
|
|
}
|
|
|
|
template (value) PCUIF_Message ts_PCUIF_APP_INFO_REQ(template (value) uint8_t bts_nr,
|
|
template (value) uint8_t app_type,
|
|
template (value) octetstring app_data) := {
|
|
msg_type := PCU_IF_MSG_APP_INFO_REQ,
|
|
bts_nr := bts_nr,
|
|
spare := '0000'O,
|
|
u := {
|
|
app_info_req := {
|
|
application_type := app_type,
|
|
len := 0, /* overwritten */
|
|
data := app_data
|
|
}
|
|
}
|
|
}
|
|
template (present) PCUIF_Message tr_PCUIF_APP_INFO_REQ(template (present) uint8_t bts_nr,
|
|
template (present) uint8_t app_type,
|
|
template (present) octetstring app_data) := {
|
|
msg_type := PCU_IF_MSG_APP_INFO_REQ,
|
|
bts_nr := bts_nr,
|
|
spare := '0000'O,
|
|
u := {
|
|
app_info_req := {
|
|
application_type := app_type,
|
|
len := ?,
|
|
data := app_data
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
} with { encode "RAW" variant "BYTEORDER(first)" };
|