neels has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/30926 )
Change subject: upf/PFCP: do not imply f_inet_addr() ......................................................................
upf/PFCP: do not imply f_inet_addr()
PFCP_Templates.ttcn is not the place to do the conversion between string and OCT4.
When I wanted to use an OCT4 address in some ts_PFCP_* template, it dawned on me that it is stupid to convert the OCT4 to a string, just so that the ts_PFCP_* template converts it back to OCT4.
Related: SYS#6192 SYS#5599 Change-Id: Ib068831787f4256f70a2189a5f36ca1ea1f40c9e --- M library/PFCP_Templates.ttcn M upf/UPF_Tests.ttcn 2 files changed, 20 insertions(+), 15 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/26/30926/1
diff --git a/library/PFCP_Templates.ttcn b/library/PFCP_Templates.ttcn index d0e8b67..caab09d 100644 --- a/library/PFCP_Templates.ttcn +++ b/library/PFCP_Templates.ttcn @@ -209,14 +209,14 @@ 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 +235,18 @@ 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 +255,7 @@ 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 +325,13 @@ 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 +419,16 @@ } }
-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 796dc16..b5c65d2 100644 --- a/upf/UPF_Tests.ttcn +++ b/upf/UPF_Tests.ttcn @@ -539,7 +539,7 @@ 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 @@ 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 @@ { 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;