Commit bf553cba authored by aligungr's avatar aligungr

UE SRA dev.

parent bf351954
......@@ -80,6 +80,23 @@ struct NwGnbRrcToMr : NtsMessage
}
};
struct NwGnbRrcToSra : NtsMessage
{
enum PR
{
RRC_PDU_DELIVERY,
} present;
// RRC_PDU_DELIVERY
int ueId{};
rrc::RrcChannel channel{};
OctetString pdu{};
explicit NwGnbRrcToSra(PR present) : NtsMessage(NtsMessageType::GNB_RRC_TO_SRA), present(present)
{
}
};
struct NwGnbNgapToRrc : NtsMessage
{
enum PR
......
......@@ -9,8 +9,8 @@
#include "task.hpp"
#include <asn/rrc/ASN_RRC_UL-CCCH-Message.h>
#include <asn/rrc/ASN_RRC_UL-DCCH-Message.h>
#include <gnb/sra/task.hpp>
#include <rrc/encode.hpp>
#include <gnb/mr/task.hpp>
namespace nr::gnb
{
......@@ -103,11 +103,11 @@ void GnbRrcTask::sendRrcMessage(int ueId, ASN_RRC_BCCH_BCH_Message *msg)
return;
}
auto *w = new NwGnbRrcToMr(NwGnbRrcToMr::RRC_PDU_DELIVERY);
auto *w = new NwGnbRrcToSra(NwGnbRrcToSra::RRC_PDU_DELIVERY);
w->ueId = ueId;
w->channel = rrc::RrcChannel::BCCH_BCH;
w->pdu = std::move(pdu);
m_base->mrTask->push(w);
m_base->sraTask->push(w);
}
void GnbRrcTask::sendRrcMessage(int ueId, ASN_RRC_BCCH_DL_SCH_Message *msg)
......@@ -119,11 +119,11 @@ void GnbRrcTask::sendRrcMessage(int ueId, ASN_RRC_BCCH_DL_SCH_Message *msg)
return;
}
auto *w = new NwGnbRrcToMr(NwGnbRrcToMr::RRC_PDU_DELIVERY);
auto *w = new NwGnbRrcToSra(NwGnbRrcToSra::RRC_PDU_DELIVERY);
w->ueId = ueId;
w->channel = rrc::RrcChannel::BCCH_DL_SCH;
w->pdu = std::move(pdu);
m_base->mrTask->push(w);
m_base->sraTask->push(w);
}
void GnbRrcTask::sendRrcMessage(int ueId, ASN_RRC_DL_CCCH_Message *msg)
......@@ -135,11 +135,11 @@ void GnbRrcTask::sendRrcMessage(int ueId, ASN_RRC_DL_CCCH_Message *msg)
return;
}
auto *w = new NwGnbRrcToMr(NwGnbRrcToMr::RRC_PDU_DELIVERY);
auto *w = new NwGnbRrcToSra(NwGnbRrcToSra::RRC_PDU_DELIVERY);
w->ueId = ueId;
w->channel = rrc::RrcChannel::DL_CCCH;
w->pdu = std::move(pdu);
m_base->mrTask->push(w);
m_base->sraTask->push(w);
}
void GnbRrcTask::sendRrcMessage(int ueId, ASN_RRC_DL_DCCH_Message *msg)
......@@ -151,11 +151,11 @@ void GnbRrcTask::sendRrcMessage(int ueId, ASN_RRC_DL_DCCH_Message *msg)
return;
}
auto *w = new NwGnbRrcToMr(NwGnbRrcToMr::RRC_PDU_DELIVERY);
auto *w = new NwGnbRrcToSra(NwGnbRrcToSra::RRC_PDU_DELIVERY);
w->ueId = ueId;
w->channel = rrc::RrcChannel::DL_DCCH;
w->pdu = std::move(pdu);
m_base->mrTask->push(w);
m_base->sraTask->push(w);
}
void GnbRrcTask::sendRrcMessage(int ueId, ASN_RRC_PCCH_Message *msg)
......@@ -167,11 +167,11 @@ void GnbRrcTask::sendRrcMessage(int ueId, ASN_RRC_PCCH_Message *msg)
return;
}
auto *w = new NwGnbRrcToMr(NwGnbRrcToMr::RRC_PDU_DELIVERY);
auto *w = new NwGnbRrcToSra(NwGnbRrcToSra::RRC_PDU_DELIVERY);
w->ueId = ueId;
w->channel = rrc::RrcChannel::PCCH;
w->pdu = std::move(pdu);
m_base->mrTask->push(w);
m_base->sraTask->push(w);
}
void GnbRrcTask::sendRrcMessage(int ueId, ASN_RRC_UL_CCCH_Message *msg)
......@@ -183,11 +183,11 @@ void GnbRrcTask::sendRrcMessage(int ueId, ASN_RRC_UL_CCCH_Message *msg)
return;
}
auto *w = new NwGnbRrcToMr(NwGnbRrcToMr::RRC_PDU_DELIVERY);
auto *w = new NwGnbRrcToSra(NwGnbRrcToSra::RRC_PDU_DELIVERY);
w->ueId = ueId;
w->channel = rrc::RrcChannel::UL_CCCH;
w->pdu = std::move(pdu);
m_base->mrTask->push(w);
m_base->sraTask->push(w);
}
void GnbRrcTask::sendRrcMessage(int ueId, ASN_RRC_UL_CCCH1_Message *msg)
......@@ -199,11 +199,11 @@ void GnbRrcTask::sendRrcMessage(int ueId, ASN_RRC_UL_CCCH1_Message *msg)
return;
}
auto *w = new NwGnbRrcToMr(NwGnbRrcToMr::RRC_PDU_DELIVERY);
auto *w = new NwGnbRrcToSra(NwGnbRrcToSra::RRC_PDU_DELIVERY);
w->ueId = ueId;
w->channel = rrc::RrcChannel::UL_CCCH1;
w->pdu = std::move(pdu);
m_base->mrTask->push(w);
m_base->sraTask->push(w);
}
void GnbRrcTask::sendRrcMessage(int ueId, ASN_RRC_UL_DCCH_Message *msg)
......@@ -215,11 +215,11 @@ void GnbRrcTask::sendRrcMessage(int ueId, ASN_RRC_UL_DCCH_Message *msg)
return;
}
auto *w = new NwGnbRrcToMr(NwGnbRrcToMr::RRC_PDU_DELIVERY);
auto *w = new NwGnbRrcToSra(NwGnbRrcToSra::RRC_PDU_DELIVERY);
w->ueId = ueId;
w->channel = rrc::RrcChannel::UL_DCCH;
w->pdu = std::move(pdu);
m_base->mrTask->push(w);
m_base->sraTask->push(w);
}
void GnbRrcTask::receiveRrcMessage(int ueId, ASN_RRC_BCCH_BCH_Message *msg)
......
......@@ -27,7 +27,7 @@ static int EstimateSimulatedDbm(const Vector3 &myPos, const Vector3 &uePos)
namespace nr::gnb
{
void GnbSraTask::handleCellInfoRequest(int ueId,const sra::SraCellInfoRequest &msg)
void GnbSraTask::handleCellInfoRequest(int ueId, const sra::SraCellInfoRequest &msg)
{
int dbm = EstimateSimulatedDbm(m_base->config->phyLocation, msg.simPos);
if (dbm < MIN_ALLOWED_DBM)
......@@ -50,13 +50,22 @@ void GnbSraTask::handleCellInfoRequest(int ueId,const sra::SraCellInfoRequest &m
void GnbSraTask::handleUplinkPduDelivery(int ueId, sra::SraPduDelivery &msg)
{
if (msg.pduType == sra::EPduType::RRC)
{
auto *nw = new NwGnbSraToRrc(NwGnbSraToRrc::RRC_PDU_DELIVERY);
nw->ueId = ueId;
nw->channel = static_cast<rrc::RrcChannel>(msg.payload.get4I(0));
nw->pdu = std::move(msg.pdu);
m_base->rrcTask->push(nw);
{
auto *nw = new NwGnbSraToRrc(NwGnbSraToRrc::RRC_PDU_DELIVERY);
nw->ueId = ueId;
nw->channel = static_cast<rrc::RrcChannel>(msg.payload.get4I(0));
nw->pdu = std::move(msg.pdu);
m_base->rrcTask->push(nw);
}
}
void GnbSraTask::handleDownlinkDelivery(int ueId, sra::EPduType pduType, OctetString &&pdu, OctetString &&payload)
{
sra::SraPduDelivery resp{m_sti};
resp.pduType = pduType;
resp.pdu = std::move(pdu);
resp.payload = std::move(payload);
sendSraMessage(ueId, resp);
}
} // namespace nr::gnb
......@@ -51,6 +51,18 @@ void GnbSraTask::onLoop()
switch (msg->msgType)
{
case NtsMessageType::GNB_RRC_TO_SRA: {
auto *w = dynamic_cast<NwGnbRrcToSra *>(msg);
switch (w->present)
{
case NwGnbRrcToSra::RRC_PDU_DELIVERY: {
handleDownlinkDelivery(w->ueId, sra::EPduType::RRC, std::move(w->pdu),
OctetString::FromOctet4(static_cast<int>(w->channel)));
break;
}
}
break;
}
case NtsMessageType::UDP_SERVER_RECEIVE: {
auto *w = dynamic_cast<udp::NwUdpServerReceive *>(msg);
auto sraMsg = sra::DecodeSraMessage(OctetView{w->packet});
......
......@@ -52,6 +52,7 @@ class GnbSraTask : public NtsTask
private: /* Handler */
void handleCellInfoRequest(int ueId, const sra::SraCellInfoRequest &msg);
void handleUplinkPduDelivery(int ueId, sra::SraPduDelivery &msg);
void handleDownlinkDelivery(int ueId, sra::EPduType pduType, OctetString &&pdu, OctetString &&payload);
private: /* UE Management */
int updateUeInfo(const InetAddress &addr, uint64_t sti);
......
......@@ -38,6 +38,7 @@ enum class NtsMessageType
GNB_MR_TO_RRC,
GNB_SRA_TO_RRC,
GNB_RRC_TO_MR,
GNB_RRC_TO_SRA,
GNB_NGAP_TO_RRC,
GNB_RRC_TO_NGAP,
GNB_NGAP_TO_GTP,
......
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