2019-05-27 09:54:11 +00:00
|
|
|
/* 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
|
|
|
|
*/
|
|
|
|
|
2018-02-28 17:59:29 +00:00
|
|
|
module PCUIF_Types {
|
|
|
|
|
|
|
|
import from General_Types all;
|
|
|
|
import from Osmocom_Types all;
|
|
|
|
|
|
|
|
const charstring PCU_SOCK_DEFAULT := "/tmp/pcu_bts";
|
2018-03-13 16:06:51 +00:00
|
|
|
const uint32_t PCU_IF_VERSION := 9;
|
2018-02-28 17:59:29 +00:00
|
|
|
|
|
|
|
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),
|
2019-09-05 12:17:54 +00:00
|
|
|
PCU_IF_MSG_APP_INFO_REQ ('04'O),
|
2018-02-28 17:59:29 +00:00
|
|
|
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 "" };
|
|
|
|
|
library/PCUIF_Types.ttcn: inform RAW codec about PADDING in PCUIF_data
PADDING is one of the TITAN specific language extensions [1], which
tells the RAW codec that an encoded payload shall end at a boundary
fixed by a multiple of 'padding' unit bits counted from the
beginning of the message.
Let's use it for record 'PCUIF_data', where the fixed-size buffer
is located in between the other fields, so padding will be ignored
by the RAW coding after decoding:
$HOST: dec_PCUIF_Message(): Decoded @PCUIF_Types.PCUIF_Message: {
msg_type := PCU_IF_MSG_DATA_REQ (0),
bts_nr := 0, spare := '0000'O,
u := {
data_req := {
sapi := PCU_IF_SAPI_AGCH (2),
len := 23,
data := '2D063F100FE3673A096B0000C800300B2B2B2B2B2B2B2B',
...
}
}
}
As a result, we don't have to deal with padding manually and
can safely use 'decmatch' statement in the receive templates.
[1] usrguide/referenceguide/4-ttcn3_language_extensions.adoc
Change-Id: I5808954b5c67c3239e795e43ae77035152d359ef
2019-09-04 21:32:11 +00:00
|
|
|
/* This is a bad side of the current protocol design: fixed-size buffer is located
|
|
|
|
* in between the other fields of the message, so if the payload is smaller than
|
|
|
|
* 162 octets (1296 bits), we need to fill the remaining space with padding. */
|
|
|
|
type octetstring PCUIF_DataPad with { variant "ALIGN(left), PADDING(1296)" };
|
|
|
|
|
2018-02-28 17:59:29 +00:00
|
|
|
type record PCUIF_data {
|
|
|
|
PCUIF_Sapi sapi,
|
|
|
|
uint8_t len,
|
library/PCUIF_Types.ttcn: inform RAW codec about PADDING in PCUIF_data
PADDING is one of the TITAN specific language extensions [1], which
tells the RAW codec that an encoded payload shall end at a boundary
fixed by a multiple of 'padding' unit bits counted from the
beginning of the message.
Let's use it for record 'PCUIF_data', where the fixed-size buffer
is located in between the other fields, so padding will be ignored
by the RAW coding after decoding:
$HOST: dec_PCUIF_Message(): Decoded @PCUIF_Types.PCUIF_Message: {
msg_type := PCU_IF_MSG_DATA_REQ (0),
bts_nr := 0, spare := '0000'O,
u := {
data_req := {
sapi := PCU_IF_SAPI_AGCH (2),
len := 23,
data := '2D063F100FE3673A096B0000C800300B2B2B2B2B2B2B2B',
...
}
}
}
As a result, we don't have to deal with padding manually and
can safely use 'decmatch' statement in the receive templates.
[1] usrguide/referenceguide/4-ttcn3_language_extensions.adoc
Change-Id: I5808954b5c67c3239e795e43ae77035152d359ef
2019-09-04 21:32:11 +00:00
|
|
|
PCUIF_DataPad data,
|
2018-02-28 17:59:29 +00:00
|
|
|
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
|
library/PCUIF_Types.ttcn: inform RAW codec about PADDING in PCUIF_data
PADDING is one of the TITAN specific language extensions [1], which
tells the RAW codec that an encoded payload shall end at a boundary
fixed by a multiple of 'padding' unit bits counted from the
beginning of the message.
Let's use it for record 'PCUIF_data', where the fixed-size buffer
is located in between the other fields, so padding will be ignored
by the RAW coding after decoding:
$HOST: dec_PCUIF_Message(): Decoded @PCUIF_Types.PCUIF_Message: {
msg_type := PCU_IF_MSG_DATA_REQ (0),
bts_nr := 0, spare := '0000'O,
u := {
data_req := {
sapi := PCU_IF_SAPI_AGCH (2),
len := 23,
data := '2D063F100FE3673A096B0000C800300B2B2B2B2B2B2B2B',
...
}
}
}
As a result, we don't have to deal with padding manually and
can safely use 'decmatch' statement in the receive templates.
[1] usrguide/referenceguide/4-ttcn3_language_extensions.adoc
Change-Id: I5808954b5c67c3239e795e43ae77035152d359ef
2019-09-04 21:32:11 +00:00
|
|
|
} with { variant (len) "LENGTHTO(data)" };
|
2018-02-28 17:59:29 +00:00
|
|
|
|
|
|
|
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 "" };
|
|
|
|
|
2019-02-28 23:39:19 +00:00
|
|
|
type enumerated PCUIF_BurstType {
|
|
|
|
BURST_TYPE_NONE (0),
|
|
|
|
BURST_TYPE_0 (1),
|
|
|
|
BURST_TYPE_1 (2),
|
|
|
|
BURST_TYPE_2 (3)
|
|
|
|
} with { variant "FIELDLENGTH(8)" };
|
|
|
|
|
2018-02-28 17:59:29 +00:00
|
|
|
type record PCUIF_rach_ind {
|
|
|
|
PCUIF_Sapi sapi,
|
|
|
|
uint16_t ra,
|
|
|
|
int16_t qta,
|
|
|
|
uint32_t fn,
|
|
|
|
uint16_t arfcn,
|
|
|
|
uint8_t is_11bit,
|
2019-02-28 23:39:19 +00:00
|
|
|
PCUIF_BurstType burst_type
|
2018-02-28 17:59:29 +00:00
|
|
|
} with { variant "" };
|
|
|
|
|
|
|
|
type record PCUIF_InfoTrx {
|
|
|
|
uint16_t arfcn,
|
|
|
|
BIT8 pdch_mask,
|
|
|
|
OCT1 spare,
|
|
|
|
OCT8 tsc,
|
|
|
|
uint32_t hLayer1
|
2018-04-04 17:26:41 +00:00
|
|
|
} with { variant (pdch_mask) "BITORDER(msb)" };
|
2019-02-18 18:47:53 +00:00
|
|
|
type record length(8) of PCUIF_InfoTrx PCUIF_InfoTrxs;
|
2018-02-28 17:59:29 +00:00
|
|
|
|
|
|
|
type record PCUIF_info_ind {
|
|
|
|
uint32_t version,
|
|
|
|
PCUIF_Flags flags,
|
2019-02-18 18:47:53 +00:00
|
|
|
PCUIF_InfoTrxs trx,
|
2018-02-28 17:59:29 +00:00
|
|
|
uint8_t bsic,
|
|
|
|
|
|
|
|
uint16_t mcc,
|
|
|
|
uint16_t mnc,
|
2018-03-13 16:06:51 +00:00
|
|
|
uint8_t mnc_3_digits,
|
2018-02-28 17:59:29 +00:00
|
|
|
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,
|
2019-02-18 19:38:45 +00:00
|
|
|
record length(2) of OCT4 remote_ip
|
2018-02-28 17:59:29 +00:00
|
|
|
} 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 "" };
|
|
|
|
|
2019-09-05 12:17:54 +00:00
|
|
|
type record PCUIF_app_info_req {
|
|
|
|
uint8_t application_type,
|
|
|
|
uint8_t len,
|
|
|
|
octetstring data
|
|
|
|
} with {
|
|
|
|
variant (len) "LENGTHTO(data)"
|
|
|
|
}
|
|
|
|
|
2018-02-28 17:59:29 +00:00
|
|
|
type record PCUIF_susp_req {
|
|
|
|
OCT4 tlli,
|
|
|
|
OCT6 ra_id,
|
|
|
|
uint8_t cause
|
2019-05-26 21:01:08 +00:00
|
|
|
} with {
|
|
|
|
variant (tlli) "BYTEORDER(last)"
|
|
|
|
};
|
2018-02-28 17:59:29 +00:00
|
|
|
|
|
|
|
|
|
|
|
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,
|
2019-09-05 12:17:54 +00:00
|
|
|
PCUIF_pag_req pag_req,
|
|
|
|
PCUIF_app_info_req app_info_req
|
2018-02-28 17:59:29 +00:00
|
|
|
} 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;
|
2019-09-05 12:17:54 +00:00
|
|
|
pag_req, msg_type = PCU_IF_MSG_PAG_REQ;
|
|
|
|
app_info_req, msg_type = PCU_IF_MSG_APP_INFO_REQ)"
|
2018-03-13 16:06:51 +00:00
|
|
|
variant "PADDING(1696)" /* 212 * 8 */
|
2018-02-28 17:59:29 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
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)" };
|
|
|
|
|
|
|
|
|
2019-02-18 18:47:53 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-02-28 17:59:29 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2019-02-18 18:47:53 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-02-28 17:59:29 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2019-02-18 18:47:53 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-02-28 17:59:29 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2019-02-18 18:47:53 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-02-28 17:59:29 +00:00
|
|
|
|
2019-02-18 18:47:53 +00:00
|
|
|
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,
|
library/PCUIF_Types.ttcn: add explicit ALIGN(left) attribute
In the documentation of Eclipse Titan compiler before [1] it was clearly
stated that if the length of the actual value can be determined and it
is less than the specified FIELDLENGTH, the remaining bits / bytes will
be padded with zeros. The attribute ALIGN specifies the sequence of the
actual value and the padding within the encoded field:
Attribute syntax: ALIGN(<parameter>);
Parameters allowed: left, right;
Default value: 'right'.
Since [1], the default value is:
'left' for octetstrings, 'right' for all other types.
[1] https://github.com/eclipse/titan.core/commit/3cbafbd31d5f79049afbf69f8dcba0b94cbf20b2
In the most 'BTS_Tests.TC_pcu_*', including both 'TC_pcu_data_req_agch'
and 'TC_pcu_data_req_imm_ass_pch' we do pass the payload of length 23
bytes to ts_PCUIF_DATA_REQ(), what is less than the actual field length
(162 bytes). Thus when using titan.core <= 6.5.3, the payload appears
at the end of the buffer on the BTS side, so it reads 23 zero-bytes
from the beginning and does transmit them.
Let's explicitly add ALIGN(left) to field 'data' of 'PCUIF_data', so
the alignment would be done correctly, as expected by the BTS. Let's
also drop 'OCT162' type, as it doesn't make sense outside the
message definition.
This change makes the following test cases pass:
- 'TC_pcu_data_req_agch' and
- 'TC_pcu_data_req_imm_ass_pch'.
Change-Id: Ic4f358e5053e30e0dd7be8b6ac9c1d86cf9d8065
2019-05-16 18:08:08 +00:00
|
|
|
template (value) octetstring data,
|
2019-02-18 18:47:53 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-02-28 17:59:29 +00:00
|
|
|
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 := ?,
|
library/PCUIF_Types.ttcn: add explicit ALIGN(left) attribute
In the documentation of Eclipse Titan compiler before [1] it was clearly
stated that if the length of the actual value can be determined and it
is less than the specified FIELDLENGTH, the remaining bits / bytes will
be padded with zeros. The attribute ALIGN specifies the sequence of the
actual value and the padding within the encoded field:
Attribute syntax: ALIGN(<parameter>);
Parameters allowed: left, right;
Default value: 'right'.
Since [1], the default value is:
'left' for octetstrings, 'right' for all other types.
[1] https://github.com/eclipse/titan.core/commit/3cbafbd31d5f79049afbf69f8dcba0b94cbf20b2
In the most 'BTS_Tests.TC_pcu_*', including both 'TC_pcu_data_req_agch'
and 'TC_pcu_data_req_imm_ass_pch' we do pass the payload of length 23
bytes to ts_PCUIF_DATA_REQ(), what is less than the actual field length
(162 bytes). Thus when using titan.core <= 6.5.3, the payload appears
at the end of the buffer on the BTS side, so it reads 23 zero-bytes
from the beginning and does transmit them.
Let's explicitly add ALIGN(left) to field 'data' of 'PCUIF_data', so
the alignment would be done correctly, as expected by the BTS. Let's
also drop 'OCT162' type, as it doesn't make sense outside the
message definition.
This change makes the following test cases pass:
- 'TC_pcu_data_req_agch' and
- 'TC_pcu_data_req_imm_ass_pch'.
Change-Id: Ic4f358e5053e30e0dd7be8b6ac9c1d86cf9d8065
2019-05-16 18:08:08 +00:00
|
|
|
template octetstring data := ?) := {
|
2018-02-28 17:59:29 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2019-02-18 18:47:53 +00:00
|
|
|
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,
|
2019-03-01 23:02:07 +00:00
|
|
|
arfcn := ?, /* unused in BTS */
|
2019-02-18 18:47:53 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-02-28 17:59:29 +00:00
|
|
|
|
2019-02-18 18:47:53 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-02-28 17:59:29 +00:00
|
|
|
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 := ?
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-02-18 18:47:53 +00:00
|
|
|
template (value) PCUIF_Message ts_PCUIF_RACH_IND(template (value) uint8_t bts_nr,
|
|
|
|
template (value) uint16_t ra,
|
|
|
|
template (value) uint8_t is_11bit,
|
2019-02-28 23:39:19 +00:00
|
|
|
template (value) PCUIF_BurstType burst_type,
|
2019-02-18 18:47:53 +00:00
|
|
|
template (value) uint32_t fn,
|
|
|
|
template (value) uint16_t arfcn,
|
|
|
|
template (value) int16_t qta := 0
|
|
|
|
) := {
|
|
|
|
msg_type := PCU_IF_MSG_RACH_IND,
|
|
|
|
bts_nr := bts_nr,
|
|
|
|
spare := '0000'O,
|
|
|
|
u := {
|
|
|
|
rach_ind := {
|
|
|
|
sapi := PCU_IF_SAPI_RACH,
|
|
|
|
ra := ra,
|
|
|
|
qta := qta,
|
|
|
|
fn := fn,
|
|
|
|
arfcn := arfcn,
|
|
|
|
is_11bit := is_11bit,
|
|
|
|
burst_type := burst_type
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-02-28 17:59:29 +00:00
|
|
|
template PCUIF_Message tr_PCUIF_RACH_IND(template uint8_t bts_nr := ?,
|
|
|
|
template uint16_t ra := ?,
|
|
|
|
template uint8_t is_11bit := ?,
|
2019-02-28 23:39:19 +00:00
|
|
|
template PCUIF_BurstType burst_type := ?,
|
2018-02-28 17:59:29 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-02-18 18:47:53 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-02-28 17:59:29 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-02-18 18:47:53 +00:00
|
|
|
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) uint16_t nsei,
|
|
|
|
template (value) uint16_t nsvci,
|
|
|
|
template (value) uint16_t bvci,
|
|
|
|
template (value) uint16_t local_port,
|
|
|
|
template (value) uint16_t remote_port,
|
2019-02-18 19:38:45 +00:00
|
|
|
template (value) OCT4 remote_ip,
|
2019-02-18 18:47:53 +00:00
|
|
|
template (value) PCUIF_Flags flags := c_PCUIF_Flags_default,
|
|
|
|
template (value) uint16_t mcc := 262,
|
|
|
|
template (value) uint16_t mnc := 42,
|
2019-03-21 18:50:21 +00:00
|
|
|
template (value) uint16_t lac := 13135,
|
2019-02-18 18:47:53 +00:00
|
|
|
template (value) uint8_t rac := 0,
|
2019-03-21 18:50:21 +00:00
|
|
|
template (value) uint16_t cell_id := 20960,
|
2019-02-18 18:47:53 +00:00
|
|
|
template (value) uint8_t bsic := 7,
|
|
|
|
template (value) PCUIF_InfoTrxs trx := ts_PCUIF_InfoTrxs_def,
|
|
|
|
template (value) uint32_t version := PCU_IF_VERSION) := {
|
|
|
|
msg_type := PCU_IF_MSG_INFO_IND,
|
|
|
|
bts_nr := bts_nr,
|
|
|
|
spare := '0000'O,
|
|
|
|
u := {
|
|
|
|
info_ind := {
|
|
|
|
version := version,
|
|
|
|
flags := flags,
|
|
|
|
trx := trx,
|
|
|
|
bsic := bsic,
|
|
|
|
mcc := mcc,
|
|
|
|
mnc := mnc,
|
|
|
|
mnc_3_digits := 0,
|
|
|
|
lac := lac,
|
|
|
|
rac := rac,
|
|
|
|
nsei := nsei,
|
|
|
|
nse_timer := { 3, 3, 3, 3, 30, 3, 10 },
|
|
|
|
cell_timer := { 3, 3, 3, 3, 3, 10, 3, 10, 3, 10, 3 },
|
|
|
|
cell_id := cell_id,
|
|
|
|
repeat_time := 5 * 50,
|
|
|
|
repeat_count := 3,
|
|
|
|
bvci := bvci,
|
|
|
|
t3142 := 20,
|
|
|
|
t3169 := 5,
|
|
|
|
t3191 := 5,
|
|
|
|
t3193_10ms := 160,
|
|
|
|
t3195 := 5,
|
|
|
|
t3101 := 10,
|
|
|
|
t3103 := 4,
|
|
|
|
t3105 := 8,
|
|
|
|
cv_countdown := 15,
|
|
|
|
dl_tbf_ext := 250 * 10, /* ms */
|
|
|
|
ul_tbf_ext := 250 * 10, /* ms */
|
|
|
|
initial_cs := 2,
|
|
|
|
initial_mcs := 6,
|
|
|
|
nsvci := { nsvci, 0 },
|
|
|
|
local_pprt := { local_port, 0 },
|
|
|
|
remote_port := { remote_port, 0 },
|
2019-02-18 19:38:45 +00:00
|
|
|
remote_ip := { remote_ip , '00000000'O }
|
2019-02-18 18:47:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-03-13 16:02:14 +00:00
|
|
|
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 :=?,
|
2018-03-13 16:06:51 +00:00
|
|
|
mnc_3_digits := ?,
|
2018-03-13 16:02:14 +00:00
|
|
|
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 := ?
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-03-01 23:02:28 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-02-28 17:59:29 +00:00
|
|
|
|
2019-03-21 20:34:10 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-09-05 12:17:54 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-03-21 20:34:10 +00:00
|
|
|
|
2018-02-28 17:59:29 +00:00
|
|
|
} with { encode "RAW" variant "BYTEORDER(first)" };
|