Commit 2308605a authored by Tien-Thinh Nguyen's avatar Tien-Thinh Nguyen

Merge branch 'r16_fix' into 'develop'

R16 fix

See merge request oai/cn5g/oai-cn5g-smf!49
parents e0101792 da835d90
...@@ -635,6 +635,9 @@ class pfcp_fteid_ie : public pfcp_ie { ...@@ -635,6 +635,9 @@ class pfcp_fteid_ie : public pfcp_ie {
if (u1.bf.v6) { if (u1.bf.v6) {
tlv.add_length(16); tlv.add_length(16);
} }
}
if (u1.bf.ch & b.v4) {
u1.bf.v4 = b.v4;
} else { } else {
ipv4_address.s_addr = INADDR_ANY; ipv4_address.s_addr = INADDR_ANY;
ipv6_address = in6addr_any; ipv6_address = in6addr_any;
......
...@@ -226,6 +226,12 @@ int session_create_sm_context_procedure::run( ...@@ -226,6 +226,12 @@ int session_create_sm_context_procedure::run(
1; // SMF requests the UPF to assign a local F-TEID to the PDR 1; // SMF requests the UPF to assign a local F-TEID to the PDR
// TODO required?: local_fteid.v4 = 1; // TODO required?: local_fteid.v4 = 1;
// local_fteid.chid = 1; // local_fteid.chid = 1;
// TS 29.244 R16 8.2.3 -> At least one of the V4 and V6 flags shall be set to
// "1", and both may be set to "1" for scenarios when the UP function is
// requested to allocate the F-TEID, i.e. when CHOOSE bit is set to "1", and
// the IPv4 address and IPv6 address fields are not present.
local_fteid.v4 = 1;
pdi.set(local_fteid); pdi.set(local_fteid);
// TODO: Network Instance // TODO: Network Instance
// UE IP address // UE IP address
...@@ -727,7 +733,11 @@ int session_update_sm_context_procedure::run( ...@@ -727,7 +733,11 @@ int session_update_sm_context_procedure::run(
// local_fteid.from_core_fteid(qos_flow.qos_flow.dl_fteid); // local_fteid.from_core_fteid(qos_flow.qos_flow.dl_fteid);
if (sps->ipv4) { if (sps->ipv4) {
ue_ip_address.v4 = 1; ue_ip_address.v4 = 1;
// Bit 3 – S/D: TS 29.244 R16, 8.2.62 In the PDI IE, if this bit is
// set to "0", this indicates a Source IP address; if this bit is
// set to "1", this indicates a Destination IP address.
ue_ip_address.sd = 1;
ue_ip_address.ipv4_address.s_addr = sps->ipv4_address.s_addr; ue_ip_address.ipv4_address.s_addr = sps->ipv4_address.s_addr;
} }
if (sps->ipv6) { if (sps->ipv6) {
...@@ -788,7 +798,11 @@ int session_update_sm_context_procedure::run( ...@@ -788,7 +798,11 @@ int session_update_sm_context_procedure::run(
pfcp::source_interface_t source_interface = {}; pfcp::source_interface_t source_interface = {};
if (sps->ipv4) { if (sps->ipv4) {
ue_ip_address.v4 = 1; ue_ip_address.v4 = 1;
// Bit 3 – S/D: TS 29.244 R16, 8.2.62 In the PDI IE, if this bit is
// set to "0", this indicates a Source IP address; if this bit is
// set to "1", this indicates a Destination IP address.
ue_ip_address.sd = 1;
ue_ip_address.ipv4_address.s_addr = sps->ipv4_address.s_addr; ue_ip_address.ipv4_address.s_addr = sps->ipv4_address.s_addr;
} }
if (sps->ipv6) { if (sps->ipv6) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment