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
This commit is contained in:
parent
4a9015ffe3
commit
1e31146d11
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue