Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
oai-upf-6g
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenXG
oai-upf-6g
Commits
22053149
Commit
22053149
authored
Aug 21, 2025
by
Franck Messaoudi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add: adding parse of the values
parent
827f821d
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
255 additions
and
15 deletions
+255
-15
src/upf_app/app/upf_config.hpp
src/upf_app/app/upf_config.hpp
+19
-5
src/upf_app/app/upf_config_yaml.cpp
src/upf_app/app/upf_config_yaml.cpp
+173
-7
src/upf_app/app/upf_config_yaml.hpp
src/upf_app/app/upf_config_yaml.hpp
+54
-2
src/upf_app/helpers/ConfigManager.hpp
src/upf_app/helpers/ConfigManager.hpp
+9
-1
No files found.
src/upf_app/app/upf_config.hpp
View file @
22053149
...
...
@@ -128,6 +128,13 @@ class upf_config {
bool
enable_5g_features
;
bool
enable_bpf_datapath
;
bool
enable_qos
;
u_int16_t
max_upf_interfaces
;
u_int16_t
max_upf_redirect_interfaces
;
u_int16_t
max_pdu_session
;
u_int16_t
max_pdrs_per_pdu_session
;
u_int16_t
max_qos_flows_per_pdu_session
;
u_int16_t
max_sdf_filters_per_pdu_session
;
u_int16_t
max_arp_entries
;
bool
register_nrf
;
struct
in_addr
remote_n6
;
upf_info_t
upf_info
;
...
...
@@ -170,11 +177,18 @@ class upf_config {
n4
.
thread_rd_sched_params
.
sched_priority
=
95
;
n4
.
port
=
pfcp
::
default_port
;
enable_5g_features
=
true
;
enable_bpf_datapath
=
false
;
enable_qos
=
false
;
register_nrf
=
false
;
upf_info
=
{};
enable_5g_features
=
true
;
enable_bpf_datapath
=
false
;
enable_qos
=
false
;
max_upf_interfaces
=
8
;
max_upf_redirect_interfaces
=
4
;
max_pdu_session
=
10000
;
max_pdrs_per_pdu_session
=
8
;
max_qos_flows_per_pdu_session
=
8
;
max_sdf_filters_per_pdu_session
=
8
;
max_arp_entries
=
1572
;
register_nrf
=
false
;
upf_info
=
{};
log_level
=
spdlog
::
level
::
debug
;
http_version
=
2
;
...
...
src/upf_app/app/upf_config_yaml.cpp
View file @
22053149
...
...
@@ -32,8 +32,11 @@ namespace oai::config {
//------------------------------------------------------------------------------
upf_support_features
::
upf_support_features
(
bool
enable_bpf_datapath
,
bool
enable_qos
,
bool
enable_snat
,
bool
enable_fr
)
{
bool
enable_bpf_datapath
,
bool
enable_qos
,
u_int16_t
max_upf_interfaces
,
u_int16_t
max_upf_redirect_interfaces
,
u_int16_t
max_pdu_session
,
u_int16_t
max_pdrs_per_pdu_session
,
u_int16_t
max_qos_flows_per_pdu_session
,
u_int16_t
max_sdf_filters_per_pdu_session
,
u_int16_t
max_arp_entries
,
bool
enable_snat
,
bool
enable_fr
)
{
m_config_name
=
"Supported Features"
;
m_enable_bpf_datapath
=
option_config_value
(
...
...
@@ -42,10 +45,36 @@ upf_support_features::upf_support_features(
m_enable_qos
=
option_config_value
(
UPF_CONFIG_SUPPORT_FEATURES_ENABLE_QOS_LABEL
,
enable_qos
);
m_max_upf_interfaces
=
int_config_value
(
UPF_CONFIG_SUPPORT_FEATURES_MAX_UPF_INTERFACES_LABEL
,
(
int
)
max_upf_interfaces
);
m_max_upf_redirect_interfaces
=
int_config_value
(
UPF_CONFIG_SUPPORT_FEATURES_MAX_UPF_REDIRECT_INTERFACES_LABEL
,
(
int
)
max_upf_redirect_interfaces
);
m_max_pdu_session
=
int_config_value
(
UPF_CONFIG_SUPPORT_FEATURES_MAX_PDU_SESSION_LABEL
,
(
int
)
max_pdu_session
);
m_max_pdrs_per_pdu_session
=
int_config_value
(
UPF_CONFIG_SUPPORT_FEATURES_MAX_PDRS_PER_PDU_SESSION_LABEL
,
(
int
)
max_pdrs_per_pdu_session
);
m_max_qos_flows_per_pdu_session
=
int_config_value
(
UPF_CONFIG_SUPPORT_FEATURES_MAX_QOS_FLOWS_PER_PDU_SESSION_LABEL
,
(
int
)
max_qos_flows_per_pdu_session
);
m_max_sdf_filters_per_pdu_session
=
int_config_value
(
UPF_CONFIG_SUPPORT_FEATURES_MAX_SDF_FILTERS_PER_PDU_SESSION_LABEL
,
(
int
)
max_sdf_filters_per_pdu_session
);
m_max_arp_entries
=
int_config_value
(
UPF_CONFIG_SUPPORT_FEATURES_MAX_ARP_ENTRIES_LABEL
,
(
int
)
max_arp_entries
);
m_enable_snat
=
option_config_value
(
UPF_CONFIG_SUPPORT_FEATURES_ENABLE_SNAT_LABEL
,
enable_snat
);
m_enable_fr
=
option_config_value
(
UPF_CONFIG_SUPPORT_FEATURES_ENABLE_FR
,
enable_fr
);
UPF_CONFIG_SUPPORT_FEATURES_ENABLE_SNAT_LABEL
,
(
int
)
enable_snat
);
m_enable_fr
=
option_config_value
(
UPF_CONFIG_SUPPORT_FEATURES_ENABLE_FR
,
(
int
)
enable_fr
);
}
//------------------------------------------------------------------------------
...
...
@@ -59,6 +88,41 @@ void upf_support_features::from_yaml(const YAML::Node& node) {
m_enable_qos
.
from_yaml
(
node
[
UPF_CONFIG_SUPPORT_FEATURES_ENABLE_QOS
]);
}
if
(
node
[
UPF_CONFIG_SUPPORT_FEATURES_MAX_UPF_INTERFACES
])
{
m_max_upf_interfaces
.
from_yaml
(
node
[
UPF_CONFIG_SUPPORT_FEATURES_MAX_UPF_INTERFACES
]);
}
if
(
node
[
UPF_CONFIG_SUPPORT_FEATURES_MAX_UPF_REDIRECT_INTERFACES
])
{
m_max_upf_redirect_interfaces
.
from_yaml
(
node
[
UPF_CONFIG_SUPPORT_FEATURES_MAX_UPF_REDIRECT_INTERFACES
]);
}
if
(
node
[
UPF_CONFIG_SUPPORT_FEATURES_MAX_PDU_SESSION
])
{
m_max_pdu_session
.
from_yaml
(
node
[
UPF_CONFIG_SUPPORT_FEATURES_MAX_PDU_SESSION
]);
}
if
(
node
[
UPF_CONFIG_SUPPORT_FEATURES_MAX_PDRS_PER_PDU_SESSION
])
{
m_max_pdrs_per_pdu_session
.
from_yaml
(
node
[
UPF_CONFIG_SUPPORT_FEATURES_MAX_PDRS_PER_PDU_SESSION
]);
}
if
(
node
[
UPF_CONFIG_SUPPORT_FEATURES_MAX_QOS_FLOWS_PER_PDU_SESSION
])
{
m_max_qos_flows_per_pdu_session
.
from_yaml
(
node
[
UPF_CONFIG_SUPPORT_FEATURES_MAX_QOS_FLOWS_PER_PDU_SESSION
]);
}
if
(
node
[
UPF_CONFIG_SUPPORT_FEATURES_MAX_SDF_FILTERS_PER_PDU_SESSION
])
{
m_max_sdf_filters_per_pdu_session
.
from_yaml
(
node
[
UPF_CONFIG_SUPPORT_FEATURES_MAX_SDF_FILTERS_PER_PDU_SESSION
]);
}
if
(
node
[
UPF_CONFIG_SUPPORT_FEATURES_MAX_ARP_ENTRIES
])
{
m_max_arp_entries
.
from_yaml
(
node
[
UPF_CONFIG_SUPPORT_FEATURES_MAX_ARP_ENTRIES
]);
}
if
(
node
[
UPF_CONFIG_SUPPORT_FEATURES_ENABLE_SNAT
])
{
m_enable_snat
.
from_yaml
(
node
[
UPF_CONFIG_SUPPORT_FEATURES_ENABLE_SNAT
]);
}
...
...
@@ -88,6 +152,51 @@ std::string upf_support_features::to_string(const std::string& indent) const {
BASE_FORMATTER
,
INNER_LIST_ELEM
,
UPF_CONFIG_SUPPORT_FEATURES_ENABLE_QOS_LABEL
,
inner_width
,
enable_qos
));
u_int16_t
max_upf_interfaces
=
m_max_upf_interfaces
.
get_value
();
out
.
append
(
indent
).
append
(
fmt
::
format
(
BASE_FORMATTER
,
INNER_LIST_ELEM
,
UPF_CONFIG_SUPPORT_FEATURES_MAX_UPF_INTERFACES_LABEL
,
inner_width
,
max_upf_interfaces
));
u_int16_t
max_upf_redirect_interfaces
=
m_max_upf_redirect_interfaces
.
get_value
();
out
.
append
(
indent
).
append
(
fmt
::
format
(
BASE_FORMATTER
,
INNER_LIST_ELEM
,
UPF_CONFIG_SUPPORT_FEATURES_MAX_UPF_REDIRECT_INTERFACES_LABEL
,
inner_width
,
max_upf_redirect_interfaces
));
u_int16_t
max_pdu_session
=
m_max_pdu_session
.
get_value
();
out
.
append
(
indent
).
append
(
fmt
::
format
(
BASE_FORMATTER
,
INNER_LIST_ELEM
,
UPF_CONFIG_SUPPORT_FEATURES_MAX_PDU_SESSION_LABEL
,
inner_width
,
max_pdu_session
));
u_int16_t
max_pdrs_per_pdu_session
=
m_max_pdrs_per_pdu_session
.
get_value
();
out
.
append
(
indent
).
append
(
fmt
::
format
(
BASE_FORMATTER
,
INNER_LIST_ELEM
,
UPF_CONFIG_SUPPORT_FEATURES_MAX_PDRS_PER_PDU_SESSION_LABEL
,
inner_width
,
max_pdrs_per_pdu_session
));
u_int16_t
max_qos_flows_per_pdu_session
=
m_max_qos_flows_per_pdu_session
.
get_value
();
out
.
append
(
indent
).
append
(
fmt
::
format
(
BASE_FORMATTER
,
INNER_LIST_ELEM
,
UPF_CONFIG_SUPPORT_FEATURES_MAX_QOS_FLOWS_PER_PDU_SESSION_LABEL
,
inner_width
,
max_qos_flows_per_pdu_session
));
u_int16_t
max_sdf_filters_per_pdu_session
=
m_max_sdf_filters_per_pdu_session
.
get_value
();
out
.
append
(
indent
).
append
(
fmt
::
format
(
BASE_FORMATTER
,
INNER_LIST_ELEM
,
UPF_CONFIG_SUPPORT_FEATURES_MAX_SDF_FILTERS_PER_PDU_SESSION_LABEL
,
inner_width
,
max_sdf_filters_per_pdu_session
));
u_int16_t
max_arp_entries
=
m_max_arp_entries
.
get_value
();
out
.
append
(
indent
).
append
(
fmt
::
format
(
BASE_FORMATTER
,
INNER_LIST_ELEM
,
UPF_CONFIG_SUPPORT_FEATURES_MAX_ARP_ENTRIES_LABEL
,
inner_width
,
max_arp_entries
));
// Enable SNAT
std
::
string
enable_snat
=
m_enable_snat
.
get_value
()
?
UPF_CONFIG_OPTION_YES_STR
:
...
...
@@ -110,7 +219,8 @@ upf::upf(
const
std
::
string
&
name
,
const
std
::
string
&
host
,
const
sbi_interface
&
sbi
,
const
std
::
map
<
std
::
string
,
upf_interface_config
>&
interfaces
)
:
nf
(
name
,
host
,
sbi
),
m_upf_support_features
(
false
,
false
,
false
,
false
),
m_upf_support_features
(
false
,
false
,
8
,
4
,
10000
,
8
,
8
,
8
,
1572
,
false
,
false
),
m_interfaces
(
interfaces
)
{
model
::
nrf
::
SnssaiUpfInfoItem
item
;
item
.
setSNssai
(
DEFAULT_SNSSAI
);
...
...
@@ -216,6 +326,43 @@ bool upf_support_features::get_option_enable_qos() const {
return
m_enable_qos
.
get_value
();
}
//------------------------------------------------------------------------------
u_int16_t
upf_support_features
::
get_option_max_upf_interfaces
()
const
{
return
m_max_upf_interfaces
.
get_value
();
}
//------------------------------------------------------------------------------
u_int16_t
upf_support_features
::
get_option_max_upf_redirect_interfaces
()
const
{
return
m_max_upf_redirect_interfaces
.
get_value
();
}
//------------------------------------------------------------------------------
u_int16_t
upf_support_features
::
get_option_max_pdu_session
()
const
{
return
m_max_pdu_session
.
get_value
();
}
//------------------------------------------------------------------------------
u_int16_t
upf_support_features
::
get_option_max_pdrs_per_pdu_session
()
const
{
return
m_max_pdrs_per_pdu_session
.
get_value
();
}
//------------------------------------------------------------------------------
u_int16_t
upf_support_features
::
get_option_max_qos_flows_per_pdu_session
()
const
{
return
m_max_qos_flows_per_pdu_session
.
get_value
();
}
//------------------------------------------------------------------------------
u_int16_t
upf_support_features
::
get_option_max_sdf_filters_per_pdu_session
()
const
{
return
m_max_sdf_filters_per_pdu_session
.
get_value
();
}
//------------------------------------------------------------------------------
u_int16_t
upf_support_features
::
get_option_max_arp_entries
()
const
{
return
m_max_arp_entries
.
get_value
();
}
//------------------------------------------------------------------------------
bool
upf_support_features
::
get_option_enable_snat
()
const
{
return
m_enable_snat
.
get_value
();
...
...
@@ -402,7 +549,26 @@ void upf_config_yaml::to_upf_config(upf_config& cfg) {
cfg
.
enable_bpf_datapath
=
upf_local
->
get_support_features
().
get_option_enable_bpf_datapath
();
cfg
.
enable_qos
=
upf_local
->
get_support_features
().
get_option_enable_qos
();
cfg
.
enable_qos
=
upf_local
->
get_support_features
().
get_option_enable_qos
();
cfg
.
max_upf_interfaces
=
upf_local
->
get_support_features
().
get_option_max_upf_interfaces
();
cfg
.
max_upf_redirect_interfaces
=
upf_local
->
get_support_features
()
.
get_option_max_upf_redirect_interfaces
();
cfg
.
max_pdu_session
=
upf_local
->
get_support_features
().
get_option_max_pdu_session
();
cfg
.
max_pdrs_per_pdu_session
=
upf_local
->
get_support_features
().
get_option_max_pdrs_per_pdu_session
();
cfg
.
max_qos_flows_per_pdu_session
=
upf_local
->
get_support_features
()
.
get_option_max_qos_flows_per_pdu_session
();
cfg
.
max_sdf_filters_per_pdu_session
=
upf_local
->
get_support_features
()
.
get_option_max_sdf_filters_per_pdu_session
();
cfg
.
max_arp_entries
=
upf_local
->
get_support_features
().
get_option_max_arp_entries
();
cfg
.
enable_snat
=
upf_local
->
get_support_features
().
get_option_enable_snat
();
cfg
.
enable_fr
=
upf_local
->
get_support_features
().
get_option_enable_fr
();
...
...
src/upf_app/app/upf_config_yaml.hpp
View file @
22053149
...
...
@@ -43,6 +43,40 @@ constexpr auto UPF_CONFIG_SUPPORT_FEATURES_ENABLE_SNAT_LABEL = "Enable SNAT";
constexpr
auto
UPF_CONFIG_SUPPORT_FEATURES_ENABLE_QOS
=
"enable_qos"
;
constexpr
auto
UPF_CONFIG_SUPPORT_FEATURES_ENABLE_QOS_LABEL
=
"Enable QoS"
;
constexpr
auto
UPF_CONFIG_SUPPORT_FEATURES_MAX_UPF_INTERFACES
=
"max_upf_interfaces"
;
constexpr
auto
UPF_CONFIG_SUPPORT_FEATURES_MAX_UPF_INTERFACES_LABEL
=
"Max upf interfaces"
;
constexpr
auto
UPF_CONFIG_SUPPORT_FEATURES_MAX_UPF_REDIRECT_INTERFACES
=
"max_upf_redirect_interfaces"
;
constexpr
auto
UPF_CONFIG_SUPPORT_FEATURES_MAX_UPF_REDIRECT_INTERFACES_LABEL
=
"Max upf redirect interfaces"
;
constexpr
auto
UPF_CONFIG_SUPPORT_FEATURES_MAX_PDU_SESSION
=
"max_pdu_session"
;
constexpr
auto
UPF_CONFIG_SUPPORT_FEATURES_MAX_PDU_SESSION_LABEL
=
"Max PDU Session"
;
constexpr
auto
UPF_CONFIG_SUPPORT_FEATURES_MAX_PDRS_PER_PDU_SESSION
=
"max_pdrs_per_pdu_session"
;
constexpr
auto
UPF_CONFIG_SUPPORT_FEATURES_MAX_PDRS_PER_PDU_SESSION_LABEL
=
"Max PDRs Per PDU Session"
;
constexpr
auto
UPF_CONFIG_SUPPORT_FEATURES_MAX_QOS_FLOWS_PER_PDU_SESSION
=
"max_qos_flows_per_pdu_session"
;
constexpr
auto
UPF_CONFIG_SUPPORT_FEATURES_MAX_QOS_FLOWS_PER_PDU_SESSION_LABEL
=
"Max Qos Flows Per PDU Session"
;
constexpr
auto
UPF_CONFIG_SUPPORT_FEATURES_MAX_SDF_FILTERS_PER_PDU_SESSION
=
"max_sdf_filters_per_pdu_session"
;
constexpr
auto
UPF_CONFIG_SUPPORT_FEATURES_MAX_SDF_FILTERS_PER_PDU_SESSION_LABEL
=
"Max SDF Filters Per PDU Session"
;
constexpr
auto
UPF_CONFIG_SUPPORT_FEATURES_MAX_ARP_ENTRIES
=
"max_arp_entries"
;
constexpr
auto
UPF_CONFIG_SUPPORT_FEATURES_MAX_ARP_ENTRIES_LABEL
=
"Max ARP Entries"
;
constexpr
auto
UPF_CONFIG_REMOTE_N6_GW
=
"remote_n6_gw"
;
constexpr
auto
UPF_CONFIG_REMOTE_N6_GW_LABEL
=
"Remote N6 Gateway"
;
...
...
@@ -57,19 +91,37 @@ class upf_support_features : public config_type {
private:
option_config_value
m_enable_bpf_datapath
{};
option_config_value
m_enable_qos
{};
int_config_value
m_max_upf_interfaces
{};
int_config_value
m_max_upf_redirect_interfaces
{};
int_config_value
m_max_pdu_session
{};
int_config_value
m_max_pdrs_per_pdu_session
{};
int_config_value
m_max_qos_flows_per_pdu_session
{};
int_config_value
m_max_sdf_filters_per_pdu_session
{};
int_config_value
m_max_arp_entries
{};
option_config_value
m_enable_snat
{};
option_config_value
m_enable_fr
{};
public:
explicit
upf_support_features
(
bool
enable_bpf_datapath
,
bool
enable_qos
,
bool
enable_snat
,
bool
enable_fr
);
bool
enable_bpf_datapath
,
bool
enable_qos
,
u_int16_t
max_upf_interfaces
,
u_int16_t
max_upf_redirect_interfaces
,
u_int16_t
max_pdu_session
,
u_int16_t
max_pdrs_per_pdu_session
,
u_int16_t
max_qos_flows_per_pdu_session
,
u_int16_t
max_sdf_filters_per_pdu_session
,
u_int16_t
max_arp_entries
,
bool
enable_snat
,
bool
enable_fr
);
void
from_yaml
(
const
YAML
::
Node
&
node
)
override
;
[[
nodiscard
]]
std
::
string
to_string
(
const
std
::
string
&
indent
)
const
override
;
[[
nodiscard
]]
bool
get_option_enable_bpf_datapath
()
const
;
[[
nodiscard
]]
bool
get_option_enable_qos
()
const
;
[[
nodiscard
]]
u_int16_t
get_option_max_upf_interfaces
()
const
;
[[
nodiscard
]]
u_int16_t
get_option_max_upf_redirect_interfaces
()
const
;
[[
nodiscard
]]
u_int16_t
get_option_max_pdu_session
()
const
;
[[
nodiscard
]]
u_int16_t
get_option_max_pdrs_per_pdu_session
()
const
;
[[
nodiscard
]]
u_int16_t
get_option_max_qos_flows_per_pdu_session
()
const
;
[[
nodiscard
]]
u_int16_t
get_option_max_sdf_filters_per_pdu_session
()
const
;
[[
nodiscard
]]
u_int16_t
get_option_max_arp_entries
()
const
;
[[
nodiscard
]]
bool
get_option_enable_snat
()
const
;
[[
nodiscard
]]
bool
get_option_enable_fr
()
const
;
};
...
...
src/upf_app/helpers/ConfigManager.hpp
View file @
22053149
#ifndef CONFIG_MANAGER_HPP
#define CONFIG_MANAGER_HPP
#include <sys/types.h>
class
ConfigManager
{
public:
// Returns the singleton instance
...
...
@@ -26,6 +26,14 @@ class ConfigManager {
// Configuration variables
bool
enable_bpf_datapath
=
false
;
bool
enable_qos
=
false
;
u_int16_t
max_upf_interfaces
=
8
;
u_int16_t
max_upf_redirect_interfaces
=
4
;
u_int16_t
max_pdu_session
=
10000
;
u_int16_t
max_pdrs_per_pdu_session
=
8
;
u_int16_t
max_qos_flows_per_pdu_session
=
8
;
u_int16_t
max_sdf_filters_per_pdu_session
=
8
;
u_int16_t
max_arp_entries
=
1572
;
};
#endif // CONFIG_MANAGER_HPP
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment