Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-Spgwu-Tiny-Simple
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
CommunityXG
OpenXG-Spgwu-Tiny-Simple
Commits
17550447
Commit
17550447
authored
Jan 14, 2021
by
Tien-Thinh Nguyen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
code cleanup
parent
db6b092a
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
169 additions
and
300 deletions
+169
-300
src/spgwu/spgwu_nrf.cpp
src/spgwu/spgwu_nrf.cpp
+33
-176
src/spgwu/spgwu_nrf.hpp
src/spgwu/spgwu_nrf.hpp
+18
-37
src/spgwu/spgwu_profile.cpp
src/spgwu/spgwu_profile.cpp
+80
-49
src/spgwu/spgwu_profile.hpp
src/spgwu/spgwu_profile.hpp
+38
-38
No files found.
src/spgwu/spgwu_nrf.cpp
View file @
17550447
...
...
@@ -71,18 +71,6 @@ void spgwu_nrf_task(void* args_p) {
std
::
shared_ptr
<
itti_msg
>
shared_msg
=
itti_inst
->
receive_msg
(
task_id
);
auto
*
msg
=
shared_msg
.
get
();
switch
(
msg
->
msg_type
)
{
case
NRF_REGISTER_NF_INSTANCE_REQUEST
:
spgwu_nrf_inst
->
register_nf_instance
(
std
::
static_pointer_cast
<
itti_nrf_register_nf_instance_request
>
(
shared_msg
));
break
;
case
NRF_DEREGISTER_NF_INSTANCE
:
spgwu_nrf_inst
->
deregister_nf_instance
(
std
::
static_pointer_cast
<
itti_nrf_deregister_nf_instance
>
(
shared_msg
));
break
;
case
TIME_OUT
:
if
(
itti_msg_timeout
*
to
=
dynamic_cast
<
itti_msg_timeout
*>
(
msg
))
{
Logger
::
spgwu_app
().
info
(
"TIME-OUT event timer id %d"
,
to
->
timer_id
);
...
...
@@ -178,9 +166,7 @@ void spgwu_nrf::send_register_nf_instance(std::string& url) {
"Response from NRF, Json data:
\n
%s"
,
response_data
.
dump
().
c_str
());
// Update NF profile
upf_profile
.
from_json
(
response_data
);
Logger
::
spgwu_app
().
debug
(
"Updated UPF profile"
);
upf_profile
.
display
();
...
...
@@ -250,103 +236,9 @@ void spgwu_nrf::send_update_nf_instance(
}
//-----------------------------------------------------------------------------------------------------
void
spgwu_nrf
::
register_nf_instance
(
std
::
shared_ptr
<
itti_nrf_register_nf_instance_request
>
msg
)
{
Logger
::
spgwu_app
().
debug
(
"Send NF Instance Registration to NRF (HTTP version %d)"
,
msg
->
http_version
);
nlohmann
::
json
json_data
=
{};
msg
->
profile
.
to_json
(
json_data
);
std
::
string
url
=
"192.168.1.23:8080"
;
// std::string(inet_ntoa(*((struct in_addr
// *)&smf_cfg.nrf_addr.ipv4_addr))) +
// ":" + std::to_string(smf_cfg.nrf_addr.port)
url
=
url
+
NNRF_NFM_BASE
+
"v1"
+
NNRF_NF_REGISTER_URL
+
msg
->
profile
.
get_nf_instance_id
();
void
spgwu_nrf
::
send_deregister_nf_instance
(
std
::
string
&
url
)
{
Logger
::
spgwu_app
().
debug
(
"Send NF De-register to NRF"
);
Logger
::
spgwu_app
().
debug
(
"Send NF Instance Registration to NRF (NRF URL %s)"
,
url
.
c_str
());
std
::
string
body
=
json_data
.
dump
();
Logger
::
spgwu_app
().
debug
(
"Send NF Instance Registration to NRF, msg body:
\n
%s"
,
body
.
c_str
());
curl_global_init
(
CURL_GLOBAL_ALL
);
CURL
*
curl
=
curl
=
curl_easy_init
();
if
(
curl
)
{
CURLcode
res
=
{};
struct
curl_slist
*
headers
=
nullptr
;
// headers = curl_slist_append(headers, "charsets: utf-8");
headers
=
curl_slist_append
(
headers
,
"content-type: application/json"
);
curl_easy_setopt
(
curl
,
CURLOPT_HTTPHEADER
,
headers
);
curl_easy_setopt
(
curl
,
CURLOPT_URL
,
url
.
c_str
());
curl_easy_setopt
(
curl
,
CURLOPT_HTTPGET
,
1
);
curl_easy_setopt
(
curl
,
CURLOPT_CUSTOMREQUEST
,
"PUT"
);
curl_easy_setopt
(
curl
,
CURLOPT_TIMEOUT_MS
,
NRF_CURL_TIMEOUT_MS
);
// Response information.
long
httpCode
=
{
0
};
std
::
unique_ptr
<
std
::
string
>
httpData
(
new
std
::
string
());
curl_easy_setopt
(
curl
,
CURLOPT_WRITEFUNCTION
,
&
callback
);
curl_easy_setopt
(
curl
,
CURLOPT_WRITEDATA
,
httpData
.
get
());
curl_easy_setopt
(
curl
,
CURLOPT_POSTFIELDSIZE
,
body
.
length
());
curl_easy_setopt
(
curl
,
CURLOPT_POSTFIELDS
,
body
.
c_str
());
res
=
curl_easy_perform
(
curl
);
curl_easy_getinfo
(
curl
,
CURLINFO_RESPONSE_CODE
,
&
httpCode
);
Logger
::
spgwu_app
().
debug
(
"Response from NRF, Http Code: %d"
,
httpCode
);
if
(
httpCode
==
201
)
{
json
response_data
=
{};
try
{
response_data
=
json
::
parse
(
*
httpData
.
get
());
}
catch
(
json
::
exception
&
e
)
{
Logger
::
spgwu_app
().
warn
(
"Could not parse json from the NRF response"
);
}
Logger
::
spgwu_app
().
debug
(
"Response from NRF, Json data:
\n
%s"
,
response_data
.
dump
().
c_str
());
// send response to APP to process
std
::
shared_ptr
<
itti_nrf_register_nf_instance_response
>
itti_msg
=
std
::
make_shared
<
itti_nrf_register_nf_instance_response
>
(
TASK_SPGWU_NRF
,
TASK_SPGWU_APP
);
itti_msg
->
http_response_code
=
httpCode
;
itti_msg
->
http_version
=
msg
->
http_version
;
Logger
::
spgwu_app
().
debug
(
"Registered SMF profile (from NRF)"
);
itti_msg
->
profile
.
from_json
(
response_data
);
int
ret
=
itti_inst
->
send_msg
(
itti_msg
);
if
(
RETURNok
!=
ret
)
{
Logger
::
spgwu_app
().
error
(
"Could not send ITTI message %s to task TASK_SPGWU_APP"
,
itti_msg
->
get_msg_name
());
}
}
else
{
Logger
::
spgwu_app
().
warn
(
"Could not get response from NRF"
);
}
curl_slist_free_all
(
headers
);
curl_easy_cleanup
(
curl
);
}
curl_global_cleanup
();
}
//-----------------------------------------------------------------------------------------------------
void
spgwu_nrf
::
deregister_nf_instance
(
std
::
shared_ptr
<
itti_nrf_deregister_nf_instance
>
msg
)
{
Logger
::
spgwu_app
().
debug
(
"Send NF De-register to NRF (HTTP version %d)"
,
msg
->
http_version
);
std
::
string
url
;
/*=
std::string(inet_ntoa(*((struct in_addr *)&smf_cfg.nrf_addr.ipv4_addr))) +
":" + std::to_string(smf_cfg.nrf_addr.port) + NNRF_NFM_BASE +
smf_cfg.nrf_addr.api_version + NNRF_NF_REGISTER_URL +
msg->smf_instance_id;
*/
Logger
::
spgwu_app
().
debug
(
"Send NF De-register to NRF (NRF URL %s)"
,
url
.
c_str
());
...
...
@@ -384,6 +276,7 @@ void spgwu_nrf::deregister_nf_instance(
void
spgwu_nrf
::
generate_upf_profile
()
{
// generate UUID
generate_uuid
();
//TODO: get hardcoded values from configuration file
upf_profile
.
set_nf_instance_id
(
upf_instance_id
);
upf_profile
.
set_nf_instance_name
(
"OAI-SMF"
);
upf_profile
.
set_nf_type
(
"SMF"
);
...
...
@@ -392,23 +285,19 @@ void spgwu_nrf::generate_upf_profile() {
upf_profile
.
set_nf_priority
(
1
);
upf_profile
.
set_nf_capacity
(
100
);
upf_profile
.
add_nf_ipv4_addresses
(
spgwu_cfg
.
s1_up
.
addr4
);
// TODO: get SNSSAIS from Configuration file
snssai_t
snssai
=
{};
snssai
.
sD
=
"123"
;
snssai
.
sST
=
222
;
upf_profile
.
add_snssai
(
snssai
);
// TODO: get UPF info from configuration file
dnn_upf_info_item_t
dnn_item
=
{.
dnn
=
"default"
};
snssai_upf_info_item_t
upf_info_item
=
{};
upf_info_item
.
dnn_upf_info_list
.
push_back
(
dnn_item
);
upf_info_item
.
snssai
.
sD
=
"123"
;
upf_info_item
.
snssai
.
sST
=
222
;
upf_profile
.
add_upf_info_item
(
upf_info_item
);
/*
// SNSSAIS
snssai_t snssai = {};
snssai.sD = s.single_nssai.sD;
snssai.sST = s.single_nssai.sST;
upf_profile.add_snssai(snssai);
// SMF info
dnn_upf_info_item_t dnn_item = {.dnn = s.dnn};
snssai_upf_info_item_t upf_info_item = {};
upf_info_item.dnn_upf_info_list.push_back(dnn_item);
upf_info_item.snssai.sD = s.single_nssai.sD;
upf_info_item.snssai.sST = s.single_nssai.sST;
upf_profile.add_upf_info_item(upf_info_item);
*/
// Display the profile
upf_profile
.
display
();
}
...
...
@@ -418,13 +307,11 @@ void spgwu_nrf::register_to_nrf() {
// create a NF profile to this instance
generate_upf_profile
();
// register to NRF
//TODO: get NRF Addr from configuration file
std
::
string
url
=
"192.168.1.23:8080"
;
// std::string(inet_ntoa(*((struct in_addr
// *)&smf_cfg.nrf_addr.ipv4_addr))) +
// ":" + std::to_string(smf_cfg.nrf_addr.port)
url
=
url
+
NNRF_NFM_BASE
+
"v1"
+
NNRF_NF_REGISTER_URL
+
upf_instance_id
;
std
::
string
url
=
std
::
string
(
inet_ntoa
(
*
((
struct
in_addr
*
)
&
spgwu_cfg
.
nrf_addr
.
ipv4_addr
)))
+
":"
+
std
::
to_string
(
spgwu_cfg
.
nrf_addr
.
port
)
+
NNRF_NFM_BASE
+
spgwu_cfg
.
nrf_addr
.
api_version
+
NNRF_NF_REGISTER_URL
+
upf_instance_id
;
send_register_nf_instance
(
url
);
}
...
...
@@ -433,40 +320,6 @@ void spgwu_nrf::generate_uuid() {
upf_instance_id
=
to_string
(
boost
::
uuids
::
random_generator
()());
}
//------------------------------------------------------------------------------
void
spgwu_nrf
::
trigger_nf_registration_request
()
{
Logger
::
spgwu_app
().
debug
(
"Send ITTI msg to N11 task to trigger the registration request to NRF"
);
std
::
shared_ptr
<
itti_nrf_register_nf_instance_request
>
itti_msg
=
std
::
make_shared
<
itti_nrf_register_nf_instance_request
>
(
TASK_SPGWU_APP
,
TASK_SPGWU_NRF
);
itti_msg
->
profile
=
upf_profile
;
int
ret
=
itti_inst
->
send_msg
(
itti_msg
);
if
(
RETURNok
!=
ret
)
{
Logger
::
spgwu_app
().
error
(
"Could not send ITTI message %s to task TASK_SPGWU_NRF"
,
itti_msg
->
get_msg_name
());
}
}
//------------------------------------------------------------------------------
void
spgwu_nrf
::
trigger_nf_deregistration
()
{
Logger
::
spgwu_app
().
debug
(
"Send ITTI msg to N11 task to trigger the deregistration request to NRF"
);
std
::
shared_ptr
<
itti_nrf_deregister_nf_instance
>
itti_msg
=
std
::
make_shared
<
itti_nrf_deregister_nf_instance
>
(
TASK_SPGWU_APP
,
TASK_SPGWU_NRF
);
itti_msg
->
upf_instance_id
=
upf_instance_id
;
int
ret
=
itti_inst
->
send_msg
(
itti_msg
);
if
(
RETURNok
!=
ret
)
{
Logger
::
spgwu_app
().
error
(
"Could not send ITTI message %s to task TASK_SPGWU_NRF"
,
itti_msg
->
get_msg_name
());
}
}
//---------------------------------------------------------------------------------------------
void
spgwu_nrf
::
timer_nrf_heartbeat_timeout
(
timer_id_t
timer_id
,
uint64_t
arg2_user
)
{
...
...
@@ -482,12 +335,11 @@ void spgwu_nrf::timer_nrf_heartbeat_timeout(
nlohmann
::
json
item
=
patch_item
.
to_json
();
json_data
.
push_back
(
item
);
// TODO: to be updated to get NRF from configuration file
std
::
string
url
=
"192.168.1.23:8080"
;
// std::string(inet_ntoa(*((struct in_addr
// *)&smf_cfg.nrf_addr.ipv4_addr))) +
// ":" + std::to_string(smf_cfg.nrf_addr.port)
url
=
url
+
NNRF_NFM_BASE
+
"v1"
+
NNRF_NF_REGISTER_URL
+
upf_instance_id
;
std
::
string
url
=
std
::
string
(
inet_ntoa
(
*
((
struct
in_addr
*
)
&
spgwu_cfg
.
nrf_addr
.
ipv4_addr
)))
+
":"
+
std
::
to_string
(
spgwu_cfg
.
nrf_addr
.
port
)
+
NNRF_NFM_BASE
+
spgwu_cfg
.
nrf_addr
.
api_version
+
NNRF_NF_REGISTER_URL
+
upf_instance_id
;
Logger
::
spgwu_app
().
debug
(
"Set a timer to the next Heart-beat (%d)"
,
...
...
@@ -503,7 +355,12 @@ void spgwu_nrf::timer_nrf_heartbeat_timeout(
//---------------------------------------------------------------------------------------------
void
spgwu_nrf
::
timer_nrf_deregistration
(
timer_id_t
timer_id
,
uint64_t
arg2_user
)
{
Logger
::
spgwu_app
().
debug
(
"Send ITTI msg to N11 task to trigger NRF Deregistratino"
);
trigger_nf_deregistration
();
Logger
::
spgwu_app
().
debug
(
"Send NF De-registration to NRF"
);
std
::
string
url
=
std
::
string
(
inet_ntoa
(
*
((
struct
in_addr
*
)
&
spgwu_cfg
.
nrf_addr
.
ipv4_addr
)))
+
":"
+
std
::
to_string
(
spgwu_cfg
.
nrf_addr
.
port
)
+
NNRF_NFM_BASE
+
spgwu_cfg
.
nrf_addr
.
api_version
+
NNRF_NF_REGISTER_URL
+
upf_instance_id
;
send_deregister_nf_instance
(
url
);
}
src/spgwu/spgwu_nrf.hpp
View file @
17550447
...
...
@@ -43,52 +43,41 @@ namespace spgwu {
#define TASK_SPGWU_NRF_TIMEOUT_NRF_HEARTBEAT (1)
#define TASK_SPGWU_NRF_TIMEOUT_NRF_DEREGISTRATION (2)
class
spgwu_nrf
{
private:
std
::
thread
::
id
thread_id
;
std
::
thread
thread
;
spgwu_profile
upf_profile
;
// UPF profile
spgwu_profile
upf_profile
;
// UPF profile
std
::
string
upf_instance_id
;
// UPF instance id
timer_id_t
timer_nrf_heartbeat
;
public:
spgwu_nrf
();
spgwu_nrf
(
spgwu_nrf
const
&
)
=
delete
;
void
operator
=
(
spgwu_nrf
const
&
)
=
delete
;
spgwu_nrf
(
spgwu_nrf
const
&
)
=
delete
;
void
operator
=
(
spgwu_nrf
const
&
)
=
delete
;
/*
* Send NF instance registration to NRF
* @param [std::shared_ptr<itti_nrf_register_nf_instance_request>] msg:
* Content of message to be sent
* @param [std::string &] url: NRF's URL
* @return void
*/
void
register_nf_instance
(
std
::
shared_ptr
<
itti_nrf_register_nf_instance_request
>
msg
);
void
send_register_nf_instance
(
std
::
string
&
url
);
void
send_update_nf_instance
(
std
::
string
&
url
,
nlohmann
::
json
&
data
);
void
send_register_nf_instance
(
std
::
string
&
url
);
/*
* Send NF instance
update
to NRF
* @param [std::s
hared_ptr<itti_nrf_update_nf_instance_request>] msg: Content
*
of message
to be sent
* Send NF instance
registration
to NRF
* @param [std::s
tring &] url: NRF's URL
*
@param [nlohmann::json &] data: Json data
to be sent
* @return void
*/
void
send_update_nf_instance
(
std
::
string
&
url
,
nlohmann
::
json
&
data
);
/*
* Send NF deregister to NRF
* @param [std::shared_ptr<itti_nrf_deregister_nf_instance>] msg: Content
* of message to be sent
* @param [std::string &] url: NRF's URL
* @return void
*/
void
deregister_nf_instance
(
std
::
shared_ptr
<
itti_nrf_deregister_nf_instance
>
msg
);
void
send_deregister_nf_instance
(
std
::
string
&
url
);
/*
* Trigger NF instance registration to NRF
...
...
@@ -98,32 +87,26 @@ class spgwu_nrf {
void
register_to_nrf
();
/*
* Generate a random UUID for
SM
F instance
* Generate a random UUID for
UP
F instance
* @param [void]
* @return void
*/
void
generate_uuid
();
/*
* Generate a
SM
F profile for this instance
* Generate a
UP
F profile for this instance
* @param [void]
* @return void
*/
void
generate_upf_profile
();
/*
* Send request to N11 task to trigger NF instance registration to NRF
* @param [void]
* @return void
*/
void
trigger_nf_registration_request
();
/*
* Send request to N11 task to trigger NF instance deregistration to NRF
* @param [void]
* will be executed when NRF Heartbeat timer expires
* @param [timer_id_t] timer_id
* @param [uint64_t] arg2_user
* @return void
*/
void
t
rigger_nf_deregistration
(
);
void
t
imer_nrf_heartbeat_timeout
(
timer_id_t
timer_id
,
uint64_t
arg2_user
);
/*
* will be executed when NRF Heartbeat timer expires
...
...
@@ -131,9 +114,7 @@ class spgwu_nrf {
* @param [uint64_t] arg2_user
* @return void
*/
void
timer_nrf_heartbeat_timeout
(
timer_id_t
timer_id
,
uint64_t
arg2_user
);
void
timer_nrf_deregistration
(
timer_id_t
timer_id
,
uint64_t
arg2_user
);
};
}
// namespace s
mf
}
// namespace s
pgwu
#endif
/* FILE_SPGWU_NRF_HPP_SEEN */
src/spgwu/spgwu_profile.cpp
View file @
17550447
...
...
@@ -38,25 +38,27 @@ using namespace std;
using
namespace
spgwu
;
//------------------------------------------------------------------------------
void
spgwu_profile
::
set_nf_instance_id
(
const
std
::
string
&
instance_id
)
{
void
spgwu_profile
::
set_nf_instance_id
(
const
std
::
string
&
instance_id
)
{
nf_instance_id
=
instance_id
;
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
get_nf_instance_id
(
std
::
string
&
instance_id
)
const
{
void
spgwu_profile
::
get_nf_instance_id
(
std
::
string
&
instance_id
)
const
{
instance_id
=
nf_instance_id
;
}
//------------------------------------------------------------------------------
std
::
string
spgwu_profile
::
get_nf_instance_id
()
const
{
return
nf_instance_id
;
}
std
::
string
spgwu_profile
::
get_nf_instance_id
()
const
{
return
nf_instance_id
;
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
set_nf_instance_name
(
const
std
::
string
&
instance_name
)
{
void
spgwu_profile
::
set_nf_instance_name
(
const
std
::
string
&
instance_name
)
{
nf_instance_name
=
instance_name
;
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
get_nf_instance_name
(
std
::
string
&
instance_name
)
const
{
void
spgwu_profile
::
get_nf_instance_name
(
std
::
string
&
instance_name
)
const
{
instance_name
=
nf_instance_name
;
}
...
...
@@ -66,90 +68,118 @@ std::string spgwu_profile::get_nf_instance_name() const {
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
set_nf_type
(
const
std
::
string
&
type
)
{
nf_type
=
type
;
}
void
spgwu_profile
::
set_nf_type
(
const
std
::
string
&
type
)
{
nf_type
=
type
;
}
//------------------------------------------------------------------------------
std
::
string
spgwu_profile
::
get_nf_type
()
const
{
return
nf_type
;
}
std
::
string
spgwu_profile
::
get_nf_type
()
const
{
return
nf_type
;
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
set_nf_status
(
const
std
::
string
&
status
)
{
void
spgwu_profile
::
set_nf_status
(
const
std
::
string
&
status
)
{
nf_status
=
status
;
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
get_nf_status
(
std
::
string
&
status
)
const
{
void
spgwu_profile
::
get_nf_status
(
std
::
string
&
status
)
const
{
status
=
nf_status
;
}
//------------------------------------------------------------------------------
std
::
string
spgwu_profile
::
get_nf_status
()
const
{
return
nf_status
;
}
std
::
string
spgwu_profile
::
get_nf_status
()
const
{
return
nf_status
;
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
set_nf_heartBeat_timer
(
const
int32_t
&
timer
)
{
void
spgwu_profile
::
set_nf_heartBeat_timer
(
const
int32_t
&
timer
)
{
heartBeat_timer
=
timer
;
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
get_nf_heartBeat_timer
(
int32_t
&
timer
)
const
{
void
spgwu_profile
::
get_nf_heartBeat_timer
(
int32_t
&
timer
)
const
{
timer
=
heartBeat_timer
;
}
//------------------------------------------------------------------------------
int32_t
spgwu_profile
::
get_nf_heartBeat_timer
()
const
{
return
heartBeat_timer
;
}
int32_t
spgwu_profile
::
get_nf_heartBeat_timer
()
const
{
return
heartBeat_timer
;
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
set_nf_priority
(
const
uint16_t
&
p
)
{
priority
=
p
;
}
void
spgwu_profile
::
set_nf_priority
(
const
uint16_t
&
p
)
{
priority
=
p
;
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
get_nf_priority
(
uint16_t
&
p
)
const
{
p
=
priority
;
}
void
spgwu_profile
::
get_nf_priority
(
uint16_t
&
p
)
const
{
p
=
priority
;
}
//------------------------------------------------------------------------------
uint16_t
spgwu_profile
::
get_nf_priority
()
const
{
return
priority
;
}
uint16_t
spgwu_profile
::
get_nf_priority
()
const
{
return
priority
;
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
set_nf_capacity
(
const
uint16_t
&
c
)
{
capacity
=
c
;
}
void
spgwu_profile
::
set_nf_capacity
(
const
uint16_t
&
c
)
{
capacity
=
c
;
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
get_nf_capacity
(
uint16_t
&
c
)
const
{
c
=
capacity
;
}
void
spgwu_profile
::
get_nf_capacity
(
uint16_t
&
c
)
const
{
c
=
capacity
;
}
//------------------------------------------------------------------------------
uint16_t
spgwu_profile
::
get_nf_capacity
()
const
{
return
capacity
;
}
uint16_t
spgwu_profile
::
get_nf_capacity
()
const
{
return
capacity
;
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
set_nf_snssais
(
const
std
::
vector
<
snssai_t
>
&
s
)
{
void
spgwu_profile
::
set_nf_snssais
(
const
std
::
vector
<
snssai_t
>
&
s
)
{
snssais
=
s
;
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
get_nf_snssais
(
std
::
vector
<
snssai_t
>
&
s
)
const
{
void
spgwu_profile
::
get_nf_snssais
(
std
::
vector
<
snssai_t
>
&
s
)
const
{
s
=
snssais
;
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
add_snssai
(
const
snssai_t
&
s
)
{
snssais
.
push_back
(
s
);
}
void
spgwu_profile
::
add_snssai
(
const
snssai_t
&
s
)
{
snssais
.
push_back
(
s
);
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
set_nf_ipv4_addresses
(
const
std
::
vector
<
struct
in_addr
>
&
a
)
{
void
spgwu_profile
::
set_nf_ipv4_addresses
(
const
std
::
vector
<
struct
in_addr
>&
a
)
{
ipv4_addresses
=
a
;
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
add_nf_ipv4_addresses
(
const
struct
in_addr
&
a
)
{
void
spgwu_profile
::
add_nf_ipv4_addresses
(
const
struct
in_addr
&
a
)
{
ipv4_addresses
.
push_back
(
a
);
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
get_nf_ipv4_addresses
(
std
::
vector
<
struct
in_addr
>
&
a
)
const
{
void
spgwu_profile
::
get_nf_ipv4_addresses
(
std
::
vector
<
struct
in_addr
>&
a
)
const
{
a
=
ipv4_addresses
;
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
set_upf_info
(
const
upf_info_t
&
s
)
{
upf_info
=
s
;
}
void
spgwu_profile
::
set_upf_info
(
const
upf_info_t
&
s
)
{
upf_info
=
s
;
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
add_upf_info_item
(
const
snssai_upf_info_item_t
&
s
)
{
void
spgwu_profile
::
add_upf_info_item
(
const
snssai_upf_info_item_t
&
s
)
{
upf_info
.
snssai_upf_info_list
.
push_back
(
s
);
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
get_upf_info
(
upf_info_t
&
s
)
const
{
s
=
upf_info
;
}
void
spgwu_profile
::
get_upf_info
(
upf_info_t
&
s
)
const
{
s
=
upf_info
;
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
display
()
const
{
...
...
@@ -185,8 +215,8 @@ void spgwu_profile::display() const {
}
for
(
auto
s
:
upf_info
.
snssai_upf_info_list
)
{
Logger
::
spgwu_app
().
debug
(
"
\t\t
Parameters supported by the UPF:"
);
Logger
::
spgwu_app
().
debug
(
"
\t\t\t
SNSSAI (SST %d, SD %s)"
,
s
.
snssai
.
sST
,
s
.
snssai
.
sD
.
c_str
());
Logger
::
spgwu_app
().
debug
(
"
\t\t\t
SNSSAI (SST %d, SD %s)"
,
s
.
snssai
.
sST
,
s
.
snssai
.
sD
.
c_str
());
for
(
auto
d
:
s
.
dnn_upf_info_list
)
{
Logger
::
spgwu_app
().
debug
(
"
\t\t\t
DNN %s"
,
d
.
dnn
.
c_str
());
}
...
...
@@ -194,18 +224,18 @@ void spgwu_profile::display() const {
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
to_json
(
nlohmann
::
json
&
data
)
const
{
data
[
"nfInstanceId"
]
=
nf_instance_id
;
void
spgwu_profile
::
to_json
(
nlohmann
::
json
&
data
)
const
{
data
[
"nfInstanceId"
]
=
nf_instance_id
;
data
[
"nfInstanceName"
]
=
nf_instance_name
;
data
[
"nfType"
]
=
nf_type
;
data
[
"nfStatus"
]
=
nf_status
;
data
[
"nfType"
]
=
nf_type
;
data
[
"nfStatus"
]
=
nf_status
;
data
[
"heartBeatTimer"
]
=
heartBeat_timer
;
// SNSSAIs
data
[
"sNssais"
]
=
nlohmann
::
json
::
array
();
for
(
auto
s
:
snssais
)
{
nlohmann
::
json
tmp
=
{};
tmp
[
"sst"
]
=
s
.
sST
;
tmp
[
"sd"
]
=
s
.
sD
;
tmp
[
"sst"
]
=
s
.
sST
;
tmp
[
"sd"
]
=
s
.
sD
;
;
data
[
"sNssais"
].
push_back
(
tmp
);
}
...
...
@@ -220,16 +250,16 @@ void spgwu_profile::to_json(nlohmann::json &data) const {
data
[
"capacity"
]
=
capacity
;
// UPF info
data
[
"smfInfo"
]
=
{};
data
[
"smfInfo"
]
=
{};
data
[
"smfInfo"
][
"sNssaiSmfInfoList"
]
=
nlohmann
::
json
::
array
();
for
(
auto
s
:
upf_info
.
snssai_upf_info_list
)
{
nlohmann
::
json
tmp
=
{};
tmp
[
"sNssai"
][
"sst"
]
=
s
.
snssai
.
sST
;
tmp
[
"sNssai"
][
"sd"
]
=
s
.
snssai
.
sD
;
nlohmann
::
json
tmp
=
{};
tmp
[
"sNssai"
][
"sst"
]
=
s
.
snssai
.
sST
;
tmp
[
"sNssai"
][
"sd"
]
=
s
.
snssai
.
sD
;
tmp
[
"dnnSmfInfoList"
]
=
nlohmann
::
json
::
array
();
for
(
auto
d
:
s
.
dnn_upf_info_list
)
{
nlohmann
::
json
dnn_json
=
{};
dnn_json
[
"dnn"
]
=
d
.
dnn
;
dnn_json
[
"dnn"
]
=
d
.
dnn
;
tmp
[
"dnnSmfInfoList"
].
push_back
(
dnn_json
);
}
data
[
"smfInfo"
][
"sNssaiSmfInfoList"
].
push_back
(
tmp
);
...
...
@@ -239,7 +269,7 @@ void spgwu_profile::to_json(nlohmann::json &data) const {
}
//------------------------------------------------------------------------------
void
spgwu_profile
::
from_json
(
const
nlohmann
::
json
&
data
)
{
void
spgwu_profile
::
from_json
(
const
nlohmann
::
json
&
data
)
{
if
(
data
.
find
(
"nfInstanceId"
)
!=
data
.
end
())
{
nf_instance_id
=
data
[
"nfInstanceId"
].
get
<
std
::
string
>
();
}
...
...
@@ -263,8 +293,8 @@ void spgwu_profile::from_json(const nlohmann::json &data) {
if
(
data
.
find
(
"sNssais"
)
!=
data
.
end
())
{
for
(
auto
it
:
data
[
"sNssais"
])
{
snssai_t
s
=
{};
s
.
sST
=
it
[
"sst"
].
get
<
int
>
();
s
.
sD
=
it
[
"sd"
].
get
<
std
::
string
>
();
s
.
sST
=
it
[
"sst"
].
get
<
int
>
();
s
.
sD
=
it
[
"sd"
].
get
<
std
::
string
>
();
snssais
.
push_back
(
s
);
// Logger::spgwu_app().debug("Added SNSSAI (SST %d, SD %s)", s.sST,
// s.sD.c_str());
...
...
@@ -276,13 +306,13 @@ void spgwu_profile::from_json(const nlohmann::json &data) {
for
(
auto
it
:
addresses
)
{
struct
in_addr
addr4
=
{};
std
::
string
address
=
it
.
get
<
std
::
string
>
();
std
::
string
address
=
it
.
get
<
std
::
string
>
();
unsigned
char
buf_in_addr
[
sizeof
(
struct
in_addr
)];
if
(
inet_pton
(
AF_INET
,
util
::
trim
(
address
).
c_str
(),
buf_in_addr
)
==
1
)
{
memcpy
(
&
addr4
,
buf_in_addr
,
sizeof
(
struct
in_addr
));
}
else
{
Logger
::
spgwu_app
().
warn
(
"Address conversion: Bad value %s"
,
util
::
trim
(
address
).
c_str
());
Logger
::
spgwu_app
().
warn
(
"Address conversion: Bad value %s"
,
util
::
trim
(
address
).
c_str
());
}
// Logger::spgwu_app().debug("\tIPv4 Addr: %s", address.c_str());
add_nf_ipv4_addresses
(
addr4
);
...
...
@@ -333,7 +363,8 @@ void spgwu_profile::from_json(const nlohmann::json &data) {
//------------------------------------------------------------------------------
void
spgwu_profile
::
handle_heartbeart_timeout
(
uint64_t
ms
)
{
Logger
::
spgwu_app
().
info
(
"Handle heartbeart timeout profile %s, time %d"
,
nf_instance_id
.
c_str
(),
ms
);
Logger
::
spgwu_app
().
info
(
"Handle heartbeart timeout profile %s, time %d"
,
nf_instance_id
.
c_str
(),
ms
);
set_nf_status
(
"SUSPENDED"
);
}
src/spgwu/spgwu_profile.hpp
View file @
17550447
...
...
@@ -44,7 +44,7 @@
namespace
spgwu
{
//using namespace std;
//
using namespace std;
class
spgwu_profile
:
public
std
::
enable_shared_from_this
<
spgwu_profile
>
{
public:
...
...
@@ -56,10 +56,10 @@ class spgwu_profile : public std::enable_shared_from_this<spgwu_profile> {
priority
(
0
),
capacity
(
0
)
{
nf_instance_name
=
""
;
nf_status
=
""
;
nf_status
=
""
;
}
spgwu_profile
(
const
std
::
string
&
id
)
spgwu_profile
(
const
std
::
string
&
id
)
:
nf_instance_id
(
id
),
heartBeat_timer
(
0
),
snssais
(),
...
...
@@ -68,20 +68,20 @@ class spgwu_profile : public std::enable_shared_from_this<spgwu_profile> {
capacity
(
0
),
nf_type
(
"NF_TYPE_UNKNOWN"
)
{
nf_instance_name
=
""
;
nf_status
=
""
;
nf_status
=
""
;
}
spgwu_profile
&
operator
=
(
const
spgwu_profile
&
s
)
{
nf_instance_id
=
s
.
nf_instance_id
;
heartBeat_timer
=
s
.
heartBeat_timer
;
snssais
=
s
.
snssais
;
ipv4_addresses
=
s
.
ipv4_addresses
;
priority
=
s
.
priority
;
capacity
=
s
.
capacity
;
nf_type
=
s
.
nf_type
;
spgwu_profile
&
operator
=
(
const
spgwu_profile
&
s
)
{
nf_instance_id
=
s
.
nf_instance_id
;
heartBeat_timer
=
s
.
heartBeat_timer
;
snssais
=
s
.
snssais
;
ipv4_addresses
=
s
.
ipv4_addresses
;
priority
=
s
.
priority
;
capacity
=
s
.
capacity
;
nf_type
=
s
.
nf_type
;
nf_instance_name
=
s
.
nf_instance_name
;
nf_status
=
s
.
nf_status
;
upf_info
=
s
.
upf_info
;
nf_status
=
s
.
nf_status
;
upf_info
=
s
.
upf_info
;
}
// spgwu_profile(spgwu_profile &b) = delete;
...
...
@@ -94,13 +94,13 @@ class spgwu_profile : public std::enable_shared_from_this<spgwu_profile> {
* @param [const std::string &] instance_id: instance id
* @return void
*/
void
set_nf_instance_id
(
const
std
::
string
&
instance_id
);
void
set_nf_instance_id
(
const
std
::
string
&
instance_id
);
/*
* Get NF instance ID
* @param [std::string &] instance_id: store instance id
* @return void:
*/
void
get_nf_instance_id
(
std
::
string
&
instance_id
)
const
;
void
get_nf_instance_id
(
std
::
string
&
instance_id
)
const
;
/*
* Get NF instance ID
...
...
@@ -114,14 +114,14 @@ class spgwu_profile : public std::enable_shared_from_this<spgwu_profile> {
* @param [const std::string &] instance_name: instance name
* @return void
*/
void
set_nf_instance_name
(
const
std
::
string
&
instance_name
);
void
set_nf_instance_name
(
const
std
::
string
&
instance_name
);
/*
* Get NF instance ID
* @param [std::string &] instance_name: store instance name
* @return void:
*/
void
get_nf_instance_name
(
std
::
string
&
instance_name
)
const
;
void
get_nf_instance_name
(
std
::
string
&
instance_name
)
const
;
/*
* Get NF instance name
...
...
@@ -135,14 +135,14 @@ class spgwu_profile : public std::enable_shared_from_this<spgwu_profile> {
* @param [const std::string &] status: instance status
* @return void
*/
void
set_nf_status
(
const
std
::
string
&
status
);
void
set_nf_status
(
const
std
::
string
&
status
);
/*
* Get NF instance status
* @param [std::string &] status: store instance status
* @return void:
*/
void
get_nf_status
(
std
::
string
&
status
)
const
;
void
get_nf_status
(
std
::
string
&
status
)
const
;
/*
* Get NF status
...
...
@@ -163,21 +163,21 @@ class spgwu_profile : public std::enable_shared_from_this<spgwu_profile> {
* @param [const nf_type_t &] type: nf type
* @return void
*/
void
set_nf_type
(
const
std
::
string
&
type
);
void
set_nf_type
(
const
std
::
string
&
type
);
/*
* Set NF instance heartBeat_timer
* @param [const std::string &] timer: heartBeat_timer
* @return void
*/
void
set_nf_heartBeat_timer
(
const
int32_t
&
timer
);
void
set_nf_heartBeat_timer
(
const
int32_t
&
timer
);
/*
* Get NF instance heartBeat_timer
* @param [std::string &] timer: store heartBeat_timer
* @return void:
*/
void
get_nf_heartBeat_timer
(
int32_t
&
timer
)
const
;
void
get_nf_heartBeat_timer
(
int32_t
&
timer
)
const
;
/*
* Get NF heartBeat_timer
...
...
@@ -191,14 +191,14 @@ class spgwu_profile : public std::enable_shared_from_this<spgwu_profile> {
* @param [const uint16_t] p: instance priority
* @return void
*/
void
set_nf_priority
(
const
uint16_t
&
p
);
void
set_nf_priority
(
const
uint16_t
&
p
);
/*
* Get NF instance priority
* @param [uint16_t] p: store instance priority
* @return void:
*/
void
get_nf_priority
(
uint16_t
&
p
)
const
;
void
get_nf_priority
(
uint16_t
&
p
)
const
;
/*
* Get NF instance priority
...
...
@@ -212,14 +212,14 @@ class spgwu_profile : public std::enable_shared_from_this<spgwu_profile> {
* @param [const uint16_t] c: instance capacity
* @return void
*/
void
set_nf_capacity
(
const
uint16_t
&
c
);
void
set_nf_capacity
(
const
uint16_t
&
c
);
/*
* Get NF instance priority
* @param [uint16_t ] c: store instance capacity
* @return void:
*/
void
get_nf_capacity
(
uint16_t
&
c
)
const
;
void
get_nf_capacity
(
uint16_t
&
c
)
const
;
/*
* Get NF instance priority
...
...
@@ -233,63 +233,63 @@ class spgwu_profile : public std::enable_shared_from_this<spgwu_profile> {
* @param [std::vector<snssai_t> &] s: SNSSAIs
* @return void
*/
void
set_nf_snssais
(
const
std
::
vector
<
snssai_t
>
&
s
);
void
set_nf_snssais
(
const
std
::
vector
<
snssai_t
>
&
s
);
/*
* Add SNSSAI
* @param [snssai_t &] s: SNSSAI
* @return void
*/
void
add_snssai
(
const
snssai_t
&
s
);
void
add_snssai
(
const
snssai_t
&
s
);
/*
* Get NF instance SNSSAIs
* @param [std::vector<snssai_t> &] s: store instance's SNSSAIs
* @return void:
*/
void
get_nf_snssais
(
std
::
vector
<
snssai_t
>
&
s
)
const
;
void
get_nf_snssais
(
std
::
vector
<
snssai_t
>
&
s
)
const
;
/*
* Set NF instance ipv4_addresses
* @param [std::vector<struct in_addr> &] a: ipv4_addresses
* @return void
*/
void
set_nf_ipv4_addresses
(
const
std
::
vector
<
struct
in_addr
>
&
a
);
void
set_nf_ipv4_addresses
(
const
std
::
vector
<
struct
in_addr
>
&
a
);
/*
* Add an IPv4 address to the list of addresses
* @param [const struct in_addr &] a: ipv4_address
* @return void
*/
void
add_nf_ipv4_addresses
(
const
struct
in_addr
&
a
);
void
add_nf_ipv4_addresses
(
const
struct
in_addr
&
a
);
/*
* Get NF instance ipv4_addresses
* @param [std::vector<struct in_addr> &] a: store instance's ipv4_addresses
* @return void:
*/
void
get_nf_ipv4_addresses
(
std
::
vector
<
struct
in_addr
>
&
a
)
const
;
void
get_nf_ipv4_addresses
(
std
::
vector
<
struct
in_addr
>
&
a
)
const
;
/*
* Set upf info
* @param [upf_info_t &] s: upf info
* @return void
*/
void
set_upf_info
(
const
upf_info_t
&
s
);
void
set_upf_info
(
const
upf_info_t
&
s
);
/*
* Add an snssai_upf_info_item to the upf info
* @param [const snssai_upf_info_item_t &] s: snssai_smf_info_item
* @return void
*/
void
add_upf_info_item
(
const
snssai_upf_info_item_t
&
s
);
void
add_upf_info_item
(
const
snssai_upf_info_item_t
&
s
);
/*
* Get NF instance smf info
* @param [smf_info_t &] s: store instance's smf info
* @return void:
*/
void
get_upf_info
(
upf_info_t
&
s
)
const
;
void
get_upf_info
(
upf_info_t
&
s
)
const
;
/*
* Print related-information for NF profile
...
...
@@ -303,14 +303,14 @@ class spgwu_profile : public std::enable_shared_from_this<spgwu_profile> {
* @param [nlohmann::json &] data: Json data
* @return void
*/
void
to_json
(
nlohmann
::
json
&
data
)
const
;
void
to_json
(
nlohmann
::
json
&
data
)
const
;
/*
* Covert from a json represetation to SMF profile
* @param [nlohmann::json &] data: Json data
* @return void
*/
void
from_json
(
const
nlohmann
::
json
&
data
);
void
from_json
(
const
nlohmann
::
json
&
data
);
/*
* Handle heartbeart timeout event
...
...
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