diff --git a/ggsn_tests/GGSN_Tests.ttcn b/ggsn_tests/GGSN_Tests.ttcn index cebd6f221..4ea7cf465 100644 --- a/ggsn_tests/GGSN_Tests.ttcn +++ b/ggsn_tests/GGSN_Tests.ttcn @@ -750,9 +750,22 @@ module GGSN_Tests { return f_IPv6_enc(ip6); } + /* Get link-id from PDP Context EUA */ + function f_ctx_get_ipv6_interface_id(in PdpContext ctx) return OCT16 { + var OCT16 interface_id; + if (ischosen(ctx.eua.endUserAddress.endUserAddressIPv4andIPv6)) { + interface_id := ctx.eua.endUserAddress.endUserAddressIPv4andIPv6.ipv6_address; + } else if (ischosen(ctx.eua.endUserAddress.endUserAddressIPv6)) { + interface_id := ctx.eua.endUserAddress.endUserAddressIPv6.ipv6_address; + } else { + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unexpected request to submit icmpv6 rs in IPv4 PDP context"); + } + return interface_id; + } + /* create ICMPv6 router solicitation deriving link-id from PDP Context EUA */ function f_icmpv6_rs_for_pdp(in PdpContext ctx) return octetstring { - var OCT16 interface_id := ctx.eua.endUserAddress.endUserAddressIPv6.ipv6_address; + var OCT16 interface_id := f_ctx_get_ipv6_interface_id(ctx); return f_gen_icmpv6_router_solicitation(interface_id); } @@ -766,7 +779,7 @@ module GGSN_Tests { /* generate and encode ICMPv6 neighbor solicitation for PDP Context */ function f_gen_icmpv6_neigh_solicit_for_pdp(in PdpContext ctx) return octetstring { - var OCT16 interface_id := ctx.eua.endUserAddress.endUserAddressIPv6.ipv6_address; + var OCT16 interface_id := f_ctx_get_ipv6_interface_id(ctx); var OCT16 link_local := f_ipv6_link_local(interface_id); var OCT16 daddr := f_ipv6_sol_node_mcast(link_local);