This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
lynxis lazus gerrit-no-reply at lists.osmocom.orglynxis lazus has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20003 ) Change subject: PCU: add IPv6 support for SNS ...................................................................... PCU: add IPv6 support for SNS With PCUIF 10 the remote can be IPv4 or IPv6. Add all missing parts including SNS IPv6 elements, the support to omit IPv4 elements and a PCU_Tests_SNSv6.cfg configuration to run all tests with IPv6 Change-Id: I43d64caca600fff78f3fbbb3e8179f447f235d46 --- M library/NS_Emulation.ttcn M library/Osmocom_Gb_Types.ttcn M pcu/PCU_Tests_SNS.ttcn A pcu/PCU_Tests_SNSv6.cfg 4 files changed, 183 insertions(+), 40 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/03/20003/1 diff --git a/library/NS_Emulation.ttcn b/library/NS_Emulation.ttcn index 6f9bc39..ebacac1 100644 --- a/library/NS_Emulation.ttcn +++ b/library/NS_Emulation.ttcn @@ -232,7 +232,7 @@ setverdict(fail, "SNS-SIZE from unexpected NSEI"); self.stop; } - [] NSCP.receive(t_NS_RecvFrom(tr_SNS_CONFIG(config.nsei, true, + [config.remote_proto == PCUIF_ADDR_TYPE_IPV4] NSCP.receive(t_NS_RecvFrom(tr_SNS_CONFIG(config.nsei, true, {tr_SNS_IPv4(config.remote_ip, config.remote_udp_port)}))) -> value rf { /* blindly acknowledge whatever the PCU sends */ NSCP.send(t_NS_Send(g_conn_id, ts_SNS_CONFIG_ACK(config.nsei, omit))); @@ -249,6 +249,23 @@ } } } + [config.remote_proto == PCUIF_ADDR_TYPE_IPV6] NSCP.receive(t_NS_RecvFrom(tr_SNS_CONFIG(config.nsei, true, omit, + {tr_SNS_IPv6(config.remote_ip, config.remote_udp_port)}))) -> value rf { + /* blindly acknowledge whatever the PCU sends */ + NSCP.send(t_NS_Send(g_conn_id, ts_SNS_CONFIG_ACK(config.nsei, omit))); + /* send a SNS-CONFIG in response and expect a SNS-CONFIG-ACK */ + var IP6_Elements v6 := { valueof(ts_SNS_IPv6(config.local_ip, config.local_udp_port)) }; + NSCP.send(t_NS_Send(g_conn_id, ts_SNS_CONFIG(config.nsei, true, omit, v6))); + alt { + [] NSCP.receive(t_NS_RecvFrom(tr_SNS_CONFIG_ACK(config.nsei, omit))) { + /* success */ + } + [] NSCP.receive(t_NS_RecvFrom(tr_SNS_CONFIG_ACK(config.nsei, ?))) { + setverdict(fail, "Unexpected SNS-CONFIG-NACK"); + self.stop; + } + } + } [] NSCP.receive(t_NS_RecvFrom(tr_SNS_CONFIG(config.nsei, false, ?))) { /* ignore */} [] NSCP.receive(t_NS_RecvFrom(tr_SNS_CONFIG(config.nsei, true, ?))) { setverdict(fail, "Unexpected SNS-CONFIG content"); diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn index 3aeba8f..a2b9499 100644 --- a/library/Osmocom_Gb_Types.ttcn +++ b/library/Osmocom_Gb_Types.ttcn @@ -230,6 +230,40 @@ return e; } + template (value) IP6_Element ts_SNS_IPv6(charstring ip, integer udp_port, + uint8_t sig_weight := 1, uint8_t data_weight := 1) := { + ipAddress := f_inet6_addr(ip), + uDP_Port := int2oct(udp_port, 2), + signallingWeight := int2oct(sig_weight, 1), + dataWeight := int2oct(data_weight, 1) + } + function tr_SNS_IPv6(template charstring ip, template integer udp_port, + template uint8_t sig_weight := ?, template uint8_t data_weight := ?) + return template IP6_Element { + var template IP6_Element e; + if (istemplatekind(ip, "?")) { + e.ipAddress := ?; + } else { + e.ipAddress := f_inet6_addr(valueof(ip)); + } + if (istemplatekind(udp_port, "?")) { + e.uDP_Port := ?; + } else { + e.uDP_Port := int2oct(valueof(udp_port), 2); + } + if (istemplatekind(sig_weight, "?")) { + e.signallingWeight := ?; + } else { + e.signallingWeight := int2oct(valueof(sig_weight), 1); + } + if (istemplatekind(data_weight, "?")) { + e.dataWeight := ?; + } else { + e.dataWeight := int2oct(valueof(data_weight), 1); + } + return e; + } + template (value) PDU_NS ts_NS_RESET(NsCause cause, Nsvci nsvci, Nsei nsei) := { pDU_NS_Reset := { @@ -526,7 +560,7 @@ } template (value) PDU_NS ts_SNS_CONFIG(Nsei nsei, boolean end_flag, - template (omit) IP4_Elements v4, + template (omit) IP4_Elements v4 := omit, template (omit) IP6_Elements v6 := omit) := { pDU_SNS_Config := { nsPduType := '0F'O, @@ -537,7 +571,7 @@ } } template PDU_NS tr_SNS_CONFIG(template Nsei nsei, template boolean end_flag, - template IP4_Elements v4, + template IP4_Elements v4 := omit, template IP6_Elements v6 := omit) := { pDU_SNS_Config := { nsPduType := '0F'O, diff --git a/pcu/PCU_Tests_SNS.ttcn b/pcu/PCU_Tests_SNS.ttcn index fc98979..957b56b 100644 --- a/pcu/PCU_Tests_SNS.ttcn +++ b/pcu/PCU_Tests_SNS.ttcn @@ -26,9 +26,16 @@ runs on RAW_NS_CT { log("f_incoming_sns_size(idx=", idx, ")"); var PDU_NS rx; - /* expect one single SNS-SIZE with RESET flag; one remote v4 EP; no v6 EP */ - rx := f_ns_exp(tr_SNS_SIZE(g_nsconfig[idx].nsei, rst_flag := true, max_nsvcs := 8, - num_v4 := 4, num_v6 := omit), idx); + + if (mp_nsconfig.remote_proto == PCUIF_ADDR_TYPE_IPV4) { + /* expect one single SNS-SIZE with RESET flag; one remote v4 EP; no v6 EP */ + rx := f_ns_exp(tr_SNS_SIZE(g_nsconfig[idx].nsei, rst_flag := true, max_nsvcs := 8, + num_v4 := 4, num_v6 := omit), idx); + } else { + /* expect one single SNS-SIZE with RESET flag; no v4 EP; one remote v6 EP */ + rx := f_ns_exp(tr_SNS_SIZE(g_nsconfig[idx].nsei, rst_flag := true, max_nsvcs := 8, + num_v4 := omit, num_v6 := 4), idx); + } NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_SIZE_ACK(g_nsconfig[idx].nsei, cause))); } @@ -37,9 +44,15 @@ runs on RAW_NS_CT { log("f_outgoing_sns_size(idx=", idx, ")"); var PDU_NS rx; - NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_SIZE(g_nsconfig[idx].nsei, rst_flag := true, max_nsvcs := 1, - num_v4 := 1, num_v6 := omit) - )); + if (mp_nsconfig.remote_proto == PCUIF_ADDR_TYPE_IPV4) { + NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_SIZE(g_nsconfig[idx].nsei, rst_flag := true, max_nsvcs := 1, + num_v4 := 1, num_v6 := omit) + )); + } else { + NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_SIZE(g_nsconfig[idx].nsei, rst_flag := true, max_nsvcs := 1, + num_v4 := omit, num_v6 := 1) + )); + } /* expect one single SNS-SIZE with RESET flag; one remote v4 EP; no v6 EP */ rx := f_ns_exp(tr_SNS_SIZE_ACK(g_nsconfig[idx].nsei, cause), idx); } @@ -49,9 +62,16 @@ runs on RAW_NS_CT { log("f_incoming_sns_config(idx=", idx, ")"); var PDU_NS rx; - var template IP4_Elements v4_elem := { tr_SNS_IPv4(mp_nsconfig.remote_ip, - mp_nsconfig.remote_udp_port) }; - rx := f_ns_exp(tr_SNS_CONFIG(g_nsconfig[idx].nsei, end_flag := true, v4 := v4_elem), idx); + if (mp_nsconfig.remote_proto == PCUIF_ADDR_TYPE_IPV4) { + var template IP4_Elements v4_elem := { tr_SNS_IPv4(mp_nsconfig.remote_ip, + mp_nsconfig.remote_udp_port) }; + rx := f_ns_exp(tr_SNS_CONFIG(g_nsconfig[idx].nsei, end_flag := true, v4 := v4_elem), idx); + } else { + var template IP6_Elements v6_elem := { tr_SNS_IPv6(mp_nsconfig.remote_ip, + mp_nsconfig.remote_udp_port) }; + rx := f_ns_exp(tr_SNS_CONFIG(g_nsconfig[idx].nsei, end_flag := true, v6 := v6_elem), idx); + } + NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG_ACK(g_nsconfig[idx].nsei, cause))); } @@ -60,9 +80,15 @@ runs on RAW_NS_CT { log("f_outgoing_sns_config(idx=", idx, ")"); var PDU_NS rx; - var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx].local_ip, - g_nsconfig[idx].local_udp_port) } - NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, v4))); + if (mp_nsconfig.remote_proto == PCUIF_ADDR_TYPE_IPV4) { + var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx].local_ip, + g_nsconfig[idx].local_udp_port) } + NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, v4))); + } else { + var template (omit) IP6_Elements v6 := { ts_SNS_IPv6(g_nsconfig[idx].local_ip, + g_nsconfig[idx].local_udp_port) } + NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, omit, v6))); + } rx := f_ns_exp(tr_SNS_CONFIG_ACK(g_nsconfig[idx].nsei, cause), idx); } @@ -71,11 +97,19 @@ runs on RAW_NS_CT { log("f_outgoing_sns_config_1c1u(idx=", idx, ")"); var PDU_NS rx; - var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[0].local_ip, - g_nsconfig[0].local_udp_port, 1, 0), - ts_SNS_IPv4(g_nsconfig[1].local_ip, - g_nsconfig[1].local_udp_port, 0, 1) }; - NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, v4))); + if (mp_nsconfig.remote_proto == PCUIF_ADDR_TYPE_IPV4) { + var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[0].local_ip, + g_nsconfig[0].local_udp_port, 1, 0), + ts_SNS_IPv4(g_nsconfig[1].local_ip, + g_nsconfig[1].local_udp_port, 0, 1) }; + NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, v4))); + } else { + var template (omit) IP6_Elements v6 := { ts_SNS_IPv6(g_nsconfig[0].local_ip, + g_nsconfig[0].local_udp_port, 1, 0), + ts_SNS_IPv6(g_nsconfig[1].local_ip, + g_nsconfig[1].local_udp_port, 0, 1) }; + NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, omit, v6))); + } rx := f_ns_exp(tr_SNS_CONFIG_ACK(g_nsconfig[idx].nsei, cause), idx); } @@ -84,11 +118,19 @@ runs on RAW_NS_CT { log("f_outgoing_sns_config_1c1u_separate(idx=", idx, ")"); var PDU_NS rx; - var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[1].local_ip, - g_nsconfig[1].local_udp_port, 1, 0), - ts_SNS_IPv4(g_nsconfig[2].local_ip, - g_nsconfig[2].local_udp_port, 0, 1) }; - NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, v4))); + if (mp_nsconfig.remote_proto == PCUIF_ADDR_TYPE_IPV4) { + var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[1].local_ip, + g_nsconfig[1].local_udp_port, 1, 0), + ts_SNS_IPv4(g_nsconfig[2].local_ip, + g_nsconfig[2].local_udp_port, 0, 1) }; + NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, v4))); + } else { + var template (omit) IP6_Elements v6 := { ts_SNS_IPv6(g_nsconfig[1].local_ip, + g_nsconfig[1].local_udp_port, 1, 0), + ts_SNS_IPv6(g_nsconfig[2].local_ip, + g_nsconfig[2].local_udp_port, 0, 1) }; + NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CONFIG(g_nsconfig[idx].nsei, true, omit, v6))); + } rx := f_ns_exp(tr_SNS_CONFIG_ACK(g_nsconfig[idx].nsei, cause), idx); } @@ -96,33 +138,57 @@ runs on RAW_NS_CT { log("f_outgoing_sns_add(idx_add=", idx_add, ")"); var PDU_NS rx; - var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx_add].local_ip, - g_nsconfig[idx_add].local_udp_port, - w_sig, w_user) }; - NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_ADD(g_nsconfig[idx].nsei, 23, v4))); - rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 23, omit, v4)); + if (mp_nsconfig.remote_proto == PCUIF_ADDR_TYPE_IPV4) { + var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx_add].local_ip, + g_nsconfig[idx_add].local_udp_port, + w_sig, w_user) }; + NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_ADD(g_nsconfig[idx].nsei, 23, v4))); + rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 23, omit, v4)); + } else { + var template (omit) IP6_Elements v6 := { ts_SNS_IPv6(g_nsconfig[idx_add].local_ip, + g_nsconfig[idx_add].local_udp_port, + w_sig, w_user) }; + NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_ADD(g_nsconfig[idx].nsei, 23, omit, v6))); + rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 23, omit, omit, v6)); + } } function f_outgoing_sns_del(integer idx_del, uint8_t w_sig := 1, uint8_t w_user := 1, integer idx := 0) runs on RAW_NS_CT { log("f_outgoing_sns_del(idx_del=", idx_del, ")"); var PDU_NS rx; - var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx_del].local_ip, - g_nsconfig[idx_del].local_udp_port, - w_sig, w_user) }; - NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_DEL(g_nsconfig[idx].nsei, 24, omit, v4))); - rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 24, omit, v4)); + if (mp_nsconfig.remote_proto == PCUIF_ADDR_TYPE_IPV4) { + var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx_del].local_ip, + g_nsconfig[idx_del].local_udp_port, + w_sig, w_user) }; + NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_DEL(g_nsconfig[idx].nsei, 24, omit, v4))); + rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 24, omit, v4)); + } else { + var template (omit) IP6_Elements v6 := { ts_SNS_IPv6(g_nsconfig[idx_del].local_ip, + g_nsconfig[idx_del].local_udp_port, + w_sig, w_user) }; + NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_DEL(g_nsconfig[idx].nsei, 24, omit, omit, v6))); + rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 24, omit, omit, v6)); + } } function f_outgoing_sns_chg_weight(integer idx_chg, uint8_t w_sig, uint8_t w_user, integer idx := 0) runs on RAW_NS_CT { log("f_outgoing_sns_chg_weight(idx_chg=", idx_chg, ")"); var PDU_NS rx; - var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx_chg].local_ip, - g_nsconfig[idx_chg].local_udp_port, - w_sig, w_user) }; - NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CHG_WEIGHT(g_nsconfig[idx].nsei, 25, v4))); - rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 25, omit, v4)); + if (mp_nsconfig.remote_proto == PCUIF_ADDR_TYPE_IPV4) { + var template (omit) IP4_Elements v4 := { ts_SNS_IPv4(g_nsconfig[idx_chg].local_ip, + g_nsconfig[idx_chg].local_udp_port, + w_sig, w_user) }; + NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CHG_WEIGHT(g_nsconfig[idx].nsei, 25, v4))); + rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 25, omit, v4)); + } else { + var template (omit) IP6_Elements v6 := { ts_SNS_IPv6(g_nsconfig[idx_chg].local_ip, + g_nsconfig[idx_chg].local_udp_port, + w_sig, w_user) }; + NSCP[idx].send(t_NS_Send(g_ns_conn_id[idx], ts_SNS_CHG_WEIGHT(g_nsconfig[idx].nsei, 25, omit, v6))); + rx := f_ns_exp(tr_SNS_ACK(g_nsconfig[idx].nsei, 25, omit, omit, v6)); + } } diff --git a/pcu/PCU_Tests_SNSv6.cfg b/pcu/PCU_Tests_SNSv6.cfg new file mode 100644 index 0000000..b50dacc --- /dev/null +++ b/pcu/PCU_Tests_SNSv6.cfg @@ -0,0 +1,26 @@ +[ORDERED_INCLUDE] +# Common configuration, shared between test suites +"../Common.cfg" +# testsuite specific configuration, not expected to change +"./PCU_Tests.default" + +[LOGGING] + +[MODULE_PARAMETERS] +SGSN_Components.mp_nsconfig := { + remote_proto == PCUIF_ADDR_TYPE_IPV6, + local_ip := "::1", + local_udp_port := 23000, + remote_ip := "::1", + remote_udp_port := 22000, + nsvci := 1234, + nsei := 1234 +} +PCUIF_Types.mp_pcuif_version := 10 + +[TESTPORT_PARAMETERS] + +[MAIN_CONTROLLER] + +[EXECUTE] +PCU_Tests_SNS.control -- To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/20003 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: I43d64caca600fff78f3fbbb3e8179f447f235d46 Gerrit-Change-Number: 20003 Gerrit-PatchSet: 1 Gerrit-Owner: lynxis lazus <lynxis at fe80.eu> Gerrit-MessageType: newchange -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200907/4f282a78/attachment.htm>