diff --git a/hnbgw/HNBGW_Tests.ttcn b/hnbgw/HNBGW_Tests.ttcn index d77a18fc9..d76ff9dd9 100644 --- a/hnbgw/HNBGW_Tests.ttcn +++ b/hnbgw/HNBGW_Tests.ttcn @@ -18,6 +18,7 @@ import from General_Types all; import from GSM_Types all; import from Osmocom_Types all; import from IPL4asp_Types all; +import from Native_Functions all; import from Osmocom_CTRL_Functions all; import from Osmocom_CTRL_Types all; @@ -1314,7 +1315,7 @@ friend function f_tc_ps_rab_assignment_with_pfcp(charstring id, TestHdlrParams p /* Acting as UPF, invent a new PFCP SEID to send to HNBGW. Respond to the Session Establishment. * The PFCP response must have the same sequence_number as the request. */ - var F_SEID up_f_seid := valueof(ts_PFCP_F_SEID_ipv4("127.0.0.1", '1111111111111111'O)); + var F_SEID up_f_seid := valueof(ts_PFCP_F_SEID_ipv4(f_inet_addr("127.0.0.1"), '1111111111111111'O)); var template PDU_PFCP r := ts_PFCP_Session_Est_Resp(m.sequence_number, upf_node_id, hnbgw_f_seid.seid); r.message_body.pfcp_session_establishment_response := { offending_ie := omit, @@ -1322,10 +1323,10 @@ friend function f_tc_ps_rab_assignment_with_pfcp(charstring id, TestHdlrParams p created_PDR_list := { ts_PFCP_Created_PDR(pdr_id := serq.create_PDR_list[0].grouped_ie.pdr_id, local_F_TEID := ts_PFCP_F_TEID_ipv4(gtp_pars.core.local.teid, - gtp_pars.core.local.addr)), + f_inet_addr(gtp_pars.core.local.addr))), ts_PFCP_Created_PDR(pdr_id := serq.create_PDR_list[1].grouped_ie.pdr_id, local_F_TEID := ts_PFCP_F_TEID_ipv4(gtp_pars.access.local.teid, - gtp_pars.access.local.addr)) + f_inet_addr(gtp_pars.access.local.addr))) }, load_control_information := omit, overload_control_information := omit, diff --git a/library/PFCP_Templates.ttcn b/library/PFCP_Templates.ttcn index d0e8b678b..3f14a1fae 100644 --- a/library/PFCP_Templates.ttcn +++ b/library/PFCP_Templates.ttcn @@ -11,7 +11,6 @@ module PFCP_Templates { import from General_Types all; -import from Native_Functions all; import from Osmocom_Types all; import from PFCP_Types all; @@ -209,14 +208,14 @@ function tr_PFCP_Assoc_Release_Resp(template (present) Node_ID node_id := ?, tem return t; }; -template (value) F_SEID ts_PFCP_F_SEID_ipv4(charstring addr_v4, OCT8 seid) := { +template (value) F_SEID ts_PFCP_F_SEID_ipv4(OCT4 addr_v4, OCT8 seid) := { elementIdentifier := 57, lengthIndicator := 0, v6 := '0'B, v4 := '1'B, spare := '000000'B, seid := seid, - ipv4_address := f_inet_addr(addr_v4), + ipv4_address := addr_v4, ipv6_address := omit } @@ -235,18 +234,18 @@ template (value) Source_Interface ts_PFCP_Src_Iface(e_PFCP_Src_Iface iface) := { spare := '0000'B } -template (value) UE_IP_Address ts_PFCP_UE_IP_Address_v4(charstring addr_v4, boolean is_destination := true) := { +template (value) UE_IP_Address ts_PFCP_UE_IP_Address_v4(OCT4 addr_v4, boolean is_destination := true) := { elementIdentifier := 93, lengthIndicator := 0, v6 := '0'B, v4 := '1'B, sd := bool2bit(is_destination), spare := '00000'B, - ipv4_address := f_inet_addr(addr_v4), + ipv4_address := addr_v4, ipv6_address := omit } -template (value) F_TEID ts_PFCP_F_TEID_ipv4(OCT4 teid, charstring addr_v4) := { +template (value) F_TEID ts_PFCP_F_TEID_ipv4(OCT4 teid, OCT4 addr_v4) := { elementIdentifier := 21, lengthIndicator := 0, v4 := '1'B, @@ -255,7 +254,7 @@ template (value) F_TEID ts_PFCP_F_TEID_ipv4(OCT4 teid, charstring addr_v4) := { chid := '0'B, spare := '0000'B, teid := teid, - ipv4_address := f_inet_addr(addr_v4), + ipv4_address := addr_v4, ipv6_address := omit, choose_id := omit } @@ -325,13 +324,13 @@ template (value) Destination_Interface ts_PFCP_Destination_Interface(e_PFCP_Dest spare := '0000'B } -template (value) Outer_Header_Creation ts_PFCP_Outer_Header_Creation_GTP_ipv4(OCT4 remote_teid, charstring remote_addr_v4) := { +template (value) Outer_Header_Creation ts_PFCP_Outer_Header_Creation_GTP_ipv4(OCT4 remote_teid, OCT4 remote_addr_v4) := { elementIdentifier := 84, lengthIndicator := 0, ohc_description_oct5 := '00000001'B, ohc_description_oct6 := '00000000'B, teid := remote_teid, - ipv4 := f_inet_addr(remote_addr_v4), + ipv4 := remote_addr_v4, ipv6 := omit, udp_port := omit } @@ -419,13 +418,16 @@ template (value) Create_PDR ts_PFCP_Create_PDR(integer pdr_id, template (value) } } -function ts_PFCP_Session_Est_Req(charstring node_id, OCT8 cp_seid, Create_PDR_list create_pdr, Create_FAR_list create_far) +function ts_PFCP_Session_Est_Req(template (value) Node_ID node_id, + template (value) F_SEID cp_f_seid, + Create_PDR_list create_pdr, + Create_FAR_list create_far) return template (value) PDU_PFCP { var template (value) PDU_PFCP t := ts_PDU_PFCP(); t.message_body := { pfcp_session_establishment_request := { - node_id := ts_PFCP_Node_ID_ipv4(f_inet_addr(node_id)), - CP_F_SEID := ts_PFCP_F_SEID_ipv4(node_id, cp_seid), + node_id := node_id, + CP_F_SEID := cp_f_seid, create_PDR_list := create_pdr, create_FAR_list := create_far, create_URR_list := omit, diff --git a/upf/UPF_Tests.ttcn b/upf/UPF_Tests.ttcn index 796dc16c9..b5c65d262 100644 --- a/upf/UPF_Tests.ttcn +++ b/upf/UPF_Tests.ttcn @@ -539,7 +539,7 @@ private function f_ruleset_add_GTP_decaps(inout PFCP_Ruleset r) { private function f_ruleset_add_GTP_encaps(inout PFCP_Ruleset r, charstring ue_addr_v4 := "192.168.23.42", OCT4 remote_teid, - charstring gtp_dest_addr_v4) { + OCT4 gtp_dest_addr_v4) { var integer pdr_id := lengthof(r.pdr) + 1; var integer far_id := lengthof(r.far) + 1; @@ -550,7 +550,7 @@ private function f_ruleset_add_GTP_encaps(inout PFCP_Ruleset r, pdr_id, ts_PFCP_PDI( CORE, - ue_addr_v4 := ts_PFCP_UE_IP_Address_v4(ue_addr_v4, is_destination := true) + ue_addr_v4 := ts_PFCP_UE_IP_Address_v4(f_inet_addr(ue_addr_v4), is_destination := true) ), far_id := far_id ) @@ -635,14 +635,16 @@ private function f_ruleset_tunend(GTP_Action gtp) return PFCP_Ruleset { var PFCP_Ruleset rules := { {}, {} }; f_ruleset_add_GTP_decaps(rules); - f_ruleset_add_GTP_encaps(rules, gtp.core_ip, gtp.teid_access_r, gtp.gtp_access_ip); + f_ruleset_add_GTP_encaps(rules, gtp.core_ip, gtp.teid_access_r, f_inet_addr(gtp.gtp_access_ip)); return rules; } /* Run a PFCP Session Establishment procedure */ private function f_session_est(inout PFCP_session s, PFCP_Ruleset rules) runs on CPF_ConnHdlr { - PFCP.send(ts_PFCP_Session_Est_Req(g_pars.local_addr, s.cp_seid, rules.pdr, rules.far)); + PFCP.send(ts_PFCP_Session_Est_Req(ts_PFCP_Node_ID_ipv4(f_inet_addr(g_pars.local_addr)), + ts_PFCP_F_SEID_ipv4(f_inet_addr(g_pars.local_addr), s.cp_seid), + rules.pdr, rules.far)); var PDU_PFCP pfcp; PFCP.receive(tr_PFCP_Session_Est_Resp(s.cp_seid)) -> value pfcp;