WIP: add TC_pdp46_clients_interact

Change-Id: I99c58e3412c3b2b68f7fbff16443fb73940a4bb0
This commit is contained in:
Oliver Smith 2019-03-13 11:08:40 +01:00
parent 62cd07948a
commit 4a0df5b5eb
1 changed files with 50 additions and 0 deletions

View File

@ -701,6 +701,25 @@ module GGSN_Tests {
f_wait_icmp6(ctx, (tr_ICMPv6_ERP,tr_ICMPv6_DU));
}
/* new block */
/* create ICMPv6 router solicitation deriving link-id from PDP Context EUA */
function f_icmpv6_rs_for_pdp46(in PdpContext ctx) return octetstring {
var OCT16 interface_id := ctx.eua.endUserAddress.endUserAddressIPv4andIPv6.ipv6_address;
return f_gen_icmpv6_router_solicitation(interface_id);
}
/* generate and encode ICMPv6 neighbor solicitation for PDP Context */
function f_gen_icmpv6_neigh_solicit_for_pdp46(in PdpContext ctx) return octetstring {
var OCT16 interface_id := ctx.eua.endUserAddress.endUserAddressIPv4andIPv6.ipv6_address;
var OCT16 link_local := f_ipv6_link_local(interface_id);
var OCT16 daddr := f_ipv6_sol_node_mcast(link_local);
return f_gen_icmpv6_neigh_solicit(link_local, daddr, link_local);
}
/* new block end */
/* Assert we don't receive a ICMPv4/6 echo reply (or unreachable) from GTP */
function f_wait_gtpu_fail(PdpContext ctx) runs on GT_CT {
T_default.start;
@ -1135,6 +1154,36 @@ module GGSN_Tests {
f_pdp_ctx_del(ctx, '1'B);
}
/* Validate if different clients (pdp ctx) can reach one another through GGSN. */
testcase TC_pdp46_clients_interact() runs on GT_CT {
f_init();
var PdpContext ctxA := valueof(t_DefinePDP(f_rnd_imsi('26242'H), '1234'O, c_ApnInet46, valueof(t_EuaIPv4Dynv6Dyn)));
var PdpContext ctxB := valueof(t_DefinePDP(f_rnd_imsi('26242'H), '1234'O, c_ApnInet46, valueof(t_EuaIPv4Dynv6Dyn)));
f_pdp_ctx_act(ctxA);
f_send_gtpu(ctxA, f_icmpv6_rs_for_pdp46(ctxA));
f_wait_rtr_adv(ctxA);
f_send_gtpu(ctxA, f_gen_icmpv6_neigh_solicit_for_pdp46(ctxA));
f_pdp_ctx_act(ctxB);
f_send_gtpu(ctxB, f_icmpv6_rs_for_pdp46(ctxB));
f_wait_rtr_adv(ctxB);
f_send_gtpu(ctxB, f_gen_icmpv6_neigh_solicit_for_pdp46(ctxB));
var OCT16 addrA_ll := f_ipv6_link_local(ctxA.eua.endUserAddress.endUserAddressIPv4andIPv6.ipv6_address);
var OCT16 addrB_ll := f_ipv6_link_local(ctxB.eua.endUserAddress.endUserAddressIPv4andIPv6.ipv6_address);
var OCT16 addrA_glob := f_ipv6_global(ctxA.eua.endUserAddress.endUserAddressIPv4andIPv6.ipv6_address);
var OCT16 addrB_glob := f_ipv6_global(ctxB.eua.endUserAddress.endUserAddressIPv4andIPv6.ipv6_address);
/* Validate if clients can interact using ll addr. */
f_send_gtpu(ctxA, f_gen_icmpv6_echo(addrA_ll, addrB_ll));
f_wait_gtpu_fail(ctxB);
/* Validate if clients can interact using global addr. */
f_send_gtpu(ctxA, f_gen_icmpv6_echo(addrA_glob, addrB_glob));
f_wait_gtpu_fail(ctxB);
f_pdp_ctx_del(ctxA, '1'B);
}
control {
execute(TC_pdp4_act_deact());
@ -1157,6 +1206,7 @@ module GGSN_Tests {
execute(TC_pdp46_act_deact_pcodns4());
execute(TC_pdp46_act_deact_pcodns6());
execute(TC_pdp46_act_deact_gtpu_access());
execute(TC_pdp46_clients_interact());
execute(TC_echo_req_resp());
}