diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2022-02-11 13:39:26 +0100 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2022-02-11 13:39:29 +0100 |
commit | c8c0341b160be2f19f9ff6dec2b42d4f34f2bf35 (patch) | |
tree | 074f66c4ae1d2ed3753191ace8c21ce0b3fdbc6a | |
parent | 480e67f00daf3e3a95ef15a352158caedb7092f9 (diff) |
ggsn: Split gtpu_access tests into several separated tests
Those tests validated several different scenarios, let's better handle
them separately one at a time, it makes it easier to understand the
behavior of the SUT and see what needs to be fixed.
Change-Id: I39342fcf2366030ce743dd4b4773f0fff5d61b9f
-rw-r--r-- | ggsn_tests/GGSN_Tests.ttcn | 113 |
1 files changed, 103 insertions, 10 deletions
diff --git a/ggsn_tests/GGSN_Tests.ttcn b/ggsn_tests/GGSN_Tests.ttcn index 5ec535c9..cebd6f22 100644 --- a/ggsn_tests/GGSN_Tests.ttcn +++ b/ggsn_tests/GGSN_Tests.ttcn @@ -1001,22 +1001,64 @@ module GGSN_Tests { f_wait_gtpu_fail(ctx); } - /* Check that attempting RA with another ll src addr won't work, packet dropped: */ - var OCT16 saddr_ll_wrong := f_ipv6_mangle(saddr_ll, 8); - f_send_gtpu(ctx, f_gen_icmpv6_router_solicitation(saddr_ll_wrong)); - f_wait_gtpu_fail(ctx); - /* Check if we can use valid global src addr, should work */ var OCT16 saddr_glob := f_ipv6_global(ctx.eua.endUserAddress.endUserAddressIPv6.ipv6_address); f_send_gtpu(ctx, f_gen_icmpv6_echo(saddr_glob, dns1_addr)); f_wait_icmp6_echo_reply(ctx); - /* Assert that packets with wrong global src addr are dropped by GGSN */ + f_pdp_ctx_del(ctx, '1'B); + } + + /* Check that attempting RA with another ll src addr won't work, packet dropped: */ + testcase TC_pdp6_act_deact_gtpu_access_wrong_ll_saddr() runs on GT_CT { + f_init(); + var PdpContext ctx := valueof(t_DefinePDP(f_rnd_imsi('26242'H), '1234'O, c_ApnInet6, valueof(t_EuaIPv6Dyn))); + ctx.pco_req := valueof(ts_PCO_IPv6_DNS); + f_pdp_ctx_act(ctx); + + f_send_gtpu(ctx, f_icmpv6_rs_for_pdp(ctx)); + f_wait_rtr_adv(ctx); + f_send_gtpu(ctx, f_gen_icmpv6_neigh_solicit_for_pdp(ctx)); + + var OCT16 saddr_ll := f_ipv6_link_local(ctx.eua.endUserAddress.endUserAddressIPv6.ipv6_address); + var OCT16 saddr_ll_wrong := f_ipv6_mangle(saddr_ll, 8); + f_send_gtpu(ctx, f_gen_icmpv6_router_solicitation(saddr_ll_wrong)); + f_wait_gtpu_fail(ctx); + + f_pdp_ctx_del(ctx, '1'B); + } + + /* Assert that packets with wrong global src addr are dropped by GGSN */ + testcase TC_pdp6_act_deact_gtpu_access_wrong_global_saddr() runs on GT_CT { + f_init(); + var PdpContext ctx := valueof(t_DefinePDP(f_rnd_imsi('26242'H), '1234'O, c_ApnInet6, valueof(t_EuaIPv6Dyn))); + ctx.pco_req := valueof(ts_PCO_IPv6_DNS); + f_pdp_ctx_act(ctx); + + f_send_gtpu(ctx, f_icmpv6_rs_for_pdp(ctx)); + f_wait_rtr_adv(ctx); + f_send_gtpu(ctx, f_gen_icmpv6_neigh_solicit_for_pdp(ctx)); + + var OCT16 dns1_addr := f_PCO_extract_proto(ctx.pco_neg, '0003'O); + var OCT16 saddr_glob := f_ipv6_global(ctx.eua.endUserAddress.endUserAddressIPv6.ipv6_address); var OCT16 saddr_wrong := f_ipv6_mangle(saddr_glob); f_send_gtpu(ctx, f_gen_icmpv6_echo(saddr_wrong, dns1_addr)); f_wait_gtpu_fail(ctx); - /* Send an IPv4 ICMP ECHO REQUEST to APN6, should fail (packet dropped) */ + f_pdp_ctx_del(ctx, '1'B); + } + + /* Send an IPv4 ICMP ECHO REQUEST to APN6, should fail (packet dropped */ + testcase TC_pdp6_act_deact_gtpu_access_ipv4_apn6() runs on GT_CT { + f_init(); + var PdpContext ctx := valueof(t_DefinePDP(f_rnd_imsi('26242'H), '1234'O, c_ApnInet6, valueof(t_EuaIPv6Dyn))); + ctx.pco_req := valueof(ts_PCO_IPv6_DNS); + f_pdp_ctx_act(ctx); + + f_send_gtpu(ctx, f_icmpv6_rs_for_pdp(ctx)); + f_wait_rtr_adv(ctx); + f_send_gtpu(ctx, f_gen_icmpv6_neigh_solicit_for_pdp(ctx)); + var OCT4 saddr_v4 := f_inet_addr("192.168.10.2"); var OCT4 daddr_v4 := f_inet_addr("8.8.8.8"); f_send_gtpu(ctx, f_gen_icmpv4_echo(saddr_v4, daddr_v4)); @@ -1161,15 +1203,38 @@ module GGSN_Tests { f_send_gtpu(ctx, f_gen_icmpv4_echo(saddr, dns1_addr)); f_wait_icmp4_echo_reply(ctx); - /* Assert that packets with wrong global src addr are dropped by GGSN */ + f_pdp_ctx_del(ctx, '1'B); + } + + /* Assert that packets with wrong global src addr are dropped by GGSN */ + testcase TC_pdp4_act_deact_gtpu_access_wrong_saddr() 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_PCO_ensure_no_duplicates(ctx.pco_neg); + var OCT4 dns1_addr := f_PCO_extract_proto(ctx.pco_neg, '000d'O); + var OCT4 saddr := ctx.eua.endUserAddress.endUserAddressIPv4.ipv4_address; var OCT4 saddr_wrong := substr(saddr, 0, 3) & (saddr[3] xor4b '11'O); f_send_gtpu(ctx, f_gen_icmpv4_echo(saddr_wrong, dns1_addr)); f_wait_gtpu_fail(ctx); + f_pdp_ctx_del(ctx, '1'B); + } + + /* Send an IPv6 RA to APN4, should fail (packet dropped) */ + testcase TC_pdp4_act_deact_gtpu_access_ipv6_apn4() 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); + /* Send an IPv6 RA to APN4, should fail (packet dropped) */ var OCT16 saddr_v6 := f_inet6_addr("fde4:8dba:82e1:2000:1:2:3:4"); f_send_gtpu(ctx, f_gen_icmpv6_router_solicitation(saddr_v6)); f_wait_gtpu_fail(ctx); + f_pdp_ctx_del(ctx, '1'B); } @@ -1415,15 +1480,36 @@ module GGSN_Tests { f_send_gtpu(ctx, f_gen_icmpv4_echo(saddr, dns1_addr)); f_wait_icmp4_echo_reply(ctx); - /* Assert that packets with wrong global src addr are dropped by GGSN */ + f_pdp_ctx_del(ctx, '1'B); + } + + /* Assert that packets with wrong ipv4 src addr are dropped by GGSN on APN IPv4v6 */ + testcase TC_pdp46_act_deact_gtpu_access_wrong_saddr_ipv4() runs on GT_CT { + f_init(); + var PdpContext ctx := valueof(t_DefinePDP(f_rnd_imsi('26242'H), '1234'O, c_ApnInet46, valueof(t_EuaIPv4Dynv6Dyn))); + ctx.pco_req := valueof(ts_PCO_IPv4_DNS_CONT); + f_pdp_ctx_act(ctx); + + var OCT4 dns1_addr := f_PCO_extract_proto(ctx.pco_neg, '000d'O); + var OCT4 saddr := ctx.eua.endUserAddress.endUserAddressIPv4andIPv6.ipv4_address; var OCT4 saddr_wrong := substr(saddr, 0, 3) & (saddr[3] xor4b '11'O); f_send_gtpu(ctx, f_gen_icmpv4_echo(saddr_wrong, dns1_addr)); f_wait_gtpu_fail(ctx); - /* Send an IPv6 RA to APN4, should fail (packet dropped) */ + f_pdp_ctx_del(ctx, '1'B); + } + + /* Assert that packets with wrong ipv6 global src addr are dropped by GGSN on APN IPv4v6 */ + testcase TC_pdp46_act_deact_gtpu_access_wrong_global_saddr_ipv6() runs on GT_CT { + f_init(); + var PdpContext ctx := valueof(t_DefinePDP(f_rnd_imsi('26242'H), '1234'O, c_ApnInet46, valueof(t_EuaIPv4Dynv6Dyn))); + ctx.pco_req := valueof(ts_PCO_IPv4_DNS_CONT); + f_pdp_ctx_act(ctx); + var OCT16 saddr_v6 := f_inet6_addr("fde4:8dba:82e1:2000:1:2:3:4"); f_send_gtpu(ctx, f_gen_icmpv6_router_solicitation(saddr_v6)); f_wait_gtpu_fail(ctx); + f_pdp_ctx_del(ctx, '1'B); } @@ -1591,6 +1677,8 @@ module GGSN_Tests { execute(TC_pdp4_act_deact_ipcp_pap_broken()); execute(TC_pdp4_act_deact_pcodns()); execute(TC_pdp4_act_deact_gtpu_access()); + execute(TC_pdp4_act_deact_gtpu_access_wrong_saddr()); + execute(TC_pdp4_act_deact_gtpu_access_ipv6_apn4()); execute(TC_pdp4_clients_interact_with_txseq()); execute(TC_pdp4_clients_interact_without_txseq()); execute(TC_pdp4_act_deact_with_single_dns()); @@ -1600,6 +1688,9 @@ module GGSN_Tests { execute(TC_pdp6_act_deact_pcodns()); execute(TC_pdp6_act_deact_icmp6()); execute(TC_pdp6_act_deact_gtpu_access()); + execute(TC_pdp6_act_deact_gtpu_access_wrong_ll_saddr()); + execute(TC_pdp6_act_deact_gtpu_access_wrong_global_saddr()); + execute(TC_pdp6_act_deact_gtpu_access_ipv4_apn6()); execute(TC_pdp6_clients_interact()); execute(TC_pdp46_act_deact()); @@ -1608,6 +1699,8 @@ 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_act_deact_gtpu_access_wrong_saddr_ipv4()); + execute(TC_pdp46_act_deact_gtpu_access_wrong_global_saddr_ipv6()); execute(TC_pdp46_clients_interact()); execute(TC_pdp46_act_deact_apn4()); |