library/RSL_Types: use MobileIdentityLV for MS Identity IE
Change-Id: I5436dcbbc961d5b572e10e4f1a3f806d252d7818
diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index de7102e..353ab16 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -1298,11 +1298,10 @@
template BSSMAP_FIELD_CellIdentificationList cid_list,
BtsIdList bts_ids := { 0 },
template RSL_ChanNeeded rsl_chneed := omit,
- template OCT4 tmsi := omit) runs on test_CT
+ template (omit) OCT4 tmsi := omit) runs on test_CT
{
var template BSSMAP_IE_ChannelNeeded bssmap_chneed;
- /* FIXME (unused): var MobileIdentity mi; */
- var template octetstring id_enc; /* FIXME */
+ var template MobileIdentityV mi;
var RSL_Message rx_rsl;
var integer paging_group := hex2int(imsi[lengthof(imsi)-1]);
var integer i;
@@ -1323,17 +1322,14 @@
f_bssap_tx_ud(ts_BSSMAP_Paging(imsi, cid_list, tmsi, bssmap_chneed));
-/* FIXME: Disabled due to bugs in both GSM_RR_Types and MobileL3_CommonIE_Types IMSI encoder
- if (isvalue(tmsi)) {
- mi := valueof(t_Osmo_MI_TMSI(oct2int(valueof(tmsi))));
+ if (not istemplatekind(tmsi, "omit")) {
+ mi := t_MI_TMSI(tmsi);
} else {
- mi := valueof(ts_Osmo_MI_IMSI(imsi));
+ mi := tr_MI_IMSI(imsi);
}
- id_enc := enc_MobileIdentity(mi);
-*/
- id_enc := ?;
+
for (i := 0; i < sizeof(bts_ids); i := i + 1) {
- rx_rsl := f_exp_ipa_rx(bts_ids[i], tr_RSL_PAGING_CMD(id_enc));
+ rx_rsl := f_exp_ipa_rx(bts_ids[i], tr_RSL_PAGING_CMD(mi));
/* check channel type, paging group */
if (rx_rsl.ies[1].body.paging_group != paging_group) {
setverdict(fail, "Paging for wrong paging group");
@@ -1352,7 +1348,7 @@
}
T.start;
alt {
- [] IPA_RSL[i].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, tr_RSL_PAGING_CMD(id_enc))) {
+ [] IPA_RSL[i].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, tr_RSL_PAGING_CMD(mi))) {
setverdict(fail, "Paging on BTS ", i, " which is not part of ", bts_ids);
}
[] IPA_RSL[i].receive { repeat; }
diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 3018bca..9534a8b 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -2978,18 +2978,17 @@
/* Send paging cmds based on elapsed time */
var integer new_sent := f_min(pkt_total, float2int(T_total.read * pch_blocks_per_sec) + 1);
while (st.num_paging_sent < new_sent) {
+ var MobileIdentityV mi;
+
/* build mobile Identity */
- var MobileIdentityLV mi;
if (cfg.use_tmsi) {
- mi := valueof(ts_MI_TMSI_LV(f_rnd_octstring(4)));
+ mi := valueof(t_MI_TMSI(f_rnd_octstring(4)));
} else {
- mi := valueof(ts_MI_IMSI_LV(f_gen_imsi(st.num_paging_sent)));
+ mi := valueof(ts_MI_IMSI(f_gen_imsi(st.num_paging_sent)));
}
- var octetstring mi_enc_lv := enc_MobileIdentityLV(mi);
- var octetstring mi_enc := substr(mi_enc_lv, 1, lengthof(mi_enc_lv)-1);
/* Send RSL PAGING COMMAND */
- RSL_CCHAN.send(ts_RSL_UD(ts_RSL_PAGING_CMD(mi_enc, st.num_paging_sent mod 4)));
+ RSL_CCHAN.send(ts_RSL_UD(ts_RSL_PAGING_CMD(mi, st.num_paging_sent mod 4)));
st.num_paging_sent := st.num_paging_sent + 1;
}
@@ -4570,22 +4569,27 @@
f_init_pcu_test();
for (var integer i := 0; i < 100; i := i+1) {
- var MobileIdentityLV mi;
+ var MobileIdentityLV mi_lv;
+ var octetstring mi_lv_enc;
+ var MobileIdentityV mi;
timer T := 3.0;
+
if (i < 50) {
- mi := valueof(ts_MI_TMSI_LV(f_rnd_octstring(4)));
+ mi := valueof(t_MI_TMSI(f_rnd_octstring(4)));
} else {
- mi := valueof(ts_MI_IMSI_LV(f_gen_imsi(i)));
+ mi := valueof(ts_MI_IMSI(f_gen_imsi(i)));
}
- var octetstring mi_enc_lv := enc_MobileIdentityLV(mi);
- var octetstring mi_enc := substr(mi_enc_lv, 1, lengthof(mi_enc_lv)-1);
- var octetstring t_mi_lv := f_pad_oct(mi_enc_lv, 9, '00'O);
+
+ /* Fancy encoding for PCUIF */
+ mi_lv := valueof(ts_MI_LV(mi));
+ mi_lv_enc := enc_MobileIdentityLV(mi_lv);
+ mi_lv_enc := f_pad_oct(mi_lv_enc, 9, '00'O);
/* Send RSL PAGING COMMAND */
- RSL_CCHAN.send(ts_RSL_UD(ts_RSL_PAGING_CMD(mi_enc, i mod 4)));
+ RSL_CCHAN.send(ts_RSL_UD(ts_RSL_PAGING_CMD(mi, i mod 4)));
T.start;
alt {
- [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_PAG_REQ(0, t_mi_lv))) {
+ [] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_PAG_REQ(0, mi_lv_enc))) {
}
[] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_PAG_REQ)) {
Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unexpected PAGING REQ");
diff --git a/library/L3_Templates.ttcn b/library/L3_Templates.ttcn
index 7e53709..092026e 100644
--- a/library/L3_Templates.ttcn
+++ b/library/L3_Templates.ttcn
@@ -122,6 +122,12 @@
imsi := f_tr_MI_IMSI(imsi)
}
};
+template (value) MobileIdentityV ts_MI_IMSI(hexstring imsi) := {
+ typeOfIdentity := '001'B,
+ oddEvenInd_identity := {
+ imsi := f_enc_IMSI_L3(imsi)
+ }
+};
/* send template for Mobile Identity (TMSI) */
diff --git a/library/RSL_Types.ttcn b/library/RSL_Types.ttcn
index f905973..ff0e2e5 100644
--- a/library/RSL_Types.ttcn
+++ b/library/RSL_Types.ttcn
@@ -16,6 +16,8 @@
import from General_Types all;
import from Osmocom_Types all;
import from GSM_Types all;
+ import from MobileL3_CommonIE_Types all;
+ import from L3_Templates all;
/* Section 9.1 */
type enumerated RSL_MessageGroup {
@@ -819,7 +821,7 @@
uint8_t smscb_chan_ind,
RSL_IE_RequestRef req_ref,
RSL_LV full_imm_ass_info,
- RSL_LV ms_identity,
+ MobileIdentityLV ms_identity,
uint16_t ipa_conn_id,
uint16_t ipa_local_port,
@@ -1677,23 +1679,23 @@
}
/* 8.5.5 BSC -> BTS */
- template RSL_Message tr_RSL_PAGING_CMD(template octetstring identity, template uint3_t tn := ?) := {
+ template RSL_Message tr_RSL_PAGING_CMD(template MobileIdentityV mi, template uint3_t tn := ?) := {
msg_disc := tr_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
msg_type := RSL_MT_PAGING_CMD,
ies := {
tr_RSL_IE(RSL_IE_Body:{chan_nr := t_RslChanNr_PCH_AGCH(tn)}),
tr_RSL_IE(RSL_IE_Body:{paging_group := ?}),
- tr_RSL_IE(RSL_IE_Body:{ms_identity := tr_RSL_LV(identity)}),
+ tr_RSL_IE(RSL_IE_Body:{ms_identity := tr_MI_LV(mi)}),
* /* opt: channel needed, eMLPP prio */
}
}
- template (value) RSL_Message ts_RSL_PAGING_CMD(octetstring identity, uint8_t pg, uint3_t tn := 0) := {
+ template (value) RSL_Message ts_RSL_PAGING_CMD(MobileIdentityV mi, uint8_t pg, uint3_t tn := 0) := {
msg_disc := ts_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
msg_type := RSL_MT_PAGING_CMD,
ies := {
t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := ts_RslChanNr_PCH_AGCH(tn)}),
t_RSL_IE(RSL_IE_PAGING_GROUP, RSL_IE_Body:{paging_group := pg}),
- t_RSL_IE(RSL_IE_MS_IDENTITY, RSL_IE_Body:{ms_identity := ts_RSL_LV(identity)})
+ t_RSL_IE(RSL_IE_MS_IDENTITY, RSL_IE_Body:{ms_identity := ts_MI_LV(mi)})
}
}