sccp: Add TC_process_rx_xudt, verifying reception of SCCP XUDT

Test if a XUDT SCCP message is processed by libosmo-sigtran.  We
assume any XUDT is received (and echoed back) just like normal UDT.

Related: OS#5281, SYS#5674
Change-Id: Idbf6db7a684e51858129618b2fcffcbe55b1b70f
This commit is contained in:
Harald Welte 2021-10-26 14:37:54 +02:00
parent ce4d5bb4a5
commit 4038d4c4bd
2 changed files with 73 additions and 0 deletions

View File

@ -171,6 +171,53 @@ template PDU_SCCP tr_SCCP_UDT(template (present) SCCP_PAR_Address calling, templ
}
}
template (value) PDU_SCCP ts_SCCP_XUDT(SCCP_PAR_Address calling, SCCP_PAR_Address called,
template (value) octetstring data,
template (value) BIT4 msg_hdl := '0000'B,
template (value) integer hop_ctr := 16) := {
extudata := {
messageType := xudt,
protClass := {'0000'B, msg_hdl},
hopCounter := hop_ctr,
pointer1 := 0, /* overwritten */
pointer2 := 0, /* overwritten */
pointer3 := 0, /* overwritten */
pointer4 := 0, /* overwritten */
calledPAddress := ConvertASPAddressToEncodedAddress_itu(called),
callingPAddress := ConvertASPAddressToEncodedAddress_itu(calling),
data := {
paramLength := 0,
data := data
},
optionalPart := omit,
eop := omit
}
}
template PDU_SCCP tr_SCCP_XUDT(template (present) SCCP_PAR_Address calling, template (present) SCCP_PAR_Address called,
template octetstring data := ?,
template BIT4 msg_hdl := '0000'B,
template integer hop_ctr := ?) := {
extudata := {
messageType := xudt,
protClass := {'0000'B, msg_hdl},
hopCounter := hop_ctr,
pointer1 := ?,
pointer2 := ?,
pointer3 := ?,
pointer4 := ?,
calledPAddress := tr_Addr(called),
callingPAddress := tr_Addr(calling),
data := {
paramLength := ?,
data := data
},
optionalPart := { segmentation:= omit, importance := * } ifpresent,
eop := { paramName:= con_SCCP_eop } ifpresent
}
}
template PDU_SCCP tr_SCCP_IT(template (present) OCT3 source_lref := ?,
template (present) OCT3 dest_lref := ?) := {
inacttest := {

View File

@ -310,6 +310,31 @@ testcase TC_it_avoids_tiar() runs on SCCP_Test_RAW_CT {
}
}
private function f_tx_xudt_exp(SCCP_PAR_Address calling, SCCP_PAR_Address called, octetstring data) runs on SCCP_Test_RAW_CT {
var template PDU_SCCP exp_rx;
f_send_sccp(ts_SCCP_XUDT(calling, called, data));
exp_rx := (tr_SCCP_UDT(called, calling, data), tr_SCCP_XUDT(called, calling, data));
f_exp_sccp(exp_rx);
}
/* Test if the IUT SCCP code processes an XUDT [treat it like UDT] and answers back. */
testcase TC_process_rx_xudt() runs on SCCP_Test_RAW_CT {
var SCCP_PAR_Address calling, called;
var octetstring data := f_rnd_octstring(f_rnd_int(100));
f_init_raw(mp_sccp_cfg[0]);
f_sleep(1.0);
called := valueof(ts_SccpAddr_PC_SSN(mp_sccp_cfg[0].peer_pc, mp_sccp_cfg[0].peer_ssn,
mp_sccp_cfg[0].sio, mp_sccp_cfg[0].sccp_service_type));
calling := valueof(ts_SccpAddr_PC_SSN(mp_sccp_cfg[0].own_pc, mp_sccp_cfg[0].own_ssn,
mp_sccp_cfg[0].sio, mp_sccp_cfg[0].sccp_service_type));
/* Make sure an XUDT is echoed back just like an UDT */
f_tx_xudt_exp(calling, called, data);
setverdict(pass);
}
function f_scmg_xceive(SCCP_PAR_Address calling, SCCP_PAR_Address called,
template (value) PDU_SCMG_message tx,
template (omit) PDU_SCMG_message rx_exp,
@ -429,6 +454,7 @@ control {
execute( TC_udt_without_cr_cc() );
execute( TC_tiar_timeout() );
execute( TC_it_avoids_tiar() );
execute( TC_process_rx_xudt() );
execute( TC_scmg_sst_ssn1() );
execute( TC_scmg_sst_ssn_valid() );