Add SnStatusTransfer message

This commit is contained in:
Manuel Requena
2012-12-05 13:49:49 +01:00
parent ce7b08f209
commit 4fbbbb2750
2 changed files with 82 additions and 13 deletions

View File

@@ -164,6 +164,10 @@ EpcX2::RecvFromX2cSocket (Ptr<Socket> socket)
Ptr<Packet> packet = socket->Recv ();
NS_LOG_LOGIC ("packetLen = " << packet->GetSize ());
NS_ASSERT_MSG (m_x2InterfaceCellIds.find (socket) != m_x2InterfaceCellIds.end (),
"Missing infos of local and remote CellId");
Ptr<X2CellInfo> cellsInfo = m_x2InterfaceCellIds [socket];
EpcX2Header x2Header;
packet->RemoveHeader (x2Header);
@@ -172,9 +176,6 @@ EpcX2::RecvFromX2cSocket (Ptr<Socket> socket)
uint8_t messageType = x2Header.GetMessageType ();
uint8_t procedureCode = x2Header.GetProcedureCode ();
NS_LOG_LOGIC ("messageType = " << (uint32_t)messageType);
NS_LOG_LOGIC ("procedureCode = " << (uint32_t)procedureCode);
if (procedureCode == EpcX2Header::HandoverPreparation)
{
if (messageType == EpcX2Header::InitiatingMessage)
@@ -186,10 +187,6 @@ EpcX2::RecvFromX2cSocket (Ptr<Socket> socket)
NS_LOG_INFO ("X2 HandoverRequest header: " << x2HoReqHeader);
NS_ASSERT_MSG (m_x2InterfaceCellIds.find (socket) != m_x2InterfaceCellIds.end (),
"Missing infos of local and remote CellId");
Ptr<X2CellInfo> cellsInfo = m_x2InterfaceCellIds [socket];
EpcX2SapUser::HandoverRequestParams params;
params.oldEnbUeX2apId = x2HoReqHeader.GetOldEnbUeX2apId ();
params.cause = x2HoReqHeader.GetCause ();
@@ -216,9 +213,7 @@ EpcX2::RecvFromX2cSocket (Ptr<Socket> socket)
EpcX2HandoverRequestAckHeader x2HoReqAckHeader;
packet->RemoveHeader (x2HoReqAckHeader);
NS_ASSERT_MSG (m_x2InterfaceCellIds.find (socket) != m_x2InterfaceCellIds.end (),
"Missing infos of local and remote CellId");
Ptr<X2CellInfo> cellsInfo = m_x2InterfaceCellIds [socket];
NS_LOG_INFO ("X2 HandoverRequestAck header: " << x2HoReqAckHeader);
EpcX2SapUser::HandoverRequestAckParams params;
params.oldEnbUeX2apId = x2HoReqAckHeader.GetOldEnbUeX2apId ();
@@ -243,9 +238,7 @@ EpcX2::RecvFromX2cSocket (Ptr<Socket> socket)
EpcX2HandoverPreparationFailureHeader x2HoPrepFailHeader;
packet->RemoveHeader (x2HoPrepFailHeader);
NS_ASSERT_MSG (m_x2InterfaceCellIds.find (socket) != m_x2InterfaceCellIds.end (),
"Missing infos of local and remote CellId");
Ptr<X2CellInfo> cellsInfo = m_x2InterfaceCellIds [socket];
NS_LOG_INFO ("X2 HandoverPreparationFailure header: " << x2HoPrepFailHeader);
EpcX2SapUser::HandoverPreparationFailureParams params;
params.oldEnbUeX2apId = x2HoPrepFailHeader.GetOldEnbUeX2apId ();
@@ -282,6 +275,33 @@ EpcX2::RecvFromX2cSocket (Ptr<Socket> socket)
m_x2SapUser->RecvLoadInformation (params);
}
}
else if (procedureCode == EpcX2Header::SnStatusTransfer)
{
if (messageType == EpcX2Header::InitiatingMessage)
{
NS_LOG_LOGIC ("Recv X2 message: SN STATUS TRANSFER");
EpcX2SnStatusTransferHeader x2SnStatusXferHeader;
packet->RemoveHeader (x2SnStatusXferHeader);
NS_LOG_INFO ("X2 SnStatusTransfer header: " << x2SnStatusXferHeader);
EpcX2SapUser::SnStatusTransferParams params;
params.oldEnbUeX2apId = x2SnStatusXferHeader.GetOldEnbUeX2apId ();
params.newEnbUeX2apId = x2SnStatusXferHeader.GetNewEnbUeX2apId ();
params.sourceCellId = cellsInfo->m_remoteCellId;
params.targetCellId = cellsInfo->m_localCellId;
params.erabsSubjectToStatusTransferList = x2SnStatusXferHeader.GetErabsSubjectToStatusTransferList ();
NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
NS_LOG_LOGIC ("newEnbUeX2apId = " << params.newEnbUeX2apId);
NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
NS_LOG_LOGIC ("erabsList size = " << params.erabsSubjectToStatusTransferList.size ());
m_x2SapUser->RecvSnStatusTransfer (params);
}
}
else if (procedureCode == EpcX2Header::UeContextRelease)
{
if (messageType == EpcX2Header::InitiatingMessage)
@@ -481,6 +501,54 @@ EpcX2::DoSendHandoverPreparationFailure (EpcX2SapProvider::HandoverPreparationFa
}
void
EpcX2::DoSendSnStatusTransfer (EpcX2SapProvider::SnStatusTransferParams params)
{
NS_LOG_FUNCTION (this);
NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId);
NS_LOG_LOGIC ("newEnbUeX2apId = " << params.newEnbUeX2apId);
NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId);
NS_LOG_LOGIC ("targetCellId = " << params.targetCellId);
NS_LOG_LOGIC ("erabsList size = " << params.erabsSubjectToStatusTransferList.size ());
NS_ASSERT_MSG (m_x2InterfaceSockets.find (params.targetCellId) != m_x2InterfaceSockets.end (),
"Socket infos not defined for targetCellId = " << params.targetCellId);
Ptr<Socket> localSocket = m_x2InterfaceSockets [params.targetCellId]->m_localSocket;
Ipv4Address remoteIpAddr = m_x2InterfaceSockets [params.targetCellId]->m_remoteIpAddr;
NS_LOG_LOGIC ("localSocket = " << localSocket);
NS_LOG_LOGIC ("remoteIpAddr = " << remoteIpAddr);
NS_LOG_INFO ("Send X2 message: SN STATUS TRANSFER");
// Build the X2 message
EpcX2SnStatusTransferHeader x2SnStatusXferHeader;
x2SnStatusXferHeader.SetOldEnbUeX2apId (params.oldEnbUeX2apId);
x2SnStatusXferHeader.SetNewEnbUeX2apId (params.newEnbUeX2apId);
x2SnStatusXferHeader.SetErabsSubjectToStatusTransferList (params.erabsSubjectToStatusTransferList);
EpcX2Header x2Header;
x2Header.SetMessageType (EpcX2Header::InitiatingMessage);
x2Header.SetProcedureCode (EpcX2Header::SnStatusTransfer);
x2Header.SetLengthOfIes (x2SnStatusXferHeader.GetLengthOfIes ());
x2Header.SetNumberOfIes (x2SnStatusXferHeader.GetNumberOfIes ());
NS_LOG_INFO ("X2 header: " << x2Header);
NS_LOG_INFO ("X2 SnStatusTransfer header: " << x2SnStatusXferHeader);
// Build the X2 packet
Ptr<Packet> packet = Create <Packet> ();
packet->AddHeader (x2SnStatusXferHeader);
packet->AddHeader (x2Header);
NS_LOG_INFO ("packetLen = " << packet->GetSize ());
// Send the X2 message through the socket
localSocket->SendTo (packet, 0, InetSocketAddress (remoteIpAddr, m_x2cUdpPort));
}
void
EpcX2::DoSendUeContextRelease (EpcX2SapProvider::UeContextReleaseParams params)
{

View File

@@ -116,6 +116,7 @@ protected:
virtual void DoSendHandoverRequest (EpcX2SapProvider::HandoverRequestParams params);
virtual void DoSendHandoverRequestAck (EpcX2SapProvider::HandoverRequestAckParams params);
virtual void DoSendHandoverPreparationFailure (EpcX2SapProvider::HandoverPreparationFailureParams params);
virtual void DoSendSnStatusTransfer (EpcX2SapProvider::SnStatusTransferParams params);
virtual void DoSendUeContextRelease (EpcX2SapProvider::UeContextReleaseParams params);
virtual void DoSendLoadInformation (EpcX2SapProvider::LoadInformationParams params);
virtual void DoSendResourceStatusUpdate (EpcX2SapProvider::ResourceStatusUpdateParams params);