9#include "nr-epc-gtpu-header.h"
10#include "nr-epc-x2-header.h"
12#include "ns3/inet-socket-address.h"
15#include "ns3/packet.h"
20NS_LOG_COMPONENT_DEFINE(
"NrEpcX2");
23 Ptr<Socket> localCtrlPlaneSocket,
24 Ptr<Socket> localUserPlaneSocket)
31NrX2IfaceInfo::~NrX2IfaceInfo()
40 NS_LOG_FUNCTION(
this);
50 : m_localCellIds{localCellIds},
51 m_remoteCellIds{remoteCellIds}
55NrX2CellInfo::~NrX2CellInfo()
62 NS_LOG_FUNCTION(
this);
70NS_OBJECT_ENSURE_REGISTERED(
NrEpcX2);
76 NS_LOG_FUNCTION(
this);
83 NS_LOG_FUNCTION(
this);
89 NS_LOG_FUNCTION(
this);
91 m_x2InterfaceSockets.clear();
92 m_x2InterfaceCellIds.clear();
99 static TypeId tid = TypeId(
"ns3::NrEpcX2").SetParent<Object>().SetGroupName(
"Nr");
106 NS_LOG_FUNCTION(
this << s);
113 NS_LOG_FUNCTION(
this);
119 Ipv4Address localX2Address,
120 std::vector<uint16_t> remoteCellIds,
121 Ipv4Address remoteX2Address)
123 uint16_t remoteCellId = remoteCellIds.at(0);
124 NS_LOG_FUNCTION(
this << localCellId << localX2Address << remoteCellId << remoteX2Address);
129 Ptr<Node> localGnb = GetObject<Node>();
132 Ptr<Socket> localX2cSocket =
133 Socket::CreateSocket(localGnb, TypeId::LookupByName(
"ns3::UdpSocketFactory"));
134 retval = localX2cSocket->Bind(InetSocketAddress(localX2Address, m_x2cUdpPort));
135 NS_ASSERT(retval == 0);
139 Ptr<Socket> localX2uSocket =
140 Socket::CreateSocket(localGnb, TypeId::LookupByName(
"ns3::UdpSocketFactory"));
141 retval = localX2uSocket->Bind(InetSocketAddress(localX2Address, m_x2uUdpPort));
142 NS_ASSERT(retval == 0);
145 std::vector<uint16_t> localCellIds;
146 localCellIds.push_back(localCellId);
148 NS_ASSERT_MSG(m_x2InterfaceSockets.find(remoteCellId) == m_x2InterfaceSockets.end(),
149 "Mapping for remoteCellId = " << remoteCellId <<
" is already known");
150 for (uint16_t remoteCellId : remoteCellIds)
152 m_x2InterfaceSockets[remoteCellId] =
153 Create<NrX2IfaceInfo>(remoteX2Address, localX2cSocket, localX2uSocket);
156 NS_ASSERT_MSG(m_x2InterfaceCellIds.find(localX2cSocket) == m_x2InterfaceCellIds.end(),
157 "Mapping for control plane localSocket = " << localX2cSocket
158 <<
" is already known");
159 m_x2InterfaceCellIds[localX2cSocket] = Create<NrX2CellInfo>(localCellIds, remoteCellIds);
161 NS_ASSERT_MSG(m_x2InterfaceCellIds.find(localX2uSocket) == m_x2InterfaceCellIds.end(),
162 "Mapping for data plane localSocket = " << localX2uSocket <<
" is already known");
163 m_x2InterfaceCellIds[localX2uSocket] = Create<NrX2CellInfo>(localCellIds, remoteCellIds);
169 NS_LOG_FUNCTION(
this << socket);
171 NS_LOG_LOGIC(
"Recv X2 message: from Socket");
172 Ptr<Packet> packet = socket->Recv();
173 NS_LOG_LOGIC(
"packetLen = " << packet->GetSize());
175 NS_ASSERT_MSG(m_x2InterfaceCellIds.find(socket) != m_x2InterfaceCellIds.end(),
176 "Missing infos of local and remote CellId");
177 Ptr<NrX2CellInfo> cellsInfo = m_x2InterfaceCellIds[socket];
180 packet->RemoveHeader(x2Header);
182 NS_LOG_LOGIC(
"X2 header: " << x2Header);
187 if (procedureCode == NrEpcX2Header::HandoverPreparation)
189 if (messageType == NrEpcX2Header::InitiatingMessage)
191 NS_LOG_LOGIC(
"Recv X2 message: HANDOVER REQUEST");
194 packet->RemoveHeader(x2HoReqHeader);
196 NS_LOG_INFO(
"X2 HandoverRequest header: " << x2HoReqHeader);
212 NS_LOG_LOGIC(
"mmeUeS1apId = " << params.
mmeUeS1apId);
213 NS_LOG_LOGIC(
"cellsInfo->m_localCellId = " << cellsInfo->m_localCellIds.at(0));
217 else if (messageType == NrEpcX2Header::SuccessfulOutcome)
219 NS_LOG_LOGIC(
"Recv X2 message: HANDOVER REQUEST ACK");
222 packet->RemoveHeader(x2HoReqAckHeader);
224 NS_LOG_INFO(
"X2 HandoverRequestAck header: " << x2HoReqAckHeader);
244 NS_LOG_LOGIC(
"Recv X2 message: HANDOVER PREPARATION FAILURE");
247 packet->RemoveHeader(x2HoPrepFailHeader);
249 NS_LOG_INFO(
"X2 HandoverPreparationFailure header: " << x2HoPrepFailHeader);
261 NS_LOG_LOGIC(
"cause = " << params.
cause);
267 else if (procedureCode == NrEpcX2Header::LoadIndication)
269 if (messageType == NrEpcX2Header::InitiatingMessage)
271 NS_LOG_LOGIC(
"Recv X2 message: LOAD INFORMATION");
274 packet->RemoveHeader(x2LoadInfoHeader);
276 NS_LOG_INFO(
"X2 LoadInformation header: " << x2LoadInfoHeader);
286 else if (procedureCode == NrEpcX2Header::SnStatusTransfer)
288 if (messageType == NrEpcX2Header::InitiatingMessage)
290 NS_LOG_LOGIC(
"Recv X2 message: SN STATUS TRANSFER");
293 packet->RemoveHeader(x2SnStatusXferHeader);
295 NS_LOG_INFO(
"X2 SnStatusTransfer header: " << x2SnStatusXferHeader);
314 else if (procedureCode == NrEpcX2Header::UeContextRelease)
316 if (messageType == NrEpcX2Header::InitiatingMessage)
318 NS_LOG_LOGIC(
"Recv X2 message: UE CONTEXT RELEASE");
321 packet->RemoveHeader(x2UeCtxReleaseHeader);
323 NS_LOG_INFO(
"X2 UeContextRelease header: " << x2UeCtxReleaseHeader);
335 else if (procedureCode == NrEpcX2Header::ResourceStatusReporting)
337 if (messageType == NrEpcX2Header::InitiatingMessage)
339 NS_LOG_LOGIC(
"Recv X2 message: RESOURCE STATUS UPDATE");
342 packet->RemoveHeader(x2ResStatUpdHeader);
344 NS_LOG_INFO(
"X2 ResourceStatusUpdate header: " << x2ResStatUpdHeader);
360 else if (procedureCode == NrEpcX2Header::HandoverCancel)
362 if (messageType == NrEpcX2Header::SuccessfulOutcome)
364 NS_LOG_LOGIC(
"Recv X2 message: HANDOVER CANCEL");
367 packet->RemoveHeader(x2HoCancelHeader);
369 NS_LOG_INFO(
"X2 HandoverCancel header: " << x2HoCancelHeader);
382 NS_LOG_LOGIC(
"cause = " << params.
cause);
389 NS_ASSERT_MSG(
false,
"ProcedureCode NOT SUPPORTED!!!");
396 NS_LOG_FUNCTION(
this << socket);
398 NS_LOG_LOGIC(
"Recv UE DATA through X2-U interface from Socket");
399 Ptr<Packet> packet = socket->Recv();
400 NS_LOG_LOGIC(
"packetLen = " << packet->GetSize());
402 NS_ASSERT_MSG(m_x2InterfaceCellIds.find(socket) != m_x2InterfaceCellIds.end(),
403 "Missing infos of local and remote CellId");
404 Ptr<NrX2CellInfo> cellsInfo = m_x2InterfaceCellIds[socket];
407 packet->RemoveHeader(gtpu);
409 NS_LOG_LOGIC(
"GTP-U header: " << gtpu);
426 NS_LOG_FUNCTION(
this);
431 NS_LOG_LOGIC(
"mmeUeS1apId = " << params.
mmeUeS1apId);
433 NS_ASSERT_MSG(m_x2InterfaceSockets.find(params.
targetCellId) != m_x2InterfaceSockets.end(),
434 "Missing infos for targetCellId = " << params.
targetCellId);
435 Ptr<NrX2IfaceInfo> socketInfo = m_x2InterfaceSockets[params.
targetCellId];
436 Ptr<Socket> sourceSocket = socketInfo->m_localCtrlPlaneSocket;
437 Ipv4Address targetIpAddr = socketInfo->m_remoteIpAddr;
439 NS_LOG_LOGIC(
"sourceSocket = " << sourceSocket);
440 NS_LOG_LOGIC(
"targetIpAddr = " << targetIpAddr);
442 NS_LOG_INFO(
"Send X2 message: HANDOVER REQUEST");
460 NS_LOG_INFO(
"X2 header: " << x2Header);
461 NS_LOG_INFO(
"X2 HandoverRequest header: " << x2HoReqHeader);
465 packet->AddHeader(x2HoReqHeader);
466 packet->AddHeader(x2Header);
467 NS_LOG_INFO(
"packetLen = " << packet->GetSize());
470 sourceSocket->SendTo(packet, 0, InetSocketAddress(targetIpAddr, m_x2cUdpPort));
476 NS_LOG_FUNCTION(
this);
483 NS_ASSERT_MSG(m_x2InterfaceSockets.find(params.
sourceCellId) != m_x2InterfaceSockets.end(),
484 "Socket infos not defined for sourceCellId = " << params.
sourceCellId);
486 Ptr<Socket> localSocket = m_x2InterfaceSockets[params.
sourceCellId]->m_localCtrlPlaneSocket;
487 Ipv4Address remoteIpAddr = m_x2InterfaceSockets[params.
sourceCellId]->m_remoteIpAddr;
489 NS_LOG_LOGIC(
"localSocket = " << localSocket);
490 NS_LOG_LOGIC(
"remoteIpAddr = " << remoteIpAddr);
492 NS_LOG_INFO(
"Send X2 message: HANDOVER REQUEST ACK");
507 NS_LOG_INFO(
"X2 header: " << x2Header);
508 NS_LOG_INFO(
"X2 HandoverAck header: " << x2HoAckHeader);
509 NS_LOG_INFO(
"RRC context: " << params.
rrcContext);
513 packet->AddHeader(x2HoAckHeader);
514 packet->AddHeader(x2Header);
515 NS_LOG_INFO(
"packetLen = " << packet->GetSize());
518 localSocket->SendTo(packet, 0, InetSocketAddress(remoteIpAddr, m_x2cUdpPort));
525 NS_LOG_FUNCTION(
this);
530 NS_LOG_LOGIC(
"cause = " << params.
cause);
533 NS_ASSERT_MSG(m_x2InterfaceSockets.find(params.
sourceCellId) != m_x2InterfaceSockets.end(),
534 "Socket infos not defined for sourceCellId = " << params.
sourceCellId);
536 Ptr<Socket> localSocket = m_x2InterfaceSockets[params.
sourceCellId]->m_localCtrlPlaneSocket;
537 Ipv4Address remoteIpAddr = m_x2InterfaceSockets[params.
sourceCellId]->m_remoteIpAddr;
539 NS_LOG_LOGIC(
"localSocket = " << localSocket);
540 NS_LOG_LOGIC(
"remoteIpAddr = " << remoteIpAddr);
542 NS_LOG_INFO(
"Send X2 message: HANDOVER PREPARATION FAILURE");
556 NS_LOG_INFO(
"X2 header: " << x2Header);
557 NS_LOG_INFO(
"X2 HandoverPrepFail header: " << x2HoPrepFailHeader);
560 Ptr<Packet> packet = Create<Packet>();
561 packet->AddHeader(x2HoPrepFailHeader);
562 packet->AddHeader(x2Header);
563 NS_LOG_INFO(
"packetLen = " << packet->GetSize());
566 localSocket->SendTo(packet, 0, InetSocketAddress(remoteIpAddr, m_x2cUdpPort));
572 NS_LOG_FUNCTION(
this);
580 NS_ASSERT_MSG(m_x2InterfaceSockets.find(params.
targetCellId) != m_x2InterfaceSockets.end(),
581 "Socket infos not defined for targetCellId = " << params.
targetCellId);
583 Ptr<Socket> localSocket = m_x2InterfaceSockets[params.
targetCellId]->m_localCtrlPlaneSocket;
584 Ipv4Address remoteIpAddr = m_x2InterfaceSockets[params.
targetCellId]->m_remoteIpAddr;
586 NS_LOG_LOGIC(
"localSocket = " << localSocket);
587 NS_LOG_LOGIC(
"remoteIpAddr = " << remoteIpAddr);
589 NS_LOG_INFO(
"Send X2 message: SN STATUS TRANSFER");
604 NS_LOG_INFO(
"X2 header: " << x2Header);
605 NS_LOG_INFO(
"X2 SnStatusTransfer header: " << x2SnStatusXferHeader);
608 Ptr<Packet> packet = Create<Packet>();
609 packet->AddHeader(x2SnStatusXferHeader);
610 packet->AddHeader(x2Header);
611 NS_LOG_INFO(
"packetLen = " << packet->GetSize());
614 localSocket->SendTo(packet, 0, InetSocketAddress(remoteIpAddr, m_x2cUdpPort));
620 NS_LOG_FUNCTION(
this);
626 NS_ASSERT_MSG(m_x2InterfaceSockets.find(params.
sourceCellId) != m_x2InterfaceSockets.end(),
627 "Socket infos not defined for sourceCellId = " << params.
sourceCellId);
629 Ptr<Socket> localSocket = m_x2InterfaceSockets[params.
sourceCellId]->m_localCtrlPlaneSocket;
630 Ipv4Address remoteIpAddr = m_x2InterfaceSockets[params.
sourceCellId]->m_remoteIpAddr;
632 NS_LOG_LOGIC(
"localSocket = " << localSocket);
633 NS_LOG_LOGIC(
"remoteIpAddr = " << remoteIpAddr);
635 NS_LOG_INFO(
"Send X2 message: UE CONTEXT RELEASE");
648 NS_LOG_INFO(
"X2 header: " << x2Header);
649 NS_LOG_INFO(
"X2 UeContextRelease header: " << x2UeCtxReleaseHeader);
652 Ptr<Packet> packet = Create<Packet>();
653 packet->AddHeader(x2UeCtxReleaseHeader);
654 packet->AddHeader(x2Header);
655 NS_LOG_INFO(
"packetLen = " << packet->GetSize());
658 localSocket->SendTo(packet, 0, InetSocketAddress(remoteIpAddr, m_x2cUdpPort));
664 NS_LOG_FUNCTION(
this);
669 NS_ASSERT_MSG(m_x2InterfaceSockets.find(params.
targetCellId) != m_x2InterfaceSockets.end(),
670 "Missing infos for targetCellId = " << params.
targetCellId);
671 Ptr<NrX2IfaceInfo> socketInfo = m_x2InterfaceSockets[params.
targetCellId];
672 Ptr<Socket> sourceSocket = socketInfo->m_localCtrlPlaneSocket;
673 Ipv4Address targetIpAddr = socketInfo->m_remoteIpAddr;
675 NS_LOG_LOGIC(
"sourceSocket = " << sourceSocket);
676 NS_LOG_LOGIC(
"targetIpAddr = " << targetIpAddr);
678 NS_LOG_INFO(
"Send X2 message: LOAD INFORMATION");
690 NS_LOG_INFO(
"X2 header: " << x2Header);
691 NS_LOG_INFO(
"X2 LoadInformation header: " << x2LoadInfoHeader);
694 Ptr<Packet> packet = Create<Packet>();
695 packet->AddHeader(x2LoadInfoHeader);
696 packet->AddHeader(x2Header);
697 NS_LOG_INFO(
"packetLen = " << packet->GetSize());
700 sourceSocket->SendTo(packet, 0, InetSocketAddress(targetIpAddr, m_x2cUdpPort));
706 NS_LOG_FUNCTION(
this);
713 NS_ASSERT_MSG(m_x2InterfaceSockets.find(params.
targetCellId) != m_x2InterfaceSockets.end(),
714 "Missing infos for targetCellId = " << params.
targetCellId);
715 Ptr<NrX2IfaceInfo> socketInfo = m_x2InterfaceSockets[params.
targetCellId];
716 Ptr<Socket> sourceSocket = socketInfo->m_localCtrlPlaneSocket;
717 Ipv4Address targetIpAddr = socketInfo->m_remoteIpAddr;
719 NS_LOG_LOGIC(
"sourceSocket = " << sourceSocket);
720 NS_LOG_LOGIC(
"targetIpAddr = " << targetIpAddr);
722 NS_LOG_INFO(
"Send X2 message: RESOURCE STATUS UPDATE");
736 NS_LOG_INFO(
"X2 header: " << x2Header);
737 NS_LOG_INFO(
"X2 ResourceStatusUpdate header: " << x2ResourceStatUpdHeader);
740 Ptr<Packet> packet = Create<Packet>();
741 packet->AddHeader(x2ResourceStatUpdHeader);
742 packet->AddHeader(x2Header);
743 NS_LOG_INFO(
"packetLen = " << packet->GetSize());
746 sourceSocket->SendTo(packet, 0, InetSocketAddress(targetIpAddr, m_x2cUdpPort));
752 NS_LOG_FUNCTION(
this);
756 NS_LOG_LOGIC(
"gtpTeid = " << params.
gtpTeid);
758 NS_ASSERT_MSG(m_x2InterfaceSockets.find(params.
targetCellId) != m_x2InterfaceSockets.end(),
759 "Missing infos for targetCellId = " << params.
targetCellId);
760 Ptr<NrX2IfaceInfo> socketInfo = m_x2InterfaceSockets[params.
targetCellId];
761 Ptr<Socket> sourceSocket = socketInfo->m_localUserPlaneSocket;
762 Ipv4Address targetIpAddr = socketInfo->m_remoteIpAddr;
764 NS_LOG_LOGIC(
"sourceSocket = " << sourceSocket);
765 NS_LOG_LOGIC(
"targetIpAddr = " << targetIpAddr);
771 NS_LOG_INFO(
"GTP-U header: " << gtpu);
773 Ptr<Packet> packet = params.
ueData;
774 packet->AddHeader(gtpu);
776 NS_LOG_INFO(
"Forward UE DATA through X2 interface");
777 sourceSocket->SendTo(packet, 0, InetSocketAddress(targetIpAddr, m_x2uUdpPort));
783 NS_LOG_FUNCTION(
this);
790 NS_ASSERT_MSG(m_x2InterfaceSockets.find(params.
targetCellId) != m_x2InterfaceSockets.end(),
791 "Socket infos not defined for targetCellId = " << params.
targetCellId);
793 Ptr<Socket> localSocket = m_x2InterfaceSockets[params.
targetCellId]->m_localCtrlPlaneSocket;
794 Ipv4Address remoteIpAddr = m_x2InterfaceSockets[params.
targetCellId]->m_remoteIpAddr;
796 NS_LOG_LOGIC(
"localSocket = " << localSocket);
797 NS_LOG_LOGIC(
"remoteIpAddr = " << remoteIpAddr);
799 NS_LOG_INFO(
"Send X2 message: HANDOVER CANCEL");
813 NS_LOG_INFO(
"X2 header: " << x2Header);
814 NS_LOG_INFO(
"X2 UeContextRelease header: " << x2HandoverCancelHeader);
817 Ptr<Packet> packet = Create<Packet>();
818 packet->AddHeader(x2HandoverCancelHeader);
819 packet->AddHeader(x2Header);
820 NS_LOG_INFO(
"packetLen = " << packet->GetSize());
823 localSocket->SendTo(packet, 0, InetSocketAddress(remoteIpAddr, m_x2cUdpPort));
uint32_t GetLengthOfIes() const
Get length of IEs function.
void SetNewGnbUeX2apId(uint16_t x2apId)
Set new gNB UE X2 AP ID function.
uint32_t GetNumberOfIes() const
Get number of IEs function.
void SetOldGnbUeX2apId(uint16_t x2apId)
Set old gNB UE X2 AP ID function.
uint16_t GetNewGnbUeX2apId() const
Get new gNB UE X2 AP ID function.
void SetCause(uint16_t cause)
Set cause function.
uint16_t GetCause() const
Get cause function.
uint16_t GetOldGnbUeX2apId() const
Get old gNB UE X2 AP ID function.
uint32_t GetNumberOfIes() const
uint32_t GetLengthOfIes() const
uint16_t GetCriticalityDiagnostics() const
uint16_t GetOldGnbUeX2apId() const
void SetCriticalityDiagnostics(uint16_t criticalityDiagnostics)
void SetOldGnbUeX2apId(uint16_t x2apId)
uint16_t GetCause() const
void SetCause(uint16_t cause)
std::vector< NrEpcX2Sap::ErabAdmittedItem > GetAdmittedBearers() const
uint16_t GetOldGnbUeX2apId() const
uint32_t GetLengthOfIes() const
void SetNotAdmittedBearers(std::vector< NrEpcX2Sap::ErabNotAdmittedItem > bearers)
void SetAdmittedBearers(std::vector< NrEpcX2Sap::ErabAdmittedItem > bearers)
std::vector< NrEpcX2Sap::ErabNotAdmittedItem > GetNotAdmittedBearers() const
void SetNewGnbUeX2apId(uint16_t x2apId)
void SetOldGnbUeX2apId(uint16_t x2apId)
uint32_t GetNumberOfIes() const
uint16_t GetNewGnbUeX2apId() const
uint32_t GetNumberOfIes() const
void SetTargetCellId(uint16_t targetCellId)
uint16_t GetOldGnbUeX2apId() const
void SetUeAggregateMaxBitRateDownlink(uint64_t bitRate)
void SetOldGnbUeX2apId(uint16_t x2apId)
void SetMmeUeS1apId(uint32_t mmeUeS1apId)
uint64_t GetUeAggregateMaxBitRateUplink() const
void SetBearers(std::vector< NrEpcX2Sap::ErabToBeSetupItem > bearers)
uint32_t GetLengthOfIes() const
void SetUeAggregateMaxBitRateUplink(uint64_t bitRate)
void SetCause(uint16_t cause)
uint16_t GetTargetCellId() const
uint16_t GetCause() const
uint64_t GetUeAggregateMaxBitRateDownlink() const
std::vector< NrEpcX2Sap::ErabToBeSetupItem > GetBearers() const
uint32_t GetMmeUeS1apId() const
virtual void DoSendResourceStatusUpdate(NrEpcX2SapProvider::ResourceStatusUpdateParams params)
NrEpcX2SapProvider * m_x2SapProvider
X2 SAP provider.
void AddX2Interface(uint16_t gnb1CellId, Ipv4Address gnb1X2Address, std::vector< uint16_t > gnb2CellIds, Ipv4Address gnb2X2Address)
virtual void DoSendUeContextRelease(NrEpcX2SapProvider::UeContextReleaseParams params)
virtual void DoSendLoadInformation(NrEpcX2SapProvider::LoadInformationParams params)
void RecvFromX2uSocket(Ptr< Socket > socket)
NrEpcX2SapProvider * GetEpcX2SapProvider()
friend class NrEpcX2SpecificEpcX2SapProvider< NrEpcX2 >
allow NrEpcX2SpecificEpcX2SapProvider<NrEpcX2> class friend access
virtual void DoSendUeData(NrEpcX2SapProvider::UeDataParams params)
virtual void DoSendHandoverRequestAck(NrEpcX2SapProvider::HandoverRequestAckParams params)
void SetEpcX2SapUser(NrEpcX2SapUser *s)
virtual void DoSendHandoverPreparationFailure(NrEpcX2SapProvider::HandoverPreparationFailureParams params)
virtual void DoSendHandoverCancel(NrEpcX2SapProvider::HandoverCancelParams params)
Send Handover Cancel function.
virtual void DoSendSnStatusTransfer(NrEpcX2SapProvider::SnStatusTransferParams params)
virtual void DoSendHandoverRequest(NrEpcX2SapProvider::HandoverRequestParams params)
void RecvFromX2cSocket(Ptr< Socket > socket)
static TypeId GetTypeId()
Get the type ID.
NrEpcX2SapUser * m_x2SapUser
X2 SAP user.
virtual void RecvUeData(UeDataParams params)=0
virtual void RecvUeContextRelease(UeContextReleaseParams params)=0
virtual void RecvResourceStatusUpdate(ResourceStatusUpdateParams params)=0
virtual void RecvHandoverCancel(HandoverCancelParams params)=0
virtual void RecvHandoverRequestAck(HandoverRequestAckParams params)=0
virtual void RecvLoadInformation(LoadInformationParams params)=0
virtual void RecvSnStatusTransfer(SnStatusTransferParams params)=0
virtual void RecvHandoverRequest(HandoverRequestParams params)=0
virtual void RecvHandoverPreparationFailure(HandoverPreparationFailureParams params)=0
NrX2CellInfo(std::vector< uint16_t > localCellIds, std::vector< uint16_t > remoteCellIds)
std::vector< uint16_t > m_remoteCellIds
remote cell IDs
std::vector< uint16_t > m_localCellIds
local cell IDs
NrX2CellInfo & operator=(const NrX2CellInfo &value)
NrX2IfaceInfo & operator=(const NrX2IfaceInfo &value)
Ipv4Address m_remoteIpAddr
remote IP address
Ptr< Socket > m_localCtrlPlaneSocket
local control plane socket
Ptr< Socket > m_localUserPlaneSocket
local user plane socket
NrX2IfaceInfo(Ipv4Address remoteIpAddr, Ptr< Socket > localCtrlPlaneSocket, Ptr< Socket > localUserPlaneSocket)
Parameters of the HANDOVER CANCEL message.
uint16_t targetCellId
target cell ID
uint16_t oldGnbUeX2apId
old gNB UE X2 AP ID
uint16_t newGnbUeX2apId
new gNB UE X2 AP ID
uint16_t sourceCellId
source cell ID
Parameters of the HANDOVER PREPARATION FAILURE message.
uint16_t oldGnbUeX2apId
old gNB UE X2 AP ID
uint16_t criticalityDiagnostics
criticality diagnostics
uint16_t targetCellId
target cell ID
uint16_t sourceCellId
source cell ID
Parameters of the HANDOVER REQUEST ACKNOWLEDGE message.
std::vector< ErabNotAdmittedItem > notAdmittedBearers
not admitted bearers
Ptr< Packet > rrcContext
RRC context.
uint16_t newGnbUeX2apId
new gNB UE X2 AP ID
uint16_t oldGnbUeX2apId
old gNB UE X2 AP ID
uint16_t targetCellId
target cell ID
uint16_t sourceCellId
source cell ID
std::vector< ErabAdmittedItem > admittedBearers
admitted bearers
Parameters of the HANDOVER REQUEST message.
uint16_t sourceCellId
source cell ID
uint64_t ueAggregateMaxBitRateDownlink
UE aggregate max bit rate downlink.
uint16_t targetCellId
target cell ID
uint32_t mmeUeS1apId
MME UE S1 AP ID.
std::vector< ErabToBeSetupItem > bearers
bearers
Ptr< Packet > rrcContext
RRC context.
uint64_t ueAggregateMaxBitRateUplink
UE aggregate max bit rate uplink.
uint16_t oldGnbUeX2apId
old gNB UE X2 AP ID
Parameters of the RESOURCE STATUS UPDATE message.
std::vector< CellMeasurementResultItem > cellMeasurementResultList
cell measurement result list
uint16_t gnb1MeasurementId
gNB1 measurement ID
uint16_t gnb2MeasurementId
gNB2 measurement ID
uint16_t targetCellId
target cell ID
Parameters of the SN STATUS TRANSFER message.
std::vector< ErabsSubjectToStatusTransferItem > erabsSubjectToStatusTransferList
ERABs subject to status transfer list.
uint16_t oldGnbUeX2apId
old gNB UE X2 AP ID
uint16_t newGnbUeX2apId
new gNB UE X2 AP ID
uint16_t sourceCellId
source cell ID
uint16_t targetCellId
target cell ID
Parameters of the UE CONTEXT RELEASE message.
uint16_t oldGnbUeX2apId
old gNB UE X2 AP ID
uint16_t sourceCellId
source cell ID
uint16_t newGnbUeX2apId
new gNB UE X2 AP ID
Parameters of the UE DATA primitive.
uint32_t gtpTeid
GTP TEID.
uint16_t targetCellId
target cell ID
uint16_t sourceCellId
source cell ID
Ptr< Packet > ueData
UE data.