From 790109a67af3688e925965c8145b1bebe24e5716 Mon Sep 17 00:00:00 2001 From: Manuel Requena Date: Fri, 20 Jul 2012 18:55:47 +0200 Subject: [PATCH] Use new parameters of the X2 SAP --- src/lte/model/epc-x2.cc | 91 ++++++++++++++++++++++++++++++----------- 1 file changed, 66 insertions(+), 25 deletions(-) diff --git a/src/lte/model/epc-x2.cc b/src/lte/model/epc-x2.cc index 43d297192..b623b13d3 100644 --- a/src/lte/model/epc-x2.cc +++ b/src/lte/model/epc-x2.cc @@ -155,35 +155,48 @@ EpcX2::RecvFromX2cSocket (Ptr socket) EpcX2Header x2Header; packet->RemoveHeader (x2Header); + NS_LOG_LOGIC ("X2 header: " << x2Header); + 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::HANDOVER_PREPARATION_TYPE) + if (procedureCode == EpcX2Header::HandoverPreparation) { - if (messageType == EpcX2Header::INITIATING_MESSAGE) + if (messageType == EpcX2Header::InitiatingMessage) { NS_LOG_LOGIC ("Recv X2 message: HANDOVER REQUEST"); EpcX2HandoverRequestHeader x2HoReqHeader; packet->RemoveHeader (x2HoReqHeader); + 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 cellsInfo = m_x2InterfaceCellIds [socket]; EpcX2SapUser::HandoverRequestParams params; + params.oldEnbUeX2apId = x2HoReqHeader.GetOldEnbUeX2apId (); params.cause = x2HoReqHeader.GetCause (); params.sourceCellId = cellsInfo->m_remoteCellId; params.targetCellId = x2HoReqHeader.GetTargetCellId (); + params.ueAggregateMaxBitRateDownlink = x2HoReqHeader.GetUeAggregateMaxBitRateDownlink (); + params.ueAggregateMaxBitRateUplink = x2HoReqHeader.GetUeAggregateMaxBitRateUplink (); + params.bearers = x2HoReqHeader.GetBearers (); + params.rrcContext = packet; + + NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId); + NS_LOG_LOGIC ("targetCellId = " << params.targetCellId); + NS_LOG_LOGIC ("cellsInfo->m_localCellId = " << cellsInfo->m_localCellId); NS_ASSERT_MSG (params.targetCellId == cellsInfo->m_localCellId, "TargetCellId mismatches with localCellId"); m_x2SapUser->RecvHandoverRequest (params); } - else // messageType == SUCCESSFUL_OUTCOME + else // messageType == SuccessfulOutcome { NS_LOG_LOGIC ("Recv X2 message: HANDOVER REQUEST ACK"); @@ -195,9 +208,18 @@ EpcX2::RecvFromX2cSocket (Ptr socket) Ptr cellsInfo = m_x2InterfaceCellIds [socket]; EpcX2SapUser::HandoverRequestAckParams params; - params.cause = x2HoReqAckHeader.GetCause (); + params.oldEnbUeX2apId = x2HoReqAckHeader.GetOldEnbUeX2apId (); + params.newEnbUeX2apId = x2HoReqAckHeader.GetNewEnbUeX2apId (); params.sourceCellId = cellsInfo->m_localCellId; params.targetCellId = cellsInfo->m_remoteCellId; + params.admittedBearers = x2HoReqAckHeader.GetAdmittedBearers (); + params.notAdmittedBearers = x2HoReqAckHeader.GetNotAdmittedBearers (); + params.rrcContext = packet; + + NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId); + NS_LOG_LOGIC ("newEnbUeX2apId = " << params.newEnbUeX2apId); + NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId); + NS_LOG_LOGIC ("targetCellId = " << params.targetCellId); m_x2SapUser->RecvHandoverRequestAck (params); } @@ -213,6 +235,7 @@ EpcX2::DoSendHandoverRequest (EpcX2SapProvider::HandoverRequestParams params) { NS_LOG_FUNCTION (this); + NS_LOG_LOGIC ("oldEnbUeX2apId = " << params.oldEnbUeX2apId); NS_LOG_LOGIC ("sourceCellId = " << params.sourceCellId); NS_LOG_LOGIC ("targetCellId = " << params.targetCellId); @@ -228,23 +251,31 @@ EpcX2::DoSendHandoverRequest (EpcX2SapProvider::HandoverRequestParams params) NS_LOG_INFO ("Send X2 message: HANDOVER REQUEST"); // Build the X2 message - EpcX2Header x2Header; - x2Header.SetMessageType (EpcX2Header::INITIATING_MESSAGE); - x2Header.SetProcedureCode (EpcX2Header::HANDOVER_PREPARATION_TYPE); - EpcX2HandoverRequestHeader x2HoReqHeader; - x2HoReqHeader.SetCause (1111); + x2HoReqHeader.SetOldEnbUeX2apId (params.oldEnbUeX2apId); + x2HoReqHeader.SetCause (params.cause); x2HoReqHeader.SetTargetCellId (params.targetCellId); + x2HoReqHeader.SetUeAggregateMaxBitRateDownlink (params.ueAggregateMaxBitRateDownlink); + x2HoReqHeader.SetUeAggregateMaxBitRateUplink (params.ueAggregateMaxBitRateUplink); + x2HoReqHeader.SetBearers (params.bearers); + + EpcX2Header x2Header; + x2Header.SetMessageType (EpcX2Header::InitiatingMessage); + x2Header.SetProcedureCode (EpcX2Header::HandoverPreparation); +// x2Header.SetLengthOfIes (x2HoReqHeader.GetLengthOfIes ()); +// x2Header.SetNumberOfIes (x2HoReqHeader.GetNumberOfIes ()); + + NS_LOG_INFO ("X2 header: " << x2Header); + NS_LOG_INFO ("X2 HandoverRequest header: " << x2HoReqHeader); // Build the X2 packet - Ptr packet = Create (); + Ptr packet = params.rrcContext; packet->AddHeader (x2HoReqHeader); packet->AddHeader (x2Header); NS_LOG_INFO ("packetLen = " << packet->GetSize ()); // Send the X2 message through the socket sourceSocket->SendTo (packet, 0, InetSocketAddress (targetIpAddr, m_x2cUdpPort)); - } @@ -253,6 +284,8 @@ EpcX2::DoSendHandoverRequestAck (EpcX2SapProvider::HandoverRequestAckParams para { 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); @@ -265,22 +298,30 @@ EpcX2::DoSendHandoverRequestAck (EpcX2SapProvider::HandoverRequestAckParams para NS_LOG_LOGIC ("localSocket = " << localSocket); NS_LOG_LOGIC ("remoteIpAddr = " << remoteIpAddr); - // Build the X2 message - EpcX2Header x2Header; - x2Header.SetMessageType (EpcX2Header::SUCCESSFUL_OUTCOME); - x2Header.SetProcedureCode (EpcX2Header::HANDOVER_PREPARATION_TYPE); - - EpcX2HandoverRequestAckHeader x2HoReqHeader; - x2HoReqHeader.SetCause (2222); - x2HoReqHeader.SetTargetCellId (params.targetCellId); - - // Build the X2 packet - Ptr packet = Create (); - packet->AddHeader (x2HoReqHeader); - packet->AddHeader (x2Header); - NS_LOG_INFO ("Send X2 message: HANDOVER REQUEST ACK"); + // Build the X2 message + EpcX2Header x2Header; + x2Header.SetMessageType (EpcX2Header::SuccessfulOutcome); + x2Header.SetProcedureCode (EpcX2Header::HandoverPreparation); + + EpcX2HandoverRequestAckHeader x2HoAckHeader; + x2HoAckHeader.SetOldEnbUeX2apId (params.oldEnbUeX2apId); + x2HoAckHeader.SetNewEnbUeX2apId (params.newEnbUeX2apId); + x2HoAckHeader.SetAdmittedBearers (params.admittedBearers); + x2HoAckHeader.SetNotAdmittedBearers (params.notAdmittedBearers); + + NS_LOG_INFO ("X2 header: " << x2Header); + NS_LOG_INFO ("X2 HandoverAck header: " << x2HoAckHeader); + NS_LOG_INFO ("RRC context: " << params.rrcContext); + + // Build the X2 packet + Ptr packet = (params.rrcContext != 0) ? (params.rrcContext) : (Create ()); + packet->AddHeader (x2HoAckHeader); + packet->AddHeader (x2Header); + NS_LOG_INFO ("packetLen = " << packet->GetSize ()); + + // Send the X2 message through the socket localSocket->SendTo (packet, 0, InetSocketAddress (remoteIpAddr, m_x2cUdpPort)); }