Skip to content

Commit

Permalink
Merge pull request #292 from aligungr/dev
Browse files Browse the repository at this point in the history
Release of v3.1.7
  • Loading branch information
aligungr committed Apr 17, 2021
2 parents 976522e + fec05fc commit fe2a9b3
Show file tree
Hide file tree
Showing 101 changed files with 2,931 additions and 2,413 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<a href="https://github.com/aligungr/UERANSIM"><img src="/.github/logo.png" width="75" title="UERANSIM"></a>
</p>
<p align="center">
<img src="https://img.shields.io/badge/UERANSIM-v3.1.6-blue" />
<img src="https://img.shields.io/badge/UERANSIM-v3.1.7-blue" />
<img src="https://img.shields.io/badge/3GPP-R15-orange" />
<img src="https://img.shields.io/badge/License-GPL--3.0-green"/>
</p>
Expand Down
1 change: 0 additions & 1 deletion config/open5gs-gnb.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ amfConfigs:
# List of supported S-NSSAIs by this gNB
slices:
- sst: 1
sd: 1

# Indicates whether or not SCTP stream number errors should be ignored.
ignoreStreamIds: true
1 change: 0 additions & 1 deletion config/open5gs-ue.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ sessions:
# Configured NSSAI for this UE by HPLMN
configured-nssai:
- sst: 1
sd: 1

# Default Configured NSSAI for this UE
default-nssai:
Expand Down
18 changes: 18 additions & 0 deletions src/app/cli_cmd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ static OrderedMap<std::string, CmdEntry> g_gnbCmdEntries = {
{"amf-info", {"Show some status information about the given AMF", "<amf-id>", DefaultDesc, true}},
{"ue-list", {"List all UEs associated with the gNB", "", DefaultDesc, false}},
{"ue-count", {"Print the total number of UEs connected the this gNB", "", DefaultDesc, false}},
{"ue-release", {"Request a UE context release for the given UE", "<ue-id>", DefaultDesc, false}},
};

static OrderedMap<std::string, CmdEntry> g_ueCmdEntries = {
Expand All @@ -162,6 +163,7 @@ static OrderedMap<std::string, CmdEntry> g_ueCmdEntries = {
{"ps-release-all", {"Trigger PDU session release procedures for all active sessions", "", DefaultDesc, false}},
{"deregister",
{"Perform a de-registration by the UE", "<normal|disable-5g|switch-off|remove-sim>", DefaultDesc, true}},
{"coverage", {"Show gNodeB cell coverage information", "", DefaultDesc, false}},
};

static std::unique_ptr<GnbCliCommand> GnbCliParseImpl(const std::string &subCmd, const opt::OptionsResult &options,
Expand Down Expand Up @@ -199,6 +201,18 @@ static std::unique_ptr<GnbCliCommand> GnbCliParseImpl(const std::string &subCmd,
{
return std::make_unique<GnbCliCommand>(GnbCliCommand::UE_COUNT);
}
else if (subCmd == "ue-release")
{
auto cmd = std::make_unique<GnbCliCommand>(GnbCliCommand::UE_RELEASE_REQ);
if (options.positionalCount() == 0)
CMD_ERR("UE ID is expected")
if (options.positionalCount() > 1)
CMD_ERR("Only one UE ID is expected")
cmd->ueId = utils::ParseInt(options.getPositional(0));
if (cmd->ueId <= 0)
CMD_ERR("Invalid UE ID")
return cmd;
}

return nullptr;
}
Expand Down Expand Up @@ -301,6 +315,10 @@ static std::unique_ptr<UeCliCommand> UeCliParseImpl(const std::string &subCmd, c
}
return cmd;
}
else if (subCmd == "coverage")
{
return std::make_unique<UeCliCommand>(UeCliCommand::COVERAGE);
}

return nullptr;
}
Expand Down
7 changes: 6 additions & 1 deletion src/app/cli_cmd.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,16 @@ struct GnbCliCommand
AMF_LIST,
AMF_INFO,
UE_LIST,
UE_COUNT
UE_COUNT,
UE_RELEASE_REQ,
} present;

// AMF_INFO
int amfId{};

// UE_RELEASE_REQ
int ueId{};

explicit GnbCliCommand(PR present) : present(present)
{
}
Expand All @@ -48,6 +52,7 @@ struct UeCliCommand
PS_RELEASE,
PS_RELEASE_ALL,
DE_REGISTER,
COVERAGE,
} present;

// DE_REGISTER
Expand Down
8 changes: 8 additions & 0 deletions src/asn/utils/utils.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -198,4 +198,12 @@ inline Unique<T> WrapUnique(T *ptr, asn_TYPE_descriptor_t &desc)
return asn::Unique<T>(ptr, asn::Deleter<T>{desc});
}

template <typename T>
inline Unique<T> UniqueCopy(const T &value, asn_TYPE_descriptor_t &desc)
{
auto *ptr = New<T>();
DeepCopy(desc, value, ptr);
return WrapUnique(ptr, desc);
}

} // namespace asn
21 changes: 16 additions & 5 deletions src/gnb/app/cmd_handler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@

#include <gnb/app/task.hpp>
#include <gnb/gtp/task.hpp>
#include <gnb/mr/task.hpp>
#include <gnb/ngap/task.hpp>
#include <gnb/rls/task.hpp>
#include <gnb/rrc/task.hpp>
#include <gnb/sctp/task.hpp>
#include <utils/common.hpp>
Expand All @@ -36,7 +36,7 @@ void GnbCmdHandler::sendError(const InetAddress &address, const std::string &out
void GnbCmdHandler::pauseTasks()
{
m_base->gtpTask->requestPause();
m_base->mrTask->requestPause();
m_base->rlsTask->requestPause();
m_base->ngapTask->requestPause();
m_base->rrcTask->requestPause();
m_base->sctpTask->requestPause();
Expand All @@ -45,7 +45,7 @@ void GnbCmdHandler::pauseTasks()
void GnbCmdHandler::unpauseTasks()
{
m_base->gtpTask->requestUnpause();
m_base->mrTask->requestUnpause();
m_base->rlsTask->requestUnpause();
m_base->ngapTask->requestUnpause();
m_base->rrcTask->requestUnpause();
m_base->sctpTask->requestUnpause();
Expand All @@ -55,7 +55,7 @@ bool GnbCmdHandler::isAllPaused()
{
if (!m_base->gtpTask->isPauseConfirmed())
return false;
if (!m_base->mrTask->isPauseConfirmed())
if (!m_base->rlsTask->isPauseConfirmed())
return false;
if (!m_base->ngapTask->isPauseConfirmed())
return false;
Expand Down Expand Up @@ -131,7 +131,7 @@ void GnbCmdHandler::handleCmdImpl(NwGnbCliCommand &msg)
for (auto &ue : m_base->ngapTask->m_ueCtx)
{
json.push(Json::Obj({
{"ue-name", m_base->mrTask->m_ueMap[ue.first].name},
{"ue-id", ue.first},
{"ran-ngap-id", ue.second->ranUeNgapId},
{"amf-ngap-id", ue.second->amfUeNgapId},
}));
Expand All @@ -143,6 +143,17 @@ void GnbCmdHandler::handleCmdImpl(NwGnbCliCommand &msg)
sendResult(msg.address, std::to_string(m_base->ngapTask->m_ueCtx.size()));
break;
}
case app::GnbCliCommand::UE_RELEASE_REQ: {
if (m_base->ngapTask->m_ueCtx.count(msg.cmd->ueId) == 0)
sendError(msg.address, "UE not found with given ID");
else
{
auto ue = m_base->ngapTask->m_ueCtx[msg.cmd->ueId];
m_base->ngapTask->sendContextRelease(ue->ctxId, NgapCause::RadioNetwork_unspecified);
sendResult(msg.address, "Requesting UE context release");
}
break;
}
}
}

Expand Down
11 changes: 5 additions & 6 deletions src/gnb/gnb.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,12 @@
#include "gnb.hpp"
#include "app/task.hpp"
#include "gtp/task.hpp"
#include "mr/task.hpp"
#include "rls/task.hpp"
#include "ngap/task.hpp"
#include "rrc/task.hpp"
#include "sctp/task.hpp"

#include <app/cli_base.hpp>
#include <utils/common.hpp>

namespace nr::gnb
{
Expand All @@ -33,7 +32,7 @@ GNodeB::GNodeB(GnbConfig *config, app::INodeListener *nodeListener, NtsTask *cli
base->ngapTask = new NgapTask(base);
base->rrcTask = new GnbRrcTask(base);
base->gtpTask = new GtpTask(base);
base->mrTask = new GnbMrTask(base);
base->rlsTask = new GnbRlsTask(base);

taskBase = base;
}
Expand All @@ -45,14 +44,14 @@ GNodeB::~GNodeB()
taskBase->ngapTask->quit();
taskBase->rrcTask->quit();
taskBase->gtpTask->quit();
taskBase->mrTask->quit();
taskBase->rlsTask->quit();

delete taskBase->appTask;
delete taskBase->sctpTask;
delete taskBase->ngapTask;
delete taskBase->rrcTask;
delete taskBase->gtpTask;
delete taskBase->mrTask;
delete taskBase->rlsTask;

delete taskBase->logBase;

Expand All @@ -65,7 +64,7 @@ void GNodeB::start()
taskBase->sctpTask->start();
taskBase->ngapTask->start();
taskBase->rrcTask->start();
taskBase->mrTask->start();
taskBase->rlsTask->start();
taskBase->gtpTask->start();
}

Expand Down
18 changes: 9 additions & 9 deletions src/gnb/gtp/task.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

#include <asn/ngap/ASN_NGAP_QosFlowSetupRequestItem.h>
#include <gnb/gtp/proto.hpp>
#include <gnb/mr/task.hpp>
#include <gnb/rls/task.hpp>
#include <utils/constants.hpp>
#include <utils/libc_error.hpp>

Expand Down Expand Up @@ -76,12 +76,12 @@ void GtpTask::onLoop()
}
break;
}
case NtsMessageType::GNB_MR_TO_GTP: {
auto *w = dynamic_cast<NwGnbMrToGtp *>(msg);
case NtsMessageType::GNB_RLS_TO_GTP: {
auto *w = dynamic_cast<NwGnbRlsToGtp *>(msg);
switch (w->present)
{
case NwGnbMrToGtp::UPLINK_DELIVERY: {
handleUplinkData(w->ueId, w->pduSessionId, std::move(w->data));
case NwGnbRlsToGtp::DATA_PDU_DELIVERY: {
handleUplinkData(w->ueId, w->psi, std::move(w->pdu));
break;
}
}
Expand Down Expand Up @@ -239,11 +239,11 @@ void GtpTask::handleUdpReceive(const udp::NwUdpServerReceive &msg)

if (m_rateLimiter->allowDownlinkPacket(sessionInd, gtp->payload.length()))
{
auto *w = new NwGnbGtpToMr(NwGnbGtpToMr::DATA_PDU_DELIVERY);
auto *w = new NwGnbGtpToRls(NwGnbGtpToRls::DATA_PDU_DELIVERY);
w->ueId = GetUeId(sessionInd);
w->pduSessionId = GetPsi(sessionInd);
w->data = std::move(gtp->payload);
m_base->mrTask->push(w);
w->psi = GetPsi(sessionInd);
w->pdu = std::move(gtp->payload);
m_base->rlsTask->push(w);
}

delete gtp;
Expand Down
63 changes: 0 additions & 63 deletions src/gnb/mr/rls.cpp

This file was deleted.

36 changes: 0 additions & 36 deletions src/gnb/mr/rls.hpp

This file was deleted.

Loading

0 comments on commit fe2a9b3

Please sign in to comment.