Commit f9865cd1 authored by KARIM BOUTIBA's avatar KARIM BOUTIBA

Merge branch 'develop' of https://gitlab.eurecom.fr/oai/cn5g/oai-cn5g-amf into event_exposure

parents 5377b46a 7f1380a5
......@@ -68,7 +68,7 @@ AMF =
};
# AMF binded interface for SBI (N11 (SMF)/N12 (AUSF), etc.)
N11:
SBI:
{
INTERFACE_NAME = "@AMF_INTERFACE_NAME_FOR_N11@";
IPV4_ADDRESS = "read";
......
# CODEOWNERS
src/contexts:
- Keliang DU, BUPT
- Tien Thinh NGUYEN, Eurecom
src/amf-app
- Keliang DU, BUPT
- Tien Thinh NGUYEN, Eurecom
- Shivam Gandhi, KCL
src/itti
- Lionel GAUTHIER, Eurecom
- Tien Thinh NGUYEN, Eurecom
src/common
- Sebastien ROUX, Eurecom
- Lionel Gauthier, Eurecom
- Tien Thinh NGUYEN, Eurecom
- Keliang DU, BUPT
Secu_algorithms
- Kharbach Othmane
- GAUTHIER Lionel, Eurecom
- Keliang DU, Bupt
SCTP
- Keliang DU, Bupt
NAS/NGAP/SBI/UTILS: To be updated
\ No newline at end of file
......@@ -50,7 +50,7 @@ file(GLOB AMF_src_files
${CMAKE_CURRENT_SOURCE_DIR}/amf_module_from_config.cpp
${CMAKE_CURRENT_SOURCE_DIR}/amf_n1.cpp
${CMAKE_CURRENT_SOURCE_DIR}/amf_n2.cpp
${CMAKE_CURRENT_SOURCE_DIR}/amf_n11.cpp
${CMAKE_CURRENT_SOURCE_DIR}/amf_sbi.cpp
${CMAKE_CURRENT_SOURCE_DIR}/amf_event.cpp
${CMAKE_CURRENT_SOURCE_DIR}/amf_profile.cpp
${CMAKE_CURRENT_SOURCE_DIR}/amf_statistics.cpp
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file amf_app.cpp
\brief
\author Keliang DU (BUPT), Tien-Thinh NGUYEN (EURECOM)
\date 2020
\email: contact@openairinterface.org
*/
#include "amf_app.hpp"
#include <boost/uuid/random_generator.hpp>
......@@ -35,17 +28,17 @@
#include <stdexcept>
#include "DLNASTransport.hpp"
#include "GlobalRanNodeId.h"
#include "RegistrationContextContainer.h"
#include "UeN1N2InfoSubscriptionCreatedData.h"
#include "amf_config.hpp"
#include "amf_n1.hpp"
#include "amf_n11.hpp"
#include "amf_n2.hpp"
#include "amf_sbi.hpp"
#include "amf_statistics.hpp"
#include "comUt.hpp"
#include "itti.hpp"
#include "ngap_app.hpp"
#include "comUt.hpp"
#include "RegistrationContextContainer.h"
#include "GlobalRanNodeId.h"
#include "UeN1N2InfoSubscriptionCreatedData.h"
using namespace ngap;
using namespace nas;
......@@ -56,7 +49,7 @@ extern amf_app* amf_app_inst;
extern itti_mw* itti_inst;
amf_n2* amf_n2_inst = nullptr;
amf_n1* amf_n1_inst = nullptr;
amf_n11* amf_n11_inst = nullptr;
amf_sbi* amf_sbi_inst = nullptr;
extern amf_config amf_cfg;
extern statistics stacs;
......@@ -82,7 +75,7 @@ amf_app::amf_app(const amf_config& amf_cfg)
amf_n1_inst = new amf_n1();
amf_n2_inst =
new amf_n2(std::string(inet_ntoa(amf_cfg.n2.addr4)), amf_cfg.n2.port);
amf_n11_inst = new amf_n11();
amf_sbi_inst = new amf_sbi();
} catch (std::exception& e) {
Logger::amf_app().error("Cannot create AMF APP: %s", e.what());
throw;
......@@ -1018,7 +1011,7 @@ void amf_app::generate_amf_profile() {
nf_instance_profile.set_nf_priority(1);
nf_instance_profile.set_nf_capacity(100);
nf_instance_profile.delete_nf_ipv4_addresses();
nf_instance_profile.add_nf_ipv4_addresses(amf_cfg.n11.addr4);
nf_instance_profile.add_nf_ipv4_addresses(amf_cfg.sbi.addr4);
// NF services
nf_service_t nf_service = {};
......@@ -1032,9 +1025,9 @@ void amf_app::generate_amf_profile() {
nf_service.nf_service_status = "REGISTERED";
// IP Endpoint
ip_endpoint_t endpoint = {};
endpoint.ipv4_address = amf_cfg.n11.addr4;
endpoint.ipv4_address = amf_cfg.sbi.addr4;
endpoint.transport = "TCP";
endpoint.port = amf_cfg.n11.port;
endpoint.port = amf_cfg.sbi.port;
nf_service.ip_endpoints.push_back(endpoint);
nf_instance_profile.delete_nf_services();
......@@ -1067,27 +1060,28 @@ std::string amf_app::get_nf_instance() const {
//---------------------------------------------------------------------------------------------
void amf_app::register_to_nrf() {
// send request to N11 to send NF registration to NRF
// send request to SBI to send NF registration to NRF
trigger_nf_registration_request();
}
//------------------------------------------------------------------------------
void amf_app::trigger_nf_registration_request() {
Logger::amf_app().debug(
"Send ITTI msg to N11 task to trigger the registration request to NRF");
"Send ITTI msg to SBI task to trigger the registration request to NRF");
std::shared_ptr<itti_n11_register_nf_instance_request> itti_msg =
std::make_shared<itti_n11_register_nf_instance_request>(
TASK_AMF_APP, TASK_AMF_N11);
std::shared_ptr<itti_sbi_register_nf_instance_request> itti_msg =
std::make_shared<itti_sbi_register_nf_instance_request>(
TASK_AMF_APP, TASK_AMF_SBI);
itti_msg->profile = nf_instance_profile;
amf_n11_inst->register_nf_instance(itti_msg);
// TODO: use ITTI to send message between N1 and SBI
amf_sbi_inst->register_nf_instance(itti_msg);
/*
int ret = itti_inst->send_msg(itti_msg);
if (RETURNok != ret) {
Logger::amf_app().error(
"Could not send ITTI message %s to task TASK_AMF_N11",
"Could not send ITTI message %s to task TASK_AMF_SBI",
itti_msg->get_msg_name());
}
*/
......@@ -1096,16 +1090,16 @@ void amf_app::trigger_nf_registration_request() {
//------------------------------------------------------------------------------
void amf_app::trigger_nf_deregistration() const {
Logger::amf_app().debug(
"Send ITTI msg to N11 task to trigger the deregistration request to NRF");
"Send ITTI msg to SBI task to trigger the deregistration request to NRF");
std::shared_ptr<itti_n11_deregister_nf_instance> itti_msg =
std::make_shared<itti_n11_deregister_nf_instance>(
TASK_AMF_APP, TASK_AMF_N11);
std::shared_ptr<itti_sbi_deregister_nf_instance> itti_msg =
std::make_shared<itti_sbi_deregister_nf_instance>(
TASK_AMF_APP, TASK_AMF_SBI);
itti_msg->amf_instance_id = amf_instance_id;
int ret = itti_inst->send_msg(itti_msg);
if (RETURNok != ret) {
Logger::amf_app().error(
"Could not send ITTI message %s to task TASK_AMF_N11",
"Could not send ITTI message %s to task TASK_AMF_SBI",
itti_msg->get_msg_name());
}
}
......@@ -1129,8 +1123,8 @@ void amf_app::add_promise(
void amf_app::add_promise(
const uint32_t pid,
const boost::shared_ptr<boost::promise<nlohmann::json>>& p) {
std::unique_lock lock(m_curl_handle_responses_n11);
curl_handle_responses_n11.emplace(pid, p);
std::unique_lock lock(m_curl_handle_responses_sbi);
curl_handle_responses_sbi.emplace(pid, p);
}
//---------------------------------------------------------------------------------------------
......@@ -1170,10 +1164,10 @@ void amf_app::trigger_process_response(
"Trigger process response: Set promise with ID %u "
"to ready",
pid);
std::unique_lock lock(m_curl_handle_responses_n11);
if (curl_handle_responses_n11.count(pid) > 0) {
curl_handle_responses_n11[pid]->set_value(json_data);
std::unique_lock lock(m_curl_handle_responses_sbi);
if (curl_handle_responses_sbi.count(pid) > 0) {
curl_handle_responses_sbi[pid]->set_value(json_data);
// Remove this promise from list
curl_handle_responses_n11.erase(pid);
curl_handle_responses_sbi.erase(pid);
}
}
......@@ -19,36 +19,27 @@
* contact@openairinterface.org
*/
/*! \file amf_app.hpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _AMF_APP_H_
#define _AMF_APP_H_
#include <boost/thread.hpp>
#include <boost/thread/future.hpp>
#include <map>
#include <shared_mutex>
#include <string>
#include "ProblemDetails.h"
#include "UeN1N2InfoSubscriptionCreateData.h"
#include "amf_config.hpp"
#include "amf_module_from_config.hpp"
#include "amf_msg.hpp"
#include "amf_profile.hpp"
#include "amf_subscription.hpp"
#include "itti.hpp"
#include "itti_msg_n11.hpp"
#include "itti_msg_amf_app.hpp"
#include "ue_context.hpp"
#include "amf_subscription.hpp"
#include "itti_msg_sbi.hpp"
#include "amf_msg.hpp"
#include "ProblemDetails.h"
#include "UeN1N2InfoSubscriptionCreateData.h"
#include "ue_context.hpp"
#include "uint_generator.hpp"
#include <boost/thread.hpp>
#include <boost/thread/future.hpp>
using namespace config;
......@@ -92,9 +83,9 @@ class amf_app {
std::map<uint32_t, boost::shared_ptr<boost::promise<std::string>>>
curl_handle_responses_n2_sm;
mutable std::shared_mutex m_curl_handle_responses_n11;
mutable std::shared_mutex m_curl_handle_responses_sbi;
std::map<uint32_t, boost::shared_ptr<boost::promise<nlohmann::json>>>
curl_handle_responses_n11;
curl_handle_responses_sbi;
util::uint_generator<uint32_t> n1n2sub_id_generator;
std::map<
......@@ -458,14 +449,14 @@ class amf_app {
void generate_amf_profile();
/*
* Send request to N11 task to trigger NF instance registration to NRF
* Send request to SBI 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
* Send request to SBI task to trigger NF instance deregistration to NRF
* @param [void]
* @return void
*/
......
This diff is collapsed.
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file amf_config.hpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _AMF_CONFIG_H_
#define _AMF_CONFIG_H_
......@@ -33,18 +26,19 @@
#include <netinet/in.h>
#include <sys/socket.h>
#include <boost/algorithm/string.hpp>
#include <libconfig.h++>
#include <nlohmann/json.hpp>
#include <string>
#include <vector>
#include <boost/algorithm/string.hpp>
#include "amf_config.hpp"
#include "amf.hpp"
#include "amf_config.hpp"
#include "common_defs.h"
#include "if.hpp"
#include "pdu_session_context.hpp"
#include "string.hpp"
#include "thread_sched.hpp"
#include "common_defs.h"
#define AMF_CONFIG_STRING_AMF_CONFIG "AMF"
#define AMF_CONFIG_STRING_PID_DIRECTORY "PID_DIRECTORY"
......@@ -59,7 +53,7 @@
#define AMF_CONFIG_STRING_PPID "PPID"
#define AMF_CONFIG_STRING_SBI_HTTP2_PORT "HTTP2_PORT"
#define AMF_CONFIG_STRING_INTERFACE_N11 "N11"
#define AMF_CONFIG_STRING_INTERFACE_SBI "SBI"
#define AMF_CONFIG_STRING_SMF_INSTANCES_POOL "SMF_INSTANCES_POOL"
#define AMF_CONFIG_STRING_SMF_INSTANCE_ID "SMF_INSTANCE_ID"
#define AMF_CONFIG_STRING_SMF_INSTANCE_PORT "PORT"
......@@ -124,7 +118,7 @@ using namespace libconfig;
namespace config {
typedef struct {
typedef struct auth_conf_s {
std::string mysql_server;
std::string mysql_user;
std::string mysql_pass;
......@@ -148,7 +142,7 @@ typedef struct {
this->random = json_data["random"].get<std::string>();
}
} auth_conf;
} auth_conf_t;
typedef struct interface_cfg_s {
std::string if_name;
......@@ -457,6 +451,28 @@ class amf_config {
*/
std::string get_ausf_ue_authentications_uri();
/*
* Get the URI of SMF PDU Session Service
* @param [const std::shared_ptr<pdu_session_context>&] psc: pointer to the
* PDU Session Context
* @param [std::string&] smf_uri: based URI of Nsmf_PDUSession Services
* @return true if can get the URI. otherwise false
*/
bool get_smf_pdu_session_context_uri(
const std::shared_ptr<pdu_session_context>& psc, std::string& smf_uri);
/*
* Get the URI of SMF Services
* @param [const std::string&] smf_addr: SMF's Addr in String representation
* @param [const std::string&] smf_port: SMF's port in String representation
* @param [const std::string&] smf_api_version: SMF's API version in String
* representation
* @return URI in string format
*/
std::string get_smf_pdu_session_base_uri(
const std::string& smf_addr, const std::string& smf_port,
const std::string& smf_api_version);
/*
* Display the AMF configuration parameters
* @param void
......@@ -481,7 +497,7 @@ class amf_config {
unsigned int instance;
std::string pid_dir;
interface_cfg_t n2;
interface_cfg_t n11;
interface_cfg_t sbi;
itti_cfg_t itti;
std::string sbi_api_version;
unsigned int sbi_http2_port;
......@@ -493,7 +509,7 @@ class amf_config {
unsigned int relative_amf_capacity;
std::vector<plmn_item_t> plmn_list;
std::string is_emergency_support;
auth_conf auth_para;
auth_conf_t auth_para;
nas_conf_t nas_cfg;
std::vector<smf_inst_t> smf_pool;
......
......@@ -19,16 +19,9 @@
* contact@openairinterface.org
*/
/*! \file amf_event.cpp
\brief
\author Shivam Gandhi (KCL), Tien-Thinh NGUYEN (EURECOM)
\company
\date 2021
\email: contact@openairinterface.org
*/
#include "amf_event.hpp"
using namespace amf_application;
//------------------------------------------------------------------------------
bs2::connection amf_event::subscribe_ue_location_report(
const ue_location_report_sig_t::slot_type& sig) {
......
......@@ -19,14 +19,6 @@
* contact@openairinterface.org
*/
/*! \file amf_event.hpp
\brief
\author Shivam Gandhi (KCL), Tien-Thinh NGUYEN (EURECOM)
\company
\date 2021
\email: contact@openairinterface.org
*/
#include <boost/signals2.hpp>
namespace bs2 = boost::signals2;
......
......@@ -19,19 +19,12 @@
* contact@openairinterface.org
*/
/*! \file amf_event_sig.hpp
\brief
\author Shivam Gandhi (KCL), Tien-Thinh NGUYEN (EURECOM)
\company
\date 2021
\email: contact@openairinterface.org
*/
#ifndef FILE_SMF_EVENT_SIG_HPP_SEEN
#define FILE_SMF_EVENT_SIG_HPP_SEEN
#include <boost/signals2.hpp>
#include <string>
#include "UserLocation.h"
#include "CommunicationFailure.h"
......
......@@ -19,19 +19,12 @@
* contact@openairinterface.org
*/
/*! \file amf_module_from_config.cpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#include "amf_module_from_config.hpp"
#include "common_defs.h"
#include <iostream>
#include <string>
#include "common_defs.h"
#include "logger.hpp"
namespace config {
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file amf_module_from_config.hpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _AMF_MODULE_FROM_CONFIG_H_
#define _AMF_MODULE_FROM_CONFIG_H_
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file amf_msg.cpp
\brief
\author Shivam Gandhi
\company KCL
\date 2021
\email: shivam.gandhi@kcl.ac.uk
*/
#include "amf_msg.hpp"
using namespace amf_application;
......
......@@ -19,20 +19,13 @@
* contact@openairinterface.org
*/
/*! \file amf_msg.hpp
\brief
\author
\company
\date 2021
\email:
*/
#ifndef FILE_AMF_MSG_HPP_SEEN
#define FILE_AMF_MSG_HPP_SEEN
#include "amf.hpp"
#include "3gpp_29.518.h"
#include "amf_profile.hpp"
#include "AmfEventReport.h"
#include "amf.hpp"
#include "amf_profile.hpp"
namespace amf_application {
......
This diff is collapsed.
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file amf_n1.hpp
\brief
\author Keliang DU (BUPT), Tien-Thinh NGUYEN (EURECOM)
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _AMF_N1_H_
#define _AMF_N1_H_
......@@ -36,22 +29,22 @@
#include <map>
#include <shared_mutex>
#include "3gpp_ts24501.hpp"
#include "3gpp_29.503.h"
#include "3gpp_ts24501.hpp"
#include "AuthorizedNetworkSliceInfo.h"
#include "Nssai.h"
#include "RegistrationAccept.hpp"
#include "SliceInfoForRegistration.h"
#include "amf.hpp"
#include "amf_event.hpp"
#include "amf_statistics.hpp"
#include "bstrlib.h"
#include "itti.hpp"
#include "itti_msg_n1.hpp"
#include "mysql_db.hpp"
#include "nas_context.hpp"
#include "pdu_session_context.hpp"
#include "amf_event.hpp"
#include "RegistrationAccept.hpp"
#include "ue_context.hpp"
#include "itti.hpp"
#include "SliceInfoForRegistration.h"
#include "AuthorizedNetworkSliceInfo.h"
#include "Nssai.h"
namespace amf_application {
......
......@@ -19,18 +19,19 @@
* contact@openairinterface.org
*/
/*! \file amf_n2.cpp
\brief
\author Keliang DU (BUPT), Tien-Thinh NGUYEN (EURECOM)
\date 2020
\email: contact@openairinterface.org
*/
#include "amf_n2.hpp"
#include <boost/chrono.hpp>
#include <boost/chrono/chrono.hpp>
#include <boost/chrono/duration.hpp>
#include <boost/chrono/system_clocks.hpp>
#include "3gpp_24.501.h"
#include "DefaultPagingDRX.hpp"
#include "DownlinkNasTransport.hpp"
#include "HandoverPreparationFailure.hpp"
#include "InitialContextSetupRequest.hpp"
#include "NGResetAck.hpp"
#include "NGSetupFailure.hpp"
#include "NGSetupResponse.hpp"
#include "Ngap_Cause.h"
......@@ -38,30 +39,22 @@
#include "Ngap_CauseRadioNetwork.h"
#include "Ngap_TimeToWait.h"
#include "PDUSessionResourceHandoverCommandTransfer.hpp"
#include "Paging.hpp"
#include "PduSessionResourceModifyRequest.hpp"
#include "PduSessionResourceReleaseCommand.hpp"
#include "PduSessionResourceSetupRequest.hpp"
#include "PduSessionResourceModifyRequest.hpp"
#include "UEContextReleaseCommand.hpp"
#include "HandoverPreparationFailure.hpp"
#include "Paging.hpp"
#include "RerouteNASRequest.hpp"
#include "UEContextReleaseCommand.hpp"
#include "amf_app.hpp"
#include "amf_config.hpp"
#include "amf_n1.hpp"
#include "amf_n11.hpp"
#include "amf_sbi.hpp"
#include "amf_statistics.hpp"
#include "comUt.hpp"
#include "itti.hpp"
#include "itti_msg_amf_app.hpp"
#include "logger.hpp"
#include "sctp_server.hpp"
#include "3gpp_24.501.h"
#include "NGResetAck.hpp"
#include <boost/chrono.hpp>
#include <boost/chrono/chrono.hpp>
#include <boost/chrono/duration.hpp>
#include <boost/chrono/system_clocks.hpp>
extern "C" {
#include "dynamic_memory_check.h"
......@@ -182,7 +175,7 @@ void amf_n2_task(void* args_p) {
dynamic_cast<itti_ue_radio_capability_indication*>(msg);
amf_n2_inst->handle_itti_message(ref(*m));
} break;
case HANDOVER_REQUIRED: {
case HANDOVER_REQUIRED_MSG: {
Logger::amf_n2().info("Received HANDOVER_REQUIRED message, handling");
itti_handover_required* m = dynamic_cast<itti_handover_required*>(msg);
if (!amf_n2_inst->handle_itti_message(ref(*m)))
......@@ -1437,7 +1430,7 @@ void amf_n2::handle_itti_message(itti_ue_context_release_complete& itti_msg) {
uint32_t ran_ue_ngap_id = itti_msg.ueCtxRelCmpl->getRanUeNgapId();
// Change UE status from CM-CONNECTED to CM-IDLE
std::shared_ptr<nas_context> nc;
std::shared_ptr<nas_context> nc = {};
if (amf_n1_inst->is_amf_ue_id_2_nas_context(amf_ue_ngap_id))
nc = amf_n1_inst->amf_ue_id_2_nas_context(amf_ue_ngap_id);
else {
......@@ -1456,13 +1449,104 @@ void amf_n2::handle_itti_message(itti_ue_context_release_complete& itti_msg) {
amf_n1_inst->set_mobile_reachable_timer(nc, tid);
amf_n1_inst->set_mobile_reachable_timer_timeout(nc, false);
} else {
return;
}
// TODO: User Location Information IE
// TODO: Information on Recommended Cells & RAN Nodes for Paging IE
// TODO: Process Secondary RAT Usage Information IE if available
// send Nsmf_PDUSession_UpdateSMContext to SMF
// Get PDU Sessions in UE Context Release Complete and send
// Nsmf_PDUSession_UpdateSMContext to SMF
std::vector<PDUSessionResourceCxtRelCplItem_t> pdu_sessions_to_be_released;
itti_msg.ueCtxRelCmpl->getPduSessionResourceCxtRelCplList(
pdu_sessions_to_be_released);
// TODO: may consider releasing all exisiting PDU sessions
/*
if (pdu_sessions_to_be_released.size() == 0) {
string supi = "imsi-" + nc.get()->imsi;
std::vector<std::shared_ptr<pdu_session_context>> sessions_ctx;
if (!amf_app_inst->get_pdu_sessions_context(supi, sessions_ctx)) {
Logger::amf_n2().debug("No PDU Session Context found");
return;
} else {
for (auto pdu_session : sessions_ctx) {
PDUSessionResourceCxtRelCplItem_t item = {};
item.pduSessionId = pdu_session.get()->pdu_session_id;
pdu_sessions_to_be_released.push_back(item);
}
}
}
*/
// Send PDUSessionUpdateSMContextRequest to SMF for each PDU session
std::map<uint32_t, boost::shared_future<std::string>> curl_responses;
for (auto pdu_session : pdu_sessions_to_be_released) {
// Generate a promise and associate this promise to the curl handle
uint32_t promise_id = amf_app_inst->generate_promise_id();
Logger::amf_n2().debug("Promise ID generated %d", promise_id);
boost::shared_ptr<boost::promise<std::string>> p =
boost::make_shared<boost::promise<std::string>>();
boost::shared_future<std::string> f = p->get_future();
amf_app_inst->add_promise(promise_id, p);
curl_responses.emplace(pdu_session.pduSessionId, f);
Logger::amf_n2().debug(
"Sending ITTI to trigger PDUSessionUpdateSMContextRequest to SMF to "
"task TASK_AMF_SBI");
std::shared_ptr<itti_nsmf_pdusession_update_sm_context> itti_n11_msg =
std::make_shared<itti_nsmf_pdusession_update_sm_context>(
TASK_NGAP, TASK_AMF_SBI);
itti_n11_msg->pdu_session_id = pdu_session.pduSessionId;
// TODO:
itti_n11_msg->is_n2sm_set = false;
itti_n11_msg->amf_ue_ngap_id = amf_ue_ngap_id;
itti_n11_msg->ran_ue_ngap_id = ran_ue_ngap_id;
itti_n11_msg->promise_id = promise_id;
itti_n11_msg->up_cnx_state = "DEACTIVATED";
int ret = itti_inst->send_msg(itti_n11_msg);
if (0 != ret) {
Logger::ngap().error(
"Could not send ITTI message %s to task TASK_AMF_SBI",
itti_n11_msg->get_msg_name());
}
}
bool result = true;
while (!curl_responses.empty()) {
boost::future_status status;
// wait for timeout or ready
status = curl_responses.begin()->second.wait_for(
boost::chrono::milliseconds(FUTURE_STATUS_TIMEOUT_MS));
if (status == boost::future_status::ready) {
assert(curl_responses.begin()->second.is_ready());
assert(curl_responses.begin()->second.has_value());
assert(!curl_responses.begin()->second.has_exception());
// Wait for the result from APP and send reply to AMF
std::string pdu_session_id_str = curl_responses.begin()->second.get();
Logger::ngap().debug(
"Got result for PDU Session ID %d", curl_responses.begin()->first);
if (pdu_session_id_str.size() > 0) {
result = result && true;
} else {
result = false;
}
} else {
result = true;
}
curl_responses.erase(curl_responses.begin());
}
}
//------------------------------------------------------------------------------
......@@ -1683,10 +1767,10 @@ bool amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
Logger::amf_n2().debug(
"Sending ITTI to trigger PDUSessionUpdateSMContextRequest to SMF to "
"task TASK_AMF_N11");
"task TASK_AMF_SBI");
std::shared_ptr<itti_nsmf_pdusession_update_sm_context> itti_msg =
std::make_shared<itti_nsmf_pdusession_update_sm_context>(
TASK_NGAP, TASK_AMF_N11);
TASK_NGAP, TASK_AMF_SBI);
itti_msg->pdu_session_id = pduSessionIDValue;
itti_msg->n2sm =
......@@ -1701,7 +1785,7 @@ bool amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
int ret = itti_inst->send_msg(itti_msg);
if (0 != ret) {
Logger::ngap().error(
"Could not send ITTI message %s to task TASK_AMF_N11",
"Could not send ITTI message %s to task TASK_AMF_SBI",
itti_msg->get_msg_name());
}
}
......@@ -1844,10 +1928,10 @@ void amf_n2::handle_itti_message(itti_handover_request_Ack& itti_msg) {
Logger::amf_n2().debug(
"Sending ITTI to trigger PDUSessionUpdateSMContextRequest to SMF to "
"task TASK_AMF_N11");
"task TASK_AMF_SBI");
std::shared_ptr<itti_nsmf_pdusession_update_sm_context> itti_msg =
std::make_shared<itti_nsmf_pdusession_update_sm_context>(
TASK_NGAP, TASK_AMF_N11);
TASK_NGAP, TASK_AMF_SBI);
itti_msg->pdu_session_id = pdu_session_resource.pduSessionId;
itti_msg->n2sm = blk2bstr(
......@@ -1863,7 +1947,7 @@ void amf_n2::handle_itti_message(itti_handover_request_Ack& itti_msg) {
int ret = itti_inst->send_msg(itti_msg);
if (0 != ret) {
Logger::ngap().error(
"Could not send ITTI message %s to task TASK_AMF_N11",
"Could not send ITTI message %s to task TASK_AMF_SBI",
itti_msg->get_msg_name());
}
}
......@@ -2009,11 +2093,11 @@ void amf_n2::handle_itti_message(itti_handover_notify& itti_msg) {
Logger::amf_n2().debug(
"Sending ITTI to trigger PDUSessionUpdateSMContextRequest to SMF to "
"task TASK_AMF_N11");
"task TASK_AMF_SBI");
std::shared_ptr<itti_nsmf_pdusession_update_sm_context> itti_n11_msg =
std::make_shared<itti_nsmf_pdusession_update_sm_context>(
TASK_NGAP, TASK_AMF_N11);
TASK_NGAP, TASK_AMF_SBI);
itti_n11_msg->pdu_session_id = pdu_session.get()->pdu_session_id;
......@@ -2030,7 +2114,7 @@ void amf_n2::handle_itti_message(itti_handover_notify& itti_msg) {
int ret = itti_inst->send_msg(itti_n11_msg);
if (0 != ret) {
Logger::ngap().error(
"Could not send ITTI message %s to task TASK_AMF_N11",
"Could not send ITTI message %s to task TASK_AMF_SBI",
itti_n11_msg->get_msg_name());
}
}
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file amf_n2.hpp
\brief
\author Keliang DU (BUPT), Tien-Thinh NGUYEN (EURECOM)
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _AMF_N2_H_
#define _AMF_N2_H_
......
......@@ -19,14 +19,6 @@
* contact@openairinterface.org
*/
/*! \file amf_profile.cpp
\brief
\author Tien-Thinh NGUYEN
\company Eurecom
\date 2020
\email: Tien-Thinh.Nguyen@eurecom.fr
*/
#include "amf_profile.hpp"
#include <boost/algorithm/string/classification.hpp>
......
......@@ -19,14 +19,6 @@
* contact@openairinterface.org
*/
/*! \file amf_profile.hpp
\brief
\author Tien-Thinh NGUYEN
\company Eurecom
\date 2021
\email: Tien-Thinh.Nguyen@eurecom.fr
*/
#ifndef FILE_AMF_PROFILE_HPP_SEEN
#define FILE_AMF_PROFILE_HPP_SEEN
......
......@@ -19,36 +19,27 @@
* contact@openairinterface.org
*/
/*! \file amf_n11.hpp
\brief
\author Keliang DU (BUPT), Tien-Thinh NGUYEN (EURECOM)
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _AMF_N11_H_
#define _AMF_N11_H_
#ifndef _AMF_SBI_H_
#define _AMF_SBI_H_
#include <boost/algorithm/string.hpp>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/split.hpp>
#include <map>
#include <shared_mutex>
#include <string>
#include "AuthenticationInfo.h"
#include "UEAuthenticationCtx.h"
#include "itti_msg_n11.hpp"
#include "itti_msg_sbi.hpp"
#include "pdu_session_context.hpp"
#include <boost/algorithm/string.hpp>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/split.hpp>
namespace amf_application {
class amf_n11 {
class amf_sbi {
public:
amf_n11();
~amf_n11();
amf_sbi();
~amf_sbi();
/*
* Handle ITTI message (Nsmf_PDUSessionCreateSMContext) to create a new PDU
......@@ -90,34 +81,34 @@ class amf_n11 {
/*
* Handle ITTI message to get the Slice Selection Subscription Data from UDM
* @param [itti_n11_slice_selection_subscription_data&]: ITTI message
* @param [itti_sbi_slice_selection_subscription_data&]: ITTI message
* @return void
*/
void handle_itti_message(
itti_n11_slice_selection_subscription_data& itti_msg);
itti_sbi_slice_selection_subscription_data& itti_msg);
/*
* Handle ITTI message to get the Network Slice Selection Information from
* NSSF
* @param [itti_n11_network_slice_selection_information&]: ITTI message
* @param [itti_sbi_network_slice_selection_information&]: ITTI message
* @return void
*/
void handle_itti_message(
itti_n11_network_slice_selection_information& itti_msg);
itti_sbi_network_slice_selection_information& itti_msg);
/*
* Handle ITTI message to reroute N1 message to the targer AMF
* @param [itti_n11_n1_message_notify&]: ITTI message
* @param [itti_sbi_n1_message_notify&]: ITTI message
* @return void
*/
void handle_itti_message(itti_n11_n1_message_notify& itti_msg);
void handle_itti_message(itti_sbi_n1_message_notify& itti_msg);
/*
* Handle ITTI message to discover NF instance information from NRF
* @param [itti_n11_nf_instance_discovery&]: ITTI message
* @param [itti_sbi_nf_instance_discovery&]: ITTI message
* @return void
*/
void handle_itti_message(itti_n11_nf_instance_discovery& itti_msg);
void handle_itti_message(itti_sbi_nf_instance_discovery& itti_msg);
/*
* Handle request to create a new PDU Session
......@@ -151,25 +142,24 @@ class amf_n11 {
/*
* Handle ITTI message to register to NRF
* @param [itti_n11_register_nf_instance_request&]: ITTI message
* @param [itti_sbi_register_nf_instance_request&]: ITTI message
* @return void
*/
void register_nf_instance(
std::shared_ptr<itti_n11_register_nf_instance_request> msg);
std::shared_ptr<itti_sbi_register_nf_instance_request> msg);
/*
* Send the request to update PDU session context at SMF
* @param [const std::string&] supi: SUPI
* @param [std::shared_ptr<pdu_session_context>&] psc: Pointer to the PDU
* Session Context
* @param [const std::string&] smf_addr: SMF's Address
* @param [bstring] sm_msg: SM message
* @param [const std::string&] dnn: DNN
* @return void
*/
void send_pdu_session_update_sm_context_request(
const std::string& supi, std::shared_ptr<pdu_session_context>& psc,
const std::string& smf_addr, bstring sm_msg, const std::string& dnn);
bstring sm_msg, const std::string& dnn);
/*
* Select SMF from the configuration file
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file amf_statistics.cpp
\brief
\author Keliang DU (BUPT), Tien-Thinh NGUYEN (EURECOM)
\date 2020
\email: contact@openairinterface.org
*/
#include "amf_statistics.hpp"
#include "logger.hpp"
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file amf_statistics.hpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _STATISTICS_H_
#define _STATISTICS_H_
......
......@@ -19,17 +19,10 @@
* contact@openairinterface.org
*/
/*! \file amf_subscription.cpp
\brief
\author
\company
\date 2021
\email:
*/
#include "amf_subscription.hpp"
#include "logger.hpp"
#include "3gpp_conversions.hpp"
#include "logger.hpp"
using namespace amf_application;
......
......@@ -19,14 +19,6 @@
* contact@openairinterface.org
*/
/*! \file amf_subscription.hpp
\brief
\author Shivam Gandhi
\company KCL
\date 2021
\email: shivam.gandhi@kcl.ac.uk
*/
#include "3gpp_29.518.h"
#include "amf.hpp"
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file mysql_db.cpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#include "amf_config.hpp"
#include "amf_n1.hpp"
#include "logger.hpp"
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file mysql_db.hpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _MYSQL_DB_HANDLERS_H_
#define _MYSQL_DB_HANDLERS_H_
......
......@@ -19,12 +19,6 @@
* contact@openairinterface.org
*/
/*! \file 3gpp_23.003.h
\brief
\author Lionel Gauthier
\company Eurecom
\email: lionel.gauthier@eurecom.fr
*/
#ifndef FILE_3GPP_23_003_SEEN
#define FILE_3GPP_23_003_SEEN
......@@ -32,6 +26,12 @@
#include <string>
const uint32_t SD_NO_VALUE = 0xFFFFFF;
const uint8_t SST_MAX_STANDARDIZED_VALUE = 127;
const uint8_t SST_LENGTH = 1;
const uint8_t SD_LENGTH = 3;
typedef struct s_nssai // section 28.4, TS23.003
{
uint8_t sST;
......
......@@ -137,4 +137,8 @@ static const std::vector<std::string> n2_sm_info_type_e2str = {
"HANDOVER_REQ_ACK", "HANDOVER_RES_ALLOC_FAIL",
"SECONDARY_RAT_USAGE"};
#define NSMF_PDU_SESSION_CREATE "/sm-contexts"
#define NSMF_PDU_SESSION_MODIFY "/modify"
#define NSMF_PDU_SESSION_RELEASE "/release"
#endif
......@@ -19,12 +19,6 @@
* contact@openairinterface.org
*/
/*! \file 3gpp_29.503.h
\brief
\author Tien Thinh NGUYEN
\company Eurecom
\email: tien-thinh.nguyen@eurecom.fr
*/
#ifndef FILE_3GPP_29_503_SEEN
#define FILE_3GPP_29_503_SEEN
......@@ -32,6 +26,7 @@
#include <string>
#include <vector>
#include "3gpp_23.003.h"
typedef struct nssai_s {
......
......@@ -22,9 +22,10 @@
#ifndef FILE_3GPP_29_518_SEEN
#define FILE_3GPP_29_518_SEEN
#include "amf.hpp"
#include <vector>
#include "amf.hpp"
typedef enum amf_event_type_e {
AMF_EVENT_UNKNOWN = 0,
LOCATION_REPORT = 1,
......
......@@ -19,19 +19,13 @@
* contact@openairinterface.org
*/
/*! \file amf.hpp
\brief
\date 2020
\email: contact@openairinterface.org
*/
#ifndef __AMF_HPP
#define __AMF_HPP
#include "3gpp_23.003.h"
#include "string.h"
#include "inttypes.h"
#include "stdio.h"
#include "string.h"
// for CURL
constexpr auto CURL_MIME_BOUNDARY = "----Boundary";
......@@ -69,9 +63,6 @@ constexpr uint64_t SECONDS_SINCE_FIRST_EPOCH = 2208988800;
#define NAS_MESSAGE_DOWNLINK 1
#define NAS_MESSAGE_UPLINK 0
const uint32_t SD_NO_VALUE = 0xFFFFFF;
const uint8_t SST_MAX_STANDARDIZED_VALUE = 127;
typedef enum {
PlainNasMsg = 0x0,
IntegrityProtected = 0x1,
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file comUt.cpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#include "comUt.hpp"
#include "logger.hpp"
......@@ -36,7 +29,7 @@ void comUt::print_buffer(
if (!app.compare("amf_app")) Logger::amf_app().debug(commit.c_str());
if (!app.compare("amf_n1")) Logger::amf_n1().debug(commit.c_str());
if (!app.compare("amf_server")) Logger::amf_server().debug(commit.c_str());
if (!app.compare("amf_n11")) Logger::amf_n11().debug(commit.c_str());
if (!app.compare("amf_sbi")) Logger::amf_sbi().debug(commit.c_str());
#if DEBUG_IS_ON
for (int i = 0; i < len; i++) printf("%x ", buf[i]);
printf("\n");
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file comUt.hpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _PRINT_BUFFER_H
#define _PRINT_BUFFER_H
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file common_defs.h
\brief
\author Sebastien ROUX, Lionel Gauthier
\company Eurecom
\email: lionel.gauthier@eurecom.fr
*/
#ifndef FILE_COMMON_DEFS_SEEN
#define FILE_COMMON_DEFS_SEEN
......
......@@ -19,24 +19,20 @@
* contact@openairinterface.org
*/
/*! \file conversions.cpp
\brief
\author Sebastien ROUX
\company Eurecom
*/
#include "conversions.hpp"
#include "amf.hpp"
#include "logger.hpp"
#include <arpa/inet.h>
#include <ctype.h>
#include <inttypes.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include <boost/algorithm/string.hpp>
#include "amf.hpp"
#include "logger.hpp"
static const char hex_to_ascii_table[16] = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
......
......@@ -19,27 +19,20 @@
* contact@openairinterface.org
*/
/*! \file conversions.hpp
\brief
\author Sebastien ROUX, Lionel Gauthier
\company Eurecom
\email: lionel.gauthier@eurecom.fr
*/
#ifndef FILE_CONVERSIONS_HPP_SEEN
#define FILE_CONVERSIONS_HPP_SEEN
#include <netinet/in.h>
#include <stdint.h>
#include <string>
#include <iostream>
#include <string>
#include "bstrlib.h"
extern "C" {
#include "dynamic_memory_check.h"
#include "OCTET_STRING.h"
#include "dynamic_memory_check.h"
}
/* Used to format an uint32_t containing an ipv4 address */
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file endpoint.hpp
\brief
\author Lionel Gauthier
\company Eurecom
\email: lionel.gauthier@eurecom.fr
*/
#ifndef FILE_ENDPOINT_HPP_SEEN
#define FILE_ENDPOINT_HPP_SEEN
......
......@@ -19,12 +19,6 @@
* contact@openairinterface.org
*/
/*! \file logger.cpp
\brief
\date 2020
\email: contact@openairinterface.org
*/
#include "logger.hpp"
#include <iostream>
......@@ -76,8 +70,8 @@ void Logger::_init(
m_itti = new _Logger("itti ", m_sinks, ss.str().c_str());
m_amf_n2 = new _Logger("amf_n2 ", m_sinks, ss.str().c_str());
m_amf_n1 = new _Logger("amf_n1 ", m_sinks, ss.str().c_str());
m_amf_n11 = new _Logger("amf_n11", m_sinks, ss.str().c_str());
m_amf_server = new _Logger("amf_sbi", m_sinks, ss.str().c_str());
m_amf_sbi = new _Logger("amf_sbi", m_sinks, ss.str().c_str());
m_amf_server = new _Logger("amf_server", m_sinks, ss.str().c_str());
}
//------------------------------------------------------------------------------
......
......@@ -19,12 +19,6 @@
* contact@openairinterface.org
*/
/*! \file logger.hpp
\brief
\date 2020
\email: contact@openairinterface.org
*/
#ifndef __LOGGER_H
#define __LOGGER_H
......@@ -92,7 +86,7 @@ class Logger {
static _Logger& itti() { return *singleton().m_itti; }
static _Logger& amf_n2() { return *singleton().m_amf_n2; }
static _Logger& amf_n1() { return *singleton().m_amf_n1; }
static _Logger& amf_n11() { return *singleton().m_amf_n11; }
static _Logger& amf_sbi() { return *singleton().m_amf_sbi; }
static _Logger& amf_server() { return *singleton().m_amf_server; }
private:
......@@ -121,7 +115,7 @@ class Logger {
_Logger* m_itti;
_Logger* m_amf_n2;
_Logger* m_amf_n1;
_Logger* m_amf_n11;
_Logger* m_amf_sbi;
_Logger* m_amf_server;
};
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file gNB_context.hpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _GNB_CONTEXT_H_
#define _GNB_CONTEXT_H_
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file nas_context.cpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#include "nas_context.hpp"
//------------------------------------------------------------------------------
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file nas_context.hpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _AMF_NAS_CONTEXT_H_
#define _AMF_NAS_CONTEXT_H_
......@@ -34,10 +27,10 @@
#include <string>
#include "authentication_algorithms_with_5gaka.hpp"
#include "itti.hpp"
#include "nas_security_context.hpp"
#include "security_def.hpp"
#include "struct.hpp"
#include "itti.hpp"
typedef enum {
_5GMM_STATE_MIN = 0,
......@@ -59,8 +52,8 @@ static const std::vector<std::string> _5gmm_state_e2str = {
typedef enum { CM_IDLE = 0, CM_CONNECTED } cm_state_t;
static const std::vector<std::string> cm_state_e2str = {"CM_IDLE",
"CM_CONNECTED"};
static const std::vector<std::string> cm_state_e2str = {
"CM_IDLE", "CM_CONNECTED"};
typedef enum {
DEREGISTERED = 0,
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file nas_security_context.hpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _NAS_SECURITY_CONTEXT_H_
#define _NAS_SECURITY_CONTEXT_H_
......
......@@ -19,18 +19,10 @@
* contact@openairinterface.org
*/
/*! \file pdu_session_context.cpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#include "pdu_session_context.hpp"
//------------------------------------------------------------------------------
pdu_session_context::pdu_session_context() {
smf_available = false;
isn2sm_avaliable = false;
isn1sm_avaliable = false;
ran_ue_ngap_id = 0;
......@@ -40,11 +32,14 @@ pdu_session_context::pdu_session_context() {
// bstring n2sm;
isn2sm_avaliable = false;
// bstring n1sm;
isn1sm_avaliable = false;
smf_available = false;
snssai = {};
plmn = {};
is_ho_accepted = false;
isn1sm_avaliable = false;
smf_info.info_available = false;
smf_info.addr = {};
smf_info.api_version = "v1";
smf_info.port = "80";
snssai = {};
plmn = {};
is_ho_accepted = false;
}
//------------------------------------------------------------------------------
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file pdu_session_context.hpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _PDU_SESSION_CONTEXT_H_
#define _PDU_SESSION_CONTEXT_H_
......@@ -34,6 +27,14 @@
#include "amf.hpp"
#include "bstrlib.h"
typedef struct smf_context_info_s {
bool info_available;
std::string addr;
std::string port;
std::string api_version;
std::string context_location;
} smf_context_info_t;
class pdu_session_context {
public:
pdu_session_context();
......@@ -48,14 +49,10 @@ class pdu_session_context {
bstring n1sm;
bool isn1sm_avaliable;
std::string dnn;
std::string smf_addr;
std::string smf_port;
std::string smf_api_version;
bool smf_available;
std::string location;
smf_context_info_t smf_info;
snssai_t snssai;
plmn_t plmn;
std::string smf_context_location;
bool is_ho_accepted;
};
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file security_def.hpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _SECURITY_DEF_H_
#define _SECURITY_DEF_H_
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file ue_context.hpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _UE_CONTEXT_H_
#define _UE_CONTEXT_H_
......@@ -69,8 +62,7 @@ class ue_context {
Tai_t tai;
std::string supi;
uint32_t tmsi;
// pdu session id <-> pdu_session_contex: map stores all pdu sessions for this
// UE
// pdu session id <-> pdu_session_contex
std::map<std::uint8_t, std::shared_ptr<pdu_session_context>> pdu_sessions;
mutable std::shared_mutex m_pdu_session;
};
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file ue_ngap_context.hpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _UE_NGAP_CONTEXT_H_
#define _UE_NGAP_CONTEXT_H_
......@@ -33,8 +26,8 @@
#include <map>
#include "gNB_context.hpp"
#include "amf.hpp"
#include "gNB_context.hpp"
using namespace sctp;
typedef enum {
......
......@@ -18,12 +18,7 @@
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file itti.cpp
\brief
\author Lionel GAUTHIER
\date 2018
\email: lionel.gauthier@eurecom.fr
*/
#include "itti.hpp"
#include <signal.h>
......
......@@ -18,12 +18,7 @@
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file itti.hpp
\brief
\author Lionel GAUTHIER
\date 2018
\email: lionel.gauthier@eurecom.fr
*/
#ifndef SRC_OAI_ITTI_ITTI_HPP_INCLUDED_
#define SRC_OAI_ITTI_ITTI_HPP_INCLUDED_
......
......@@ -19,12 +19,6 @@
* contact@openairinterface.org
*/
/*! \file itti_msg.cpp
\brief
\author Lionel GAUTHIER
\date 2018
\email: lionel.gauthier@eurecom.fr
*/
#include "itti_msg.hpp"
#include "itti.hpp"
......
......@@ -18,12 +18,7 @@
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file itti_msg.hpp
\brief
\author Lionel GAUTHIER
\date 2018
\email: lionel.gauthier@eurecom.fr
*/
#ifndef SRC_ITTI_ITTI_MSG_HPP_INCLUDED_
#define SRC_ITTI_ITTI_MSG_HPP_INCLUDED_
......@@ -38,7 +33,6 @@ typedef enum {
TASK_NGAP,
TASK_AMF_N2,
TASK_AMF_N1,
TASK_AMF_N11,
TASK_AMF_APP,
TASK_AMF_SBI,
AMF_SERVER,
......@@ -85,15 +79,15 @@ typedef enum {
REROUTE_NAS_REQ,
NSMF_PDU_SESSION_CREATE_SM_CTX,
NSMF_PDU_SESSION_UPDATE_SM_CTX,
N11_REGISTER_NF_INSTANCE_REQUEST,
N11_REGISTER_NF_INSTANCE_RESPONSE,
N11_UPDATE_NF_INSTANCE_REQUEST,
N11_UPDATE_NF_INSTANCE_RESPONSE,
N11_DEREGISTER_NF_INSTANCE,
N11_SLICE_SELECTION_SUBSCRIPTION_DATA,
N11_NETWORK_SLICE_SELECTION_INFORMATION,
N11_NF_INSTANCE_DISCOVERY,
N11_N1_MESSAGE_NOTIFY,
SBI_N1_MESSAGE_NOTIFY,
SBI_REGISTER_NF_INSTANCE_REQUEST,
SBI_REGISTER_NF_INSTANCE_RESPONSE,
SBI_UPDATE_NF_INSTANCE_REQUEST,
SBI_UPDATE_NF_INSTANCE_RESPONSE,
SBI_DEREGISTER_NF_INSTANCE,
SBI_SLICE_SELECTION_SUBSCRIPTION_DATA,
SBI_NETWORK_SLICE_SELECTION_INFORMATION,
SBI_NF_INSTANCE_DISCOVERY,
SBI_AMF_CONFIGURATION,
SBI_UPDATE_AMF_CONFIGURATION,
SBI_EVENT_EXPOSURE_REQUEST,
......@@ -102,7 +96,7 @@ typedef enum {
SBI_N1_MESSAGE_NOTIFICATION,
SBI_N1N2_MESSAGE_SUBSCRIBE,
SBI_N1N2_MESSAGE_UNSUBSCRIBE,
HANDOVER_REQUIRED,
HANDOVER_REQUIRED_MSG,
HANDOVER_REQUEST_ACK,
HANDOVER_NOTIFY,
UPLINK_RAN_STATUS_TRANSFER,
......
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this
* file except in compliance with the License. You may obtain a copy of the
* License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _ITTI_N11_MSG_H_
#define _ITTI_N11_MSG_H_
#include <string>
#include "amf.hpp"
#include "amf_profile.hpp"
#include "bstrlib.h"
#include "itti_msg.hpp"
#include "SliceInfoForRegistration.h"
class itti_msg_n11 : public itti_msg {
public:
itti_msg_n11(
const itti_msg_type_t msg_type, const task_id_t origin,
const task_id_t destination)
: itti_msg(msg_type, origin, destination) {}
itti_msg_n11(const itti_msg_n11& i) : itti_msg(i) {
ran_ue_ngap_id = i.ran_ue_ngap_id;
amf_ue_ngap_id = i.amf_ue_ngap_id;
}
public:
long amf_ue_ngap_id;
uint32_t ran_ue_ngap_id;
};
class itti_nsmf_pdusession_create_sm_context : public itti_msg_n11 {
public:
itti_nsmf_pdusession_create_sm_context(
const task_id_t origin, const task_id_t destination)
: itti_msg_n11(NSMF_PDU_SESSION_CREATE_SM_CTX, origin, destination) {}
itti_nsmf_pdusession_create_sm_context(
const itti_nsmf_pdusession_create_sm_context& i)
: itti_msg_n11(i) {}
public:
uint8_t req_type;
uint8_t pdu_sess_id;
bstring dnn;
bstring sm_msg;
snssai_t snssai;
plmn_t plmn;
};
class itti_pdu_session_resource_setup_response : public itti_msg_n11 {
public:
itti_pdu_session_resource_setup_response(
const task_id_t origin, const task_id_t destination)
: itti_msg_n11(PDU_SESSION_RESOURCE_SETUP_RESPONSE, origin, destination) {
}
itti_pdu_session_resource_setup_response(
const itti_pdu_session_resource_setup_response& i)
: itti_msg_n11(i) {}
public:
uint8_t pdu_session_id;
bstring n2sm;
};
class itti_nsmf_pdusession_update_sm_context : public itti_msg_n11 {
public:
itti_nsmf_pdusession_update_sm_context(
const task_id_t origin, const task_id_t destination)
: itti_msg_n11(NSMF_PDU_SESSION_UPDATE_SM_CTX, origin, destination) {
is_n2sm_set = false;
promise_id = 0;
}
itti_nsmf_pdusession_update_sm_context(
const itti_nsmf_pdusession_update_sm_context& i)
: itti_msg_n11(i) {
pdu_session_id = i.pdu_session_id;
n2sm = i.n2sm;
is_n2sm_set = i.is_n2sm_set;
n2sm_info_type = i.n2sm_info_type;
promise_id = i.promise_id;
}
public:
std::string supi;
uint8_t pdu_session_id;
bstring n2sm;
bool is_n2sm_set;
std::string n2sm_info_type;
uint32_t ran_ue_ngap_id;
long amf_ue_ngap_id;
uint32_t promise_id;
std::string ho_state;
};
class itti_nsmf_pdusession_release_sm_context : public itti_msg_n11 {
public:
itti_nsmf_pdusession_release_sm_context(
const task_id_t origin, const task_id_t destination)
: itti_msg_n11(NSMF_PDU_SESSION_RELEASE_SM_CTX, origin, destination) {}
itti_nsmf_pdusession_release_sm_context(
const itti_nsmf_pdusession_release_sm_context& i)
: itti_msg_n11(i) {
supi = i.supi;
pdu_session_id = i.pdu_session_id;
promise_id = i.promise_id;
context_location = i.context_location;
}
public:
std::string supi;
uint8_t pdu_session_id;
uint32_t promise_id;
std::string context_location;
};
//-----------------------------------------------------------------------------
class itti_n11_register_nf_instance_request : public itti_msg_n11 {
public:
itti_n11_register_nf_instance_request(
const task_id_t orig, const task_id_t dest)
: itti_msg_n11(N11_REGISTER_NF_INSTANCE_REQUEST, orig, dest),
http_version(1) {}
const char* get_msg_name() { return "N11_REGISTER_NF_INSTANCE_REQUEST"; };
amf_application::amf_profile profile;
uint8_t http_version;
};
//-----------------------------------------------------------------------------
class itti_n11_register_nf_instance_response : public itti_msg_n11 {
public:
itti_n11_register_nf_instance_response(
const task_id_t orig, const task_id_t dest)
: itti_msg_n11(N11_REGISTER_NF_INSTANCE_RESPONSE, orig, dest),
http_version(1) {}
const char* get_msg_name() { return "N11_REGISTER_NF_INSTANCE_RESPONSE"; };
amf_application::amf_profile profile;
uint8_t http_version;
uint8_t http_response_code;
};
//-----------------------------------------------------------------------------
class itti_n11_update_nf_instance_request : public itti_msg_n11 {
public:
itti_n11_update_nf_instance_request(
const task_id_t orig, const task_id_t dest)
: itti_msg_n11(N11_UPDATE_NF_INSTANCE_REQUEST, orig, dest),
http_version(1) {}
const char* get_msg_name() { return "N11_UPDATE_NF_INSTANCE_REQUEST"; };
// std::vector<oai::amf::model::PatchItem> patch_items;
uint8_t http_version;
std::string smf_instance_id;
};
//-----------------------------------------------------------------------------
class itti_n11_update_nf_instance_response : public itti_msg_n11 {
public:
itti_n11_update_nf_instance_response(
const task_id_t orig, const task_id_t dest)
: itti_msg_n11(N11_UPDATE_NF_INSTANCE_RESPONSE, orig, dest),
http_version(1) {}
const char* get_msg_name() { return "N11_UPDATE_NF_INSTANCE_RESPONSE"; };
uint8_t http_version;
std::string amf_instance_id;
uint8_t http_response_code;
};
//-----------------------------------------------------------------------------
class itti_n11_deregister_nf_instance : public itti_msg_n11 {
public:
itti_n11_deregister_nf_instance(const task_id_t orig, const task_id_t dest)
: itti_msg_n11(N11_DEREGISTER_NF_INSTANCE, orig, dest), http_version(1) {}
const char* get_msg_name() { return "N11_DEREGISTER_NF_INSTANCE"; };
uint8_t http_version;
std::string amf_instance_id;
};
//-----------------------------------------------------------------------------
class itti_n11_slice_selection_subscription_data : public itti_msg_n11 {
public:
itti_n11_slice_selection_subscription_data(
const task_id_t orig, const task_id_t dest)
: itti_msg_n11(N11_SLICE_SELECTION_SUBSCRIPTION_DATA, orig, dest),
http_version(1) {}
const char* get_msg_name() {
return "N11_SLICE_SELECTION_SUBSCRIPTION_DATA";
};
uint8_t http_version;
std::string supi;
plmn_t plmn;
uint32_t promise_id;
};
//-----------------------------------------------------------------------------
class itti_n11_network_slice_selection_information : public itti_msg_n11 {
public:
itti_n11_network_slice_selection_information(
const task_id_t orig, const task_id_t dest)
: itti_msg_n11(N11_NETWORK_SLICE_SELECTION_INFORMATION, orig, dest),
http_version(1) {}
const char* get_msg_name() {
return "N11_NETWORK_SLICE_SELECTION_INFORMATION";
};
uint8_t http_version;
std::string nf_instance_id;
oai::amf::model::SliceInfoForRegistration slice_info;
// plmn_t plmn;
tai_t tai;
uint32_t promise_id;
};
//-----------------------------------------------------------------------------
class itti_n11_nf_instance_discovery : public itti_msg_n11 {
public:
itti_n11_nf_instance_discovery(const task_id_t orig, const task_id_t dest)
: itti_msg_n11(N11_NF_INSTANCE_DISCOVERY, orig, dest),
target_amf_set_is_set(false),
http_version(1) {}
const char* get_msg_name() { return "N11_NF_INSTANCE_DISCOVERY"; };
uint8_t http_version;
std::string target_amf_set;
bool target_amf_set_is_set;
std::string target_nf_type;
std::string nrf_amf_set;
uint32_t promise_id;
};
//-----------------------------------------------------------------------------
class itti_n11_n1_message_notify : public itti_msg_n11 {
public:
itti_n11_n1_message_notify(const task_id_t orig, const task_id_t dest)
: itti_msg_n11(N11_N1_MESSAGE_NOTIFY, orig, dest), http_version(1) {}
const char* get_msg_name() { return "N11_N1_MESSAGE_NOTIFY"; };
uint8_t http_version;
std::string target_amf_uri;
std::string supi;
bstring registration_request;
};
#endif
......@@ -28,8 +28,8 @@
#include "InitialUEMessage.hpp"
#include "NGReset.hpp"
#include "NGSetupRequest.hpp"
#include "UEContextReleaseRequest.hpp"
#include "UEContextReleaseComplete.hpp"
#include "UEContextReleaseRequest.hpp"
#include "UERadioCapabilityInfoIndication.hpp"
#include "UplinkNASTransport.hpp"
#include "UplinkRANStatusTransfer.hpp"
......@@ -246,7 +246,7 @@ class itti_ue_radio_capability_indication : public itti_msg_n2 {
class itti_handover_required : public itti_msg_n2 {
public:
itti_handover_required(const task_id_t origin, const task_id_t destination)
: itti_msg_n2(HANDOVER_REQUIRED, origin, destination) {
: itti_msg_n2(HANDOVER_REQUIRED_MSG, origin, destination) {
handoverReq = nullptr;
}
itti_handover_required(const itti_handover_required& i) : itti_msg_n2(i) {}
......
......@@ -19,26 +19,134 @@
* contact@openairinterface.org
*/
/*
* itti_msg_sbi.hpp
*
* Date: 2021
* Company KCL
* Author: shivam.gandhi@kcl.ac.uk
*/
#ifndef ITTI_MSG_SBI_HPP_INCLUDED_
#define ITTI_MSG_SBI_HPP_INCLUDED_
#include "itti_msg.hpp"
#include "pistache/http.h"
#include "amf_msg.hpp"
#include "N1MessageNotification.h"
#include "SliceInfoForRegistration.h"
#include "UeN1N2InfoSubscriptionCreateData.h"
#include "amf.hpp"
#include "amf_msg.hpp"
#include "amf_profile.hpp"
#include "bstrlib.h"
#include "itti_msg.hpp"
#include "pistache/http.h"
// using namespace oai::amf::model;
using namespace amf_application;
class itti_msg_n11 : public itti_msg {
public:
itti_msg_n11(
const itti_msg_type_t msg_type, const task_id_t origin,
const task_id_t destination)
: itti_msg(msg_type, origin, destination) {}
itti_msg_n11(const itti_msg_n11& i) : itti_msg(i) {
ran_ue_ngap_id = i.ran_ue_ngap_id;
amf_ue_ngap_id = i.amf_ue_ngap_id;
}
public:
long amf_ue_ngap_id;
uint32_t ran_ue_ngap_id;
};
class itti_nsmf_pdusession_create_sm_context : public itti_msg_n11 {
public:
itti_nsmf_pdusession_create_sm_context(
const task_id_t origin, const task_id_t destination)
: itti_msg_n11(NSMF_PDU_SESSION_CREATE_SM_CTX, origin, destination) {}
itti_nsmf_pdusession_create_sm_context(
const itti_nsmf_pdusession_create_sm_context& i)
: itti_msg_n11(i) {}
public:
uint8_t req_type;
uint8_t pdu_sess_id;
bstring dnn;
bstring sm_msg;
snssai_t snssai;
plmn_t plmn;
};
class itti_pdu_session_resource_setup_response : public itti_msg_n11 {
public:
itti_pdu_session_resource_setup_response(
const task_id_t origin, const task_id_t destination)
: itti_msg_n11(PDU_SESSION_RESOURCE_SETUP_RESPONSE, origin, destination) {
}
itti_pdu_session_resource_setup_response(
const itti_pdu_session_resource_setup_response& i)
: itti_msg_n11(i) {}
public:
uint8_t pdu_session_id;
bstring n2sm;
};
class itti_nsmf_pdusession_update_sm_context : public itti_msg_n11 {
public:
itti_nsmf_pdusession_update_sm_context(
const task_id_t origin, const task_id_t destination)
: itti_msg_n11(NSMF_PDU_SESSION_UPDATE_SM_CTX, origin, destination) {
supi = {};
pdu_session_id = 0;
// n2sm = {};
is_n2sm_set = false;
n2sm_info_type = {};
ran_ue_ngap_id = 0;
amf_ue_ngap_id = 0;
promise_id = 0;
ho_state = {};
up_cnx_state = {};
}
itti_nsmf_pdusession_update_sm_context(
const itti_nsmf_pdusession_update_sm_context& i)
: itti_msg_n11(i) {
supi = i.supi;
pdu_session_id = i.pdu_session_id;
n2sm = i.n2sm;
is_n2sm_set = i.is_n2sm_set;
n2sm_info_type = i.n2sm_info_type;
promise_id = i.promise_id;
ho_state = i.ho_state;
up_cnx_state = i.up_cnx_state;
}
public:
std::string supi;
uint8_t pdu_session_id;
bstring n2sm;
bool is_n2sm_set;
std::string n2sm_info_type;
// uint32_t ran_ue_ngap_id;
// long amf_ue_ngap_id;
uint32_t promise_id;
std::string ho_state;
std::string up_cnx_state;
};
class itti_nsmf_pdusession_release_sm_context : public itti_msg_n11 {
public:
itti_nsmf_pdusession_release_sm_context(
const task_id_t origin, const task_id_t destination)
: itti_msg_n11(NSMF_PDU_SESSION_RELEASE_SM_CTX, origin, destination) {}
itti_nsmf_pdusession_release_sm_context(
const itti_nsmf_pdusession_release_sm_context& i)
: itti_msg_n11(i) {
supi = i.supi;
pdu_session_id = i.pdu_session_id;
promise_id = i.promise_id;
context_location = i.context_location;
}
public:
std::string supi;
uint8_t pdu_session_id;
uint32_t promise_id;
std::string context_location;
};
class itti_sbi_msg : public itti_msg {
public:
itti_sbi_msg(
......@@ -54,6 +162,138 @@ class itti_sbi_msg : public itti_msg {
}
};
//-----------------------------------------------------------------------------
class itti_sbi_register_nf_instance_request : public itti_sbi_msg {
public:
itti_sbi_register_nf_instance_request(
const task_id_t orig, const task_id_t dest)
: itti_sbi_msg(SBI_REGISTER_NF_INSTANCE_REQUEST, orig, dest),
http_version(1) {}
const char* get_msg_name() { return "SBI_REGISTER_NF_INSTANCE_REQUEST"; };
amf_application::amf_profile profile;
uint8_t http_version;
};
//-----------------------------------------------------------------------------
class itti_sbi_register_nf_instance_response : public itti_sbi_msg {
public:
itti_sbi_register_nf_instance_response(
const task_id_t orig, const task_id_t dest)
: itti_sbi_msg(SBI_REGISTER_NF_INSTANCE_RESPONSE, orig, dest),
http_version(1) {}
const char* get_msg_name() { return "SBI_REGISTER_NF_INSTANCE_RESPONSE"; };
amf_application::amf_profile profile;
uint8_t http_version;
uint8_t http_response_code;
};
//-----------------------------------------------------------------------------
class itti_sbi_update_nf_instance_request : public itti_sbi_msg {
public:
itti_sbi_update_nf_instance_request(
const task_id_t orig, const task_id_t dest)
: itti_sbi_msg(SBI_UPDATE_NF_INSTANCE_REQUEST, orig, dest),
http_version(1) {}
const char* get_msg_name() { return "SBI_UPDATE_NF_INSTANCE_REQUEST"; };
// std::vector<oai::amf::model::PatchItem> patch_items;
uint8_t http_version;
std::string smf_instance_id;
};
//-----------------------------------------------------------------------------
class itti_sbi_update_nf_instance_response : public itti_sbi_msg {
public:
itti_sbi_update_nf_instance_response(
const task_id_t orig, const task_id_t dest)
: itti_sbi_msg(SBI_UPDATE_NF_INSTANCE_RESPONSE, orig, dest),
http_version(1) {}
const char* get_msg_name() { return "SBI_UPDATE_NF_INSTANCE_RESPONSE"; };
uint8_t http_version;
std::string amf_instance_id;
uint8_t http_response_code;
};
//-----------------------------------------------------------------------------
class itti_sbi_deregister_nf_instance : public itti_sbi_msg {
public:
itti_sbi_deregister_nf_instance(const task_id_t orig, const task_id_t dest)
: itti_sbi_msg(SBI_DEREGISTER_NF_INSTANCE, orig, dest), http_version(1) {}
const char* get_msg_name() { return "SBI_DEREGISTER_NF_INSTANCE"; };
uint8_t http_version;
std::string amf_instance_id;
};
//-----------------------------------------------------------------------------
class itti_sbi_slice_selection_subscription_data : public itti_sbi_msg {
public:
itti_sbi_slice_selection_subscription_data(
const task_id_t orig, const task_id_t dest)
: itti_sbi_msg(SBI_SLICE_SELECTION_SUBSCRIPTION_DATA, orig, dest),
http_version(1) {}
const char* get_msg_name() {
return "SBI_SLICE_SELECTION_SUBSCRIPTION_DATA";
};
uint8_t http_version;
std::string supi;
plmn_t plmn;
uint32_t promise_id;
};
//-----------------------------------------------------------------------------
class itti_sbi_network_slice_selection_information : public itti_sbi_msg {
public:
itti_sbi_network_slice_selection_information(
const task_id_t orig, const task_id_t dest)
: itti_sbi_msg(SBI_NETWORK_SLICE_SELECTION_INFORMATION, orig, dest),
http_version(1) {}
const char* get_msg_name() {
return "SBI_NETWORK_SLICE_SELECTION_INFORMATION";
};
uint8_t http_version;
std::string nf_instance_id;
oai::amf::model::SliceInfoForRegistration slice_info;
// plmn_t plmn;
tai_t tai;
uint32_t promise_id;
};
//-----------------------------------------------------------------------------
class itti_sbi_nf_instance_discovery : public itti_sbi_msg {
public:
itti_sbi_nf_instance_discovery(const task_id_t orig, const task_id_t dest)
: itti_sbi_msg(SBI_NF_INSTANCE_DISCOVERY, orig, dest),
target_amf_set_is_set(false),
http_version(1) {}
const char* get_msg_name() { return "SBI_NF_INSTANCE_DISCOVERY"; };
uint8_t http_version;
std::string target_amf_set;
bool target_amf_set_is_set;
std::string target_nf_type;
std::string nrf_amf_set;
uint32_t promise_id;
};
//-----------------------------------------------------------------------------
class itti_sbi_n1_message_notify : public itti_sbi_msg {
public:
itti_sbi_n1_message_notify(const task_id_t orig, const task_id_t dest)
: itti_sbi_msg(SBI_N1_MESSAGE_NOTIFY, orig, dest), http_version(1) {}
const char* get_msg_name() { return "SBI_N1_MESSAGE_NOTIFY"; };
uint8_t http_version;
std::string target_amf_uri;
std::string supi;
bstring registration_request;
};
//-----------------------------------------------------------------------------
class itti_sbi_event_exposure_request : public itti_sbi_msg {
public:
......
#NAS Library - CODEOWNERS
Philippe MOREL
Sebastien ROUX
Lionel GAUTHIER
Keliang DU, BUPT
Tien Thinh NGUYEN, Eurecom
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file 3gpp_ts24501.hpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#ifndef _3GPP_TS_24501_H_
#define _3GPP_TS_24501_H_
......@@ -188,4 +181,6 @@ static const std::vector<std::string> nas_ciphering_algorithm_list_e2str = {
#define PDU_SESSION_RELEASE_COMMAND 0b11010011
#define PDU_SESSION_RELEASE_COMPLETE 0b11010100
#define DEREGISTRATION_TYPE_MASK 0b00001000
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this
* file except in compliance with the License. You may obtain a copy of the
* License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#pragma once
constexpr uint8_t kIeIsOptional = true;
constexpr uint8_t kIeIsNotOptional = false;
constexpr uint8_t kIei5gmmCause = 0x58;
constexpr uint8_t kIei5gsmCapability = 0x28;
constexpr uint8_t kIei5gsDrxParameters = 0x51;
constexpr uint8_t kIei5gsmCongestionReAttemptIndicator = 0x61;
constexpr uint8_t kIei5gsmNetworkFeatureSupport = 0x17;
constexpr uint8_t kIei5gsMobileIdentityImeiSv = 0x77;
constexpr uint8_t kIei5gsMobileIdentityNonImeiSvPei = 0x78;
constexpr uint8_t kIei5gsRegistrationResult = 0x44;
constexpr uint8_t kIei5gsTrackingAreaIdentity = 0x52;
constexpr uint8_t kIei5gsTrackingAreaIdentityList = 0x54;
constexpr uint8_t kIei5gsUpdateType = 0x53;
constexpr uint8_t kIeiAdditionalInformation = 0x24;
constexpr uint8_t kIeiAllowedSscMode = 0x0f;
constexpr uint8_t kIeiAlwaysOnPduSessionIndication = 0x08;
constexpr uint8_t kIeiAlwaysOnPduSessionRequested = 0x0b;
constexpr uint8_t kIeiAtsssContainer = 0x77;
constexpr uint8_t kIeiAuthorizedQosFlowDescriptions = 0x79;
constexpr uint8_t kIeiAuthorizedQosRules = 0x7a;
constexpr uint8_t kIeiBackOffTimerValue = 0x37;
constexpr uint8_t kIeiControlPlaneOnlyIndication = 0x0c;
constexpr uint8_t kIeiDnn = 0x25;
constexpr uint8_t kIeiDsTtEthernetPortMacAddress = 0x6e;
constexpr uint8_t kIeiEapMessage = 0x78;
constexpr uint8_t kIeiEthernetHeaderCompressionConfiguration = 0x1f;
constexpr uint8_t kIeiExtendedDrxParameters = 0x6e;
constexpr uint8_t kIeiExtendedProtocolConfigurationOptions = 0x7b;
constexpr uint8_t kIeiIntegrityProtectionMaximumDataRate = 0x13;
constexpr uint8_t kIeiIpHeaderCompressionConfiguration = 0x66;
constexpr uint8_t kIeiMaPduSessionInformation = 0xa0;
constexpr uint8_t kIeiMappedEpsBearerContexts = 0x75;
constexpr uint8_t kIeiMaximumNumberOfSupportedPacketFilters = 0x55;
constexpr uint8_t kIeiNbN1ModeDrxParameters = 0x29;
constexpr uint8_t kIeiNSSAIAllowed = 0x15;
constexpr uint8_t kIeiNSSAIConfigured = 0x31;
constexpr uint8_t kIeiNSSAIPending = 0x39;
constexpr uint8_t kIeiOldPduSessionId = 0x59;
constexpr uint8_t kIeiPduAddress = 0x29;
constexpr uint8_t kIeiPduSessionId = 0x12;
constexpr uint8_t kIeiPduSessionType = 0x09;
constexpr uint8_t kIeiPortManagementInformationContainer = 0x74;
constexpr uint8_t kIeiReAttemptIndicator = 0x1d;
constexpr uint8_t kIeiRejectedNssaiRa = 0x11;
constexpr uint8_t kIeiRejectedNssaiRr = 0x69;
constexpr uint8_t kIeiRejectedNssaiDr = 0x6D;
constexpr uint8_t kIeiRejectedNssaiCuc = 0x11;
constexpr uint8_t kIeiReleaseAssistanceIndication = 0xf0;
constexpr uint8_t kIeiRequestedQosFlowDescriptions = 0x79;
constexpr uint8_t kIeiRequestedQosRules = 0x7a;
constexpr uint8_t kIeiRequestType = 0x80;
constexpr uint8_t kIeiRqTimerValue = 0x56;
constexpr uint8_t kIeiServingPlmnRateControlPsea = 0x18;
constexpr uint8_t kIeiServingPlmnRateControlPsmc = 0x1e;
constexpr uint8_t kIeiSessionAmbr = 0x2a;
constexpr uint8_t kIeiSmPduDnRequestContainer = 0x39;
constexpr uint8_t kIeiSNssai = 0x22;
constexpr uint8_t kIeiSscMode = 0x0a;
constexpr uint8_t kIeiSuggestedInterfaceIdentifier = 0x29;
constexpr uint8_t kIeiUeDsTtResidenceTime = 0x6f;
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file nas_ie_header.hpp
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#include "5GMMCapability.hpp"
#include "5GSMobilityIdentity.hpp"
#include "5GSRegistrationType.hpp"
......@@ -87,3 +80,4 @@
#include "_5GS_Update_Type.hpp"
#include "nas_mm_plain_header.hpp"
#include "struct.hpp"
#include "Ie_Const.hpp"
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#include "NSSAI.hpp"
#include <vector>
......@@ -37,16 +30,15 @@ using namespace nas;
//------------------------------------------------------------------------------
NSSAI::NSSAI(uint8_t iei) {
_iei = iei;
length = 0;
S_NSSAI = {};
_iei = iei;
length = 0;
}
//------------------------------------------------------------------------------
NSSAI::NSSAI(const uint8_t iei, std::vector<struct SNSSAI_s> nssai) {
_iei = iei;
length = 0;
S_NSSAI.assign(nssai.begin(), nssai.end());
S_NSSAIs.assign(nssai.begin(), nssai.end());
for (int i = 0; i < nssai.size(); i++) {
length += 2; // 1 for IEI and 1 for sst
if (nssai[i].sd != SD_NO_VALUE) length += SD_LENGTH;
......@@ -56,7 +48,7 @@ NSSAI::NSSAI(const uint8_t iei, std::vector<struct SNSSAI_s> nssai) {
}
//------------------------------------------------------------------------------
NSSAI::NSSAI() : _iei(), length(), S_NSSAI() {}
NSSAI::NSSAI() : _iei(), length(), S_NSSAIs() {}
//------------------------------------------------------------------------------
NSSAI::~NSSAI() {}
......@@ -66,7 +58,7 @@ void NSSAI::setS_NAASI(uint8_t SST) {}
//------------------------------------------------------------------------------
void NSSAI::getValue(std::vector<struct SNSSAI_s>& nssai) {
nssai.assign(S_NSSAI.begin(), S_NSSAI.end());
nssai.assign(S_NSSAIs.begin(), S_NSSAIs.end());
}
//------------------------------------------------------------------------------
......@@ -78,51 +70,48 @@ int NSSAI::encode2buffer(uint8_t* buf, int len) {
}
int encoded_size = 0;
if (_iei) {
*(buf + encoded_size) = _iei;
ENCODE_U8(buf + encoded_size, _iei, encoded_size);
}
ENCODE_U8(buf + encoded_size, length, encoded_size);
for (int i = 0; i < S_NSSAIs.size(); i++) {
int len_s_nssai = SST_LENGTH;
encoded_size++;
*(buf + encoded_size) = length;
*(buf + encoded_size) = S_NSSAIs.at(i).sst;
encoded_size++;
for (int i = 0; i < S_NSSAI.size(); i++) {
int len_s_nssai = SST_LENGTH;
if (S_NSSAIs.at(i).sd != SD_NO_VALUE) {
len_s_nssai += SD_LENGTH;
*(buf + encoded_size) = (S_NSSAIs.at(i).sd & 0x00ff0000) >> 16;
encoded_size++;
*(buf + encoded_size) = S_NSSAI.at(i).sst;
Logger::nas_mm().debug(
"Encoded NSSAI SD first octet (%x)", *(buf + encoded_size - 1));
*(buf + encoded_size) = (S_NSSAIs.at(i).sd & 0x0000ff00) >> 8;
encoded_size++;
Logger::nas_mm().debug(
"Encoded NSSAI SD second octet (%x)", *(buf + encoded_size - 1));
*(buf + encoded_size) = S_NSSAIs.at(i).sd & 0x000000ff;
encoded_size++;
Logger::nas_mm().debug(
"Encoded NSSAI SD third octet (%x)", *(buf + encoded_size - 1));
}
if (S_NSSAIs.at(i).mHplmnSst != -1) {
len_s_nssai += SST_LENGTH;
*(buf + encoded_size) = S_NSSAIs.at(i).mHplmnSst;
encoded_size++;
}
if (S_NSSAIs.at(i).mHplmnSd != SD_NO_VALUE) {
len_s_nssai += SD_LENGTH;
*(buf + encoded_size) = (S_NSSAIs.at(i).mHplmnSd & 0x00ff0000) >> 16;
encoded_size++;
*(buf + encoded_size) = (S_NSSAIs.at(i).mHplmnSd & 0x0000ff00) >> 8;
encoded_size++;
*(buf + encoded_size) = S_NSSAIs.at(i).mHplmnSd & 0x000000ff;
encoded_size++;
if (S_NSSAI.at(i).sd != SD_NO_VALUE) {
len_s_nssai += SD_LENGTH;
*(buf + encoded_size) = (S_NSSAI.at(i).sd & 0x00ff0000) >> 16;
encoded_size++;
Logger::nas_mm().debug(
"Encoded NSSAI SD first octet (%x)", *(buf + encoded_size - 1));
*(buf + encoded_size) = (S_NSSAI.at(i).sd & 0x0000ff00) >> 8;
encoded_size++;
Logger::nas_mm().debug(
"Encoded NSSAI SD second octet (%x)", *(buf + encoded_size - 1));
*(buf + encoded_size) = S_NSSAI.at(i).sd & 0x000000ff;
encoded_size++;
Logger::nas_mm().debug(
"Encoded NSSAI SD third octet (%x)", *(buf + encoded_size - 1));
}
if (S_NSSAI.at(i).mHplmnSst != -1) {
len_s_nssai += SST_LENGTH;
*(buf + encoded_size) = S_NSSAI.at(i).mHplmnSst;
encoded_size++;
}
if (S_NSSAI.at(i).mHplmnSd != SD_NO_VALUE) {
len_s_nssai += SD_LENGTH;
*(buf + encoded_size) = (S_NSSAI.at(i).mHplmnSd & 0x00ff0000) >> 16;
encoded_size++;
*(buf + encoded_size) = (S_NSSAI.at(i).mHplmnSd & 0x0000ff00) >> 8;
encoded_size++;
*(buf + encoded_size) = S_NSSAI.at(i).mHplmnSd & 0x000000ff;
encoded_size++;
}
*(buf + encoded_size - len_s_nssai - 1) = len_s_nssai;
}
} else {
// *(buf + encoded_size) = length - 1; encoded_size++;
// *(buf + encoded_size) = _value; encoded_size++; encoded_size++;
*(buf + encoded_size - len_s_nssai - 1) = len_s_nssai;
}
Logger::nas_mm().debug("Encoded NSSAI len (%d)", encoded_size);
return encoded_size;
}
......@@ -227,15 +216,12 @@ int NSSAI::decodefrombuffer(uint8_t* buf, int len, bool is_option) {
} break;
}
S_NSSAI.insert(S_NSSAI.end(), a);
S_NSSAIs.insert(S_NSSAIs.end(), a);
a = {0, 0, 0, 0};
}
for (int i = 0; i < S_NSSAI.size(); i++) {
Logger::nas_mm().debug(
"Decoded NSSAI SST (0x%x) SD (0x%x) hplmnSST (0x%x) hplmnSD (%d)",
S_NSSAI.at(i).sst, S_NSSAI.at(i).sd, S_NSSAI.at(i).mHplmnSst,
S_NSSAI.at(i).mHplmnSd);
for (int i = 0; i < S_NSSAIs.size(); i++) {
Logger::nas_mm().debug("Decoded NSSAI %s", S_NSSAIs.at(i).ToString());
}
Logger::nas_mm().debug("Decoded NSSAI len (%d)", decoded_size);
return decoded_size;
......
......@@ -34,8 +34,6 @@
#include "nas_ie_header.hpp"
#define SST_LENGTH 1
#define SD_LENGTH 3
namespace nas {
class NSSAI {
......@@ -52,7 +50,7 @@ class NSSAI {
private:
uint8_t _iei;
uint8_t length;
std::vector<struct SNSSAI_s> S_NSSAI;
std::vector<struct SNSSAI_s> S_NSSAIs;
};
} // namespace nas
......
This diff is collapsed.
......@@ -32,23 +32,36 @@
#include <stdint.h>
#include "nas_ie_header.hpp"
#include <optional>
namespace nas {
class S_NSSAI {
public:
S_NSSAI();
S_NSSAI(uint8_t iei);
S_NSSAI(const uint8_t iei, SNSSAI_s snssai);
// S_NSSAI(uint8_t iei);
S_NSSAI(std::optional<uint8_t> iei, SNSSAI_s snssai);
~S_NSSAI();
void setS_NSSAI(SNSSAI_s snssai);
// void setS_NSSAI(SNSSAI_s snssai);
int encode2buffer(uint8_t* buf, int len);
int decodefrombuffer(uint8_t* buf, int len, bool is_option);
void getValue(SNSSAI_s& snssai);
int decodefrombuffer(uint8_t* buf, int len, const bool is_option = true);
void getValue(SNSSAI_t& snssai);
void SetSNSSAI(
std::optional<int8_t> iei, uint8_t sst, std::optional<int32_t> sd,
std::optional<int8_t> mapped_hplmn_sst,
std::optional<int32_t> mapped_hplmn_sd);
uint8_t GetLength();
std::string ToString();
private:
uint8_t _iei;
// uint8_t _iei;
std::optional<int8_t> iei_;
uint8_t length;
SNSSAI_s SNSSAI;
// SNSSAI_s SNSSAI;
uint8_t sst_;
std::optional<int32_t> sd_;
std::optional<int8_t> mapped_hplmn_sst_;
std::optional<int32_t> mapped_hplmn_sd_;
};
} // namespace nas
......
......@@ -32,6 +32,10 @@
#include <iostream>
#include <vector>
#include "spdlog/fmt/fmt.h"
#include "3gpp_23.003.h"
extern "C" {
#include "TLVDecoder.h"
#include "TLVEncoder.h"
......@@ -55,6 +59,26 @@ typedef struct SNSSAI_s {
length = s.length;
return *this;
}
std::string ToString() {
std::string s;
s.append(fmt::format("SST {:#x}", sst));
if (length >= (SST_LENGTH + SD_LENGTH)) {
s.append(fmt::format(" SD {:#x}", sd));
}
if ((length == (SST_LENGTH + SST_LENGTH)) ||
(length >= (SST_LENGTH + SD_LENGTH + SST_LENGTH))) {
s.append(fmt::format(" M-HPLMN SST {:#x}", mHplmnSst));
}
if (length == (SST_LENGTH + SD_LENGTH + SST_LENGTH + SD_LENGTH)) {
s.append(fmt::format(" M-HPLMN SD {:#x}", mHplmnSd));
}
return s;
}
} SNSSAI_t;
typedef struct {
......@@ -62,15 +86,18 @@ typedef struct {
uint8_t ie_len;
bstring ie_value;
} IE_t;
typedef struct {
uint8_t ie_type;
uint16_t ie_len;
bstring ie_value;
} IE_t_E;
typedef struct {
uint8_t payloadContainerType : 4;
std::vector<IE_t> optionalIE;
} PayloadContainerEntry;
typedef struct IMEISV_s {
bstring identity;
} IMEISV_t;
......
......@@ -19,13 +19,6 @@
* contact@openairinterface.org
*/
/*! \file
\brief
\author Keliang DU, BUPT
\date 2020
\email: contact@openairinterface.org
*/
#include "ULNASTransport.hpp"
#include "3gpp_ts24501.hpp"
......@@ -137,7 +130,7 @@ uint8_t ULNASTransport::getRequestType() {
//------------------------------------------------------------------------------
void ULNASTransport::setS_NSSAI(SNSSAI_s snssai) {
ie_s_nssai = new S_NSSAI(0x22, snssai);
ie_s_nssai = new S_NSSAI(std::optional<uint8_t>{kIeiSNssai}, snssai);
}
//------------------------------------------------------------------------------
......@@ -378,7 +371,7 @@ int ULNASTransport::decodefrombuffer(
Logger::nas_mm().debug("Decoding IEI (0x22)");
ie_s_nssai = new S_NSSAI();
decoded_size += ie_s_nssai->decodefrombuffer(
buf + decoded_size, len - decoded_size, true);
buf + decoded_size, len - decoded_size, kIeIsOptional);
octet = *(buf + decoded_size);
Logger::nas_mm().debug("Next IEI (0x%x)", octet);
} break;
......
......@@ -29,9 +29,7 @@
#define FILE_TLV_DECODER_SEEN
#include "bstrlib.h"
//#include "log.h"
#include "common_defs.h"
//#include "log.h"
#define IES_DECODE_U8(bUFFER, dECODED, vALUE) \
DECODE_U8(bUFFER + dECODED, vALUE, dECODED)
......
......@@ -146,6 +146,10 @@ typedef struct {
OCTET_STRING_t pduSessionResourceReleaseResponseTransfer;
} PDUSessionResourceReleasedItem_t;
typedef struct {
uint8_t pduSessionId;
} PDUSessionResourceCxtRelCplItem_t;
typedef struct {
std::string ip_address;
uint32_t gtp_teid;
......
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this
* file except in compliance with the License. You may obtain a copy of the
* License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include "PDUSessionResourceItemCxtRelCpl.hpp"
namespace ngap {
//------------------------------------------------------------------------------
PDUSessionResourceItemCxtRelCpl::PDUSessionResourceItemCxtRelCpl() {}
//------------------------------------------------------------------------------
PDUSessionResourceItemCxtRelCpl::~PDUSessionResourceItemCxtRelCpl() {}
//------------------------------------------------------------------------------
void PDUSessionResourceItemCxtRelCpl::setPDUSessionResourceItemCxtRelCpl(
const PDUSessionID& m_pDUSessionID) {
pDUSessionID = m_pDUSessionID;
}
//------------------------------------------------------------------------------
void PDUSessionResourceItemCxtRelCpl::getPDUSessionResourceItemCxtRelCpl(
PDUSessionID& m_pDUSessionID) {
m_pDUSessionID = pDUSessionID;
}
//------------------------------------------------------------------------------
bool PDUSessionResourceItemCxtRelCpl::encode2PDUSessionResourceItemCxtRelCpl(
Ngap_PDUSessionResourceItemCxtRelCpl_t* pduSessionResourceItemCxtRelCpl) {
if (!pDUSessionID.encode2PDUSessionID(
pduSessionResourceItemCxtRelCpl->pDUSessionID))
return false;
return true;
}
//------------------------------------------------------------------------------
bool PDUSessionResourceItemCxtRelCpl::decodefromPDUSessionResourceItemCxtRelCpl(
Ngap_PDUSessionResourceItemCxtRelCpl_t* pduSessionResourceItemCxtRelCpl) {
pDUSessionID.setPDUSessionID(pduSessionResourceItemCxtRelCpl->pDUSessionID);
return true;
}
} // namespace ngap
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this
* file except in compliance with the License. You may obtain a copy of the
* License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#ifndef _PDU_SESSION_RESOURCE_ITEM_REL_CPL_H_
#define _PDU_SESSION_RESOURCE_ITEM_REL_CPL_H_
#include "PDUSessionID.hpp"
extern "C" {
#include "Ngap_PDUSessionResourceItemCxtRelCpl.h"
}
namespace ngap {
class PDUSessionResourceItemCxtRelCpl {
public:
PDUSessionResourceItemCxtRelCpl();
virtual ~PDUSessionResourceItemCxtRelCpl();
void setPDUSessionResourceItemCxtRelCpl(const PDUSessionID& m_pDUSessionID);
void getPDUSessionResourceItemCxtRelCpl(PDUSessionID& m_pDUSessionID);
bool encode2PDUSessionResourceItemCxtRelCpl(
Ngap_PDUSessionResourceItemCxtRelCpl_t* pduSessionResourceItemCxtRelCpl);
bool decodefromPDUSessionResourceItemCxtRelCpl(
Ngap_PDUSessionResourceItemCxtRelCpl_t* pduSessionResourceItemCxtRelCpl);
private:
PDUSessionID pDUSessionID;
// OCTET_STRING_t pDUSessionResourceReleaseResponseTransfer;
};
} // namespace ngap
#endif
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this
* file except in compliance with the License. You may obtain a copy of the
* License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include "PDUSessionResourceListCxtRelCpl.hpp"
namespace ngap {
//------------------------------------------------------------------------------
PDUSessionResourceListCxtRelCpl::PDUSessionResourceListCxtRelCpl() {}
//------------------------------------------------------------------------------
PDUSessionResourceListCxtRelCpl::~PDUSessionResourceListCxtRelCpl() {}
//------------------------------------------------------------------------------
void PDUSessionResourceListCxtRelCpl::setPDUSessionResourceListCxtRelCpl(
const std::vector<PDUSessionResourceItemCxtRelCpl>& list) {
cxtRelCplList = list;
}
//------------------------------------------------------------------------------
void PDUSessionResourceListCxtRelCpl::getPDUSessionResourceListCxtRelCpl(
std::vector<PDUSessionResourceItemCxtRelCpl>& list) {
list = cxtRelCplList;
}
//------------------------------------------------------------------------------
bool PDUSessionResourceListCxtRelCpl::encode2PDUSessionResourceListCxtRelCpl(
Ngap_PDUSessionResourceListCxtRelCpl_t* pduSessionResourceListCxtRelCpl) {
for (auto& cxtRelCpl : cxtRelCplList) {
Ngap_PDUSessionResourceItemCxtRelCpl_t* item =
(Ngap_PDUSessionResourceItemCxtRelCpl_t*) calloc(
1, sizeof(Ngap_PDUSessionResourceItemCxtRelCpl_t));
if (!item) return false;
if (!cxtRelCpl.encode2PDUSessionResourceItemCxtRelCpl(item)) return false;
if (ASN_SEQUENCE_ADD(&pduSessionResourceListCxtRelCpl->list, item) != 0)
return false;
}
return true;
}
//------------------------------------------------------------------------------
bool PDUSessionResourceListCxtRelCpl::decodefromPDUSessionResourceListCxtRelCpl(
const Ngap_PDUSessionResourceListCxtRelCpl_t&
pduSessionResourceListCxtRelCpl) {
for (int i = 0; i < pduSessionResourceListCxtRelCpl.list.count; i++) {
PDUSessionResourceItemCxtRelCpl item = {};
if (!item.decodefromPDUSessionResourceItemCxtRelCpl(
pduSessionResourceListCxtRelCpl.list.array[i]))
return false;
cxtRelCplList.push_back(item);
}
return true;
}
} // namespace ngap
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -15,7 +15,7 @@
#include "itti.hpp"
#include "amf_app.hpp"
#include "amf_n11.hpp"
#include "amf_sbi.hpp"
#include "pdu_session_context.hpp"
#include "conversions.hpp"
#include "comUt.hpp"
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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