Commit cd5e1a41 authored by Tien-Thinh Nguyen's avatar Tien-Thinh Nguyen

Merge branch 'fix_ue_context_release' into 'develop'

Fix ue context release

See merge request oai/cn5g/oai-cn5g-amf!141
parents 7f1380a5 6891c2a3
......@@ -32,25 +32,31 @@ PDUSessionResourceListCxtRelCpl::~PDUSessionResourceListCxtRelCpl() {}
//------------------------------------------------------------------------------
void PDUSessionResourceListCxtRelCpl::setPDUSessionResourceListCxtRelCpl(
const std::vector<PDUSessionResourceItemCxtRelCpl>& list) {
cxtRelCplList = list;
cxtRelCplList.clear();
for (auto i : list) {
cxtRelCplList.push_back(i);
}
}
//------------------------------------------------------------------------------
void PDUSessionResourceListCxtRelCpl::getPDUSessionResourceListCxtRelCpl(
std::vector<PDUSessionResourceItemCxtRelCpl>& list) {
list = cxtRelCplList;
list.clear();
for (auto i : cxtRelCplList) {
list.push_back(i);
}
}
//------------------------------------------------------------------------------
bool PDUSessionResourceListCxtRelCpl::encode2PDUSessionResourceListCxtRelCpl(
Ngap_PDUSessionResourceListCxtRelCpl_t* pduSessionResourceListCxtRelCpl) {
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)
if (ASN_SEQUENCE_ADD(&pduSessionResourceListCxtRelCpl.list, item) != 0)
return false;
}
return true;
......
......@@ -44,7 +44,7 @@ class PDUSessionResourceListCxtRelCpl {
std::vector<PDUSessionResourceItemCxtRelCpl>& list);
bool encode2PDUSessionResourceListCxtRelCpl(
Ngap_PDUSessionResourceListCxtRelCpl_t* pduSessionResourceListCxtRelCpl);
Ngap_PDUSessionResourceListCxtRelCpl_t& pduSessionResourceListCxtRelCpl);
bool decodefromPDUSessionResourceListCxtRelCpl(
const Ngap_PDUSessionResourceListCxtRelCpl_t&
......
......@@ -30,8 +30,9 @@ using namespace ngap;
//------------------------------------------------------------------------------
UEContextReleaseCompleteMsg::UEContextReleaseCompleteMsg() : NgapUEMessage() {
ies = nullptr;
userLocationInformation = nullptr;
ies = nullptr;
userLocationInformation = nullptr;
pduSessionResourceListCxtRelCpl = std::nullopt;
setMessageType(NgapMessageType::UE_CONTEXT_RELEASE_COMPLETE);
initialize();
}
......@@ -152,7 +153,10 @@ void UEContextReleaseCompleteMsg::getUserLocationInfoNR(
//------------------------------------------------------------------------------
void UEContextReleaseCompleteMsg::setPduSessionResourceCxtRelCplList(
const std::vector<PDUSessionResourceCxtRelCplItem_t>& list) {
PDUSessionResourceListCxtRelCpl m_pduSessionResourceListCxtRelCpl = {};
std::vector<PDUSessionResourceItemCxtRelCpl> cxtRelCplList;
for (int i = 0; i < list.size(); i++) {
PDUSessionResourceItemCxtRelCpl item = {};
PDUSessionID pDUSessionID = {};
......@@ -162,7 +166,7 @@ void UEContextReleaseCompleteMsg::setPduSessionResourceCxtRelCplList(
cxtRelCplList.push_back(item);
}
pduSessionResourceListCxtRelCpl->setPDUSessionResourceListCxtRelCpl(
m_pduSessionResourceListCxtRelCpl.setPDUSessionResourceListCxtRelCpl(
cxtRelCplList);
Ngap_UEContextReleaseComplete_IEs* ie =
......@@ -175,14 +179,19 @@ void UEContextReleaseCompleteMsg::setPduSessionResourceCxtRelCplList(
Ngap_UEContextReleaseComplete_IEs__value_PR_PDUSessionResourceListCxtRelCpl;
int ret =
pduSessionResourceListCxtRelCpl->encode2PDUSessionResourceListCxtRelCpl(
&ie->value.choice.PDUSessionResourceListCxtRelCpl);
m_pduSessionResourceListCxtRelCpl.encode2PDUSessionResourceListCxtRelCpl(
ie->value.choice.PDUSessionResourceListCxtRelCpl);
if (!ret) {
Logger::ngap().error(
"Encode NGAP PDUSessionResourceReleasedListRelRes IE error");
free_wrapper((void**) &ie);
return;
}
pduSessionResourceListCxtRelCpl =
std::optional<PDUSessionResourceListCxtRelCpl>{
m_pduSessionResourceListCxtRelCpl};
ret = ASN_SEQUENCE_ADD(&ies->protocolIEs.list, ie);
if (ret != 0)
Logger::ngap().error(
......@@ -193,19 +202,21 @@ void UEContextReleaseCompleteMsg::setPduSessionResourceCxtRelCplList(
bool UEContextReleaseCompleteMsg::getPduSessionResourceCxtRelCplList(
std::vector<PDUSessionResourceCxtRelCplItem_t>& list) {
std::vector<PDUSessionResourceItemCxtRelCpl> cxtRelCplList;
pduSessionResourceListCxtRelCpl->getPDUSessionResourceListCxtRelCpl(
cxtRelCplList);
if (pduSessionResourceListCxtRelCpl.has_value()) {
pduSessionResourceListCxtRelCpl.value().getPDUSessionResourceListCxtRelCpl(
cxtRelCplList);
} else {
return false;
}
for (auto& item : cxtRelCplList) {
PDUSessionResourceCxtRelCplItem_t rel = {};
PDUSessionID pDUSessionID = {};
item.getPDUSessionResourceItemCxtRelCpl(pDUSessionID);
pDUSessionID.getPDUSessionID(rel.pduSessionId);
list.push_back(rel);
}
return true;
}
......@@ -273,16 +284,19 @@ bool UEContextReleaseCompleteMsg::decodeFromPdu(Ngap_NGAP_PDU_t* ngapMsgPdu) {
Ngap_Criticality_reject &&
ies->protocolIEs.list.array[i]->value.present ==
Ngap_UEContextReleaseComplete_IEs__value_PR_PDUSessionResourceListCxtRelCpl) {
pduSessionResourceListCxtRelCpl =
new PDUSessionResourceListCxtRelCpl();
if (!pduSessionResourceListCxtRelCpl
->decodefromPDUSessionResourceListCxtRelCpl(
PDUSessionResourceListCxtRelCpl m_pduSessionResourceListCxtRelCpl =
{};
if (!m_pduSessionResourceListCxtRelCpl
.decodefromPDUSessionResourceListCxtRelCpl(
ies->protocolIEs.list.array[i]
->value.choice.PDUSessionResourceListCxtRelCpl)) {
Logger::ngap().error(
"Decode NGAP PDUSessionResourceListCxtRelCpl IE error");
return false;
}
pduSessionResourceListCxtRelCpl =
std::optional<PDUSessionResourceListCxtRelCpl>{
m_pduSessionResourceListCxtRelCpl};
} else {
Logger::ngap().error(
"Decode NGAP PDUSessionResourceListCxtRelCpl IE error");
......
......@@ -25,6 +25,7 @@
#include "NgapUEMessage.hpp"
#include "UserLocationInformation.hpp"
#include "PDUSessionResourceListCxtRelCpl.hpp"
#include <optional>
extern "C" {
#include "Ngap_UEContextReleaseComplete.h"
......@@ -56,7 +57,8 @@ class UEContextReleaseCompleteMsg : public NgapUEMessage {
// RAN_UE_NGAP_ID //Mandatory
UserLocationInformation* userLocationInformation; // Optional
// TODO: Information on Recommended Cells and RAN Nodes for Paging (Optional)
PDUSessionResourceListCxtRelCpl* pduSessionResourceListCxtRelCpl; // Optional
std::optional<PDUSessionResourceListCxtRelCpl>
pduSessionResourceListCxtRelCpl; // Optional
// TODO: Criticality Diagnostics (Optional)
};
......
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