GGSN: Test PDP Context activation wtih different PCOs

This commit is contained in:
Harald Welte 2017-08-09 20:26:20 +02:00
parent 231b94190c
commit ed7a17750f
1 changed files with 85 additions and 14 deletions

View File

@ -21,6 +21,8 @@ module GGSN_Tests {
hexstring imsi, hexstring imsi,
octetstring msisdn optional, octetstring msisdn optional,
octetstring apn, octetstring apn,
ProtConfigOptions pco_req optional,
ProtConfigOptions pco_neg optional,
EndUserAddress eua, EndUserAddress eua,
OCT16 ip6_prefix optional, OCT16 ip6_prefix optional,
BIT4 nsapi, BIT4 nsapi,
@ -229,7 +231,7 @@ module GGSN_Tests {
template GTPC_PDUs ts_CreatePdpPDU(hexstring imsi, OCT1 restart_ctr, OCT4 teid_data, OCT4 teid_ctrl, template GTPC_PDUs ts_CreatePdpPDU(hexstring imsi, OCT1 restart_ctr, OCT4 teid_data, OCT4 teid_ctrl,
BIT4 nsapi, EndUserAddress eua, octetstring apn, BIT4 nsapi, EndUserAddress eua, octetstring apn,
octetstring sgsn_ip_sign, octetstring sgsn_ip_data, octetstring sgsn_ip_sign, octetstring sgsn_ip_data,
octetstring msisdn) := { octetstring msisdn, template ProtConfigOptions pco := omit) := {
createPDPContextRequest := { createPDPContextRequest := {
imsi := ts_Imsi(imsi), imsi := ts_Imsi(imsi),
rai := omit, rai := omit,
@ -258,7 +260,7 @@ module GGSN_Tests {
trace_type := omit, trace_type := omit,
endUserAddress := eua, endUserAddress := eua,
accessPointName := ts_APN(apn), accessPointName := ts_APN(apn),
protConfigOptions := omit, protConfigOptions := pco,
sgsn_addr_signalling := ts_GsnAddr(sgsn_ip_sign), sgsn_addr_signalling := ts_GsnAddr(sgsn_ip_sign),
sgsn_addr_traffic := ts_GsnAddr(sgsn_ip_data), sgsn_addr_traffic := ts_GsnAddr(sgsn_ip_data),
msisdn := ts_Msisdn(msisdn), msisdn := ts_Msisdn(msisdn),
@ -289,12 +291,41 @@ module GGSN_Tests {
OCT1 restart_ctr, OCT4 teid_data, OCT1 restart_ctr, OCT4 teid_data,
OCT4 teid_ctrl, BIT4 nsapi, EndUserAddress eua, OCT4 teid_ctrl, BIT4 nsapi, EndUserAddress eua,
octetstring apn, octetstring sgsn_ip_sign, octetstring apn, octetstring sgsn_ip_sign,
octetstring sgsn_ip_data, octetstring msisdn) := { octetstring sgsn_ip_data, octetstring msisdn,
template ProtConfigOptions pco := omit) := {
peer := peer, peer := peer,
gtpc := ts_GTP1C_PDU(createPDPContextRequest, '00000000'O, gtpc := ts_GTP1C_PDU(createPDPContextRequest, '00000000'O,
valueof(ts_CreatePdpPDU(imsi, restart_ctr, teid_data, teid_ctrl, valueof(ts_CreatePdpPDU(imsi, restart_ctr, teid_data, teid_ctrl,
nsapi, eua, apn, sgsn_ip_sign, nsapi, eua, apn, sgsn_ip_sign,
sgsn_ip_data, msisdn)), seq) sgsn_ip_data, msisdn, pco)), seq)
}
template ProtConfigOptions ts_PCO := {
type_gtpc := '84'O,
lengthf := 0,
configProtocol := '000'B,
spare := '0000'B,
extension0 := '1'B,
protocols := {}
}
template ProtConfigOptions ts_PCO_IPv6_DNS modifies ts_PCO := {
protocols := {
{ protocolID := '0003'O, lengthProtoID := 0, protoIDContents := ''O }
}
}
template ProtConfigOptions ts_PCO_IPv4_DNS_IPCP modifies ts_PCO := {
protocols := {
{ protocolID := '8021'O, lengthProtoID := 16, protoIDContents := '01000010810600000000830600000000'O }
}
}
template ProtConfigOptions ts_PCO_IPv4_DNS_CONT modifies ts_PCO := {
protocols := {
{ protocolID := '000d'O, lengthProtoID := 0, protoIDContents := ''O }
}
} }
function f_teardown_ind_IE(in template BIT1 ind) return template TearDownInd { function f_teardown_ind_IE(in template BIT1 ind) return template TearDownInd {
@ -466,6 +497,7 @@ module GGSN_Tests {
msisdn := msisdn, msisdn := msisdn,
nsapi := f_rnd_nsapi(), nsapi := f_rnd_nsapi(),
apn := apn, apn := apn,
pco_req := omit,
eua := eua, eua := eua,
teid := f_rnd_tei(), teid := f_rnd_tei(),
teic := f_rnd_tei(), teic := f_rnd_tei(),
@ -493,7 +525,7 @@ module GGSN_Tests {
log("sending CreatePDP"); log("sending CreatePDP");
f_send_gtpc(ctx, ts_GTPC_CreatePDP(g_peer_c, ctx.c_seq_nr, ctx.imsi, g_restart_ctr, f_send_gtpc(ctx, ts_GTPC_CreatePDP(g_peer_c, ctx.c_seq_nr, ctx.imsi, g_restart_ctr,
ctx.teid, ctx.teic, ctx.nsapi, ctx.eua, ctx.apn, ctx.teid, ctx.teic, ctx.nsapi, ctx.eua, ctx.apn,
g_sgsn_ip_c, g_sgsn_ip_u, ctx.msisdn)); g_sgsn_ip_c, g_sgsn_ip_u, ctx.msisdn, ctx.pco_req));
T_default.start; T_default.start;
d := activate(pingpong()); d := activate(pingpong());
alt { alt {
@ -503,6 +535,7 @@ module GGSN_Tests {
ctx.teid_remote := cpr.teidDataI.teidDataI; ctx.teid_remote := cpr.teidDataI.teidDataI;
ctx.teic_remote := cpr.teidControlPlane.teidControlPlane; ctx.teic_remote := cpr.teidControlPlane.teidControlPlane;
ctx.eua := cpr.endUserAddress; ctx.eua := cpr.endUserAddress;
ctx.pco_neg := cpr.protConfigOptions;
setverdict(pass); setverdict(pass);
} else { } else {
setverdict(fail); setverdict(fail);
@ -537,12 +570,6 @@ module GGSN_Tests {
/* IPv6 neighbor solicitation fe80::2 -> ff02::1:ff00:2 from 02:88:b5:1f:25:59 */ /* IPv6 neighbor solicitation fe80::2 -> ff02::1:ff00:2 from 02:88:b5:1f:25:59 */
const octetstring c_neigh_solicit:= '6000000000203afffe800000000000000000000000000002ff0200000000000000000001ff00000287009f9600000000fe80000000000000000000000000000201010288b51f2559'O; const octetstring c_neigh_solicit:= '6000000000203afffe800000000000000000000000000002ff0200000000000000000001ff00000287009f9600000000fe80000000000000000000000000000201010288b51f2559'O;
testcase TC_activate_pdp4() runs on GT_CT {
f_init();
var PdpContext ctx := valueof(t_DefinePDP('262420123456789'H, '1234'O, valueof(t_ApnInternet), valueof(t_EuaIPv4Dyn)));
f_pdp_ctx_act(ctx);
}
/* template to generate a 'Prefix Information' ICMPv6 option */ /* template to generate a 'Prefix Information' ICMPv6 option */
template OptionField ts_ICMP6_OptPrefix(OCT16 prefix, INT1 prefix_len) := { template OptionField ts_ICMP6_OptPrefix(OCT16 prefix, INT1 prefix_len) := {
prefixInformation := { prefixInformation := {
@ -724,11 +751,29 @@ module GGSN_Tests {
T_default.stop; T_default.stop;
} }
testcase TC_activate_pdp6() runs on GT_CT { testcase TC_pdp6_act_deact() runs on GT_CT {
f_init(); f_init();
var PdpContext ctx := valueof(t_DefinePDP('262420123456789'H, '1234'O, valueof(t_ApnInternet), valueof(t_EuaIPv6Dyn))); var PdpContext ctx := valueof(t_DefinePDP('262420123456789'H, '1234'O, valueof(t_ApnInternet), valueof(t_EuaIPv6Dyn)));
f_pdp_ctx_act(ctx); f_pdp_ctx_act(ctx);
f_pdp_ctx_del(ctx, '1'B);
}
testcase TC_pdp6_act_deact_pcodns() runs on GT_CT {
f_init();
var PdpContext ctx := valueof(t_DefinePDP('262420123456789'H, '1234'O, valueof(t_ApnInternet), valueof(t_EuaIPv6Dyn)));
ctx.pco_req := valueof(ts_PCO_IPv6_DNS);
f_pdp_ctx_act(ctx);
f_pdp_ctx_del(ctx, '1'B);
}
testcase TC_pdp6_act_deact_icmp6() runs on GT_CT {
f_init();
var PdpContext ctx := valueof(t_DefinePDP('262420123456789'H, '1234'O, valueof(t_ApnInternet), valueof(t_EuaIPv6Dyn)));
ctx.pco_req := valueof(ts_PCO_IPv6_DNS);
f_pdp_ctx_act(ctx);
//f_send_gtpu(ctx, c_router_solicit); //f_send_gtpu(ctx, c_router_solicit);
//f_send_gtpu(ctx, c_neigh_solicit); //f_send_gtpu(ctx, c_neigh_solicit);
@ -740,8 +785,34 @@ module GGSN_Tests {
f_pdp_ctx_del(ctx, '1'B); f_pdp_ctx_del(ctx, '1'B);
} }
testcase TC_pdp4_act_deact() runs on GT_CT {
f_init();
var PdpContext ctx := valueof(t_DefinePDP('262420123456789'H, '1234'O, valueof(t_ApnInternet), valueof(t_EuaIPv4Dyn)));
f_pdp_ctx_act(ctx);
f_pdp_ctx_del(ctx, '1'B);
}
testcase TC_pdp4_act_deact_ipcp() runs on GT_CT {
f_init();
var PdpContext ctx := valueof(t_DefinePDP('262420123456789'H, '1234'O, valueof(t_ApnInternet), valueof(t_EuaIPv4Dyn)));
f_pdp_ctx_act(ctx);
f_pdp_ctx_del(ctx, '1'B);
}
testcase TC_pdp4_act_deact_pcodns() runs on GT_CT {
f_init();
var PdpContext ctx := valueof(t_DefinePDP('262420123456789'H, '1234'O, valueof(t_ApnInternet), valueof(t_EuaIPv4Dyn)));
f_pdp_ctx_act(ctx);
f_pdp_ctx_del(ctx, '1'B);
}
control { control {
execute(TC_activate_pdp4()); execute(TC_pdp4_act_deact());
execute(TC_activate_pdp6()); execute(TC_pdp4_act_deact_ipcp());
execute(TC_pdp4_act_deact_pcodns());
execute(TC_pdp6_act_deact());
execute(TC_pdp6_act_deact_pcodns());
execute(TC_pdp6_act_deact_icmp6());
} }
} }