RSL_Emulation: logging tweaks

Change-Id: I8ca105d1d5280cff9b88ce5a2bb9c98a3f1e7527
This commit is contained in:
Neels Hofmeyr 2020-06-04 15:25:50 +02:00 committed by Neels Hofmeyr
parent 71537c8bea
commit 44bd3c439f
8 changed files with 50 additions and 5 deletions

View File

@ -138,7 +138,7 @@ runs on GSUP_Emulation_CT {
if (GsupImsiTable[i].imsi == "") { if (GsupImsiTable[i].imsi == "") {
GsupImsiTable[i].comp_ref := comp_ref; GsupImsiTable[i].comp_ref := comp_ref;
GsupImsiTable[i].imsi := imsi; GsupImsiTable[i].imsi := imsi;
log("Added IMSI table entry ", i, comp_ref, imsi); log("GsupImsiTable: Added IMSI table entry ", i, comp_ref, imsi);
return; return;
} }
} }
@ -149,7 +149,7 @@ private function f_imsi_table_del(charstring imsi)
runs on GSUP_Emulation_CT { runs on GSUP_Emulation_CT {
for (var integer i := 0; i < sizeof(GsupImsiTable); i := i+1) { for (var integer i := 0; i < sizeof(GsupImsiTable); i := i+1) {
if (GsupImsiTable[i].imsi == imsi) { if (GsupImsiTable[i].imsi == imsi) {
log("Deleted GSUP IMSI table entry ", i, log("GsupImsiTable: Deleted GSUP IMSI table entry ", i,
GsupImsiTable[i].comp_ref, imsi); GsupImsiTable[i].comp_ref, imsi);
GsupImsiTable[i].imsi := ""; GsupImsiTable[i].imsi := "";
GsupImsiTable[i].comp_ref := null; GsupImsiTable[i].comp_ref := null;

View File

@ -251,6 +251,7 @@ runs on MGCP_Emulation_CT {
} }
private function f_forward_to_client(MGCP_RecvFrom mrf, MGCP_ConnHdlr vc_conn) runs on MGCP_Emulation_CT { private function f_forward_to_client(MGCP_RecvFrom mrf, MGCP_ConnHdlr vc_conn) runs on MGCP_Emulation_CT {
log("MGCP_Emulation_CT -> ", vc_conn, ": ", mrf);
if (g_pars.multi_conn_mode) { if (g_pars.multi_conn_mode) {
MGCP_CLIENT_MULTI.send(mrf) to vc_conn; MGCP_CLIENT_MULTI.send(mrf) to vc_conn;
} else { } else {
@ -290,6 +291,7 @@ function main(MGCPOps ops, MGCP_conn_parameters p, charstring id) runs on MGCP_E
alt { alt {
/* MGCP from client */ /* MGCP from client */
[not p.multi_conn_mode] MGCP_CLIENT.receive(MgcpResponse:?) -> value resp sender vc_conn { [not p.multi_conn_mode] MGCP_CLIENT.receive(MgcpResponse:?) -> value resp sender vc_conn {
log("MGCP_Emulation_CT: ", vc_conn, " -> MGCP_CLIENT: ", resp);
msg := { msg := {
response := resp response := resp
}; };
@ -425,6 +427,9 @@ runs on MGCP_Emulation_CT return MGCP_ConnHdlr {
var template MgcpCommand mgcpcmd; var template MgcpCommand mgcpcmd;
var integer i; var integer i;
log("MGCP_Emulation_CT: rx ", cmd);
log("MGCP_Emulation_CT: MgcpExpectTable: ", MgcpExpectTable);
for (i := 0; i < sizeof(MgcpExpectTable); i := i+1) { for (i := 0; i < sizeof(MgcpExpectTable); i := i+1) {
if (not ispresent(MgcpExpectTable[i].crit)) { if (not ispresent(MgcpExpectTable[i].crit)) {
continue; continue;

View File

@ -171,7 +171,8 @@ runs on MNCC_Emulation_CT {
if (MnccCallTable[i].mncc_call_id == -1) { if (MnccCallTable[i].mncc_call_id == -1) {
MnccCallTable[i].comp_ref := comp_ref; MnccCallTable[i].comp_ref := comp_ref;
MnccCallTable[i].mncc_call_id := mncc_call_id; MnccCallTable[i].mncc_call_id := mncc_call_id;
log("Added conn table entry ", i, comp_ref, mncc_call_id); log("Added conn table entry i ", i, " comp_ref ", comp_ref, " mncc_call_id ", mncc_call_id);
log("AA MnccCallTable ", MnccCallTable);
return; return;
} }
} }
@ -186,6 +187,7 @@ runs on MNCC_Emulation_CT {
MnccCallTable[i].comp_ref, mncc_call_id); MnccCallTable[i].comp_ref, mncc_call_id);
MnccCallTable[i].mncc_call_id := -1; MnccCallTable[i].mncc_call_id := -1;
MnccCallTable[i].comp_ref := null; MnccCallTable[i].comp_ref := null;
log("AA MnccCallTable ", MnccCallTable);
return return
} }
} }
@ -280,6 +282,8 @@ runs on MNCC_Emulation_CT {
f_expect_table_init(); f_expect_table_init();
f_call_table_init(); f_call_table_init();
log("YYY starting MNCC_Emulation_CT g_mncc_ud_id ", g_mncc_ud_id);
while (true) { while (true) {
var MNCC_send_data sd; var MNCC_send_data sd;
var MNCC_Conn_Req creq; var MNCC_Conn_Req creq;
@ -289,9 +293,12 @@ runs on MNCC_Emulation_CT {
var charstring dest_nr; var charstring dest_nr;
var uint32_t mncc_call_id; var uint32_t mncc_call_id;
log("YY MNCC_Emulation_CT g_mncc_ud_id ", g_mncc_ud_id);
alt { alt {
/* MNCC -> Client: UNIT-DATA (connectionless SCCP) from a BSC */ /* MNCC -> Client: UNIT-DATA (connectionless SCCP) from a BSC */
[] MNCC.receive(t_SD_MNCC_MSGT(g_mncc_ud_id, MNCC_SOCKET_HELLO)) -> value sd { [] MNCC.receive(t_SD_MNCC_MSGT(g_mncc_ud_id, MNCC_SOCKET_HELLO)) -> value sd {
log("MNCC.receive ", sd);
/* Connectionless Procedures like HELLO */ /* Connectionless Procedures like HELLO */
var template MNCC_PDU resp; var template MNCC_PDU resp;
resp := ops.unitdata_cb.apply(sd.data); resp := ops.unitdata_cb.apply(sd.data);
@ -302,9 +309,11 @@ runs on MNCC_Emulation_CT {
/* MNCC -> Client: Release Indication / confirmation */ /* MNCC -> Client: Release Indication / confirmation */
[] MNCC.receive(t_SD_MNCC_MSGT(g_mncc_ud_id, (MNCC_REL_IND, MNCC_REL_CNF))) -> value sd { [] MNCC.receive(t_SD_MNCC_MSGT(g_mncc_ud_id, (MNCC_REL_IND, MNCC_REL_CNF))) -> value sd {
log("MNCC.receive ", sd);
var uint32_t call_id := f_mncc_get_call_id(sd.data); var uint32_t call_id := f_mncc_get_call_id(sd.data);
/* forward to respective client */ /* forward to respective client */
vc_conn := f_comp_by_call_id(call_id); vc_conn := f_comp_by_call_id(call_id);
log("MNCC.receive sends to ", vc_conn);
MNCC_CLIENT.send(sd.data) to vc_conn; MNCC_CLIENT.send(sd.data) to vc_conn;
/* remove from call table */ /* remove from call table */
f_call_table_del(call_id); f_call_table_del(call_id);
@ -312,14 +321,17 @@ runs on MNCC_Emulation_CT {
/* MNCC -> Client: call related messages */ /* MNCC -> Client: call related messages */
[] MNCC.receive(t_SD_MNCC_MSGT(g_mncc_ud_id, ?)) -> value sd { [] MNCC.receive(t_SD_MNCC_MSGT(g_mncc_ud_id, ?)) -> value sd {
log("MNCC.receive ", sd);
var uint32_t call_id := f_mncc_get_call_id(sd.data); var uint32_t call_id := f_mncc_get_call_id(sd.data);
if (f_call_id_known(call_id)) { if (f_call_id_known(call_id)) {
vc_conn := f_comp_by_call_id(call_id); vc_conn := f_comp_by_call_id(call_id);
log("MNCC.receive sends to ", vc_conn);
MNCC_CLIENT.send(sd.data) to vc_conn; MNCC_CLIENT.send(sd.data) to vc_conn;
} else { } else {
/* TODO: Only accept this for SETUP.req? */ /* TODO: Only accept this for SETUP.req? */
vc_conn := ops.create_cb.apply(sd.data, id) vc_conn := ops.create_cb.apply(sd.data, id)
log("MNCC.receive sends to ", vc_conn);
/* store mapping between client components and SCCP connectionId */ /* store mapping between client components and SCCP connectionId */
f_call_table_add(vc_conn, call_id); f_call_table_add(vc_conn, call_id);
/* handle user payload */ /* handle user payload */
@ -329,6 +341,7 @@ runs on MNCC_Emulation_CT {
/* Client -> MNCC Socket: RELEASE.ind or RELEASE.cnf: forward + drop call table entry */ /* Client -> MNCC Socket: RELEASE.ind or RELEASE.cnf: forward + drop call table entry */
[] MNCC_CLIENT.receive(MNCC_PDU:{msg_type := (MNCC_REL_IND, MNCC_REL_CNF), u:=?}) -> value mncc sender vc_conn { [] MNCC_CLIENT.receive(MNCC_PDU:{msg_type := (MNCC_REL_IND, MNCC_REL_CNF), u:=?}) -> value mncc sender vc_conn {
log("MNCC_CLIENT.receive ", mncc);
var integer call_id := f_call_id_by_comp(vc_conn); var integer call_id := f_call_id_by_comp(vc_conn);
/* forward to MNCC socket */ /* forward to MNCC socket */
MNCC.send(t_SD_MNCC(g_mncc_ud_id, mncc)); MNCC.send(t_SD_MNCC(g_mncc_ud_id, mncc));
@ -338,6 +351,7 @@ runs on MNCC_Emulation_CT {
/* Client -> MNCC Socket: Normal message */ /* Client -> MNCC Socket: Normal message */
[] MNCC_CLIENT.receive(MNCC_PDU:?) -> value mncc sender vc_conn { [] MNCC_CLIENT.receive(MNCC_PDU:?) -> value mncc sender vc_conn {
log("MNCC_CLIENT.receive ", mncc);
if (mncc.msg_type == MNCC_SETUP_REQ and not role_server) { if (mncc.msg_type == MNCC_SETUP_REQ and not role_server) {
/* ConnHdlr -> MNCC Server: SETUP.req: add to call table */ /* ConnHdlr -> MNCC Server: SETUP.req: add to call table */
f_call_table_add(vc_conn, f_mncc_get_call_id(mncc)); f_call_table_add(vc_conn, f_mncc_get_call_id(mncc));
@ -350,6 +364,7 @@ runs on MNCC_Emulation_CT {
} }
[] MNCC_CLIENT.receive(MNCC_PDU:?) -> value mncc sender vc_conn { [] MNCC_CLIENT.receive(MNCC_PDU:?) -> value mncc sender vc_conn {
log("MNCC_CLIENT.receive ", mncc);
/* forward to MNCC socket */ /* forward to MNCC socket */
MNCC.send(t_SD_MNCC(g_mncc_ud_id, mncc)); MNCC.send(t_SD_MNCC(g_mncc_ud_id, mncc));
} }
@ -357,6 +372,7 @@ runs on MNCC_Emulation_CT {
/* Client -> us: procedure call to register expect */ /* Client -> us: procedure call to register expect */
[] MNCC_PROC.getcall(MNCCEM_register:{?,?}) -> param(dest_nr, vc_hdlr) { [] MNCC_PROC.getcall(MNCCEM_register:{?,?}) -> param(dest_nr, vc_hdlr) {
log("ZZZZZ register ", dest_nr, " --> ", vc_hdlr);
f_create_expect(dest_nr, vc_hdlr); f_create_expect(dest_nr, vc_hdlr);
MNCC_PROC.reply(MNCCEM_register:{dest_nr, vc_hdlr}) to vc_hdlr; MNCC_PROC.reply(MNCCEM_register:{dest_nr, vc_hdlr}) to vc_hdlr;
} }
@ -439,6 +455,7 @@ runs on MNCC_Emulation_CT {
MnccExpectTable[i].dest_number := dest_number; MnccExpectTable[i].dest_number := dest_number;
MnccExpectTable[i].vc_conn := hdlr; MnccExpectTable[i].vc_conn := hdlr;
log("Created MnccExpect[", i, "] for ", dest_number, " to be handled at ", hdlr); log("Created MnccExpect[", i, "] for ", dest_number, " to be handled at ", hdlr);
log(MnccExpectTable);
return; return;
} }
} }

View File

@ -34,13 +34,16 @@ module Osmocom_CTRL_Functions {
timer T := 2.0; timer T := 2.0;
var CtrlMessage rx; var CtrlMessage rx;
var CtrlId id := f_gen_rand_id(); var CtrlId id := f_gen_rand_id();
log("CTRL request: ", id, variable);
pt.send(ts_CtrlMsgGet(id, variable)); pt.send(ts_CtrlMsgGet(id, variable));
T.start; T.start;
alt { alt {
[] pt.receive(tr_CtrlMsgGetRepl(id, variable)) -> value rx { [] pt.receive(tr_CtrlMsgGetRepl(id, variable)) -> value rx {
log("CTRL responds: ", rx);
} }
[] pt.receive(tr_CtrlMsgTrap) { repeat; } [] pt.receive(tr_CtrlMsgTrap) { repeat; }
[] pt.receive(tr_CtrlMsgError) -> value rx { [] pt.receive(tr_CtrlMsgError) -> value rx {
log("CTRL responds: ", rx);
setverdict(fail, "Error in CTRL GET ", variable, ": ", rx.err.reason); setverdict(fail, "Error in CTRL GET ", variable, ": ", rx.err.reason);
mtc.stop; mtc.stop;
} }
@ -57,12 +60,16 @@ module Osmocom_CTRL_Functions {
timer T := 2.0; timer T := 2.0;
var CtrlMessage rx; var CtrlMessage rx;
var CtrlId id := f_gen_rand_id(); var CtrlId id := f_gen_rand_id();
log("CTRL request: ", id, variable, val);
pt.send(ts_CtrlMsgSet(id, variable, val)); pt.send(ts_CtrlMsgSet(id, variable, val));
T.start; T.start;
alt { alt {
[] pt.receive(tr_CtrlMsgSetRepl(id, variable, val)) { } [] pt.receive(tr_CtrlMsgSetRepl(id, variable, val)) -> value rx {
log("CTRL responds: ", rx);
}
[] pt.receive(tr_CtrlMsgTrap) { repeat; } [] pt.receive(tr_CtrlMsgTrap) { repeat; }
[] pt.receive(tr_CtrlMsgError) -> value rx { [] pt.receive(tr_CtrlMsgError) -> value rx {
log("CTRL responds: ", rx);
setverdict(fail, "Error in CTRL SET ", variable, ": ", rx.err.reason); setverdict(fail, "Error in CTRL SET ", variable, ": ", rx.err.reason);
mtc.stop; mtc.stop;
} }
@ -144,7 +151,7 @@ module Osmocom_CTRL_Functions {
var charstring ctrl_resp; var charstring ctrl_resp;
ctrl_resp := f_ctrl_get(pt, variable); ctrl_resp := f_ctrl_get(pt, variable);
if (not match(ctrl_resp, exp)) { if (not match(ctrl_resp, exp)) {
setverdict(fail, "Unexpected " & variable & ":" & ctrl_resp); setverdict(fail, "Unexpected " & variable & ": '" & ctrl_resp & "'");
mtc.stop; mtc.stop;
} }
} }

View File

@ -124,10 +124,12 @@ private function f_rx_or_fail(template RSL_Message exp_rx, RSL_DCHAN_PT rsl_pt :
return rx_rsl; return rx_rsl;
} }
[] rsl_pt.receive { [] rsl_pt.receive {
log("Error: expected: ", exp_rx);
setverdict(fail, "Unexpected RSL message on DCHAN"); setverdict(fail, "Unexpected RSL message on DCHAN");
mtc.stop; mtc.stop;
} }
[] T.timeout { [] T.timeout {
log("Error: timeout, but expected: ", exp_rx);
setverdict(fail, "Timeout waiting for RSL on DCHAN"); setverdict(fail, "Timeout waiting for RSL on DCHAN");
mtc.stop; mtc.stop;
} }
@ -217,6 +219,8 @@ private function f_cid_by_chan_nr(uint8_t trx_nr, RslChannelNr chan_nr)
runs on RSL_Emulation_CT return integer { runs on RSL_Emulation_CT return integer {
var integer i; var integer i;
for (i := 0; i < sizeof(ConnectionTable); i := i+1) { for (i := 0; i < sizeof(ConnectionTable); i := i+1) {
log("Checking Dchan handler for trx_nr=", trx_nr, " chan_nr=", chan_nr, ": [",i,"] = ",
ConnectionTable[i]);
if (ispresent(ConnectionTable[i].chan_nr) and if (ispresent(ConnectionTable[i].chan_nr) and
ConnectionTable[i].chan_nr == chan_nr and ConnectionTable[i].trx_nr == trx_nr) { ConnectionTable[i].chan_nr == chan_nr and ConnectionTable[i].trx_nr == trx_nr) {
return i; return i;
@ -270,6 +274,7 @@ runs on RSL_Emulation_CT {
ConnectionTable[i].ra_fn := omit; ConnectionTable[i].ra_fn := omit;
} }
ConnectionTable[i].comp_ref := comp_ref; ConnectionTable[i].comp_ref := comp_ref;
log("Created Dchan handler [", i, "] = ", ConnectionTable[i]);
return; return;
} }
} }
@ -287,6 +292,7 @@ runs on RSL_Emulation_CT {
ConnectionTable[i].trx_nr := trx_nr; ConnectionTable[i].trx_nr := trx_nr;
ConnectionTable[i].chan_nr := chan_nr; ConnectionTable[i].chan_nr := chan_nr;
ConnectionTable[i].comp_ref := comp_ref; ConnectionTable[i].comp_ref := comp_ref;
log("Created Dchan handler [", i, "] = ", ConnectionTable[i]);
return; return;
} }
} }
@ -305,6 +311,7 @@ runs on RSL_Emulation_CT return integer {
if (ConnectionTable[i].stream_id == stream_id and if (ConnectionTable[i].stream_id == stream_id and
ConnectionTable[i].chan_nr == chan_nr and ConnectionTable[i].chan_nr == chan_nr and
ConnectionTable[i].comp_ref == comp_ref) { ConnectionTable[i].comp_ref == comp_ref) {
log("Clearing Dchan handler [", i, "] = ", ConnectionTable[i]);
f_cid_clear(i); f_cid_clear(i);
} }
} }
@ -352,6 +359,7 @@ runs on RSL_Emulation_CT return RSL_Message {
return LastActTable[i].chan_act; return LastActTable[i].chan_act;
} }
} }
log("LastActTable: ", LastActTable);
testcase.stop("No LastActTable entry found for TRX ", trx_nr, " ", chan_nr); testcase.stop("No LastActTable entry found for TRX ", trx_nr, " ", chan_nr);
} }
@ -555,6 +563,7 @@ function main(boolean bts_role := true) runs on RSL_Emulation_CT {
/* TODO: add timer to time-out ConnectionTable entries which /* TODO: add timer to time-out ConnectionTable entries which
* never get followed-up to */ * never get followed-up to */
CLIENT_PT.send(rx_rsl.rsl) to ConnectionTable[cid].comp_ref; CLIENT_PT.send(rx_rsl.rsl) to ConnectionTable[cid].comp_ref;
log("Modified Dchan handler [", cid, "] = ", ConnectionTable[cid]);
} else if (ischosen(rr.payload.imm_ass_rej)) { } else if (ischosen(rr.payload.imm_ass_rej)) {
for (i := 0; i < sizeof(rr.payload.imm_ass_rej.payload); i := i + 1) { for (i := 0; i < sizeof(rr.payload.imm_ass_rej.payload); i := i + 1) {
ra := bit2oct(rr.payload.imm_ass_rej.payload[i].req_ref.ra); ra := bit2oct(rr.payload.imm_ass_rej.payload[i].req_ref.ra);

View File

@ -363,6 +363,7 @@ private function f_create_expect(charstring dest_number, SMPP_ConnHdlr hdlr)
runs on SMPP_Emulation_CT { runs on SMPP_Emulation_CT {
for (var integer i := 0; i < sizeof(ExpectTable); i := i+1) { for (var integer i := 0; i < sizeof(ExpectTable); i := i+1) {
if (ExpectTable[i].dst_addr == dest_number) { if (ExpectTable[i].dst_addr == dest_number) {
log("SMPP ExpectTable[", i, "]: Replacing entry for ", dest_number, " -> ", hdlr);
ExpectTable[i] := { ExpectTable[i] := {
dst_ton := omit, dst_ton := omit,
dst_npi := omit, dst_npi := omit,
@ -374,6 +375,7 @@ runs on SMPP_Emulation_CT {
} }
for (var integer i := 0; i < sizeof(ExpectTable); i := i+1) { for (var integer i := 0; i < sizeof(ExpectTable); i := i+1) {
if (ExpectTable[i].vc_conn == null) { if (ExpectTable[i].vc_conn == null) {
log("SMPP ExpectTable[", i, "]: Adding entry for ", dest_number, " -> ", hdlr);
ExpectTable[i] := { ExpectTable[i] := {
dst_ton := omit, dst_ton := omit,
dst_npi := omit, dst_npi := omit,

View File

@ -463,6 +463,7 @@ var GSUP_IE auth_tuple;
function f_mm_auth() runs on BSC_ConnHdlr function f_mm_auth() runs on BSC_ConnHdlr
{ {
if (g_pars.net.expect_auth) { if (g_pars.net.expect_auth) {
log("XX f_mm_auth");
as_GSUP_SAI(); as_GSUP_SAI();
if (g_pars.use_umts_aka) { if (g_pars.use_umts_aka) {
BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_MM_AUTH_REQ_3G(g_pars.vec.rand, g_pars.vec.autn))); BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_MM_AUTH_REQ_3G(g_pars.vec.rand, g_pars.vec.autn)));

View File

@ -5717,6 +5717,7 @@ testcase TC_ho_inter_bsc_unknown_cell() runs on MTC_CT {
private altstep as_mgcp_ack_all_mdcx(CallParameters cpars) runs on BSC_ConnHdlr { private altstep as_mgcp_ack_all_mdcx(CallParameters cpars) runs on BSC_ConnHdlr {
var MgcpCommand mgcp_cmd; var MgcpCommand mgcp_cmd;
[] MGCP.receive(tr_MDCX) -> value mgcp_cmd { [] MGCP.receive(tr_MDCX) -> value mgcp_cmd {
log("XXXX ", mgcp_cmd);
var charstring conn_id; var charstring conn_id;
f_mgcp_find_param_entry(mgcp_cmd.params, "I", conn_id); f_mgcp_find_param_entry(mgcp_cmd.params, "I", conn_id);
var SDP_Message sdp := valueof(ts_SDP(cpars.mgw_conn_2.mgw_rtp_ip, cpars.mgw_conn_2.mgw_rtp_ip, var SDP_Message sdp := valueof(ts_SDP(cpars.mgw_conn_2.mgw_rtp_ip, cpars.mgw_conn_2.mgw_rtp_ip,
@ -6652,8 +6653,11 @@ friend function f_tc_call_re_establishment_1(charstring id, BSC_ConnHdlrPars par
runs on BSC_ConnHdlr { runs on BSC_ConnHdlr {
f_init_handler(pars, t_guard := 30.0); f_init_handler(pars, t_guard := 30.0);
log("XX f_perform_lu");
f_perform_lu(); f_perform_lu();
log("XX f_perform_lu done");
var CallParameters cpars := valueof(t_CallParams('12345'H, 0)); var CallParameters cpars := valueof(t_CallParams('12345'H, 0));
f_mo_call_establish(cpars); f_mo_call_establish(cpars);
f_sleep(3.0); f_sleep(3.0);