DIAMETER_Emulation: Notify user of CapabilityExchange
During start of the test case, we must wait until the IUT has established a DIAMETER/SCTP connection to the testsuite. Implement this by means of a message on the DIAMETER_UNIT port and an associated helper function. Change-Id: I95434307efc67025ee6d373561f6d22398f959c5
This commit is contained in:
parent
61f73d553b
commit
d01b5d0af0
|
@ -37,6 +37,12 @@ import from Native_Functions all;
|
||||||
|
|
||||||
type hexstring IMSI;
|
type hexstring IMSI;
|
||||||
|
|
||||||
|
/* notify the recipient that a Capability Exchange happened */
|
||||||
|
type record DiameterCapabilityExchgInd {
|
||||||
|
PDU_DIAMETER rx,
|
||||||
|
PDU_DIAMETER tx
|
||||||
|
};
|
||||||
|
|
||||||
type component DIAMETER_ConnHdlr {
|
type component DIAMETER_ConnHdlr {
|
||||||
port DIAMETER_Conn_PT DIAMETER;
|
port DIAMETER_Conn_PT DIAMETER;
|
||||||
/* procedure based port to register for incoming connections */
|
/* procedure based port to register for incoming connections */
|
||||||
|
@ -50,7 +56,7 @@ type port DIAMETER_Conn_PT message {
|
||||||
|
|
||||||
/* global test port e.g. for non-imsi/conn specific messages */
|
/* global test port e.g. for non-imsi/conn specific messages */
|
||||||
type port DIAMETER_PT message {
|
type port DIAMETER_PT message {
|
||||||
inout PDU_DIAMETER;
|
inout PDU_DIAMETER, DiameterCapabilityExchgInd;
|
||||||
} with { extension "internal" };
|
} with { extension "internal" };
|
||||||
|
|
||||||
|
|
||||||
|
@ -319,6 +325,8 @@ function main(DIAMETEROps ops, DIAMETER_conn_parameters p, charstring id) runs o
|
||||||
resp := ts_DIA_CEA(mrf.msg.hop_by_hop_id, mrf.msg.end_to_end_id, p.origin_host,
|
resp := ts_DIA_CEA(mrf.msg.hop_by_hop_id, mrf.msg.end_to_end_id, p.origin_host,
|
||||||
p.origin_realm, f_inet_addr(p.local_ip), p.vendor_app_id);
|
p.origin_realm, f_inet_addr(p.local_ip), p.vendor_app_id);
|
||||||
DIAMETER.send(t_DIAMETER_Send(g_diameter_conn_id, resp));
|
DIAMETER.send(t_DIAMETER_Send(g_diameter_conn_id, resp));
|
||||||
|
/* notify our user that the CER->CEA exchange has happened */
|
||||||
|
DIAMETER_UNIT.send(DiameterCapabilityExchgInd:{rx:=mrf.msg, tx:=valueof(resp)});
|
||||||
}
|
}
|
||||||
|
|
||||||
/* DIAMETER from remote peer */
|
/* DIAMETER from remote peer */
|
||||||
|
@ -434,4 +442,23 @@ runs on DIAMETER_Emulation_CT return template PDU_DIAMETER {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function f_diameter_wait_capability(DIAMETER_PT pt)
|
||||||
|
{
|
||||||
|
/* Wait for the Capability Exchange with the DUT */
|
||||||
|
timer T := 10.0;
|
||||||
|
T.start;
|
||||||
|
alt {
|
||||||
|
[] pt.receive(DiameterCapabilityExchgInd:?) {}
|
||||||
|
[] pt.receive {
|
||||||
|
setverdict(fail, "Unexpected receive waiting for DiameterCapabilityExchgInd");
|
||||||
|
mtc.stop;
|
||||||
|
}
|
||||||
|
[] T.timeout {
|
||||||
|
setverdict(fail, "Timeout waiting for DiameterCapabilityExchgInd");
|
||||||
|
mtc.stop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -229,6 +229,8 @@ friend function f_init_diameter(charstring id) runs on MTC_CT {
|
||||||
connect(vc_DIAMETER:DIAMETER_UNIT, self:DIAMETER_UNIT);
|
connect(vc_DIAMETER:DIAMETER_UNIT, self:DIAMETER_UNIT);
|
||||||
connect(vc_DIAMETER:DIAMETER_PROC, self:DIAMETER_PROC);
|
connect(vc_DIAMETER:DIAMETER_PROC, self:DIAMETER_PROC);
|
||||||
vc_DIAMETER.start(DIAMETER_Emulation.main(ops, pars, id));
|
vc_DIAMETER.start(DIAMETER_Emulation.main(ops, pars, id));
|
||||||
|
|
||||||
|
f_diameter_wait_capability(DIAMETER_UNIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
friend template (value) TAI ts_enb_S1AP_TAI(EnbParams enb) := {
|
friend template (value) TAI ts_enb_S1AP_TAI(EnbParams enb) := {
|
||||||
|
|
Loading…
Reference in New Issue