Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-AMF
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
1
Issues
1
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-AMF
Commits
57e2e0e0
Commit
57e2e0e0
authored
Dec 02, 2021
by
Tien-Thinh Nguyen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
First version for Registration State Report
parent
76a8e7d2
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
140 additions
and
53 deletions
+140
-53
src/amf-app/amf_msg.cpp
src/amf-app/amf_msg.cpp
+13
-1
src/amf-app/amf_msg.hpp
src/amf-app/amf_msg.hpp
+8
-3
src/amf-app/amf_n1.cpp
src/amf-app/amf_n1.cpp
+51
-10
src/amf-app/amf_n11.cpp
src/amf-app/amf_n11.cpp
+28
-7
src/common/3gpp_29.518.h
src/common/3gpp_29.518.h
+2
-28
src/sbi/amf_server/model/RmState.cpp
src/sbi/amf_server/model/RmState.cpp
+14
-2
src/sbi/amf_server/model/RmState.h
src/sbi/amf_server/model/RmState.h
+5
-0
src/sbi/amf_server/model/UeReachability.cpp
src/sbi/amf_server/model/UeReachability.cpp
+14
-2
src/sbi/amf_server/model/UeReachability.h
src/sbi/amf_server/model/UeReachability.h
+5
-0
No files found.
src/amf-app/amf_msg.cpp
View file @
57e2e0e0
...
...
@@ -142,7 +142,7 @@ void event_notification::set_subs_change_notify_correlation_id(
std
::
string
event_notification
::
get_subs_change_notify_correlation_id
()
const
{
return
m_subs_change_notify_correlation_id
;
}
/*
//-----------------------------------------------------------------------------
void event_notification::add_report(const amf_event_report_t& report) {
m_report_list.push_back(report);
...
...
@@ -152,6 +152,18 @@ void event_notification::add_report(const amf_event_report_t& report) {
std::vector<amf_event_report_t> event_notification::get_reports() const {
return m_report_list;
}
*/
//-----------------------------------------------------------------------------
void
event_notification
::
add_report
(
const
oai
::
amf
::
model
::
AmfEventReport
&
report
)
{
m_event_report_list
.
push_back
(
report
);
}
//-----------------------------------------------------------------------------
void
event_notification
::
get_reports
(
std
::
vector
<
oai
::
amf
::
model
::
AmfEventReport
>&
reports
)
const
{
reports
=
m_event_report_list
;
}
//-----------------------------------------------------------------------------
void
data_notification_msg
::
set_notification_event_type
(
...
...
src/amf-app/amf_msg.hpp
View file @
57e2e0e0
...
...
@@ -32,6 +32,7 @@
#include "amf.hpp"
#include "3gpp_29.518.h"
#include "amf_profile.hpp"
#include "AmfEventReport.h"
namespace
amf_application
{
...
...
@@ -88,8 +89,10 @@ class event_notification {
std
::
string
get_notify_correlation_id
()
const
;
void
set_subs_change_notify_correlation_id
(
std
::
string
const
&
value
);
std
::
string
get_subs_change_notify_correlation_id
()
const
;
void
add_report
(
const
amf_event_report_t
&
report
);
std
::
vector
<
amf_event_report_t
>
get_reports
()
const
;
// void add_report(const amf_event_report_t& report);
// std::vector<amf_event_report_t> get_reports() const;
void
add_report
(
const
oai
::
amf
::
model
::
AmfEventReport
&
report
);
void
get_reports
(
std
::
vector
<
oai
::
amf
::
model
::
AmfEventReport
>&
reports
)
const
;
private:
std
::
string
m_notify_correlation_id
;
// notifyCorrelationId
...
...
@@ -97,7 +100,9 @@ class event_notification {
std
::
string
m_subs_change_notify_correlation_id
;
// SubsChangeNotifyCorrelationId;
bool
m_subs_change_notify_correlation_id_is_set
;
std
::
vector
<
amf_event_report_t
>
m_report_list
;
// Report List
// std::vector<amf_event_report_t> m_report_list; // Report List
std
::
vector
<
oai
::
amf
::
model
::
AmfEventReport
>
m_event_report_list
;
// Report List with Pistache template
bool
m_report_list_is_set
;
};
...
...
src/amf-app/amf_n1.cpp
View file @
57e2e0e0
...
...
@@ -65,6 +65,8 @@
#include "comUt.hpp"
#include "3gpp_24.501.h"
#include "sha256.hpp"
#include "AmfEventReport.h"
#include "AmfEventType.h"
extern
"C"
{
#include "bstrlib.h"
...
...
@@ -3111,17 +3113,34 @@ void amf_n1::handle_ue_reachability_status_change(
event_notification
ev_notif
=
{};
ev_notif
.
set_notify_correlation_id
(
i
.
get
()
->
notify_correlation_id
);
// ev_notif.set_subs_change_notify_correlation_id(i.get()->notify_uri);
amf_event_report_t
report
=
{};
// TODO
report
.
m_type
=
REACHABILITY_REPORT
;
report
.
m_reachability_is_set
=
true
;
/* amf_event_report_t report = {};
// TODO
report.m_type = REACHABILITY_REPORT;
report.m_reachability_is_set = true;
if (status == CM_CONNECTED)
report.m_reachability = REACHABLE;
else
report.m_reachability = UNREACHABLE;
report.m_supi_is_set = true;
report.m_supi = supi;
ev_notif.add_report(report);
*/
oai
::
amf
::
model
::
AmfEventReport
event_report
=
{};
oai
::
amf
::
model
::
AmfEventType
amf_event_type
=
{};
amf_event_type
.
set_value
(
"REACHABILITY_REPORT"
);
event_report
.
setType
(
amf_event_type
);
oai
::
amf
::
model
::
UeReachability
ue_reachability
=
{};
if
(
status
==
CM_CONNECTED
)
report
.
m_reachability
=
REACHABLE
;
ue_reachability
.
set_value
(
"REACHABLE"
)
;
else
report
.
m_reachability
=
UNREACHABLE
;
report
.
m_supi_is_set
=
true
;
report
.
m_supi
=
supi
;
ev_notif
.
add_report
(
report
);
ue_reachability
.
set_value
(
"UNREACHABLE"
);
event_report
.
setReachability
(
ue_reachability
);
event_report
.
setSupi
(
supi
);
ev_notif
.
add_report
(
event_report
);
itti_msg
->
event_notifs
.
push_back
(
ev_notif
);
}
...
...
@@ -3163,6 +3182,7 @@ void amf_n1::handle_ue_registration_state_change(
event_notification
ev_notif
=
{};
ev_notif
.
set_notify_correlation_id
(
i
.
get
()
->
notify_correlation_id
);
// ev_notif.set_subs_change_notify_correlation_id(i.get()->notify_uri);
/*
amf_event_report_t report = {};
// TODO
report.m_type = REGISTRATION_STATE_REPORT;
...
...
@@ -3170,7 +3190,28 @@ void amf_n1::handle_ue_registration_state_change(
// report.m_ = UNREACHABLE;
report.m_supi_is_set = true;
report.m_supi = supi;
ev_notif
.
add_report
(
report
);
ev_notif.add_report(report);*/
oai
::
amf
::
model
::
AmfEventReport
event_report
=
{};
oai
::
amf
::
model
::
AmfEventType
amf_event_type
=
{};
amf_event_type
.
set_value
(
"REGISTRATION_STATE_REPORT"
);
event_report
.
setType
(
amf_event_type
);
std
::
vector
<
oai
::
amf
::
model
::
RmInfo
>
rm_infos
;
oai
::
amf
::
model
::
RmInfo
rm_info
=
{};
oai
::
amf
::
model
::
RmState
rm_state
=
{};
rm_state
.
set_value
(
"REGISTERED"
);
rm_info
.
setRmState
(
rm_state
);
oai
::
amf
::
model
::
AccessType
access_type
=
{};
access_type
.
setValue
(
AccessType
::
eAccessType
::
_3GPP_ACCESS
);
rm_info
.
setAccessType
(
access_type
);
event_report
.
setSupi
(
supi
);
ev_notif
.
add_report
(
event_report
);
itti_msg
->
event_notifs
.
push_back
(
ev_notif
);
}
...
...
src/amf-app/amf_n11.cpp
View file @
57e2e0e0
...
...
@@ -52,6 +52,7 @@
#include "conversions.hpp"
#include "comUt.hpp"
#include "AmfEventReport.h"
extern
"C"
{
#include "dynamic_memory_check.h"
...
...
@@ -539,16 +540,36 @@ void amf_n11::handle_itti_message(itti_sbi_notify_subscribed_event& itti_msg) {
auto
report_lists
=
nlohmann
::
json
::
array
();
nlohmann
::
json
report
=
{};
std
::
vector
<
amf_event_report_t
>
reports
=
i
.
get_reports
();
// std::vector<amf_event_report_t> reports = i.get_reports();
std
::
vector
<
oai
::
amf
::
model
::
AmfEventReport
>
event_reports
=
{};
i
.
get_reports
(
event_reports
);
/*
for (auto r : reports) {
report["type"] =
amf_event_type_e2str.at(static_cast<uint8_t>(r.m_type));
report["state"]["active"] = "TRUE";
if (r.m_supi_is_set) {
report["supi"] = r.m_supi; // TODO
}
if (r.m_reachability_is_set) {
report["reachability"] = r.m_reachability;
}
for
(
auto
r
:
reports
)
{
report
[
"type"
]
=
amf_event_type_e2str
.
at
(
static_cast
<
uint8_t
>
(
r
.
m_type
));
// timestamp
std::time_t time_epoch_ntp = std::time(nullptr);
uint64_t tv_ntp = time_epoch_ntp +
SECONDS_SINCE_FIRST_EPOCH; report["timeStamp"] =
std::to_string(tv_ntp); report_lists.push_back(report);
}
*/
for
(
auto
r
:
event_reports
)
{
report
[
"type"
]
=
r
.
getType
().
get_value
();
report
[
"state"
][
"active"
]
=
"TRUE"
;
if
(
r
.
m_supi_is_set
)
{
report
[
"supi"
]
=
r
.
m_supi
;
// TODO
if
(
r
.
supiIsSet
()
)
{
report
[
"supi"
]
=
r
.
getSupi
();
}
if
(
r
.
m_reachability_is_set
)
{
report
[
"reachability"
]
=
r
.
m_reachability
;
if
(
r
.
reachabilityIsSet
()
)
{
report
[
"reachability"
]
=
r
.
getReachability
().
get_value
()
;
}
// timestamp
...
...
src/common/3gpp_29.518.h
View file @
57e2e0e0
...
...
@@ -89,6 +89,7 @@ typedef enum ue_reachability_e {
REGULATORY_ONLY
=
3
}
ue_reachability_t
;
/*
typedef struct amf_event_report_s {
amf_event_type_t m_type; // Mandatory
amf_event_state_t m_state; // Mandatory
...
...
@@ -101,35 +102,8 @@ typedef struct amf_event_report_s {
bool m_subscription_id_is_set;
bool m_any_ue;
bool m_any_ue_is_set;
/*
std::vector<AmfEventArea> m_AreaList;
bool m_AreaListIsSet;
int32_t m_RefId;
bool m_RefIdIsSet;
std::string m_Gpsi;
bool m_GpsiIsSet;
std::string m_Pei;
bool m_PeiIsSet;
UserLocation m_Location;
bool m_LocationIsSet;
std::string m_Timezone;
bool m_TimezoneIsSet;
std::vector<AccessType> m_AccessTypeList;
bool m_AccessTypeListIsSet;
std::vector<RmInfo> m_RmInfoList;
bool m_RmInfoListIsSet;
std::vector<CmInfo> m_CmInfoList;
bool m_CmInfoListIsSet;
//CommunicationFailure m_CommFailure;
// bool m_CommFailureIsSet;
// int32_t m_NumberOfUes;
// bool m_NumberOfUesIsSet;
// std::vector<_5GsUserStateInfo> m_r_5gsUserStateList;
// bool m_r_5gsUserStateListIsSet;
*/
} amf_event_report_t;
*/
enum
n1_n2_message_transfer_cause_e
{
ATTEMPTING_TO_REACH_UE
=
1
,
N1_N2_TRANSFER_INITIATED
=
2
,
...
...
src/sbi/amf_server/model/RmState.cpp
View file @
57e2e0e0
...
...
@@ -49,10 +49,22 @@ bool RmState::operator!=(const RmState& rhs) const {
return
!
(
*
this
==
rhs
);
}
void
RmState
::
set_value
(
std
::
string
value
)
{
this
->
value
=
value
;
}
void
RmState
::
get_value
(
std
::
string
&
value
)
const
{
value
=
this
->
value
;
}
std
::
string
RmState
::
get_value
()
const
{
return
value
;
}
void
to_json
(
nlohmann
::
json
&
j
,
const
RmState
&
o
)
{
j
=
nlohmann
::
json
();
j
=
o
.
get_value
();
}
void
from_json
(
const
nlohmann
::
json
&
j
,
RmState
&
o
)
{}
void
from_json
(
const
nlohmann
::
json
&
j
,
RmState
&
o
)
{
o
.
set_value
(
j
.
get
<
std
::
string
>
());
}
}
// namespace oai::amf::model
src/sbi/amf_server/model/RmState.h
View file @
57e2e0e0
...
...
@@ -44,6 +44,10 @@ class RmState {
/// </summary>
bool
validate
(
std
::
stringstream
&
msg
)
const
;
void
set_value
(
std
::
string
value
);
void
get_value
(
std
::
string
&
value
)
const
;
std
::
string
get_value
()
const
;
bool
operator
==
(
const
RmState
&
rhs
)
const
;
bool
operator
!=
(
const
RmState
&
rhs
)
const
;
...
...
@@ -54,6 +58,7 @@ class RmState {
friend
void
from_json
(
const
nlohmann
::
json
&
j
,
RmState
&
o
);
protected:
std
::
string
value
;
// Helper overload for validate. Used when one model stores another model and
// calls it's validate.
bool
validate
(
std
::
stringstream
&
msg
,
const
std
::
string
&
pathPrefix
)
const
;
...
...
src/sbi/amf_server/model/UeReachability.cpp
View file @
57e2e0e0
...
...
@@ -50,10 +50,22 @@ bool UeReachability::operator!=(const UeReachability& rhs) const {
return
!
(
*
this
==
rhs
);
}
void
UeReachability
::
set_value
(
std
::
string
value
)
{
this
->
value
=
value
;
}
void
UeReachability
::
get_value
(
std
::
string
&
value
)
const
{
value
=
this
->
value
;
}
std
::
string
UeReachability
::
get_value
()
const
{
return
value
;
}
void
to_json
(
nlohmann
::
json
&
j
,
const
UeReachability
&
o
)
{
j
=
nlohmann
::
json
();
j
=
o
.
get_value
();
}
void
from_json
(
const
nlohmann
::
json
&
j
,
UeReachability
&
o
)
{}
void
from_json
(
const
nlohmann
::
json
&
j
,
UeReachability
&
o
)
{
o
.
set_value
(
j
.
get
<
std
::
string
>
());
}
}
// namespace oai::amf::model
src/sbi/amf_server/model/UeReachability.h
View file @
57e2e0e0
...
...
@@ -50,10 +50,15 @@ class UeReachability {
/////////////////////////////////////////////
/// UeReachability members
void
set_value
(
std
::
string
value
);
void
get_value
(
std
::
string
&
value
)
const
;
std
::
string
get_value
()
const
;
friend
void
to_json
(
nlohmann
::
json
&
j
,
const
UeReachability
&
o
);
friend
void
from_json
(
const
nlohmann
::
json
&
j
,
UeReachability
&
o
);
protected:
std
::
string
value
;
// Helper overload for validate. Used when one model stores another model and
// calls it's validate.
bool
validate
(
std
::
stringstream
&
msg
,
const
std
::
string
&
pathPrefix
)
const
;
...
...
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