epdg: Introduce test TC_mt_ipv4_echo_req
Change-Id: Ie5dc1bd995262f9253cc067c97a82c801b0080e1
diff --git a/epdg/EPDG_Tests.ttcn b/epdg/EPDG_Tests.ttcn
index 0d1b10f..fb9f98b 100644
--- a/epdg/EPDG_Tests.ttcn
+++ b/epdg/EPDG_Tests.ttcn
@@ -6,6 +6,9 @@
import from Osmocom_Types all;
import from L3_Common all;
import from DNS_Helpers all;
+import from IP_Types all;
+import from ICMP_Types all;
+import from ICMP_Templates all;
import from IPA_Emulation all;
import from PCO_Types all;
@@ -692,6 +695,31 @@
GTP2.send(ts_GTPU_PING(peer, seq := seq_nr));
GTP2.receive(tr_GTPU_PONG(peer));
}
+private altstep as_GTPU_rx_icmp4(template (present) PDU_ICMP expected := ?) runs on EPDG_ConnHdlr {
+ var Gtp1uUnitdata rx_msg;
+ var template (value) Gtp1uPeer peer := ts_GtpPeerU(f_inet_addr(g_pars.bearer.gtpu_addr_remote));
+
+ [] GTP2.receive(tr_GTPU_GPDU(peer, g_pars.bearer.teid_local)) -> value rx_msg {
+ /*TODO: verify gtpu txseq:
+ if (f_verify_gtpu_txseq(ud.gtpu, use_gtpu_txseq) == false) {
+ setverdict(fail);
+ stop;
+ }
+ */
+ var octetstring gpdu := rx_msg.gtpu.gtpu_IEs.g_PDU_IEs.data;
+ var IPv4_packet ip4 := f_IPv4_dec(gpdu);
+ if (ip4.header.ver != 4) {
+ repeat;
+ }
+ var PDU_ICMP icmp4 := f_dec_PDU_ICMP(ip4.payload);
+ if (not match(icmp4, expected)) {
+ repeat;
+ }
+ }
+ [] GTP2.receive(Gtp1uUnitdata:?) -> value rx_msg {
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Unexpected GTP msg rx: ", rx_msg));
+ }
+}
/* GSUP AuthInfo Req + Resp, triggers SWx MAR + MAA. */
private function f_GSUP_AI_success() runs on EPDG_ConnHdlr {
@@ -942,6 +970,24 @@
setverdict(pass);
}
+private function f_TC_mt_ipv4_echo_req(charstring id) runs on EPDG_ConnHdlr {
+ f_initial_attach();
+ /* Dispatch Echo Resp to this component: */
+ f_gtp2_register_teid('00000000'O);
+ var octetstring echo_req := f_gen_icmpv4_echo(f_inet_addr(mp_upf_gtpu_local_ip), f_inet_addr(g_pars.ue_ip));
+ f_GTP1U_send(echo_req);
+ as_GTPU_rx_icmp4((tr_ICMPv4_ERP, tr_ICMPv4_DU));
+ f_GSUP_PurgeMS_success();
+}
+testcase TC_mt_ipv4_echo_req() runs on MTC_CT {
+ var EPDG_ConnHdlrPars pars := f_init_pars();
+ var EPDG_ConnHdlr vc_conn;
+ f_init();
+ vc_conn := f_start_handler(refers(f_TC_mt_ipv4_echo_req), pars);
+ vc_conn.done;
+ setverdict(pass);
+}
+
control {
execute ( TC_authinfo_normal() );
execute ( TC_ho_lte_to_wifi() );
@@ -950,6 +996,7 @@
execute ( TC_concurrent_ues2() );
execute ( TC_concurrent_ues100() );
execute ( TC_upf_echo_req() );
+ execute ( TC_mt_ipv4_echo_req() );
}
}
diff --git a/epdg/ICMP_Types.ttcn b/epdg/ICMP_Types.ttcn
new file mode 120000
index 0000000..361cad1
--- /dev/null
+++ b/epdg/ICMP_Types.ttcn
@@ -0,0 +1 @@
+../deps/titan.ProtocolModules.ICMP/src/ICMP_Types.ttcn
\ No newline at end of file
diff --git a/epdg/gen_links.sh b/epdg/gen_links.sh
index ed4209c..7a4e60d 100755
--- a/epdg/gen_links.sh
+++ b/epdg/gen_links.sh
@@ -17,6 +17,14 @@
FILES="IPL4asp_Functions.ttcn IPL4asp_PT.cc IPL4asp_PT.hh IPL4asp_PortType.ttcn IPL4asp_Types.ttcn IPL4asp_discovery.cc IPL4asp_protocol_L234.hh"
gen_links $DIR $FILES
+DIR=$BASEDIR/titan.ProtocolModules.IP/src
+FILES="IP_EncDec.cc IP_Types.ttcn"
+gen_links $DIR $FILES
+
+DIR=$BASEDIR/titan.ProtocolModules.ICMP/src
+FILES="ICMP_EncDec.cc ICMP_Types.ttcn"
+gen_links $DIR $FILES
+
DIR=$BASEDIR/titan.TestPorts.TELNETasp/src
FILES="TELNETasp_PT.cc TELNETasp_PT.hh TELNETasp_PortType.ttcn"
gen_links $DIR $FILES
@@ -54,6 +62,7 @@
FILES+="GTPv1U_CodecPort.ttcn GTPv1U_CodecPort_CtrlFunct.ttcn GTPv1U_CodecPort_CtrlFunctDef.cc GTPv1U_Templates.ttcn "
FILES+="GTPv2_PrivateExtensions.ttcn GTPv2_Templates.ttcn "
FILES+="GTPv2_CodecPort.ttcn GTPv2_CodecPort_CtrlFunctDef.cc GTPv2_CodecPort_CtrlFunct.ttcn GTPv2_Emulation.ttcn "
+FILES+="ICMP_Templates.ttcn "
gen_links $DIR $FILES
ignore_pp_results
diff --git a/epdg/regen_makefile.sh b/epdg/regen_makefile.sh
index eb5935e..9aa83b4 100755
--- a/epdg/regen_makefile.sh
+++ b/epdg/regen_makefile.sh
@@ -9,6 +9,8 @@
IPL4asp_PT.cc
IPL4asp_discovery.cc
Native_FunctionDefs.cc
+ IP_EncDec.cc
+ ICMP_EncDec.cc
TCCConversion.cc
TCCEncoding.cc
TCCInterface.cc