dexter has uploaded this change for review.
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,
To view, visit change 34066. To unsubscribe, or for help writing mail filters, visit settings.