dexter has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/34066 )
Change subject: PCUIF: Add support for PCU_IF_SAPI_AGCH_DT ......................................................................
PCUIF: Add support for PCU_IF_SAPI_AGCH_DT
In PCUIF v.11 it will be possible to get confirmations for IMMEDIATE ASSIGNMENT messages sent through the AGCH.
Related: OS#5927 Change-Id: I40e05a2e68cca77d3c2f41df9af8d35762488abf --- M library/PCUIF_CodecPort.ttcn M library/PCUIF_Types.ttcn 2 files changed, 74 insertions(+), 1 deletion(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/66/34066/1
diff --git a/library/PCUIF_CodecPort.ttcn b/library/PCUIF_CodecPort.ttcn index 8824a11..8030bec 100644 --- a/library/PCUIF_CodecPort.ttcn +++ b/library/PCUIF_CodecPort.ttcn @@ -196,6 +196,50 @@ return 0; }
+/* This function can be used to transmit arbitrary GSM MAC blocks via the AGCH. The BTS will only confirm those MAC + * blocks that contain actually a valid immediate assignment message. Otherweise no confirmation is sent back */ +function f_PCUIF_tx_mac_block_agch(PCUIF_CODEC_PT pt, integer conn_id, octetstring mac_block, uint8_t bts_nr := 0, + boolean wait_for_cnf := true, OCT4 tlli := '01020304'O) return uint32_t { + var PCUIF_send_data sd; + timer T := 3.0; + + if (mp_pcuif_version < 11) { + if (wait_for_cnf == true) { + setverdict(fail, "confirmation for AGCH not supported in PCUIF v.10 or earlier"); + } + pt.send(t_SD_PCUIF(conn_id, + ts_PCUIF_DATA_REQ(bts_nr, 0, 0, 0, 0, PCU_IF_SAPI_AGCH, mac_block))); + } else { + var PCUIF_agch_dt agch_dt; + agch_dt.tlli := tlli; + agch_dt.data := mac_block; + pt.send(t_SD_PCUIF(conn_id, ts_PCUIF_DATA_REQ(bts_nr, 0, 0, 0, 0, PCU_IF_SAPI_AGCH_DT, enc_PCUIF_agch_dt(agch_dt)))); + } + + /* Exit early when the caller is not interested in the confirmation message */ + if (wait_for_cnf == false) { + return 0; + } + + T.start; + alt { + [] pt.receive(t_SD_PCUIF(conn_id, tr_PCUIF_DATA_CNF_DT(bts_nr, 0, 0, PCU_IF_SAPI_AGCH_DT))) -> value sd { + if (mp_pcuif_version < 11) { + setverdict(fail, "got tr_PCUIF_DATA_CNF_DT, but AGCH confirmation is not supported in PCUIF v.10 or earlier"); + mtc.stop; + } else { + log("IMM.ASS was sent on AGCH at fn ", sd.data.u.data_cnf_dt.fn); + return sd.data.u.data_cnf_dt.fn; + } + } + [] pt.receive { repeat; } + [] T.timeout { + setverdict(fail, "Timeout waiting for PCU DATA.cnf (AGCH)"); + mtc.stop; + } + } + return 0; +}
diff --git a/library/PCUIF_Types.ttcn b/library/PCUIF_Types.ttcn index 94056b9..7fe7358 100644 --- a/library/PCUIF_Types.ttcn +++ b/library/PCUIF_Types.ttcn @@ -54,7 +54,8 @@ PCU_IF_SAPI_PDTCH ('05'O), PCU_IF_SAPI_PRACH ('06'O), PCU_IF_SAPI_PTCCH ('07'O), - PCU_IF_SAPI_PCH_DT ('08'O) + PCU_IF_SAPI_PCH_DT ('08'O), + PCU_IF_SAPI_AGCH_DT ('09'O) } with { variant "FIELDLENGTH(8)" };
type record PCUIF_Flags { @@ -329,6 +330,21 @@ external function dec_PCUIF_pch_dt(in octetstring stream) return PCUIF_pch_dt with { extension "prototype(convert) decode(RAW)" };
+/* Record to send a (confirmed) IMMEDIATE ASSIGNMENT message via AGCH. The record is sent by the PCU to the BTS as a + * data request (data_req) under SAPI PCU_IF_SAPI_AGCH_DT. */ +type record PCUIF_agch_dt { + OCT4 tlli, + octetstring data length(23) +} with { + variant (tlli) "BYTEORDER(last)" + variant (data) "FIELDLENGTH(23)" +}; + +external function enc_PCUIF_agch_dt(in PCUIF_agch_dt pdu) return octetstring + with { extension "prototype(convert) encode(RAW)" }; +external function dec_PCUIF_agch_dt(in octetstring stream) return PCUIF_agch_dt + with { extension "prototype(convert) decode(RAW)" }; + type union PCUIF_MsgUnion { PCUIF_data data_req, PCUIF_data data_cnf,