<p>Harald Welte has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/12943">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">PCUIF: Prepare for simulating BTS side of PCU Interface<br><br>Our TTCN-3 PCUIF code so far was only used to simulate the PCU side<br>of the interface: connecting to the socket as a client. However,<br>it's also useful to emulate the BTS side of the interface: Listening<br>for a connection as a server.<br><br>Also, the send/receive templates are prepared for the inverse role.<br><br>Change-Id: I779ff2903cab8c13ffb8fe10a4cacd996bafe69a<br>---<br>M library/PCUIF_CodecPort.ttcn<br>M library/PCUIF_Types.ttcn<br>2 files changed, 316 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/43/12943/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/library/PCUIF_CodecPort.ttcn b/library/PCUIF_CodecPort.ttcn</span><br><span>index 389c5ca..676a91a 100644</span><br><span>--- a/library/PCUIF_CodecPort.ttcn</span><br><span>+++ b/library/PCUIF_CodecPort.ttcn</span><br><span>@@ -83,6 +83,35 @@</span><br><span> return -23;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+function f_pcuif_listen(PCUIF_CODEC_PT pt, charstring sock) return integer {</span><br><span style="color: hsl(120, 100%, 40%);">+ var UD_listen_result res;</span><br><span style="color: hsl(120, 100%, 40%);">+ var UD_connected udc;</span><br><span style="color: hsl(120, 100%, 40%);">+ timer T := 5.0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ pt.send(UD_listen:{sock});</span><br><span style="color: hsl(120, 100%, 40%);">+ T.start;</span><br><span style="color: hsl(120, 100%, 40%);">+ alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] pt.receive(UD_listen_result:?) -> value res {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (ispresent(res.result) and ispresent (res.result.result_code) and</span><br><span style="color: hsl(120, 100%, 40%);">+ res.result.result_code == ERROR) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (ispresent(res.result.err)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ setverdict(fail, "Error listening on PCU socket: ", res.result.err);</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+ setverdict(fail, "Error listening on PCU socket");</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+ return res.id;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ [] T.timeout {</span><br><span style="color: hsl(120, 100%, 40%);">+ setverdict(fail, "Timeout waiting for PCU socket connection");</span><br><span style="color: hsl(120, 100%, 40%);">+ mtc.stop;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ return -23;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> function f_PCUIF_tx_imm_ass_pch(PCUIF_CODEC_PT pt, integer conn_id, octetstring imm_ass, hexstring imsi,</span><br><span> uint8_t bts_nr := 0) return uint32_t {</span><br><span> var PCUIF_send_data sd;</span><br><span>diff --git a/library/PCUIF_Types.ttcn b/library/PCUIF_Types.ttcn</span><br><span>index 7bfaf9b..89a4c33 100644</span><br><span>--- a/library/PCUIF_Types.ttcn</span><br><span>+++ b/library/PCUIF_Types.ttcn</span><br><span>@@ -125,11 +125,12 @@</span><br><span> OCT8 tsc,</span><br><span> uint32_t hLayer1</span><br><span> } with { variant (pdch_mask) "BITORDER(msb)" };</span><br><span style="color: hsl(120, 100%, 40%);">+type record length(8) of PCUIF_InfoTrx PCUIF_InfoTrxs;</span><br><span> </span><br><span> type record PCUIF_info_ind {</span><br><span> uint32_t version,</span><br><span> PCUIF_Flags flags,</span><br><span style="color: hsl(0, 100%, 40%);">- record length(8) of PCUIF_InfoTrx trx,</span><br><span style="color: hsl(120, 100%, 40%);">+ PCUIF_InfoTrxs trx,</span><br><span> uint8_t bsic,</span><br><span> </span><br><span> uint16_t mcc,</span><br><span>@@ -232,6 +233,29 @@</span><br><span> with { extension "prototype(convert) decode(RAW)" };</span><br><span> </span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PCUIF_Message ts_PCUIF_RTS_REQ(template (value) uint8_t bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t ts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) PCUIF_Sapi sapi,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint32_t fn,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint16_t arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t block_nr</span><br><span style="color: hsl(120, 100%, 40%);">+ ) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := PCU_IF_MSG_RTS_REQ,</span><br><span style="color: hsl(120, 100%, 40%);">+ bts_nr := bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '0000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+ u := {</span><br><span style="color: hsl(120, 100%, 40%);">+ rts_req := {</span><br><span style="color: hsl(120, 100%, 40%);">+ sapi := sapi,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '000000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+ fn := fn,</span><br><span style="color: hsl(120, 100%, 40%);">+ arfcn := arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+ trx_nr := trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ ts_nr := ts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ block_nr := block_nr</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> template PCUIF_Message tr_PCUIF_RTS_REQ(template uint8_t bts_nr := ?,</span><br><span> template uint8_t trx_nr := ?,</span><br><span> template uint8_t ts_nr := ?,</span><br><span>@@ -266,6 +290,20 @@</span><br><span> }</span><br><span> }</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+template PCUIF_Message tr_PCUIF_TXT_IND(template uint8_t bts_nr, template PCUIF_TextType tt,</span><br><span style="color: hsl(120, 100%, 40%);">+ template charstring text := ?) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := PCU_IF_MSG_TXT_IND,</span><br><span style="color: hsl(120, 100%, 40%);">+ bts_nr := bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '0000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+ u := {</span><br><span style="color: hsl(120, 100%, 40%);">+ txt_ind := {</span><br><span style="color: hsl(120, 100%, 40%);">+ txt_type := tt,</span><br><span style="color: hsl(120, 100%, 40%);">+ text := text</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> template (value) PCUIF_Message ts_PCUIF_ACT_REQ(uint8_t bts_nr, uint8_t trx_nr, uint8_t ts_nr) := {</span><br><span> msg_type := PCU_IF_MSG_ACT_REQ,</span><br><span>@@ -280,6 +318,20 @@</span><br><span> }</span><br><span> }</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+template PCUIF_Message tr_PCUIF_ACT_REQ(template uint8_t bts_nr, template uint8_t trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template uint8_t ts_nr) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := PCU_IF_MSG_ACT_REQ,</span><br><span style="color: hsl(120, 100%, 40%);">+ bts_nr := bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '0000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+ u := {</span><br><span style="color: hsl(120, 100%, 40%);">+ act_req := {</span><br><span style="color: hsl(120, 100%, 40%);">+ is_activate := 1,</span><br><span style="color: hsl(120, 100%, 40%);">+ trx_nr := trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ ts_nr := ts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '00'O</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span> template (value) PCUIF_Message ts_PCUIF_DEACT_REQ(uint8_t bts_nr, uint8_t trx_nr, uint8_t ts_nr) := {</span><br><span> msg_type := PCU_IF_MSG_ACT_REQ,</span><br><span>@@ -294,7 +346,53 @@</span><br><span> }</span><br><span> }</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+template PCUIF_Message tr_PCUIF_DEACT_REQ(template uint8_t bts_nr, template uint8_t trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template uint8_t ts_nr) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := PCU_IF_MSG_ACT_REQ,</span><br><span style="color: hsl(120, 100%, 40%);">+ bts_nr := bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '0000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+ u := {</span><br><span style="color: hsl(120, 100%, 40%);">+ act_req := {</span><br><span style="color: hsl(120, 100%, 40%);">+ is_activate := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ trx_nr := trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ ts_nr := ts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '00'O</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PCUIF_Message ts_PCUIF_DATA_IND(template (value) uint8_t bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t ts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t block_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) PCUIF_Sapi sapi,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) OCT162 data,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint32_t fn,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint16_t arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) int8_t rssi := -80,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint16_t ber10k := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) int16_t ta_offs_qbits := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint16_t lqual_cb := 10) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := PCU_IF_MSG_DATA_IND,</span><br><span style="color: hsl(120, 100%, 40%);">+ bts_nr := bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '0000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+ u := {</span><br><span style="color: hsl(120, 100%, 40%);">+ data_ind := {</span><br><span style="color: hsl(120, 100%, 40%);">+ sapi := sapi,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := lengthof(valueof(data)),</span><br><span style="color: hsl(120, 100%, 40%);">+ data := data,</span><br><span style="color: hsl(120, 100%, 40%);">+ fn := fn,</span><br><span style="color: hsl(120, 100%, 40%);">+ arfcn := arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+ trx_nr := trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ ts_nr := ts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ block_nr := block_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ rssi := rssi,</span><br><span style="color: hsl(120, 100%, 40%);">+ ber10k := ber10k,</span><br><span style="color: hsl(120, 100%, 40%);">+ ta_offs_qbits := ta_offs_qbits,</span><br><span style="color: hsl(120, 100%, 40%);">+ lqual_cb := lqual_cb</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> template PCUIF_Message tr_PCUIF_DATA_IND(template uint8_t bts_nr := ?,</span><br><span> template uint8_t trx_nr := ?,</span><br><span> template uint8_t ts_nr := ?,</span><br><span>@@ -347,7 +445,63 @@</span><br><span> }</span><br><span> }</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+template PCUIF_Message tr_PCUIF_DATA_REQ(template uint8_t bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template uint8_t trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template uint8_t ts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template uint8_t block_nr := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template uint32_t fn := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template PCUIF_Sapi sapi := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ template octetstring data := ?) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := PCU_IF_MSG_DATA_REQ,</span><br><span style="color: hsl(120, 100%, 40%);">+ bts_nr := bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '0000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+ u := {</span><br><span style="color: hsl(120, 100%, 40%);">+ data_req := {</span><br><span style="color: hsl(120, 100%, 40%);">+ sapi := sapi,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+ data := data,</span><br><span style="color: hsl(120, 100%, 40%);">+ fn := fn,</span><br><span style="color: hsl(120, 100%, 40%);">+ arfcn := 0, /* unused in BTS */</span><br><span style="color: hsl(120, 100%, 40%);">+ trx_nr := trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ ts_nr := ts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ block_nr := block_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ /* measurement parameters below unused on Tx */</span><br><span style="color: hsl(120, 100%, 40%);">+ rssi := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ ber10k := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ ta_offs_qbits := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ lqual_cb := 0</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PCUIF_Message ts_PCUIF_DATA_CNF(template (value) uint8_t bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t ts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t block_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint32_t fn,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint16_t arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) PCUIF_Sapi sapi,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) octetstring data) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := PCU_IF_MSG_DATA_CNF,</span><br><span style="color: hsl(120, 100%, 40%);">+ bts_nr := bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '0000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+ u := {</span><br><span style="color: hsl(120, 100%, 40%);">+ data_cnf := {</span><br><span style="color: hsl(120, 100%, 40%);">+ sapi := sapi,</span><br><span style="color: hsl(120, 100%, 40%);">+ len := 0, /* overwritten */</span><br><span style="color: hsl(120, 100%, 40%);">+ data := data,</span><br><span style="color: hsl(120, 100%, 40%);">+ fn := fn,</span><br><span style="color: hsl(120, 100%, 40%);">+ arfcn := arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+ trx_nr := trx_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ ts_nr := ts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ block_nr := block_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ rssi := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ ber10k := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ ta_offs_qbits := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ lqual_cb := 0</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> template PCUIF_Message tr_PCUIF_DATA_CNF(template uint8_t bts_nr := ?,</span><br><span> template uint8_t trx_nr := ?,</span><br><span> template uint8_t ts_nr := ?,</span><br><span>@@ -374,6 +528,29 @@</span><br><span> }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PCUIF_Message ts_PCUIF_RACH_IND(template (value) uint8_t bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint16_t ra,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t is_11bit,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t burst_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint32_t fn,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint16_t arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) int16_t qta := 0</span><br><span style="color: hsl(120, 100%, 40%);">+) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := PCU_IF_MSG_RACH_IND,</span><br><span style="color: hsl(120, 100%, 40%);">+ bts_nr := bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '0000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+ u := {</span><br><span style="color: hsl(120, 100%, 40%);">+ rach_ind := {</span><br><span style="color: hsl(120, 100%, 40%);">+ sapi := PCU_IF_SAPI_RACH,</span><br><span style="color: hsl(120, 100%, 40%);">+ ra := ra,</span><br><span style="color: hsl(120, 100%, 40%);">+ qta := qta,</span><br><span style="color: hsl(120, 100%, 40%);">+ fn := fn,</span><br><span style="color: hsl(120, 100%, 40%);">+ arfcn := arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+ is_11bit := is_11bit,</span><br><span style="color: hsl(120, 100%, 40%);">+ burst_type := burst_type</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> template PCUIF_Message tr_PCUIF_RACH_IND(template uint8_t bts_nr := ?,</span><br><span> template uint16_t ra := ?,</span><br><span> template uint8_t is_11bit := ?,</span><br><span>@@ -395,6 +572,21 @@</span><br><span> }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PCUIF_Message ts_PCUIF_PAG_REQ(template (value) uint8_t bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) OCT9 id_lv,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t chan_needed,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) PCUIF_Sapi sapi) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := PCU_IF_MSG_PAG_REQ,</span><br><span style="color: hsl(120, 100%, 40%);">+ bts_nr := bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '0000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+ u := {</span><br><span style="color: hsl(120, 100%, 40%);">+ pag_req := {</span><br><span style="color: hsl(120, 100%, 40%);">+ sapi := sapi,</span><br><span style="color: hsl(120, 100%, 40%);">+ chan_needed := chan_needed,</span><br><span style="color: hsl(120, 100%, 40%);">+ identity_lv := id_lv</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> template PCUIF_Message tr_PCUIF_PAG_REQ(template uint8_t bts_nr := ?,</span><br><span> template OCT9 id_lv := ?,</span><br><span> template uint8_t chan_needed := ?,</span><br><span>@@ -411,6 +603,100 @@</span><br><span> }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+const PCUIF_Flags c_PCUIF_Flags_default := {</span><br><span style="color: hsl(120, 100%, 40%);">+ bts_active := true,</span><br><span style="color: hsl(120, 100%, 40%);">+ sysmo_direct_dsp := false,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '00000000000000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ cs1 := true,</span><br><span style="color: hsl(120, 100%, 40%);">+ cs2 := true,</span><br><span style="color: hsl(120, 100%, 40%);">+ cs3 := true,</span><br><span style="color: hsl(120, 100%, 40%);">+ cs4 := true,</span><br><span style="color: hsl(120, 100%, 40%);">+ mcs1 := true,</span><br><span style="color: hsl(120, 100%, 40%);">+ mcs2 := true,</span><br><span style="color: hsl(120, 100%, 40%);">+ mcs3 := true,</span><br><span style="color: hsl(120, 100%, 40%);">+ mcs4 := true,</span><br><span style="color: hsl(120, 100%, 40%);">+ mcs5 := true,</span><br><span style="color: hsl(120, 100%, 40%);">+ mcs6 := true,</span><br><span style="color: hsl(120, 100%, 40%);">+ mcs7 := true,</span><br><span style="color: hsl(120, 100%, 40%);">+ mcs8 := true,</span><br><span style="color: hsl(120, 100%, 40%);">+ mcs9 := true,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare2 := '000'B</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PCUIF_InfoTrx ts_PCUIF_InfoTrx(template (value) uint16_t arfcn := 871,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) BIT8 pdch_mask := '00000001'B,</span><br><span style="color: hsl(120, 100%, 40%);">+ OCT1 tsc := '07'O) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ arfcn := arfcn,</span><br><span style="color: hsl(120, 100%, 40%);">+ pdch_mask := pdch_mask,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '00'O,</span><br><span style="color: hsl(120, 100%, 40%);">+ tsc := tsc & tsc & tsc & tsc & tsc & tsc & tsc & tsc,</span><br><span style="color: hsl(120, 100%, 40%);">+ hLayer1 := 0</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PCUIF_InfoTrx ts_PCUIF_InfoTrxNULL := ts_PCUIF_InfoTrx(0, '00000000'B, '00'O);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PCUIF_InfoTrxs ts_PCUIF_InfoTrxs_def := {</span><br><span style="color: hsl(120, 100%, 40%);">+ ts_PCUIF_InfoTrx, ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL,</span><br><span style="color: hsl(120, 100%, 40%);">+ ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PCUIF_Message ts_PCUIF_INFO_IND(template (value) uint8_t bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint16_t nsei,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint16_t nsvci,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint16_t bvci,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint16_t local_port,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint16_t remote_port,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint32_t remote_ip,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) PCUIF_Flags flags := c_PCUIF_Flags_default,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint16_t mcc := 262,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint16_t mnc := 42,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint16_t lac := 2342,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t rac := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint16_t cell_id := 1,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint8_t bsic := 7,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) PCUIF_InfoTrxs trx := ts_PCUIF_InfoTrxs_def,</span><br><span style="color: hsl(120, 100%, 40%);">+ template (value) uint32_t version := PCU_IF_VERSION) := {</span><br><span style="color: hsl(120, 100%, 40%);">+ msg_type := PCU_IF_MSG_INFO_IND,</span><br><span style="color: hsl(120, 100%, 40%);">+ bts_nr := bts_nr,</span><br><span style="color: hsl(120, 100%, 40%);">+ spare := '0000'O,</span><br><span style="color: hsl(120, 100%, 40%);">+ u := {</span><br><span style="color: hsl(120, 100%, 40%);">+ info_ind := {</span><br><span style="color: hsl(120, 100%, 40%);">+ version := version,</span><br><span style="color: hsl(120, 100%, 40%);">+ flags := flags,</span><br><span style="color: hsl(120, 100%, 40%);">+ trx := trx,</span><br><span style="color: hsl(120, 100%, 40%);">+ bsic := bsic,</span><br><span style="color: hsl(120, 100%, 40%);">+ mcc := mcc,</span><br><span style="color: hsl(120, 100%, 40%);">+ mnc := mnc,</span><br><span style="color: hsl(120, 100%, 40%);">+ mnc_3_digits := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+ lac := lac,</span><br><span style="color: hsl(120, 100%, 40%);">+ rac := rac,</span><br><span style="color: hsl(120, 100%, 40%);">+ nsei := nsei,</span><br><span style="color: hsl(120, 100%, 40%);">+ nse_timer := { 3, 3, 3, 3, 30, 3, 10 },</span><br><span style="color: hsl(120, 100%, 40%);">+ cell_timer := { 3, 3, 3, 3, 3, 10, 3, 10, 3, 10, 3 },</span><br><span style="color: hsl(120, 100%, 40%);">+ cell_id := cell_id,</span><br><span style="color: hsl(120, 100%, 40%);">+ repeat_time := 5 * 50,</span><br><span style="color: hsl(120, 100%, 40%);">+ repeat_count := 3,</span><br><span style="color: hsl(120, 100%, 40%);">+ bvci := bvci,</span><br><span style="color: hsl(120, 100%, 40%);">+ t3142 := 20,</span><br><span style="color: hsl(120, 100%, 40%);">+ t3169 := 5,</span><br><span style="color: hsl(120, 100%, 40%);">+ t3191 := 5,</span><br><span style="color: hsl(120, 100%, 40%);">+ t3193_10ms := 160,</span><br><span style="color: hsl(120, 100%, 40%);">+ t3195 := 5,</span><br><span style="color: hsl(120, 100%, 40%);">+ t3101 := 10,</span><br><span style="color: hsl(120, 100%, 40%);">+ t3103 := 4,</span><br><span style="color: hsl(120, 100%, 40%);">+ t3105 := 8,</span><br><span style="color: hsl(120, 100%, 40%);">+ cv_countdown := 15,</span><br><span style="color: hsl(120, 100%, 40%);">+ dl_tbf_ext := 250 * 10, /* ms */</span><br><span style="color: hsl(120, 100%, 40%);">+ ul_tbf_ext := 250 * 10, /* ms */</span><br><span style="color: hsl(120, 100%, 40%);">+ initial_cs := 2,</span><br><span style="color: hsl(120, 100%, 40%);">+ initial_mcs := 6,</span><br><span style="color: hsl(120, 100%, 40%);">+ nsvci := { nsvci, 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+ local_pprt := { local_port, 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+ remote_port := { remote_port, 0 },</span><br><span style="color: hsl(120, 100%, 40%);">+ remote_ip := { remote_ip , 0 }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span> template PCUIF_Message tr_PCUIF_INFO_IND(template uint8_t bts_nr := ?,</span><br><span> template PCUIF_Flags flags := ?,</span><br><span> template uint32_t version := PCU_IF_VERSION) := {</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12943">change 12943</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/12943"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I779ff2903cab8c13ffb8fe10a4cacd996bafe69a </div>
<div style="display:none"> Gerrit-Change-Number: 12943 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>