Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-SMF
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
Operations
Operations
Metrics
Environments
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
OpenXG-SMF
Commits
643c367c
Commit
643c367c
authored
Jun 17, 2021
by
Tien-Thinh Nguyen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update action with support features
parent
8f92ce7c
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
249 additions
and
207 deletions
+249
-207
src/smf_app/smf_app.cpp
src/smf_app/smf_app.cpp
+7
-7
src/smf_app/smf_config.cpp
src/smf_app/smf_config.cpp
+235
-200
src/smf_app/smf_config.hpp
src/smf_app/smf_config.hpp
+7
-0
No files found.
src/smf_app/smf_app.cpp
View file @
643c367c
...
...
@@ -340,17 +340,17 @@ smf_app::smf_app(const std::string& config_file)
throw
;
}
// TODO: should be done when SMF select UPF for a particular UE (should be
// verified)
for
(
std
::
vector
<
pfcp
::
node_id_t
>::
const_iterator
it
=
smf_cfg
.
upfs
.
begin
();
it
!=
smf_cfg
.
upfs
.
end
();
++
it
)
{
start_upf_association
(
*
it
);
}
if
(
smf_cfg
.
discover_upf
)
{
// Trigger NFStatusNotify subscription to be noticed when a new UPF becomes
// available (if this option is enabled)
trigger_upf_status_notification_subscribe
();
}
else
{
// TODO: should be done when SMF select UPF for a particular UE (should be
// verified)
for
(
std
::
vector
<
pfcp
::
node_id_t
>::
const_iterator
it
=
smf_cfg
.
upfs
.
begin
();
it
!=
smf_cfg
.
upfs
.
end
();
++
it
)
{
start_upf_association
(
*
it
);
}
}
// Register to NRF (if this option is enabled)
...
...
src/smf_app/smf_config.cpp
View file @
643c367c
...
...
@@ -635,223 +635,235 @@ int smf_config::load(const string& config_file) {
amf_addr
.
ipv4_addr
=
amf_ipv4_addr
;
amf_addr
.
port
=
amf_port
;
amf_addr
.
api_version
=
"v1"
;
// TODO: to get API version from DNS
amf_addr
.
fqdn
=
astring
;
}
}
// UDM
const
Setting
&
udm_cfg
=
smf_cfg
[
SMF_CONFIG_STRING_UDM
];
struct
in_addr
udm_ipv4_addr
=
{};
unsigned
int
udm_port
=
{
0
};
std
::
string
udm_api_version
=
{};
// UDM: Get UDM information if necessary
if
(
!
use_local_subscription_info
)
{
const
Setting
&
udm_cfg
=
smf_cfg
[
SMF_CONFIG_STRING_UDM
];
struct
in_addr
udm_ipv4_addr
=
{};
unsigned
int
udm_port
=
{
0
};
std
::
string
udm_api_version
=
{};
if
(
!
use_fqdn_dns
)
{
udm_cfg
.
lookupValue
(
SMF_CONFIG_STRING_UDM_IPV4_ADDRESS
,
astring
);
IPV4_STR_ADDR_TO_INADDR
(
util
::
trim
(
astring
).
c_str
(),
udm_ipv4_addr
,
"BAD IPv4 ADDRESS FORMAT FOR UDM !"
);
udm_addr
.
ipv4_addr
=
udm_ipv4_addr
;
if
(
!
(
udm_cfg
.
lookupValue
(
SMF_CONFIG_STRING_UDM_PORT
,
udm_port
)))
{
Logger
::
smf_app
().
error
(
SMF_CONFIG_STRING_UDM_PORT
"failed"
);
throw
(
SMF_CONFIG_STRING_UDM_PORT
"failed"
);
}
udm_addr
.
port
=
udm_port
;
if
(
!
(
udm_cfg
.
lookupValue
(
SMF_CONFIG_STRING_API_VERSION
,
udm_api_version
)))
{
Logger
::
smf_app
().
error
(
SMF_CONFIG_STRING_API_VERSION
"failed"
);
throw
(
SMF_CONFIG_STRING_API_VERSION
"failed"
);
}
udm_addr
.
api_version
=
udm_api_version
;
}
else
{
udm_cfg
.
lookupValue
(
SMF_CONFIG_STRING_FQDN_DNS
,
astring
);
uint8_t
addr_type
=
{
0
};
std
::
string
address
=
{};
fqdn
::
resolve
(
astring
,
address
,
udm_port
,
addr_type
);
if
(
addr_type
!=
0
)
{
// IPv6
// TODO:
throw
(
"DO NOT SUPPORT IPV6 ADDR FOR UDM!"
);
}
else
{
// IPv4
if
(
!
use_fqdn_dns
)
{
udm_cfg
.
lookupValue
(
SMF_CONFIG_STRING_UDM_IPV4_ADDRESS
,
astring
);
IPV4_STR_ADDR_TO_INADDR
(
util
::
trim
(
a
ddress
).
c_str
(),
udm_ipv4_addr
,
util
::
trim
(
a
string
).
c_str
(),
udm_ipv4_addr
,
"BAD IPv4 ADDRESS FORMAT FOR UDM !"
);
udm_addr
.
ipv4_addr
=
udm_ipv4_addr
;
udm_addr
.
port
=
udm_port
;
udm_addr
.
api_version
=
"v1"
;
// TODO: to get API version from DNS
}
}
// UPF list
unsigned
char
buf_in_addr
[
sizeof
(
struct
in_addr
)
+
1
];
const
Setting
&
upf_list_cfg
=
smf_cfg
[
SMF_CONFIG_STRING_UPF_LIST
];
count
=
upf_list_cfg
.
getLength
();
for
(
int
i
=
0
;
i
<
count
;
i
++
)
{
const
Setting
&
upf_cfg
=
upf_list_cfg
[
i
];
// TODO FQDN
string
address
=
{};
if
(
!
use_fqdn_dns
)
{
if
(
upf_cfg
.
lookupValue
(
SMF_CONFIG_STRING_UPF_IPV4_ADDRESS
,
address
))
{
pfcp
::
node_id_t
n
=
{};
n
.
node_id_type
=
pfcp
::
NODE_ID_TYPE_IPV4_ADDRESS
;
// actually
if
(
inet_pton
(
AF_INET
,
util
::
trim
(
address
).
c_str
(),
buf_in_addr
)
==
1
)
{
memcpy
(
&
n
.
u1
.
ipv4_address
,
buf_in_addr
,
sizeof
(
struct
in_addr
));
}
else
{
Logger
::
smf_app
().
error
(
"CONFIG: BAD IPV4 ADDRESS in "
SMF_CONFIG_STRING_UPF_LIST
" item %d"
,
i
);
throw
(
"CONFIG: BAD ADDRESS in "
SMF_CONFIG_STRING_UPF_LIST
);
}
upfs
.
push_back
(
n
);
}
else
{
// TODO IPV6_ADDRESS, FQDN
throw
(
"Bad value in section %s : item no %d in config file %s"
,
SMF_CONFIG_STRING_UPF_LIST
,
i
,
config_file
.
c_str
());
udm_addr
.
ipv4_addr
=
udm_ipv4_addr
;
if
(
!
(
udm_cfg
.
lookupValue
(
SMF_CONFIG_STRING_UDM_PORT
,
udm_port
)))
{
Logger
::
smf_app
().
error
(
SMF_CONFIG_STRING_UDM_PORT
"failed"
);
throw
(
SMF_CONFIG_STRING_UDM_PORT
"failed"
);
}
udm_addr
.
port
=
udm_port
;
if
(
!
(
udm_cfg
.
lookupValue
(
SMF_CONFIG_STRING_API_VERSION
,
udm_api_version
)))
{
Logger
::
smf_app
().
error
(
SMF_CONFIG_STRING_API_VERSION
"failed"
);
throw
(
SMF_CONFIG_STRING_API_VERSION
"failed"
);
}
udm_addr
.
api_version
=
udm_api_version
;
}
else
{
unsigned
int
upf_port
=
{
0
};
upf_cfg
.
lookupValue
(
SMF_CONFIG_STRING_FQDN_DNS
,
astring
);
udm_cfg
.
lookupValue
(
SMF_CONFIG_STRING_FQDN_DNS
,
astring
);
uint8_t
addr_type
=
{
0
};
std
::
string
address
=
{};
fqdn
::
resolve
(
astring
,
address
,
upf_port
,
addr_type
,
""
);
fqdn
::
resolve
(
astring
,
address
,
udm_port
,
addr_type
);
if
(
addr_type
!=
0
)
{
// IPv6
// TODO:
throw
(
"DO NOT SUPPORT IPV6 ADDR FOR
NRF
!"
);
throw
(
"DO NOT SUPPORT IPV6 ADDR FOR
UDM
!"
);
}
else
{
// IPv4
pfcp
::
node_id_t
n
=
{};
n
.
node_id_type
=
pfcp
::
NODE_ID_TYPE_IPV4_ADDRESS
;
// actually
if
(
inet_pton
(
AF_INET
,
util
::
trim
(
address
).
c_str
(),
buf_in_addr
)
==
1
)
{
memcpy
(
&
n
.
u1
.
ipv4_address
,
buf_in_addr
,
sizeof
(
struct
in_addr
));
}
else
{
Logger
::
smf_app
().
error
(
"CONFIG: BAD IPV4 ADDRESS in "
SMF_CONFIG_STRING_UPF_LIST
" item %d"
,
i
);
throw
(
"CONFIG: BAD ADDRESS in "
SMF_CONFIG_STRING_UPF_LIST
);
}
upfs
.
push_back
(
n
);
IPV4_STR_ADDR_TO_INADDR
(
util
::
trim
(
address
).
c_str
(),
udm_ipv4_addr
,
"BAD IPv4 ADDRESS FORMAT FOR UDM !"
);
udm_addr
.
ipv4_addr
=
udm_ipv4_addr
;
udm_addr
.
port
=
udm_port
;
udm_addr
.
api_version
=
"v1"
;
// TODO: to get API version from DNS
}
}
}
// NRF
const
Setting
&
nrf_cfg
=
smf_cfg
[
SMF_CONFIG_STRING_NRF
];
struct
in_addr
nrf_ipv4_addr
=
{};
unsigned
int
nrf_port
=
{
0
};
std
::
string
nrf_api_version
=
{};
// UPF list
if
(
!
discover_upf
)
{
unsigned
char
buf_in_addr
[
sizeof
(
struct
in_addr
)
+
1
];
const
Setting
&
upf_list_cfg
=
smf_cfg
[
SMF_CONFIG_STRING_UPF_LIST
];
count
=
upf_list_cfg
.
getLength
();
for
(
int
i
=
0
;
i
<
count
;
i
++
)
{
const
Setting
&
upf_cfg
=
upf_list_cfg
[
i
];
// TODO FQDN
string
address
=
{};
if
(
!
use_fqdn_dns
)
{
if
(
upf_cfg
.
lookupValue
(
SMF_CONFIG_STRING_UPF_IPV4_ADDRESS
,
address
))
{
pfcp
::
node_id_t
n
=
{};
n
.
node_id_type
=
pfcp
::
NODE_ID_TYPE_IPV4_ADDRESS
;
// actually
if
(
inet_pton
(
AF_INET
,
util
::
trim
(
address
).
c_str
(),
buf_in_addr
)
==
1
)
{
memcpy
(
&
n
.
u1
.
ipv4_address
,
buf_in_addr
,
sizeof
(
struct
in_addr
));
}
else
{
Logger
::
smf_app
().
error
(
"CONFIG: BAD IPV4 ADDRESS in "
SMF_CONFIG_STRING_UPF_LIST
" item %d"
,
i
);
throw
(
"CONFIG: BAD ADDRESS in "
SMF_CONFIG_STRING_UPF_LIST
);
}
upfs
.
push_back
(
n
);
}
else
{
// TODO IPV6_ADDRESS, FQDN
throw
(
"Bad value in section %s : item no %d in config file %s"
,
SMF_CONFIG_STRING_UPF_LIST
,
i
,
config_file
.
c_str
());
}
if
(
!
use_fqdn_dns
)
{
nrf_cfg
.
lookupValue
(
SMF_CONFIG_STRING_NRF_IPV4_ADDRESS
,
astring
);
IPV4_STR_ADDR_TO_INADDR
(
util
::
trim
(
astring
).
c_str
(),
nrf_ipv4_addr
,
"BAD IPv4 ADDRESS FORMAT FOR NRF !"
);
nrf_addr
.
ipv4_addr
=
nrf_ipv4_addr
;
if
(
!
(
nrf_cfg
.
lookupValue
(
SMF_CONFIG_STRING_NRF_PORT
,
nrf_port
)))
{
Logger
::
smf_app
().
error
(
SMF_CONFIG_STRING_NRF_PORT
"failed"
);
throw
(
SMF_CONFIG_STRING_NRF_PORT
"failed"
);
}
else
{
unsigned
int
upf_port
=
{
0
};
upf_cfg
.
lookupValue
(
SMF_CONFIG_STRING_FQDN_DNS
,
astring
);
uint8_t
addr_type
=
{
0
};
std
::
string
address
=
{};
fqdn
::
resolve
(
astring
,
address
,
upf_port
,
addr_type
,
""
);
if
(
addr_type
!=
0
)
{
// IPv6
// TODO:
throw
(
"DO NOT SUPPORT IPV6 ADDR FOR NRF!"
);
}
else
{
// IPv4
pfcp
::
node_id_t
n
=
{};
n
.
node_id_type
=
pfcp
::
NODE_ID_TYPE_IPV4_ADDRESS
;
// actually
n
.
fqdn
=
astring
;
if
(
inet_pton
(
AF_INET
,
util
::
trim
(
address
).
c_str
(),
buf_in_addr
)
==
1
)
{
memcpy
(
&
n
.
u1
.
ipv4_address
,
buf_in_addr
,
sizeof
(
struct
in_addr
));
}
else
{
Logger
::
smf_app
().
error
(
"CONFIG: BAD IPV4 ADDRESS in "
SMF_CONFIG_STRING_UPF_LIST
" item %d"
,
i
);
throw
(
"CONFIG: BAD ADDRESS in "
SMF_CONFIG_STRING_UPF_LIST
);
}
upfs
.
push_back
(
n
);
}
}
}
nrf_addr
.
port
=
nrf_port
;
}
if
(
!
(
nrf_cfg
.
lookupValue
(
SMF_CONFIG_STRING_API_VERSION
,
nrf_api_version
)))
{
Logger
::
smf_app
().
error
(
SMF_CONFIG_STRING_API_VERSION
"failed"
);
throw
(
SMF_CONFIG_STRING_API_VERSION
"failed"
);
}
nrf_addr
.
api_version
=
nrf_api_version
;
}
else
{
nrf_cfg
.
lookupValue
(
SMF_CONFIG_STRING_FQDN_DNS
,
astring
);
uint8_t
addr_type
=
{
0
};
std
::
string
address
=
{};
fqdn
::
resolve
(
astring
,
address
,
nrf_port
,
addr_type
);
if
(
addr_type
!=
0
)
{
// IPv6
// TODO:
throw
(
"DO NOT SUPPORT IPV6 ADDR FOR NRF!"
);
}
else
{
// IPv4
// NRF
if
(
discover_upf
or
register_nrf
)
{
const
Setting
&
nrf_cfg
=
smf_cfg
[
SMF_CONFIG_STRING_NRF
];
struct
in_addr
nrf_ipv4_addr
=
{};
unsigned
int
nrf_port
=
{
0
};
std
::
string
nrf_api_version
=
{};
if
(
!
use_fqdn_dns
)
{
nrf_cfg
.
lookupValue
(
SMF_CONFIG_STRING_NRF_IPV4_ADDRESS
,
astring
);
IPV4_STR_ADDR_TO_INADDR
(
util
::
trim
(
a
ddress
).
c_str
(),
nrf_ipv4_addr
,
util
::
trim
(
a
string
).
c_str
(),
nrf_ipv4_addr
,
"BAD IPv4 ADDRESS FORMAT FOR NRF !"
);
nrf_addr
.
ipv4_addr
=
nrf_ipv4_addr
;
nrf_addr
.
port
=
nrf_port
;
nrf_addr
.
api_version
=
"v1"
;
// TODO: to get API version from DNS
nrf_addr
.
ipv4_addr
=
nrf_ipv4_addr
;
if
(
!
(
nrf_cfg
.
lookupValue
(
SMF_CONFIG_STRING_NRF_PORT
,
nrf_port
)))
{
Logger
::
smf_app
().
error
(
SMF_CONFIG_STRING_NRF_PORT
"failed"
);
throw
(
SMF_CONFIG_STRING_NRF_PORT
"failed"
);
}
nrf_addr
.
port
=
nrf_port
;
if
(
!
(
nrf_cfg
.
lookupValue
(
SMF_CONFIG_STRING_API_VERSION
,
nrf_api_version
)))
{
Logger
::
smf_app
().
error
(
SMF_CONFIG_STRING_API_VERSION
"failed"
);
throw
(
SMF_CONFIG_STRING_API_VERSION
"failed"
);
}
nrf_addr
.
api_version
=
nrf_api_version
;
}
else
{
nrf_cfg
.
lookupValue
(
SMF_CONFIG_STRING_FQDN_DNS
,
astring
);
uint8_t
addr_type
=
{
0
};
std
::
string
address
=
{};
fqdn
::
resolve
(
astring
,
address
,
nrf_port
,
addr_type
);
if
(
addr_type
!=
0
)
{
// IPv6
// TODO:
throw
(
"DO NOT SUPPORT IPV6 ADDR FOR NRF!"
);
}
else
{
// IPv4
IPV4_STR_ADDR_TO_INADDR
(
util
::
trim
(
address
).
c_str
(),
nrf_ipv4_addr
,
"BAD IPv4 ADDRESS FORMAT FOR NRF !"
);
nrf_addr
.
ipv4_addr
=
nrf_ipv4_addr
;
nrf_addr
.
port
=
nrf_port
;
nrf_addr
.
api_version
=
"v1"
;
// TODO: to get API version from DNS
nrf_addr
.
fqdn
=
astring
;
}
}
}
// Local configuration
num_session_management_subscription
=
0
;
const
Setting
&
local_cfg
=
smf_cfg
[
SMF_CONFIG_STRING_LOCAL_CONFIGURATION
];
const
Setting
&
session_management_subscription_list_cfg
=
local_cfg
[
SMF_CONFIG_STRING_SESSION_MANAGEMENT_SUBSCRIPTION_LIST
];
count
=
session_management_subscription_list_cfg
.
getLength
();
for
(
int
i
=
0
;
i
<
count
;
i
++
)
{
const
Setting
&
session_management_subscription_cfg
=
session_management_subscription_list_cfg
[
i
];
unsigned
int
nssai_sst
=
0
;
string
nssai_sd
=
{};
string
dnn
=
{};
string
default_session_type
=
{};
unsigned
int
default_ssc_mode
=
0
;
unsigned
int
qos_profile_5qi
=
0
;
unsigned
int
qos_profile_priority_level
=
0
;
unsigned
int
qos_profile_arp_priority_level
=
0
;
string
qos_profile_arp_preemptcap
=
{};
string
qos_profile_arp_preemptvuln
=
{};
string
session_ambr_ul
=
{};
string
session_ambr_dl
=
{};
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_NSSAI_SST
,
nssai_sst
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_NSSAI_SD
,
nssai_sd
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_DNN
,
dnn
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_DEFAULT_SESSION_TYPE
,
default_session_type
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_DEFAULT_SSC_MODE
,
default_ssc_mode
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_QOS_PROFILE_5QI
,
qos_profile_5qi
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_QOS_PROFILE_PRIORITY_LEVEL
,
qos_profile_priority_level
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_QOS_PROFILE_ARP_PRIORITY_LEVEL
,
qos_profile_arp_priority_level
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_QOS_PROFILE_ARP_PREEMPTCAP
,
qos_profile_arp_preemptcap
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_QOS_PROFILE_ARP_PREEMPTVULN
,
qos_profile_arp_preemptvuln
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_SESSION_AMBR_UL
,
session_ambr_ul
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_SESSION_AMBR_DL
,
session_ambr_dl
);
session_management_subscription
[
i
].
single_nssai
.
sST
=
nssai_sst
;
session_management_subscription
[
i
].
single_nssai
.
sD
=
nssai_sd
;
session_management_subscription
[
i
].
session_type
=
default_session_type
;
session_management_subscription
[
i
].
dnn
=
dnn
;
session_management_subscription
[
i
].
ssc_mode
=
default_ssc_mode
;
session_management_subscription
[
i
].
default_qos
.
_5qi
=
qos_profile_5qi
;
session_management_subscription
[
i
].
default_qos
.
priority_level
=
qos_profile_priority_level
;
session_management_subscription
[
i
].
default_qos
.
arp
.
priority_level
=
qos_profile_arp_priority_level
;
session_management_subscription
[
i
].
default_qos
.
arp
.
preempt_cap
=
qos_profile_arp_preemptcap
;
session_management_subscription
[
i
].
default_qos
.
arp
.
preempt_vuln
=
qos_profile_arp_preemptvuln
;
session_management_subscription
[
i
].
session_ambr
.
downlink
=
session_ambr_dl
;
session_management_subscription
[
i
].
session_ambr
.
uplink
=
session_ambr_ul
;
num_session_management_subscription
++
;
if
(
use_local_subscription_info
)
{
num_session_management_subscription
=
0
;
const
Setting
&
local_cfg
=
smf_cfg
[
SMF_CONFIG_STRING_LOCAL_CONFIGURATION
];
const
Setting
&
session_management_subscription_list_cfg
=
local_cfg
[
SMF_CONFIG_STRING_SESSION_MANAGEMENT_SUBSCRIPTION_LIST
];
count
=
session_management_subscription_list_cfg
.
getLength
();
for
(
int
i
=
0
;
i
<
count
;
i
++
)
{
const
Setting
&
session_management_subscription_cfg
=
session_management_subscription_list_cfg
[
i
];
unsigned
int
nssai_sst
=
0
;
string
nssai_sd
=
{};
string
dnn
=
{};
string
default_session_type
=
{};
unsigned
int
default_ssc_mode
=
0
;
unsigned
int
qos_profile_5qi
=
0
;
unsigned
int
qos_profile_priority_level
=
0
;
unsigned
int
qos_profile_arp_priority_level
=
0
;
string
qos_profile_arp_preemptcap
=
{};
string
qos_profile_arp_preemptvuln
=
{};
string
session_ambr_ul
=
{};
string
session_ambr_dl
=
{};
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_NSSAI_SST
,
nssai_sst
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_NSSAI_SD
,
nssai_sd
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_DNN
,
dnn
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_DEFAULT_SESSION_TYPE
,
default_session_type
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_DEFAULT_SSC_MODE
,
default_ssc_mode
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_QOS_PROFILE_5QI
,
qos_profile_5qi
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_QOS_PROFILE_PRIORITY_LEVEL
,
qos_profile_priority_level
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_QOS_PROFILE_ARP_PRIORITY_LEVEL
,
qos_profile_arp_priority_level
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_QOS_PROFILE_ARP_PREEMPTCAP
,
qos_profile_arp_preemptcap
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_QOS_PROFILE_ARP_PREEMPTVULN
,
qos_profile_arp_preemptvuln
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_SESSION_AMBR_UL
,
session_ambr_ul
);
session_management_subscription_cfg
.
lookupValue
(
SMF_CONFIG_STRING_SESSION_AMBR_DL
,
session_ambr_dl
);
session_management_subscription
[
i
].
single_nssai
.
sST
=
nssai_sst
;
session_management_subscription
[
i
].
single_nssai
.
sD
=
nssai_sd
;
session_management_subscription
[
i
].
session_type
=
default_session_type
;
session_management_subscription
[
i
].
dnn
=
dnn
;
session_management_subscription
[
i
].
ssc_mode
=
default_ssc_mode
;
session_management_subscription
[
i
].
default_qos
.
_5qi
=
qos_profile_5qi
;
session_management_subscription
[
i
].
default_qos
.
priority_level
=
qos_profile_priority_level
;
session_management_subscription
[
i
].
default_qos
.
arp
.
priority_level
=
qos_profile_arp_priority_level
;
session_management_subscription
[
i
].
default_qos
.
arp
.
preempt_cap
=
qos_profile_arp_preemptcap
;
session_management_subscription
[
i
].
default_qos
.
arp
.
preempt_vuln
=
qos_profile_arp_preemptvuln
;
session_management_subscription
[
i
].
session_ambr
.
downlink
=
session_ambr_dl
;
session_management_subscription
[
i
].
session_ambr
.
uplink
=
session_ambr_ul
;
num_session_management_subscription
++
;
}
}
}
catch
(
const
SettingNotFoundException
&
nfex
)
{
Logger
::
smf_app
().
error
(
"%s : %s"
,
nfex
.
what
(),
nfex
.
getPath
());
return
RETURNerror
;
...
...
@@ -980,6 +992,19 @@ void smf_config::display() {
}
}
Logger
::
smf_app
().
info
(
"- Supported Features:"
);
Logger
::
smf_app
().
info
(
" Register to NRF............: %s"
,
register_nrf
?
"Yes"
:
"No"
);
Logger
::
smf_app
().
info
(
" Discover UPF...............: %s"
,
discover_upf
?
"Yes"
:
"No"
);
Logger
::
smf_app
().
info
(
" Use Local Subscription Info: %s"
,
use_local_subscription_info
?
"Yes"
:
"No"
);
Logger
::
smf_app
().
info
(
" Push PCO (DNS+MTU).........: %s"
,
force_push_pco
?
"Yes"
:
"No"
);
Logger
::
smf_app
().
info
(
" Use FQDN ..................: %s"
,
use_fqdn_dns
?
"Yes"
:
"No"
);
Logger
::
smf_app
().
info
(
"- AMF:"
);
Logger
::
smf_app
().
info
(
" IPv4 Addr ...........: %s"
,
...
...
@@ -987,6 +1012,9 @@ void smf_config::display() {
Logger
::
smf_app
().
info
(
" Port ................: %lu "
,
amf_addr
.
port
);
Logger
::
smf_app
().
info
(
" API version .........: %s"
,
amf_addr
.
api_version
.
c_str
());
if
(
use_fqdn_dns
)
Logger
::
smf_app
().
info
(
" FQDN ................: %s"
,
amf_addr
.
fqdn
.
c_str
());
if
(
!
use_local_subscription_info
)
{
Logger
::
smf_app
().
info
(
"- UDM:"
);
...
...
@@ -996,9 +1024,12 @@ void smf_config::display() {
Logger
::
smf_app
().
info
(
" Port ................: %lu "
,
udm_addr
.
port
);
Logger
::
smf_app
().
info
(
" API version .........: %s"
,
udm_addr
.
api_version
.
c_str
());
if
(
use_fqdn_dns
)
Logger
::
smf_app
().
info
(
" FQDN ................: %s"
,
udm_addr
.
fqdn
.
c_str
());
}
if
(
register_nrf
)
{
if
(
register_nrf
or
discover_upf
)
{
Logger
::
smf_app
().
info
(
"- NRF:"
);
Logger
::
smf_app
().
info
(
" IPv4 Addr ...........: %s"
,
...
...
@@ -1006,18 +1037,22 @@ void smf_config::display() {
Logger
::
smf_app
().
info
(
" Port ................: %lu "
,
nrf_addr
.
port
);
Logger
::
smf_app
().
info
(
" API version .........: %s"
,
nrf_addr
.
api_version
.
c_str
());
if
(
use_fqdn_dns
)
Logger
::
smf_app
().
info
(
" FQDN ................: %s"
,
nrf_addr
.
fqdn
.
c_str
());
}
Logger
::
smf_app
().
info
(
"- Supported Features:"
);
Logger
::
smf_app
().
info
(
" Register to NRF............: %s"
,
register_nrf
?
"Yes"
:
"No"
);
Logger
::
smf_app
().
info
(
" Discover UPF...............: %s"
,
discover_upf
?
"Yes"
:
"No"
);
Logger
::
smf_app
().
info
(
" Use Local Subscription Info: %s"
,
use_local_subscription_info
?
"Yes"
:
"No"
);
Logger
::
smf_app
().
info
(
" Push PCO (DNS+MTU).........: %s"
,
force_push_pco
?
"Yes"
:
"No"
);
if
(
!
discover_upf
)
{
Logger
::
smf_app
().
info
(
"- UPF:"
);
for
(
auto
u
:
upfs
)
{
if
(
u
.
node_id_type
==
pfcp
::
NODE_ID_TYPE_IPV4_ADDRESS
)
Logger
::
smf_app
().
info
(
" IPv4 Addr ...........: %s"
,
inet_ntoa
(
*
((
struct
in_addr
*
)
&
u
.
u1
.
ipv4_address
)));
if
(
use_fqdn_dns
)
Logger
::
smf_app
().
info
(
" FQDN ................: %s"
,
u
.
fqdn
.
c_str
());
}
}
if
(
use_local_subscription_info
)
{
Logger
::
smf_app
().
info
(
...
...
src/smf_app/smf_config.hpp
View file @
643c367c
...
...
@@ -226,12 +226,14 @@ class smf_config {
struct
in_addr
ipv4_addr
;
unsigned
int
port
;
std
::
string
api_version
;
std
::
string
fqdn
;
}
amf_addr
;
struct
{
struct
in_addr
ipv4_addr
;
unsigned
int
port
;
std
::
string
api_version
;
std
::
string
fqdn
;
}
udm_addr
;
std
::
vector
<
pfcp
::
node_id_t
>
upfs
;
...
...
@@ -240,6 +242,7 @@ class smf_config {
struct
in_addr
ipv4_addr
;
unsigned
int
port
;
std
::
string
api_version
;
std
::
string
fqdn
;
}
nrf_addr
;
#define SMF_NUM_SESSION_MANAGEMENT_SUBSCRIPTION_MAX 10
...
...
@@ -299,13 +302,17 @@ class smf_config {
amf_addr
.
ipv4_addr
.
s_addr
=
INADDR_ANY
;
amf_addr
.
port
=
80
;
amf_addr
.
api_version
=
"v1"
;
amf_addr
.
fqdn
=
{};
udm_addr
.
ipv4_addr
.
s_addr
=
INADDR_ANY
;
udm_addr
.
port
=
80
;
udm_addr
.
api_version
=
"v1"
;
udm_addr
.
fqdn
=
{};
nrf_addr
.
ipv4_addr
.
s_addr
=
INADDR_ANY
;
nrf_addr
.
port
=
80
;
nrf_addr
.
api_version
=
"v1"
;
nrf_addr
.
fqdn
=
{};
num_session_management_subscription
=
0
;
...
...
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