pespin has uploaded this change for review. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/40746?usp=email )
Change subject: GTPv1U_Emulation: support multiple client ports per GTP1U_ConnHdlr
......................................................................
GTPv1U_Emulation: support multiple client ports per GTP1U_ConnHdlr
This feature is already present in GTP1U code of GTP_Emulation.
That part of the code will be removed and ported to use
GTPv1U_Emulation, so we need to also support this feature here.
Change-Id: I10ce33f30a2da5159f8040725df619844a71d6bc
---
M epdg/EPDG_Tests.ttcn
M library/GTPv1U_Emulation.ttcnpp
M pgw/PGW_Tests.ttcn
3 files changed, 31 insertions(+), 29 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/46/40746/1
diff --git a/epdg/EPDG_Tests.ttcn b/epdg/EPDG_Tests.ttcn
index f67fc2c..9d22b15 100644
--- a/epdg/EPDG_Tests.ttcn
+++ b/epdg/EPDG_Tests.ttcn
@@ -371,8 +371,8 @@
connect(vc_conn:GTP2, vc_GTP2:CLIENT);
connect(vc_conn:GTP2_PROC, vc_GTP2:CLIENT_PROC);
/* GTP1U */
- connect(vc_conn:GTP1U, vc_GTP1U:CLIENT);
- connect(vc_conn:GTP1U_PROC, vc_GTP1U:CLIENT_PROC);
+ connect(vc_conn:GTP1U[0], vc_GTP1U:CLIENT);
+ connect(vc_conn:GTP1U_PROC[0], vc_GTP1U:CLIENT_PROC);
/* SWx */
vc_conn_swx := DIAMETER_ConnHdlr_CT.create(id);
@@ -880,18 +880,18 @@
}
private function f_GTP1U_send(octetstring payload) runs on EPDG_ConnHdlr {
var Gtp1uPeer peer :=
valueof(ts_GtpPeerU(f_inet_addr(g_pars.bearer.gtpu_addr_remote)));
- GTP1U.send(ts_GTP1U_GPDU(peer, omit /*opt_part*/, g_pars.bearer.teid_remote, payload));
+ GTP1U[0].send(ts_GTP1U_GPDU(peer, omit /*opt_part*/, g_pars.bearer.teid_remote,
payload));
}
private function f_GTP1U_echo_ping_pong(uint16_t seq_nr := 0) runs on EPDG_ConnHdlr {
var Gtp1uPeer peer :=
valueof(ts_GtpPeerU(f_inet_addr(g_pars.bearer.gtpu_addr_remote)));
- GTP1U.send(ts_GTPU_PING(peer, seq := seq_nr));
- GTP1U.receive(tr_GTPU_PONG(peer));
+ GTP1U[0].send(ts_GTPU_PING(peer, seq := seq_nr));
+ GTP1U[0].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));
- [] GTP1U.receive(tr_GTPU_GPDU(peer, g_pars.bearer.teid_local)) -> value rx_msg {
+ [] GTP1U[0].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);
@@ -908,7 +908,7 @@
repeat;
}
}
- [] GTP1U.receive(Gtp1uUnitdata:?) -> value rx_msg {
+ [] GTP1U[0].receive(Gtp1uUnitdata:?) -> value rx_msg {
Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Unexpected GTP msg rx:
", rx_msg));
}
}
diff --git a/library/GTPv1U_Emulation.ttcnpp b/library/GTPv1U_Emulation.ttcnpp
index b3de2ab..8b76379 100644
--- a/library/GTPv1U_Emulation.ttcnpp
+++ b/library/GTPv1U_Emulation.ttcnpp
@@ -342,48 +342,50 @@
/***********************************************************************
* Client Component
***********************************************************************/
+/* maximum number of GTP ports a GTP_ConnHdlr component can manage. This allows
+ * connection one GTP_ConnHdlr to several GTP_Emulation(s). */
+const integer NUM_MAX_GTP := 4;
type component GTP1U_ConnHdlr {
- port GTP1UEM_PT GTP1U;
- port GTP1UEM_PROC_PT GTP1U_PROC;
+ port GTP1UEM_PT GTP1U[NUM_MAX_GTP];
+ port GTP1UEM_PROC_PT GTP1U_PROC[NUM_MAX_GTP];
};
-
-function f_gtp1u_register_teid(OCT4 teid) runs on GTP1U_ConnHdlr {
- GTP1U_PROC.call(GTP1UEM_register_teid:{teid}) {
- [] GTP1U_PROC.getreply(GTP1UEM_register_teid:{teid});
+function f_gtp1u_register_teid(OCT4 teid, integer port_idx := 0) runs on GTP1U_ConnHdlr
{
+ GTP1U_PROC[port_idx].call(GTP1UEM_register_teid:{teid}) {
+ [] GTP1U_PROC[port_idx].getreply(GTP1UEM_register_teid:{teid});
}
}
-function f_gtp1u_allocate_teid() runs on GTP1U_ConnHdlr return OCT4 {
+function f_gtp1u_allocate_teid(integer port_idx := 0) runs on GTP1U_ConnHdlr return OCT4
{
var OCT4 t;
- GTP1U_PROC.call(GTP1UEM_allocate_teid:{}) {
- [] GTP1U_PROC.getreply(GTP1UEM_allocate_teid:{}) -> value t {
+ GTP1U_PROC[port_idx].call(GTP1UEM_allocate_teid:{}) {
+ [] GTP1U_PROC[port_idx].getreply(GTP1UEM_allocate_teid:{}) -> value t {
return t;
}
}
}
#ifdef GTP1U_EMULATION_HAVE_UECUPS
-function f_gtp1u_create_tunnel(template (value) UECUPS_CreateTun gtc)
+function f_gtp1u_create_tunnel(template (value) UECUPS_CreateTun gtc, integer port_idx :=
0)
runs on GTP1U_ConnHdlr {
- GTP1U_PROC.call(GTP1UEM_create_tunnel:{valueof(gtc)}) {
- [] GTP1U_PROC.getreply(GTP1UEM_create_tunnel:{gtc});
+ GTP1U_PROC[port_idx].call(GTP1UEM_create_tunnel:{valueof(gtc)}) {
+ [] GTP1U_PROC[port_idx].getreply(GTP1UEM_create_tunnel:{gtc});
}
}
-function f_gtp1u_destroy_tunnel(template (value) UECUPS_DestroyTun gtd)
+function f_gtp1u_destroy_tunnel(template (value) UECUPS_DestroyTun gtd, integer port_idx
:= 0)
runs on GTP1U_ConnHdlr {
- GTP1U_PROC.call(GTP1UEM_destroy_tunnel:{valueof(gtd)}) {
- [] GTP1U_PROC.getreply(GTP1UEM_destroy_tunnel:{gtd});
+ GTP1U_PROC[port_idx].call(GTP1UEM_destroy_tunnel:{valueof(gtd)}) {
+ [] GTP1U_PROC[port_idx].getreply(GTP1UEM_destroy_tunnel:{gtd});
}
}
-function f_gtp1u_start_program(template (value) UECUPS_StartProgram sprog)
+function f_gtp1u_start_program(template (value) UECUPS_StartProgram sprog, integer
port_idx := 0)
runs on GTP1U_ConnHdlr return UECUPS_StartProgramRes {
var UECUPS_StartProgramRes res;
- GTP1U_PROC.call(GTP1UEM_start_program:{valueof(sprog)}) {
- [] GTP1U_PROC.getreply(GTP1UEM_start_program:{sprog}) -> value res;
+ GTP1U_PROC[port_idx].call(GTP1UEM_start_program:{valueof(sprog)}) {
+ [] GTP1U_PROC[port_idx].getreply(GTP1UEM_start_program:{sprog}) -> value res;
}
return res;
}
diff --git a/pgw/PGW_Tests.ttcn b/pgw/PGW_Tests.ttcn
index 4d225fa..01c4e46 100644
--- a/pgw/PGW_Tests.ttcn
+++ b/pgw/PGW_Tests.ttcn
@@ -311,8 +311,8 @@
vc_GTP1U := GTPv1U_Emulation_CT.create("GTP1U_EM");
map(vc_GTP1U:GTP1U, system:GTP1U);
connect(vc_GTP1U:TEID0, self:TEID0);
- connect(vc_GTP1U:CLIENT, self:GTP1U);
- connect(vc_GTP1U:CLIENT_PROC, self:GTP1U_PROC);
+ connect(vc_GTP1U:CLIENT, self:GTP1U[0]);
+ connect(vc_GTP1U:CLIENT_PROC, self:GTP1U_PROC[0]);
vc_GTP1U.start(GTPv1U_Emulation.main(cfg));
}
@@ -344,8 +344,8 @@
vc_conn := PGW_Session_CT.create(id);
connect(vc_conn:GTP2, vc_GTP2:CLIENT);
connect(vc_conn:GTP2_PROC, vc_GTP2:CLIENT_PROC);
- connect(vc_conn:GTP1U, vc_GTP1U:CLIENT);
- connect(vc_conn:GTP1U_PROC, vc_GTP1U:CLIENT_PROC);
+ connect(vc_conn:GTP1U[0], vc_GTP1U:CLIENT);
+ connect(vc_conn:GTP1U_PROC[0], vc_GTP1U:CLIENT_PROC);
if (isbound(vc_Gx)) {
vc_conn_gx := DIAMETER_ConnHdlr_CT.create(id);
--
To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/40746?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I10ce33f30a2da5159f8040725df619844a71d6bc
Gerrit-Change-Number: 40746
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>