fixeria has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35372?usp=email )
Change subject: library/PCUIF_Types: clean up, drop remains of PCUIFv10 ......................................................................
library/PCUIF_Types: clean up, drop remains of PCUIFv10
Change-Id: Ibfe8558cb9f335d8c29348063b0ff02b138dd4c7 Related: osmo-pcu.git I68a3f59d5c960ae3a4fbd74f9d4a894295cb9ed8 Related: docker-playground.git If0b2209af645f391817f65b4227736b52ca59e2e Related: docker-playground.git I70f0c30d6c514614095dcbbcac5d025001861fbc Related: OS#6191 --- M bts/BTS_Tests.ttcn M library/PCUIF_CodecPort.ttcn M library/PCUIF_Types.ttcn M pcu/PCUIF_Components.ttcn 4 files changed, 64 insertions(+), 160 deletions(-)
Approvals: Jenkins Builder: Verified pespin: Looks good to me, approved osmith: Looks good to me, but someone else must approve
diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn index 7ca92d9..cf8e7ed 100644 --- a/bts/BTS_Tests.ttcn +++ b/bts/BTS_Tests.ttcn @@ -5790,17 +5790,13 @@
f_TC_pcu_act_req(0, 0, 7, true);
- if (mp_pcuif_version < 11) { - /* three characters prefix: last 3 digits of IMSI as ASCII */ - f_pcu_data_req(0, 0, 0, 0, 0, PCU_IF_SAPI_PCH, '313233'O & c_PCU_DATA); - } else { - var PCUIF_pch pch; - pch.msg_id := '01020304'O; - pch.imsi := "00101000000000123"; - pch.data := c_PCU_DATA; - pch.confirm := false; - f_pcu_data_req(0, 0, 0, 0, 0, PCU_IF_SAPI_PCH_2, enc_PCUIF_pch(pch)); - } + var PCUIF_pch pch := { + msg_id := '01020304'O, + imsi := "00101000000000123", + data := c_PCU_DATA, + confirm := false + }; + f_pcu_data_req(0, 0, 0, 0, 0, PCU_IF_SAPI_PCH_2, enc_PCUIF_pch(pch));
T.start; alt { diff --git a/library/PCUIF_CodecPort.ttcn b/library/PCUIF_CodecPort.ttcn index b49c513..55d2ee7 100644 --- a/library/PCUIF_CodecPort.ttcn +++ b/library/PCUIF_CodecPort.ttcn @@ -38,7 +38,6 @@ /* HACK: fix padding in decoded message. Due to a bug in TITAN, we * cannot just use its 'PADDING' attribute because it breaks decoding. */ if (ischosen(pout.data.u.data_req)) { fix_padding(pout.data.u.data_req); } - if (ischosen(pout.data.u.data_cnf)) { fix_padding(pout.data.u.data_cnf); } if (ischosen(pout.data.u.data_ind)) { fix_padding(pout.data.u.data_ind); } } with { extension "prototype(fast)" };
@@ -141,27 +140,15 @@
function f_PCUIF_tx_imm_ass_pch(PCUIF_CODEC_PT pt, integer conn_id, octetstring imm_ass, hexstring imsi, uint8_t bts_nr := 0, boolean wait_for_cnf := true, OCT4 msg_id := '01020304'O) { - var PCUIF_send_data sd; timer T := 3.0;
- if (mp_pcuif_version < 11) { - /* append 3 last imsi digits so that the BTS is able to compute paging group */ - var hexstring last_digits := substr(imsi, lengthof(imsi)-3, 3); - log("3 last imsi digits: ", last_digits); - var octetstring prefix := ''O; - for (var integer i := 0; i < 3; i := i+1) { - prefix := prefix & int2oct(hex2int('30'H) + hex2int(last_digits[i]), 1); - } - pt.send(t_SD_PCUIF(conn_id, - ts_PCUIF_DATA_REQ(bts_nr, 0, 0, 0, 0, PCU_IF_SAPI_PCH, prefix & imm_ass))); - } else { - var PCUIF_pch pch; - pch.msg_id := msg_id; - pch.imsi := hex2str(imsi); - pch.data := imm_ass; - pch.confirm := true; - pt.send(t_SD_PCUIF(conn_id, ts_PCUIF_DATA_REQ(bts_nr, 0, 0, 0, 0, PCU_IF_SAPI_PCH_2, enc_PCUIF_pch(pch)))); - } + var PCUIF_pch pch := { + msg_id := msg_id, + imsi := hex2str(imsi), + data := imm_ass, + confirm := true + }; + pt.send(t_SD_PCUIF(conn_id, ts_PCUIF_DATA_REQ(bts_nr, 0, 0, 0, 0, PCU_IF_SAPI_PCH_2, enc_PCUIF_pch(pch))));
/* Exit early when the caller is not interested in the confirmation message */ if (wait_for_cnf == false) { @@ -170,23 +157,8 @@
T.start; alt { - [] pt.receive(t_SD_PCUIF(conn_id, tr_PCUIF_DATA_CNF(bts_nr, 0, 0, PCU_IF_SAPI_PCH))) -> value sd { - if (mp_pcuif_version >= 11) { - setverdict(fail, "expecting tr_PCUIF_DATA_CNF_2 in PCUIF v.11 or later"); - mtc.stop; - } else { - log("IMM.ASS was sent on PCH at fn ", sd.data.u.data_cnf.fn); - return; - } - } - [] pt.receive(t_SD_PCUIF(conn_id, tr_PCUIF_DATA_CNF_2(bts_nr, PCU_IF_SAPI_PCH_2))) -> value sd { - if (mp_pcuif_version < 11) { - setverdict(fail, "expecting tr_PCUIF_DATA_CNF in PCUIF v.10 or earlier"); - mtc.stop; - } else { - log("IMM.ASS was sent on PCH"); - return; - } + [] pt.receive(t_SD_PCUIF(conn_id, tr_PCUIF_DATA_CNF_2(bts_nr, PCU_IF_SAPI_PCH_2))) { + log("IMM.ASS was sent on PCH"); } [] pt.receive { repeat; } [] T.timeout { @@ -200,22 +172,14 @@ * 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, boolean confirm := true, uint8_t bts_nr := 0, boolean wait_for_cnf := true, OCT4 msg_id := '01020304'O) { - 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 agch; - agch.msg_id := msg_id; - agch.data := mac_block; - agch.confirm := confirm; - pt.send(t_SD_PCUIF(conn_id, ts_PCUIF_DATA_REQ(bts_nr, 0, 0, 0, 0, PCU_IF_SAPI_AGCH_2, enc_PCUIF_agch(agch)))); - } + var PCUIF_agch agch := { + msg_id := msg_id, + data := mac_block, + confirm := confirm + }; + pt.send(t_SD_PCUIF(conn_id, ts_PCUIF_DATA_REQ(bts_nr, 0, 0, 0, 0, PCU_IF_SAPI_AGCH_2, enc_PCUIF_agch(agch))));
/* Exit early when the caller is not interested in the confirmation message */ if (wait_for_cnf == false) { @@ -224,14 +188,8 @@
T.start; alt { - [] pt.receive(t_SD_PCUIF(conn_id, tr_PCUIF_DATA_CNF_2(bts_nr, PCU_IF_SAPI_AGCH_2))) -> 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"); - return; - } + [] pt.receive(t_SD_PCUIF(conn_id, tr_PCUIF_DATA_CNF_2(bts_nr, PCU_IF_SAPI_AGCH_2))) { + log("IMM.ASS was sent on AGCH"); } [] pt.receive { repeat; } [] T.timeout { diff --git a/library/PCUIF_Types.ttcn b/library/PCUIF_Types.ttcn index 5ed87b6..7083884 100644 --- a/library/PCUIF_Types.ttcn +++ b/library/PCUIF_Types.ttcn @@ -21,11 +21,11 @@ };
const charstring PCU_SOCK_DEFAULT := "/tmp/pcu_bts"; -type integer PCUIF_Version (9..12); /* supported versions */ +type integer PCUIF_Version (11..12); /* supported versions */
type enumerated PCUIF_MsgType { PCU_IF_MSG_DATA_REQ ('00'O), - PCU_IF_MSG_DATA_CNF ('01'O), + /* RFU, removed in PCUIFv11 ('01'O), */ PCU_IF_MSG_DATA_IND ('02'O), PCU_IF_MSG_SUSP_REQ ('03'O), PCU_IF_MSG_APP_INFO_REQ ('04'O), @@ -48,8 +48,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), + /* RFU, removed in PCUIFv11 ('02'O), */ + /* RFU, removed in PCUIFv11 ('03'O), */ PCU_IF_SAPI_BCCH ('04'O), PCU_IF_SAPI_PDTCH ('05'O), PCU_IF_SAPI_PRACH ('06'O), @@ -361,7 +361,6 @@
type union PCUIF_MsgUnion { PCUIF_data data_req, - PCUIF_data data_cnf, PCUIF_data_cnf data_cnf2, PCUIF_data data_ind, PCUIF_susp_req susp_req, @@ -385,7 +384,6 @@ 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_cnf2, msg_type = PCU_IF_MSG_DATA_CNF_2; data_ind, msg_type = PCU_IF_MSG_DATA_IND; susp_req, msg_type = PCU_IF_MSG_SUSP_REQ; @@ -667,60 +665,6 @@ } }
-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_DATA_CNF_2(template (value) uint8_t bts_nr, template (value) PCUIF_Sapi sapi, template (value) OCT4 msg_id) := { diff --git a/pcu/PCUIF_Components.ttcn b/pcu/PCUIF_Components.ttcn index d417995..6e956ba 100644 --- a/pcu/PCUIF_Components.ttcn +++ b/pcu/PCUIF_Components.ttcn @@ -502,7 +502,6 @@ /* Wait until the PCU is connected */ PCUIF.receive(tr_RAW_PCU_EV(PCU_EV_CONNECT));
- var template PCUIF_Sapi tr_ccch_sapi := (PCU_IF_SAPI_PCH, PCU_IF_SAPI_PCH_2, PCU_IF_SAPI_AGCH, PCU_IF_SAPI_AGCH_2); alt { /* Wait for TXT.ind (PCU_VERSION) and respond with INFO.ind (SI13) */ [] PCUIF.receive(tr_PCUIF_TXT_IND(bts_nr, PCU_VERSION, ?)) -> value pcu_msg { @@ -538,40 +537,34 @@ "/TS" & int2str(pcu_msg.u.act_req.ts_nr)); repeat; } - [decode_data_req] PCUIF.receive(tr_PCUIF_DATA_REQ(bts_nr, ?, ?, sapi := tr_ccch_sapi)) -> value pcu_msg { - var octetstring data; - var PCUIF_pch pch; - var PCUIF_agch agch; + [decode_data_req] PCUIF.receive(tr_PCUIF_DATA_REQ(bts_nr, ?, ?, sapi := PCU_IF_SAPI_PCH_2)) -> value pcu_msg { var charstring imsi_filter_regexp := "(\d*)"; /* numbers only */ + var PCUIF_pch pch;
- /* On PCH the payload is prefixed with paging group (3 octets): skip it. - * TODO: add an additional template parameter, so we can match it. */ - if (pcu_msg.u.data_req.sapi == PCU_IF_SAPI_PCH) { - data := substr(pcu_msg.u.data_req.data, 3, pcu_msg.u.data_req.len - 3); - } else if (pcu_msg.u.data_req.sapi == PCU_IF_SAPI_AGCH) { - data := pcu_msg.u.data_req.data; - } pcu_msg_rr.bts_nr := bts_nr; pcu_msg_rr.raw := pcu_msg.u.data_req;
- if (pcu_msg_rr.raw.sapi == PCU_IF_SAPI_PCH_2) { - pch := dec_PCUIF_pch(pcu_msg_rr.raw.data); - pcu_msg_rr.msg_id := pch.msg_id; - pcu_msg_rr.imsi := regexp(pch.imsi, imsi_filter_regexp, 0); - pcu_msg_rr.rr_msg := dec_GsmRrMessage(pch.data); - pcu_msg_rr.confirm := pch.confirm; - } else if (pcu_msg_rr.raw.sapi == PCU_IF_SAPI_AGCH_2) { - agch := dec_PCUIF_agch(pcu_msg_rr.raw.data); - pcu_msg_rr.imsi := omit; - pcu_msg_rr.msg_id := agch.msg_id; - pcu_msg_rr.rr_msg := dec_GsmRrMessage(agch.data); - pcu_msg_rr.confirm := agch.confirm; - } else { - pcu_msg_rr.msg_id := omit; - pcu_msg_rr.imsi := omit; - pcu_msg_rr.rr_msg := dec_GsmRrMessage(data); - pcu_msg_rr.confirm := omit; - } + pch := dec_PCUIF_pch(pcu_msg_rr.raw.data); + pcu_msg_rr.msg_id := pch.msg_id; + pcu_msg_rr.imsi := regexp(pch.imsi, imsi_filter_regexp, 0); + pcu_msg_rr.rr_msg := dec_GsmRrMessage(pch.data); + pcu_msg_rr.confirm := pch.confirm; + + TC.send(pcu_msg_rr); + repeat; + } + [decode_data_req] PCUIF.receive(tr_PCUIF_DATA_REQ(bts_nr, ?, ?, sapi := PCU_IF_SAPI_AGCH_2)) -> value pcu_msg { + var PCUIF_agch agch; + + pcu_msg_rr.bts_nr := bts_nr; + pcu_msg_rr.raw := pcu_msg.u.data_req; + + agch := dec_PCUIF_agch(pcu_msg_rr.raw.data); + pcu_msg_rr.imsi := omit; + pcu_msg_rr.msg_id := agch.msg_id; + pcu_msg_rr.rr_msg := dec_GsmRrMessage(agch.data); + pcu_msg_rr.confirm := agch.confirm; + TC.send(pcu_msg_rr); repeat; }