GGSN_Tests: Actually request the right IPv4 PCO according to the test case

Missing: Verification of returned PCO
This commit is contained in:
Harald Welte 2017-08-13 20:01:38 +02:00
parent 11dbc7b6cc
commit dca8005080
2 changed files with 51 additions and 9 deletions

View File

@ -14,3 +14,5 @@ GGSN_Tests.TC_pdp4_act_deact_pcodns
GGSN_Tests.TC_pdp6_act_deact
GGSN_Tests.TC_pdp6_act_deact_pcodns
GGSN_Tests.TC_pdp6_act_deact_icmp6
GGSN_Tests.TC_echo_req_resp

View File

@ -79,7 +79,7 @@ module GGSN_Tests {
}
/* generalized GTP-C receive template */
template PDU_GTPC tr_GTP1C_PDU(template OCT1 msg_type, template OCT4 teid) := {
template PDU_GTPC tr_GTP1C_PDU(template OCT1 msg_type, template OCT4 teid, template GTPC_PDUs pdu := ?) := {
/* N-PDU Number flag (PN) shall be set to '0'. A GTP-C receiver shall not return an
* error if this flag is set to '1'. */
pn_bit := '0'B,
@ -95,7 +95,7 @@ module GGSN_Tests {
lengthf := ?,
teid := teid,
opt_part := *,
gtpc_pdu := ?
gtpc_pdu := pdu
}
/* generalized GTP-C send template */
@ -125,25 +125,37 @@ module GGSN_Tests {
/* recovery IE */
template Recovery_gtpc ts_Recovery(OCT1 restart_counter) := {
type_gtpc := '00'O, /* we assume encoder fixes this */
type_gtpc := '0E'O,
restartCounter := restart_counter
}
template Recovery_gtpc tr_Recovery(template OCT1 restart_counter) := {
type_gtpc := '0E'O,
restartCounter := restart_counter
}
/* template matching reception of GTP-C echo-request */
template Gtp1cUnitdata tr_GTPC_MsgType(template GtpPeer peer, template OCT1 msg_type, template OCT4 teid) := {
template Gtp1cUnitdata tr_GTPC_MsgType(template GtpPeer peer, template OCT1 msg_type, template OCT4 teid, template GTPC_PDUs pdus := ?) := {
peer := peer,
gtpc := tr_GTP1C_PDU(msg_type, teid)
gtpc := tr_GTP1C_PDU(msg_type, teid, pdus)
}
/* template matching reception of GTP-C echo-request */
template Gtp1cUnitdata tr_GTPC_PING(template GtpPeer peer) := tr_GTPC_MsgType(peer, echoRequest, '00000000'O);
template GTPC_PDUs tr_EchoRespPDU(template OCT1 restart_counter) := {
echoResponse := {
recovery := tr_Recovery(restart_counter),
private_extension_gtpc := *
}
}
/* template matching reception of GTP-C echo-response */
template Gtp1cUnitdata tr_GTPC_PONG(template GtpPeer peer) := tr_GTPC_MsgType(peer, echoResponse, '00000000'O, tr_EchoRespPDU(?));
template GTPC_PDUs ts_EchoRespPDU(OCT1 restart_counter) := {
echoResponse := {
recovery := {
type_gtpc := '00'O, /* we assume encoder fixes? */
restartCounter := restart_counter
},
recovery := ts_Recovery(restart_counter),
private_extension_gtpc := omit
}
}
@ -154,6 +166,18 @@ module GGSN_Tests {
gtpc := ts_GTP1C_PDU(echoResponse, '00000000'O, valueof(ts_EchoRespPDU(rest_ctr)), seq)
}
template GTPC_PDUs ts_EchoReqPDU := {
echoRequest := {
private_extension_gtpc := omit
}
}
/* master template for sending a GTP-C echo request */
template Gtp1cUnitdata ts_GTPC_PING(GtpPeer peer, uint16_t seq) := {
peer := peer,
gtpc := ts_GTP1C_PDU(echoRequest, '00000000'O, valueof(ts_EchoReqPDU), seq)
}
template EndUserAddress t_EuaIPv4(template OCT4 ip_addr) := {
type_gtpc := '80'O,
endUserAddress := {
@ -836,6 +860,7 @@ module GGSN_Tests {
testcase TC_pdp4_act_deact_ipcp() runs on GT_CT {
f_init();
var PdpContext ctx := valueof(t_DefinePDP(f_rnd_imsi('26242'H), '1234'O, c_ApnInternet, valueof(t_EuaIPv4Dyn)));
ctx.pco_req := valueof(ts_PCO_IPv4_DNS_IPCP);
f_pdp_ctx_act(ctx);
f_pdp_ctx_del(ctx, '1'B);
}
@ -843,10 +868,23 @@ module GGSN_Tests {
testcase TC_pdp4_act_deact_pcodns() runs on GT_CT {
f_init();
var PdpContext ctx := valueof(t_DefinePDP(f_rnd_imsi('26242'H), '1234'O, c_ApnInternet, valueof(t_EuaIPv4Dyn)));
ctx.pco_req := valueof(ts_PCO_IPv4_DNS_CONT);
f_pdp_ctx_act(ctx);
f_pdp_ctx_del(ctx, '1'B);
}
testcase TC_echo_req_resp() runs on GT_CT {
f_init();
f_send_gtpc(ts_GTPC_PING(g_peer_c, g_c_seq_nr));
T_default.start;
alt {
[] GTPC.receive(tr_GTPC_PONG(g_peer_c)) { setverdict(pass); };
[] GTPC.receive { repeat; };
[] T_default.timeout { setverdict(fail); }
}
T_default.stop;
}
control {
execute(TC_pdp4_act_deact());
execute(TC_pdp4_act_deact_ipcp());
@ -855,5 +893,7 @@ module GGSN_Tests {
execute(TC_pdp6_act_deact());
execute(TC_pdp6_act_deact_pcodns());
execute(TC_pdp6_act_deact_icmp6());
execute(TC_echo_req_resp());
}
}