Commit 0bd3d579 authored by ferrerod's avatar ferrerod

Refactor UsageReport API model, log UR trigger

parent 1a3006f7
......@@ -51,26 +51,9 @@ EventNotification::EventNotification() {
m_DddStatusIsSet = false;
m_MaxWaitTime = "";
m_MaxWaitTimeIsSet = false;
m_usageReport = {};
m_usageReportIsSet = false;
// QoS Monitoring (Usage Report)
m_SEndID = 0;
m_SEndIDIsSet = false;
m_urSeqN = 0;
m_urSeqNIsSet = false;
m_duration = 0;
m_durationIsSet = false;
m_totNoP = 0;
m_totNoPIsSet = false;
m_ulNoP = 0;
m_ulNoPIsSet = false;
m_dlNoP = 0;
m_dlNoPIsSet = false;
m_totVol = 0;
m_totVolIsSet = false;
m_ulVol = 0;
m_ulVolIsSet = false;
m_dlVol = 0;
m_dlVolIsSet = false;
}
EventNotification::~EventNotification() {}
......@@ -106,17 +89,8 @@ void to_json(nlohmann::json& j, const EventNotification& o) {
if (o.pduSeIdIsSet()) j["pduSeId"] = o.m_PduSeId;
if (o.dddStatusIsSet()) j["dddStatus"] = o.m_DddStatus;
if (o.maxWaitTimeIsSet()) j["maxWaitTime"] = o.m_MaxWaitTime;
if (o.usageReportIsSet()) j["Usage Report"] = o.m_usageReport;
// QoS Monitoring (Usage Report)
if (o.SEndIDIsSet()) j["SEndID"] = o.m_SEndID;
if (o.urSeqNIsSet()) j["urSeqN"] = o.m_urSeqN;
if (o.durationIsSet()) j["duration"] = o.m_duration;
if (o.totNoPIsSet()) j["totNoP"] = o.m_totNoP;
if (o.ulNoPIsSet()) j["ulNoP"] = o.m_ulNoP;
if (o.dlNoPIsSet()) j["dlNoP"] = o.m_dlNoP;
if (o.totVolIsSet()) j["totVol"] = o.m_totVol;
if (o.ulVolIsSet()) j["ulVol"] = o.m_ulVol;
if (o.dlVolIsSet()) j["dlVol"] = o.m_dlVol;
}
void from_json(const nlohmann::json& j, EventNotification& o) {
......@@ -206,43 +180,9 @@ void from_json(const nlohmann::json& j, EventNotification& o) {
j.at("maxWaitTime").get_to(o.m_MaxWaitTime);
o.m_MaxWaitTimeIsSet = true;
}
// Qos Monitoring (Usage Report)
if (j.find("SEndID") != j.end()) {
j.at("SEndID").get_to(o.m_SEndID);
o.m_SEndIDIsSet = true;
}
if (j.find("urSeqN") != j.end()) {
j.at("urSeqN").get_to(o.m_urSeqN);
o.m_urSeqNIsSet = true;
}
if (j.find("duration") != j.end()) {
j.at("duration").get_to(o.m_duration);
o.m_durationIsSet = true;
}
if (j.find("totNoP") != j.end()) {
j.at("totNoP").get_to(o.m_totNoP);
o.m_totNoPIsSet = true;
}
if (j.find("ulNoP") != j.end()) {
j.at("ulNoP").get_to(o.m_ulNoP);
o.m_ulNoPIsSet = true;
}
if (j.find("dlNoP") != j.end()) {
j.at("dlNoP").get_to(o.m_dlNoP);
o.m_dlNoPIsSet = true;
}
if (j.find("totVol") != j.end()) {
j.at("totVol").get_to(o.m_totVol);
o.m_totVolIsSet = true;
}
if (j.find("ulVol") != j.end()) {
j.at("ulVol").get_to(o.m_ulVol);
o.m_ulVolIsSet = true;
}
if (j.find("dlVol") != j.end()) {
j.at("dlVol").get_to(o.m_dlVol);
o.m_dlVolIsSet = true;
if (j.find("Usage Report") != j.end()) {
j.at("Usage Report").get_to(o.m_usageReport);
o.m_usageReportIsSet = true;
}
}
......@@ -531,125 +471,18 @@ bool EventNotification::maxWaitTimeIsSet() const {
void EventNotification::unsetMaxWaitTime() {
m_MaxWaitTimeIsSet = false;
}
// QoS Monitoring (Usage Report)
int64_t EventNotification::getSEndID() const {
return m_SEndID;
}
void EventNotification::setSEndID(int64_t const& value) {
m_SEndID = value;
m_SEndIDIsSet = true;
}
bool EventNotification::SEndIDIsSet() const {
return m_SEndIDIsSet;
}
void EventNotification::unsetSEndID() {
m_SEndIDIsSet = false;
}
int32_t EventNotification::geturSeqN() const {
return m_urSeqN;
}
void EventNotification::seturSeqN(int32_t const& value) {
m_urSeqN = value;
m_urSeqNIsSet = true;
}
bool EventNotification::urSeqNIsSet() const {
return m_urSeqNIsSet;
}
void EventNotification::unseturSeqN() {
m_urSeqNIsSet = false;
}
int32_t EventNotification::getDuration() const {
return m_duration;
}
void EventNotification::setDuration(int32_t const& value) {
m_duration = value;
m_durationIsSet = true;
}
bool EventNotification::durationIsSet() const {
return m_durationIsSet;
}
void EventNotification::unsetDuration() {
m_durationIsSet = false;
}
int64_t EventNotification::getTotNoP() const {
return m_totNoP;
}
void EventNotification::setTotNoP(int64_t const& value) {
m_totNoP = value;
m_totNoPIsSet = true;
}
bool EventNotification::totNoPIsSet() const {
return m_totNoPIsSet;
}
void EventNotification::unsetTotNoP() {
m_totNoPIsSet = false;
}
int64_t EventNotification::getUlNoP() const {
return m_ulNoP;
}
void EventNotification::setUlNoP(int64_t const& value) {
m_ulNoP = value;
m_ulNoPIsSet = true;
}
bool EventNotification::ulNoPIsSet() const {
return m_ulNoPIsSet;
}
void EventNotification::unsetUlNoP() {
m_ulNoPIsSet = false;
}
int64_t EventNotification::getDlNoP() const {
return m_dlNoP;
}
void EventNotification::setDlNoP(int64_t const& value) {
m_dlNoP = value;
m_dlNoPIsSet = true;
}
bool EventNotification::dlNoPIsSet() const {
return m_dlNoPIsSet;
}
void EventNotification::unsetDlNoP() {
m_dlNoPIsSet = false;
}
int64_t EventNotification::getTotVol() const {
return m_totVol;
}
void EventNotification::setTotVol(int64_t const& value) {
m_totVol = value;
m_totVolIsSet = true;
}
bool EventNotification::totVolIsSet() const {
return m_totVolIsSet;
}
void EventNotification::unsetTotVol() {
m_totVolIsSet = false;
}
int64_t EventNotification::getUlVol() const {
return m_ulVol;
}
void EventNotification::setUlVol(int64_t const& value) {
m_ulVol = value;
m_ulVolIsSet = true;
}
bool EventNotification::ulVolIsSet() const {
return m_ulVolIsSet;
}
void EventNotification::unsetUlVol() {
m_ulVolIsSet = false;
}
int64_t EventNotification::getDlVol() const {
return m_dlVol;
UsageReport EventNotification::getUsageReport() const {
return m_usageReport;
}
void EventNotification::setDlVol(int64_t const& value) {
m_dlVol = value;
m_dlVolIsSet = true;
void EventNotification::setUsageReport(UsageReport const& value) {
m_usageReport = value;
m_usageReportIsSet = true;
}
bool EventNotification::dlVolIsSet() const {
return m_dlVolIsSet;
bool EventNotification::usageReportIsSet() const {
return m_usageReportIsSet;
}
void EventNotification::unsetDlVol() {
m_dlVolIsSet = false;
void EventNotification::unsetUsageReport() {
m_usageReportIsSet = false;
}
......
......@@ -27,6 +27,7 @@
#include "PlmnId.h"
#include "RouteToLocation.h"
#include "AccessType.h"
#include "UsageReport.h"
#include <nlohmann/json.hpp>
namespace oai {
......@@ -203,78 +204,13 @@ class EventNotification {
void setMaxWaitTime(std::string const& value);
bool maxWaitTimeIsSet() const;
void unsetMaxWaitTime();
/// <summary>
///
/// </summary>
int64_t getSEndID() const;
void setSEndID(int64_t const& value);
bool SEndIDIsSet() const;
void unsetSEndID();
/// <summary>
///
/// </summary>
int32_t geturSeqN() const;
void seturSeqN(int32_t const& value);
bool urSeqNIsSet() const;
void unseturSeqN();
/// <summary>
///
/// </summary>
int32_t getDuration() const;
void setDuration(int32_t const& value);
bool durationIsSet() const;
void unsetDuration();
/// <summary>
///
/// </summary>
int64_t getTotNoP() const;
void setTotNoP(int64_t const& value);
bool totNoPIsSet() const;
void unsetTotNoP();
/// <summary>
///
/// </summary>
int64_t getUlNoP() const;
void setUlNoP(int64_t const& value);
bool ulNoPIsSet() const;
void unsetUlNoP();
/// <summary>
///
/// </summary>
int64_t getDlNoP() const;
void setDlNoP(int64_t const& value);
bool dlNoPIsSet() const;
void unsetDlNoP();
/// <summary>
///
/// </summary>
int64_t getTotVol() const;
void setTotVol(int64_t const& value);
bool totVolIsSet() const;
void unsetTotVol();
/// <summary>
///
/// </summary>
int64_t getUlVol() const;
void setUlVol(int64_t const& value);
bool ulVolIsSet() const;
void unsetUlVol();
/// <summary>
///
/// </summary>
int64_t getDlVol() const;
void setDlVol(int64_t const& value);
bool dlVolIsSet() const;
void unsetDlVol();
UsageReport getUsageReport() const;
void setUsageReport(UsageReport const& value);
bool usageReportIsSet() const;
void unsetUsageReport();
friend void to_json(nlohmann::json& j, const EventNotification& o);
friend void from_json(const nlohmann::json& j, EventNotification& o);
......@@ -326,26 +262,8 @@ class EventNotification {
bool m_DddStatusIsSet;
std::string m_MaxWaitTime;
bool m_MaxWaitTimeIsSet;
// QoS Monitoring (Usage Report)
int64_t m_SEndID;
bool m_SEndIDIsSet;
int32_t m_urSeqN;
bool m_urSeqNIsSet;
int32_t m_duration;
bool m_durationIsSet;
int64_t m_totNoP;
bool m_totNoPIsSet;
int64_t m_ulNoP;
bool m_ulNoPIsSet;
int64_t m_dlNoP;
bool m_dlNoPIsSet;
int64_t m_totVol;
bool m_totVolIsSet;
int64_t m_ulVol;
bool m_ulVolIsSet;
int64_t m_dlVol;
bool m_dlVolIsSet;
UsageReport m_usageReport;
bool m_usageReportIsSet;
};
} // namespace model
......
/**
* Nsmf_EventExposure
*
* UsageReport.cpp
*/
#include "UsageReport.h"
namespace oai {
namespace smf_server {
namespace model {
UsageReport::UsageReport() {
m_SEndID = 0;
m_SEndIDIsSet = false;
m_urSeqN = 0;
m_urSeqNIsSet = false;
m_duration = 0;
m_durationIsSet = false;
m_totNoP = 0;
m_totNoPIsSet = false;
m_ulNoP = 0;
m_ulNoPIsSet = false;
m_dlNoP = 0;
m_dlNoPIsSet = false;
m_totVol = 0;
m_totVolIsSet = false;
m_ulVol = 0;
m_ulVolIsSet = false;
m_dlVol = 0;
m_dlVolIsSet = false;
}
UsageReport::~UsageReport() {}
void UsageReport::validate() {
// TODO: implement validation
}
void to_json(nlohmann::json& j, const UsageReport& o) {
j = nlohmann::json();
if (o.SEndIDIsSet())
j["SEID"] = o.m_SEndID;
if (o.urSeqNIsSet())
j["UR-SEQN"] = o.m_urSeqN;
if (o.durationIsSet())
j["Duration"] = o.m_duration;
if (o.totNoPIsSet())
j["NoP"]["Total"] = o.m_totNoP;
if (o.ulNoPIsSet())
j["NoP"]["Uplink"] = o.m_ulNoP;
if (o.dlNoPIsSet())
j["NoP"]["Downlink"] = o.m_dlNoP;
if (o.totVolIsSet())
j["Volume"]["Total"] = o.m_totVol;
if (o.ulVolIsSet())
j["Volume"]["Uplink"] = o.m_ulVol;
if (o.dlVolIsSet())
j["Volume"]["Downlink"] = o.m_dlVol;
}
void from_json(const nlohmann::json& j, UsageReport& o) {
if (j.find("SEID") != j.end()) {
j.at("SEID").get_to(o.m_SEndID);
o.m_SEndIDIsSet = true;
}
if (j.find("UR-SEQN") != j.end()) {
j.at("UR-SEQN").get_to(o.m_urSeqN);
o.m_urSeqNIsSet = true;
}
if (j.find("Duration") != j.end()) {
j.at("Duration").get_to(o.m_duration);
o.m_durationIsSet = true;
}
if (j.find("NoP") != j.end()) {
if (j.find("Total") != j.end()) {
j.at("Total").get_to(o.m_totNoP);
o.m_totNoPIsSet = true;
}
if (j.find("Uplink") != j.end()) {
j.at("Uplink").get_to(o.m_ulNoP);
o.m_ulNoPIsSet = true;
}
if (j.find("Downlink") != j.end()) {
j.at("Downlink").get_to(o.m_dlNoP);
o.m_dlNoPIsSet = true;
}
}
if (j.find("Volume") != j.end()) {
if (j.find("Total") != j.end()) {
j.at("Total").get_to(o.m_totVol);
o.m_totVolIsSet = true;
}
if (j.find("Uplink") != j.end()) {
j.at("Uplink").get_to(o.m_ulVol);
o.m_ulVolIsSet = true;
}
if (j.find("Downlink") != j.end()) {
j.at("Downlink").get_to(o.m_dlVol);
o.m_dlVolIsSet = true;
}
}
}
int64_t UsageReport::getSEndID() const {
return m_SEndID;
}
void UsageReport::setSEndID(int64_t const& value) {
m_SEndID = value;
m_SEndIDIsSet = true;
}
bool UsageReport::SEndIDIsSet() const {
return m_SEndIDIsSet;
}
void UsageReport::unsetSEndID() {
m_SEndIDIsSet = false;
}
int32_t UsageReport::geturSeqN() const {
return m_urSeqN;
}
void UsageReport::seturSeqN(int32_t const& value) {
m_urSeqN = value;
m_urSeqNIsSet = true;
}
bool UsageReport::urSeqNIsSet() const {
return m_urSeqNIsSet;
}
void UsageReport::unseturSeqN() {
m_urSeqNIsSet = false;
}
int32_t UsageReport::getDuration() const {
return m_duration;
}
void UsageReport::setDuration(int32_t const& value) {
m_duration = value;
m_durationIsSet = true;
}
bool UsageReport::durationIsSet() const {
return m_durationIsSet;
}
void UsageReport::unsetDuration() {
m_durationIsSet = false;
}
int64_t UsageReport::getTotNoP() const {
return m_totNoP;
}
void UsageReport::setTotNoP(int64_t const& value) {
m_totNoP = value;
m_totNoPIsSet = true;
}
bool UsageReport::totNoPIsSet() const {
return m_totNoPIsSet;
}
void UsageReport::unsetTotNoP() {
m_totNoPIsSet = false;
}
int64_t UsageReport::getUlNoP() const {
return m_ulNoP;
}
void UsageReport::setUlNoP(int64_t const& value) {
m_ulNoP = value;
m_ulNoPIsSet = true;
}
bool UsageReport::ulNoPIsSet() const {
return m_ulNoPIsSet;
}
void UsageReport::unsetUlNoP() {
m_ulNoPIsSet = false;
}
int64_t UsageReport::getDlNoP() const {
return m_dlNoP;
}
void UsageReport::setDlNoP(int64_t const& value) {
m_dlNoP = value;
m_dlNoPIsSet = true;
}
bool UsageReport::dlNoPIsSet() const {
return m_dlNoPIsSet;
}
void UsageReport::unsetDlNoP() {
m_dlNoPIsSet = false;
}
int64_t UsageReport::getTotVol() const {
return m_totVol;
}
void UsageReport::setTotVol(int64_t const& value) {
m_totVol = value;
m_totVolIsSet = true;
}
bool UsageReport::totVolIsSet() const {
return m_totVolIsSet;
}
void UsageReport::unsetTotVol() {
m_totVolIsSet = false;
}
int64_t UsageReport::getUlVol() const {
return m_ulVol;
}
void UsageReport::setUlVol(int64_t const& value) {
m_ulVol = value;
m_ulVolIsSet = true;
}
bool UsageReport::ulVolIsSet() const {
return m_ulVolIsSet;
}
void UsageReport::unsetUlVol() {
m_ulVolIsSet = false;
}
int64_t UsageReport::getDlVol() const {
return m_dlVol;
}
void UsageReport::setDlVol(int64_t const& value) {
m_dlVol = value;
m_dlVolIsSet = true;
}
bool UsageReport::dlVolIsSet() const {
return m_dlVolIsSet;
}
void UsageReport::unsetDlVol() {
m_dlVolIsSet = false;
}
} // namespace model
} // namespace smf_server
} // namespace oai
/**
* Nsmf_EventExposure
*
* UsageReport.h
*/
#ifndef UsageReport_H_
#define UsageReport_H_
#include "msg_pfcp.hpp"
#include <nlohmann/json.hpp>
namespace oai {
namespace smf_server {
namespace model {
/// <summary>
///
/// </summary>
class UsageReport {
public:
UsageReport();
virtual ~UsageReport();
void validate();
/////////////////////////////////////////////
/// UsageReport members
/// <summary>
///
/// </summary>
int64_t getSEndID() const;
void setSEndID(int64_t const& value);
bool SEndIDIsSet() const;
void unsetSEndID();
/// <summary>
///
/// </summary>
int32_t geturSeqN() const;
void seturSeqN(int32_t const& value);
bool urSeqNIsSet() const;
void unseturSeqN();
/// <summary>
///
/// </summary>
int32_t getDuration() const;
void setDuration(int32_t const& value);
bool durationIsSet() const;
void unsetDuration();
/// <summary>
///
/// </summary>
int64_t getTotNoP() const;
void setTotNoP(int64_t const& value);
bool totNoPIsSet() const;
void unsetTotNoP();
/// <summary>
///
/// </summary>
int64_t getUlNoP() const;
void setUlNoP(int64_t const& value);
bool ulNoPIsSet() const;
void unsetUlNoP();
/// <summary>
///
/// </summary>
int64_t getDlNoP() const;
void setDlNoP(int64_t const& value);
bool dlNoPIsSet() const;
void unsetDlNoP();
/// <summary>
///
/// </summary>
int64_t getTotVol() const;
void setTotVol(int64_t const& value);
bool totVolIsSet() const;
void unsetTotVol();
/// <summary>
///
/// </summary>
int64_t getUlVol() const;
void setUlVol(int64_t const& value);
bool ulVolIsSet() const;
void unsetUlVol();
/// <summary>
///
/// </summary>
int64_t getDlVol() const;
void setDlVol(int64_t const& value);
bool dlVolIsSet() const;
void unsetDlVol();
friend void to_json(nlohmann::json& j, const UsageReport& o);
friend void from_json(const nlohmann::json& j, UsageReport& o);
protected:
pfcp::usage_report_within_pfcp_session_deletion_response m_URSessDel;
bool m_URSessDelIsSet;
pfcp::usage_report_within_pfcp_session_modification_response m_URSessMod;
bool m_URSessModIsSet;
pfcp::usage_report_within_pfcp_session_report_request m_URRequest;
bool m_URRequestIsSet;
int64_t m_SEndID;
bool m_SEndIDIsSet;
int32_t m_urSeqN;
bool m_urSeqNIsSet;
int32_t m_duration;
bool m_durationIsSet;
int64_t m_totNoP;
bool m_totNoPIsSet;
int64_t m_ulNoP;
bool m_ulNoPIsSet;
int64_t m_dlNoP;
bool m_dlNoPIsSet;
int64_t m_totVol;
bool m_totVolIsSet;
int64_t m_ulVol;
bool m_ulVolIsSet;
int64_t m_dlVol;
bool m_dlVolIsSet;
// pfcp::usage_report_trigger_t m_urTrig;
// bool m_urTrigIsSet;
// pfcp::usage_report_within_pfcp_session_modification_response m_urSessMod;
// bool m_urSessModIsSet;
};
} // namespace model
} // namespace smf_server
} // namespace oai
#endif /* UsageReport_H_ */
......@@ -982,11 +982,32 @@ void smf_context::handle_itti_msg(
pfcp::volume_measurement_t vm;
pfcp::duration_measurement_t dm;
pfcp::ur_seqn_t seqn;
pfcp::usage_report_trigger_t trig;
if (ur.get(vm)) {
Logger::smf_app().info("\t\t SEID -> %lld", req->seid);
if (ur.get(seqn))
Logger::smf_app().info("\t\t UR-SEQN -> %ld", seqn.ur_seqn);
if (ur.get(trig))
if (trig.droth) Logger::smf_app().info("\t\t Trigger -> Dropped DL Traffic Threshold");
if (trig.envcl) Logger::smf_app().info("\t\t Trigger -> Envelope Closure");
if (trig.evequ) Logger::smf_app().info("\t\t Trigger -> Event Quota");
if (trig.eveth) Logger::smf_app().info("\t\t Trigger -> Event Threshold");
if (trig.immer) Logger::smf_app().info("\t\t Trigger -> Immediate Report");
if (trig.liusa) Logger::smf_app().info("\t\t Trigger -> Linked Usage Reporting");
if (trig.macar) Logger::smf_app().info("\t\t Trigger -> MAC Addresses Reporting");
if (trig.monit) Logger::smf_app().info("\t\t Trigger -> Monitoring Time");
if (trig.perio) Logger::smf_app().info("\t\t Trigger -> Periodic Reporting");
if (trig.quhti) Logger::smf_app().info("\t\t Trigger -> Quota Holding Time");
if (trig.start) Logger::smf_app().info("\t\t Trigger -> Start of Traffic");
if (trig.stop) Logger::smf_app().info("\t\t Trigger -> Stop of Traffic");
if (trig.tebur) Logger::smf_app().info("\t\t Trigger -> Termination by UP Function Report");
if (trig.termr) Logger::smf_app().info("\t\t Trigger -> Termination Report");
if (trig.timqu) Logger::smf_app().info("\t\t Trigger -> Time Quota");
if (trig.timth) Logger::smf_app().info("\t\t Trigger -> Time Threshold");
if (trig.volqu) Logger::smf_app().info("\t\t Trigger -> Volume Quota");
if (trig.volth) Logger::smf_app().info("\t\t Trigger -> Volume Threshold");
if (ur.get(dm))
Logger::smf_app().info("\t\t Duration -> %ld", dm.duration);
Logger::smf_app().info("\t\t NoP Total -> %lld", vm.total_nop);
......@@ -1005,19 +1026,21 @@ void smf_context::handle_itti_msg(
std::shared_ptr<smf_context> pc = {};
if (smf_app_inst->seid_2_smf_context(req->seid, pc)) {
oai::smf_server::model::EventNotification ev_notif = {};
oai::smf_server::model::UsageReport ur_model = {};
if (ur.get(vm)) {
ev_notif.setSEndID(req->seid);
ur_model.setSEndID(req->seid);
if (ur.get(seqn))
ev_notif.seturSeqN(seqn.ur_seqn);
ur_model.seturSeqN(seqn.ur_seqn);
if (ur.get(dm))
ev_notif.setDuration(dm.duration);
ev_notif.setTotNoP(vm.total_nop);
ev_notif.setUlNoP(vm.uplink_nop);
ev_notif.setDlNoP(vm.downlink_nop);
ev_notif.setTotVol(vm.total_volume);
ev_notif.setUlVol(vm.uplink_volume);
ev_notif.setDlVol(vm.downlink_volume);
ur_model.setDuration(dm.duration);
ur_model.setTotNoP(vm.total_nop);
ur_model.setUlNoP(vm.uplink_nop);
ur_model.setDlNoP(vm.downlink_nop);
ur_model.setTotVol(vm.total_volume);
ur_model.setUlVol(vm.uplink_volume);
ur_model.setDlVol(vm.downlink_volume);
}
ev_notif.setUsageReport(ur_model);
pc.get()->trigger_qos_monitoring(req->seid, ev_notif, 1);
} else {
Logger::smf_app().debug(
......@@ -4109,8 +4132,6 @@ void smf_context::handle_qos_monitoring(seid_t seid,
TASK_SMF_APP, TASK_SMF_SBI);
for (auto i : subscriptions) {
// TODO (?): Add check for repeated notifications
event_notification ev_notif = {};
ev_notif.set_supi(supi64);
ev_notif.set_smf_event(smf_event_t::SMF_EVENT_QOS_MON);
......@@ -4123,24 +4144,7 @@ void smf_context::handle_qos_monitoring(seid_t seid,
// Custom json for Usage Report
nlohmann::json cj = {};
cj["SEID"] = std::to_string(seid);
if (ev_notif_model.urSeqNIsSet())
cj["UR-SEQN"] = std::to_string(ev_notif_model.geturSeqN());
if (ev_notif_model.durationIsSet())
cj["Duration"] = std::to_string(ev_notif_model.getDuration());
if (ev_notif_model.totNoPIsSet())
cj["NoP"]["Total"] = std::to_string(ev_notif_model.getTotNoP());
if (ev_notif_model.ulNoPIsSet())
cj["NoP"]["Uplink"] = std::to_string(ev_notif_model.getUlNoP());
if (ev_notif_model.dlNoPIsSet())
cj["NoP"]["Downlink"] = std::to_string(ev_notif_model.getDlNoP());
if (ev_notif_model.totVolIsSet())
cj["Volume"]["Total"] = std::to_string(ev_notif_model.getTotVol());
if (ev_notif_model.ulVolIsSet())
cj["Volume"]["Uplink"] = std::to_string(ev_notif_model.getUlVol());
if (ev_notif_model.dlVolIsSet())
cj["Volume"]["Downlink"] = std::to_string(ev_notif_model.getDlVol());
to_json(cj, ev_notif_model);
ev_notif.set_custom_info(cj);
itti_msg->event_notifs.push_back(ev_notif);
......
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