Real implementation of ReestablishmentRequest, ReconfigurationCompleteHeader and ReestablishmentComplete

This commit is contained in:
Lluis Parcerisa
2012-12-05 15:12:19 +01:00
parent 9d174b6fa6
commit d841a9b664
3 changed files with 481 additions and 178 deletions

View File

@@ -40,6 +40,12 @@ RrcAsn1Header::RrcAsn1Header ()
{
}
int
RrcAsn1Header::GetMessageType ()
{
return m_messageType;
}
void
RrcAsn1Header::SerializeDrbToAddModList (std::list<LteRrcSap::DrbToAddMod> drbToAddModList) const
{
@@ -560,46 +566,6 @@ RrcAsn1Header::DeserializeRadioResourceConfigDedicated (LteRrcSap::RadioResource
return bIterator;
}
void
RrcAsn1Header::SerializeUlDcchMessage(int messageType) const
{
SerializeSequence(std::bitset<0>(),false);
// Choose c1
SerializeChoice(2,0);
// Choose message type
SerializeChoice(16,messageType);
}
void
RrcAsn1Header::SerializeUlCcchMessage(int messageType) const
{
SerializeSequence(std::bitset<0>(),false);
// Choose c1
SerializeChoice(2,0);
// Choose message type
SerializeChoice(2,messageType);
}
void
RrcAsn1Header::SerializeDlDcchMessage(int messageType) const
{
SerializeSequence(std::bitset<0>(),false);
// Choose c1
SerializeChoice(2,0);
// Choose message type
SerializeChoice(16,messageType);
}
void
RrcAsn1Header::SerializeDlCcchMessage(int messageType) const
{
SerializeSequence(std::bitset<0>(),false);
// Choose c1
SerializeChoice(2,0);
// Choose message type
SerializeChoice(4,messageType);
}
Buffer::Iterator
RrcAsn1Header::DeserializeSrbToAddModList (std::list<LteRrcSap::SrbToAddMod> *srbToAddModList, Buffer::Iterator bIterator)
{
@@ -1468,98 +1434,6 @@ RrcAsn1Header::DeserializeRadioResourceConfigCommonSib (Buffer::Iterator bIterat
return bIterator;
}
Buffer::Iterator
RrcAsn1Header::DeserializeUlDcchMessage (Buffer::Iterator bIterator)
{
std::bitset<0> bitset0;
int n;
bIterator = DeserializeSequence(&bitset0,false,bIterator);
bIterator = DeserializeChoice(2,&n,bIterator);
if(n==1)
{
// Deserialize messageClassExtension
bIterator = DeserializeSequence(&bitset0,false,bIterator);
m_messageType = -1;
}
else if(n == 0)
{
// Deserialize c1
bIterator = DeserializeChoice(16,&m_messageType,bIterator);
}
return bIterator;
}
Buffer::Iterator
RrcAsn1Header::DeserializeUlCcchMessage (Buffer::Iterator bIterator)
{
std::bitset<0> bitset0;
int n;
bIterator = DeserializeSequence(&bitset0,false,bIterator);
bIterator = DeserializeChoice(2,&n,bIterator);
if(n==1)
{
// Deserialize messageClassExtension
bIterator = DeserializeSequence(&bitset0,false,bIterator);
m_messageType = -1;
}
else if(n == 0)
{
// Deserialize c1
bIterator = DeserializeChoice(2,&m_messageType,bIterator);
}
return bIterator;
}
Buffer::Iterator
RrcAsn1Header::DeserializeDlCcchMessage (Buffer::Iterator bIterator)
{
std::bitset<0> bitset0;
int n;
bIterator = DeserializeSequence(&bitset0,false,bIterator);
bIterator = DeserializeChoice(2,&n,bIterator);
if(n==1)
{
// Deserialize messageClassExtension
bIterator = DeserializeSequence(&bitset0,false,bIterator);
m_messageType = -1;
}
else if(n == 0)
{
// Deserialize c1
bIterator = DeserializeChoice(4,&m_messageType,bIterator);
}
return bIterator;
}
Buffer::Iterator
RrcAsn1Header::DeserializeDlDcchMessage (Buffer::Iterator bIterator)
{
std::bitset<0> bitset0;
int n;
bIterator = DeserializeSequence(&bitset0,false,bIterator);
bIterator = DeserializeChoice(2,&n,bIterator);
if(n==1)
{
// Deserialize messageClassExtension
bIterator = DeserializeSequence(&bitset0,false,bIterator);
m_messageType = -1;
}
else if(n == 0)
{
// Deserialize c1
bIterator = DeserializeChoice(16,&m_messageType,bIterator);
}
return bIterator;
}
//////////////////// RrcConnectionRequest class ////////////////////////
// Constructor
@@ -1585,6 +1459,8 @@ RrcConnectionRequestHeader::PreSerialize () const
{
m_serializationResult = Buffer ();
SerializeUlCcchMessage(1);
// Serialize RRCConnectionRequest sequence:
// no default or optional fields. Extension marker not present.
SerializeSequence<0> (std::bitset<0> (),false);
@@ -1628,6 +1504,8 @@ RrcConnectionRequestHeader::Deserialize (Buffer::Iterator bIterator)
std::bitset<0> optionalOrDefaultMask;
int selectedOption;
bIterator = DeserializeUlCcchMessage(bIterator);
// Deserialize RCConnectionRequest sequence
bIterator = DeserializeSequence (&optionalOrDefaultMask,false,bIterator);
@@ -1666,6 +1544,15 @@ RrcConnectionRequestHeader::SetMessage (RrcConnectionRequest msg)
m_isDataSerialized = false;
}
LteRrcSap::RrcConnectionRequest
RrcConnectionRequestHeader::GetMessage () const
{
RrcConnectionRequest msg;
msg.ueIdentity = (m_mmec.to_ulong() << 32) | (m_mTmsi.to_ulong());
return msg;
}
std::bitset<8>
RrcConnectionRequestHeader::getMmec () const
{
@@ -2010,6 +1897,14 @@ RrcConnectionReconfigurationCompleteHeader::SetMessage (RrcConnectionReconfigura
m_isDataSerialized = false;
}
LteRrcSap::RrcConnectionReconfigurationCompleted
RrcConnectionReconfigurationCompleteHeader::GetMessage() const
{
RrcConnectionReconfigurationCompleted msg;
msg.rrcTransactionIdentifier = m_rrcTransactionIdentifier;
return msg;
}
uint8_t
RrcConnectionReconfigurationCompleteHeader::GetRrcTransactionIdentifier () const
{
@@ -2027,6 +1922,8 @@ RrcConnectionReconfigurationHeader::PreSerialize () const
{
m_serializationResult = Buffer ();
SerializeDlDcchMessage(4);
// Serialize RRCConnectionSetupComplete sequence:
// no default or optional fields. Extension marker not present.
SerializeSequence<0> (std::bitset<0> (),false);
@@ -2149,9 +2046,10 @@ RrcConnectionReconfigurationHeader::PreSerialize () const
uint32_t
RrcConnectionReconfigurationHeader::Deserialize (Buffer::Iterator bIterator)
{
// pag 106
std::bitset<0> bitset0;
bIterator = DeserializeDlDcchMessage(bIterator);
// RRCConnectionReconfiguration sequence
bIterator = DeserializeSequence (&bitset0,false,bIterator);
@@ -2390,6 +2288,22 @@ RrcConnectionReconfigurationHeader::SetMessage (RrcConnectionReconfiguration msg
m_isDataSerialized = false;
}
LteRrcSap::RrcConnectionReconfiguration
RrcConnectionReconfigurationHeader::GetMessage () const
{
RrcConnectionReconfiguration msg;
msg.rrcTransactionIdentifier = m_rrcTransactionIdentifier;
msg.haveMeasConfig = m_haveMeasConfig;
msg.measConfig = m_measConfig;
msg.haveMobilityControlInfo = m_haveMobilityControlInfo;
msg.mobilityControlInfo = m_mobilityControlInfo;
msg.haveRadioResourceConfigDedicated = m_haveRadioResourceConfigDedicated;
msg.radioResourceConfigDedicated = m_radioResourceConfigDedicated;
return msg;
}
uint8_t
RrcConnectionReconfigurationHeader::GetRrcTransactionIdentifier () const
{
@@ -2745,6 +2659,8 @@ RrcConnectionReestablishmentRequestHeader::PreSerialize () const
{
m_serializationResult = Buffer ();
SerializeUlCcchMessage(0);
// Serialize RrcConnectionReestablishmentReques sequence:
// no default or optional fields. Extension marker not present.
SerializeSequence<0> (std::bitset<0> (),false);
@@ -2795,6 +2711,8 @@ RrcConnectionReestablishmentRequestHeader::Deserialize (Buffer::Iterator bIterat
std::bitset<0> bitset0;
int n;
bIterator = DeserializeUlCcchMessage(bIterator);
// Deserialize RrcConnectionReestablishmentRequest sequence
// 0 optional fields, no extension marker
bIterator = DeserializeSequence (&bitset0,false,bIterator);
@@ -2870,6 +2788,16 @@ RrcConnectionReestablishmentRequestHeader::SetMessage (RrcConnectionReestablishm
m_isDataSerialized = false;
}
LteRrcSap::RrcConnectionReestablishmentRequest
RrcConnectionReestablishmentRequestHeader::GetMessage () const
{
RrcConnectionReestablishmentRequest msg;
msg.ueIdentity = m_ueIdentity;
msg.reestablishmentCause = m_reestablishmentCause;
return msg;
}
LteRrcSap::ReestabUeIdentity
RrcConnectionReestablishmentRequestHeader::GetUeIdentity () const
{
@@ -3081,11 +3009,231 @@ RrcConnectionReestablishmentCompleteHeader::SetMessage (RrcConnectionReestablish
m_isDataSerialized = false;
}
LteRrcSap::RrcConnectionReestablishmentComplete
RrcConnectionReestablishmentCompleteHeader::GetMessage() const
{
RrcConnectionReestablishmentComplete msg;
msg.rrcTransactionIdentifier = m_rrcTransactionIdentifier;
return msg;
}
uint8_t
RrcConnectionReestablishmentCompleteHeader::GetRrcTransactionIdentifier () const
{
return m_rrcTransactionIdentifier;
}
/////////////////// RrcUlDcchMessage //////////////////////////////////
uint32_t
RrcUlDcchMessage::Deserialize(Buffer::Iterator bIterator)
{
DeserializeUlDcchMessage(bIterator);
return 1;
}
void
RrcUlDcchMessage::Print (std::ostream &os) const
{
std::cout << "UL DCCH MSG TYPE: " << m_messageType << std::endl;
}
void
RrcUlDcchMessage::PreSerialize () const
{
SerializeUlDcchMessage(m_messageType);
}
Buffer::Iterator
RrcUlDcchMessage::DeserializeUlDcchMessage (Buffer::Iterator bIterator)
{
std::bitset<0> bitset0;
int n;
bIterator = DeserializeSequence(&bitset0,false,bIterator);
bIterator = DeserializeChoice(2,&n,bIterator);
if(n==1)
{
// Deserialize messageClassExtension
bIterator = DeserializeSequence(&bitset0,false,bIterator);
m_messageType = -1;
}
else if(n == 0)
{
// Deserialize c1
bIterator = DeserializeChoice(16,&m_messageType,bIterator);
}
return bIterator;
}
void
RrcUlDcchMessage::SerializeUlDcchMessage(int messageType) const
{
SerializeSequence(std::bitset<0>(),false);
// Choose c1
SerializeChoice(2,0);
// Choose message type
SerializeChoice(16,messageType);
}
/////////////////// RrcDlDcchMessage //////////////////////////////////
uint32_t
RrcDlDcchMessage::Deserialize(Buffer::Iterator bIterator)
{
DeserializeDlDcchMessage(bIterator);
return 1;
}
void
RrcDlDcchMessage::Print (std::ostream &os) const
{
std::cout << "DL DCCH MSG TYPE: " << m_messageType << std::endl;
}
void
RrcDlDcchMessage::PreSerialize () const
{
SerializeDlDcchMessage(m_messageType);
}
Buffer::Iterator
RrcDlDcchMessage::DeserializeDlDcchMessage (Buffer::Iterator bIterator)
{
std::bitset<0> bitset0;
int n;
bIterator = DeserializeSequence(&bitset0,false,bIterator);
bIterator = DeserializeChoice(2,&n,bIterator);
if(n==1)
{
// Deserialize messageClassExtension
bIterator = DeserializeSequence(&bitset0,false,bIterator);
m_messageType = -1;
}
else if(n == 0)
{
// Deserialize c1
bIterator = DeserializeChoice(16,&m_messageType,bIterator);
}
return bIterator;
}
void
RrcDlDcchMessage::SerializeDlDcchMessage(int messageType) const
{
SerializeSequence(std::bitset<0>(),false);
// Choose c1
SerializeChoice(2,0);
// Choose message type
SerializeChoice(16,messageType);
}
/////////////////// RrcUlCcchMessage //////////////////////////////////
uint32_t
RrcUlCcchMessage::Deserialize(Buffer::Iterator bIterator)
{
DeserializeUlCcchMessage(bIterator);
return 1;
}
void
RrcUlCcchMessage::Print (std::ostream &os) const
{
std::cout << "UL CCCH MSG TYPE: " << m_messageType << std::endl;
}
void
RrcUlCcchMessage::PreSerialize () const
{
SerializeUlCcchMessage(m_messageType);
}
Buffer::Iterator
RrcUlCcchMessage::DeserializeUlCcchMessage (Buffer::Iterator bIterator)
{
std::bitset<0> bitset0;
int n;
bIterator = DeserializeSequence(&bitset0,false,bIterator);
bIterator = DeserializeChoice(2,&n,bIterator);
if(n==1)
{
// Deserialize messageClassExtension
bIterator = DeserializeSequence(&bitset0,false,bIterator);
m_messageType = -1;
}
else if(n == 0)
{
// Deserialize c1
bIterator = DeserializeChoice(2,&m_messageType,bIterator);
}
return bIterator;
}
void
RrcUlCcchMessage::SerializeUlCcchMessage(int messageType) const
{
SerializeSequence(std::bitset<0>(),false);
// Choose c1
SerializeChoice(2,0);
// Choose message type
SerializeChoice(2,messageType);
}
/////////////////// RrcDlCcchMessage //////////////////////////////////
uint32_t
RrcDlCcchMessage::Deserialize(Buffer::Iterator bIterator)
{
DeserializeDlCcchMessage(bIterator);
return 1;
}
void
RrcDlCcchMessage::Print (std::ostream &os) const
{
std::cout << "DL CCCH MSG TYPE: " << m_messageType << std::endl;
}
void
RrcDlCcchMessage::PreSerialize () const
{
SerializeDlCcchMessage(m_messageType);
}
Buffer::Iterator
RrcDlCcchMessage::DeserializeDlCcchMessage (Buffer::Iterator bIterator)
{
std::bitset<0> bitset0;
int n;
bIterator = DeserializeSequence(&bitset0,false,bIterator);
bIterator = DeserializeChoice(2,&n,bIterator);
if(n==1)
{
// Deserialize messageClassExtension
bIterator = DeserializeSequence(&bitset0,false,bIterator);
m_messageType = -1;
}
else if(n == 0)
{
// Deserialize c1
bIterator = DeserializeChoice(4,&m_messageType,bIterator);
}
return bIterator;
}
void
RrcDlCcchMessage::SerializeDlCcchMessage(int messageType) const
{
SerializeSequence(std::bitset<0>(),false);
// Choose c1
SerializeChoice(2,0);
// Choose message type
SerializeChoice(4,messageType);
}
} // namespace ns3

View File

@@ -51,10 +51,6 @@ protected:
void SerializeSystemInformationBlockType1 (LteRrcSap::SystemInformationBlockType1 systemInformationBlockType1) const;
void SerializeSystemInformationBlockType2 () const;
void SerializeRadioResourceConfigCommonSIB () const;
void SerializeUlDcchMessage(int msgType) const;
void SerializeUlCcchMessage(int msgType) const;
void SerializeDlDcchMessage(int msgType) const;
void SerializeDlCcchMessage(int msgType) const;
// Deserialization functions
Buffer::Iterator DeserializeDrbToAddModList (std::list<LteRrcSap::DrbToAddMod> *drbToAddModLis, Buffer::Iterator bIterator);
@@ -66,20 +62,73 @@ protected:
Buffer::Iterator DeserializeSystemInformationBlockType2 (Buffer::Iterator bIterator);
Buffer::Iterator DeserializeRadioResourceConfigCommon (Buffer::Iterator bIterator);
Buffer::Iterator DeserializeRadioResourceConfigCommonSib (Buffer::Iterator bIterator);
Buffer::Iterator DeserializeUlDcchMessage (Buffer::Iterator bIterator);
Buffer::Iterator DeserializeUlCcchMessage (Buffer::Iterator bIterator);
Buffer::Iterator DeserializeDlDcchMessage (Buffer::Iterator bIterator);
Buffer::Iterator DeserializeDlCcchMessage (Buffer::Iterator bIterator);
void Print (std::ostream &os, LteRrcSap::RadioResourceConfigDedicated radioResourceConfigDedicated) const;
int m_messageType;
};
/**
* This class only serves to discriminate which message type has been received
* in uplink (ue to eNb) for channel DCCH
*/
class RrcUlDcchMessage : public RrcAsn1Header
{
public:
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void PreSerialize () const;
void SerializeUlDcchMessage(int msgType) const;
Buffer::Iterator DeserializeUlDcchMessage (Buffer::Iterator bIterator);
};
/**
* This class only serves to discriminate which message type has been received
* in downlink (eNb to ue) for channel DCCH
*/
class RrcDlDcchMessage : public RrcAsn1Header
{
public:
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void PreSerialize () const;
void SerializeDlDcchMessage(int msgType) const;
Buffer::Iterator DeserializeDlDcchMessage (Buffer::Iterator bIterator);
};
/**
* This class only serves to discriminate which message type has been received
* in uplink (ue to eNb) for channel CCCH
*/
class RrcUlCcchMessage : public RrcAsn1Header
{
public:
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void PreSerialize () const;
void SerializeUlCcchMessage(int msgType) const;
Buffer::Iterator DeserializeUlCcchMessage (Buffer::Iterator bIterator);
};
/**
* This class only serves to discriminate which message type has been received
* in downlink (eNb to ue) for channel CCCH
*/
class RrcDlCcchMessage : public RrcAsn1Header
{
public:
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void PreSerialize () const;
void SerializeDlCcchMessage(int msgType) const;
Buffer::Iterator DeserializeDlCcchMessage (Buffer::Iterator bIterator);
};
/**
* This class manages the serialization/deserialization of RrcConnectionRequest IE
*/
class RrcConnectionRequestHeader : public RrcAsn1Header,
class RrcConnectionRequestHeader : public RrcUlCcchMessage,
LteRrcSap
{
public:
@@ -88,7 +137,7 @@ public:
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void SetMessage (RrcConnectionRequest msg);
RrcConnectionRequest GetMessage() const;
std::bitset<8> getMmec () const;
std::bitset<32> getMtmsi () const;
@@ -132,7 +181,7 @@ private:
/**
* This class manages the serialization/deserialization of RrcConnectionSetupComplete IE
*/
class RrcConnectionSetupCompleteHeader : public RrcAsn1Header,
class RrcConnectionSetupCompleteHeader : public RrcUlDcchMessage,
LteRrcSap
{
public:
@@ -153,7 +202,7 @@ private:
/**
* This class manages the serialization/deserialization of RrcConnectionSetupComplete IE
*/
class RrcConnectionReconfigurationCompleteHeader : public RrcAsn1Header,
class RrcConnectionReconfigurationCompleteHeader : public RrcUlDcchMessage,
LteRrcSap
{
public:
@@ -162,7 +211,7 @@ public:
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void SetMessage (RrcConnectionReconfigurationCompleted msg);
RrcConnectionReconfigurationCompleted GetMessage() const;
uint8_t GetRrcTransactionIdentifier () const;
private:
@@ -173,7 +222,7 @@ private:
/**
* This class manages the serialization/deserialization of RrcConnectionReconfiguration IE
*/
class RrcConnectionReconfigurationHeader : public RrcAsn1Header,
class RrcConnectionReconfigurationHeader : public RrcDlDcchMessage,
LteRrcSap
{
public:
@@ -183,6 +232,7 @@ public:
void Print (std::ostream &os) const;
void SetMessage (RrcConnectionReconfiguration msg);
RrcConnectionReconfiguration GetMessage () const;
uint8_t GetRrcTransactionIdentifier () const;
bool GetHaveMeasConfig ();
MeasConfig GetMeasConfig ();
@@ -230,7 +280,7 @@ private:
/**
* This class manages the serialization/deserialization of RRCConnectionReestablishmentRequest IE
*/
class RrcConnectionReestablishmentRequestHeader : public RrcAsn1Header,
class RrcConnectionReestablishmentRequestHeader : public RrcUlCcchMessage,
LteRrcSap
{
public:
@@ -239,6 +289,7 @@ public:
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void SetMessage (RrcConnectionReestablishmentRequest msg);
RrcConnectionReestablishmentRequest GetMessage () const;
ReestabUeIdentity GetUeIdentity () const;
ReestablishmentCause GetReestablishmentCause () const;
@@ -272,7 +323,7 @@ private:
/**
* This class manages the serialization/deserialization of RrcConnectionReestablishmentComplete IE
*/
class RrcConnectionReestablishmentCompleteHeader : public RrcAsn1Header,
class RrcConnectionReestablishmentCompleteHeader : public RrcUlDcchMessage,
LteRrcSap
{
public:
@@ -281,7 +332,7 @@ public:
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void SetMessage (RrcConnectionReestablishmentComplete msg);
RrcConnectionReestablishmentComplete GetMessage() const;
uint8_t GetRrcTransactionIdentifier () const;
private:

View File

@@ -15,7 +15,8 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Nicola Baldo <nbaldo@cttc.es>
* Authors: Nicola Baldo <nbaldo@cttc.es>
* Lluis Parcerisa <lparcerisa@cttc.cat>
*/
#include <ns3/fatal-error.h>
@@ -139,7 +140,22 @@ LteUeRrcProtocolReal::DoSendRrcConnectionRequest (LteRrcSap::RrcConnectionReques
// eNB we are currently attached to
m_rnti = m_rrc->GetRnti ();
SetEnbRrcSapProvider ();
/*
Ptr<Packet> packet = Create<Packet> ();
RrcConnectionRequestHeader rrcConnectionRequestHeader;
rrcConnectionRequestHeader.SetMessage (msg);
packet->AddHeader (rrcConnectionRequestHeader);
LteRlcSapProvider::TransmitPdcpPduParameters transmitPdcpPduParameters;
transmitPdcpPduParameters.pdcpPdu = packet;
transmitPdcpPduParameters.rnti = m_rnti;
transmitPdcpPduParameters.lcid = 0;
m_setupParameters.srb0SapProvider->TransmitPdcpPdu(transmitPdcpPduParameters);*/
Simulator::Schedule (RRC_REAL_MSG_DELAY,
&LteEnbRrcSapProvider::RecvRrcConnectionRequest,
m_enbRrcSapProvider,
@@ -152,10 +168,10 @@ LteUeRrcProtocolReal::DoSendRrcConnectionSetupCompleted (LteRrcSap::RrcConnectio
{
Ptr<Packet> packet = Create<Packet> ();
RrcConnectionSetupCompleteHeader source;
source.SetMessage (msg);
RrcConnectionSetupCompleteHeader rrcConnectionSetupCompleteHeader;
rrcConnectionSetupCompleteHeader.SetMessage (msg);
packet->AddHeader (source);
packet->AddHeader (rrcConnectionSetupCompleteHeader);
LtePdcpSapProvider::TransmitPdcpSduParameters transmitPdcpSduParameters;
transmitPdcpSduParameters.pdcpSdu = packet;
@@ -173,31 +189,55 @@ LteUeRrcProtocolReal::DoSendRrcConnectionReconfigurationCompleted (LteRrcSap::Rr
m_rnti = m_rrc->GetRnti ();
SetEnbRrcSapProvider ();
Simulator::Schedule (RRC_REAL_MSG_DELAY,
&LteEnbRrcSapProvider::RecvRrcConnectionReconfigurationCompleted,
m_enbRrcSapProvider,
m_rnti,
msg);
Ptr<Packet> packet = Create<Packet> ();
RrcConnectionReconfigurationCompleteHeader rrcConnectionReconfigurationCompleteHeader;
rrcConnectionReconfigurationCompleteHeader.SetMessage (msg);
packet->AddHeader (rrcConnectionReconfigurationCompleteHeader);
LtePdcpSapProvider::TransmitPdcpSduParameters transmitPdcpSduParameters;
transmitPdcpSduParameters.pdcpSdu = packet;
transmitPdcpSduParameters.rnti = m_rnti;
transmitPdcpSduParameters.lcid = 1;
m_setupParameters.srb1SapProvider->TransmitPdcpSdu(transmitPdcpSduParameters);
}
void
LteUeRrcProtocolReal::DoSendRrcConnectionReestablishmentRequest (LteRrcSap::RrcConnectionReestablishmentRequest msg)
{
Simulator::Schedule (RRC_REAL_MSG_DELAY,
&LteEnbRrcSapProvider::RecvRrcConnectionReestablishmentRequest,
m_enbRrcSapProvider,
m_rnti,
msg);
Ptr<Packet> packet = Create<Packet> ();
RrcConnectionReestablishmentRequestHeader rrcConnectionReestablishmentRequestHeader;
rrcConnectionReestablishmentRequestHeader.SetMessage (msg);
packet->AddHeader (rrcConnectionReestablishmentRequestHeader);
LteRlcSapProvider::TransmitPdcpPduParameters transmitPdcpPduParameters;
transmitPdcpPduParameters.pdcpPdu = packet;
transmitPdcpPduParameters.rnti = m_rnti;
transmitPdcpPduParameters.lcid = 0;
m_setupParameters.srb0SapProvider->TransmitPdcpPdu(transmitPdcpPduParameters);
}
void
LteUeRrcProtocolReal::DoSendRrcConnectionReestablishmentComplete (LteRrcSap::RrcConnectionReestablishmentComplete msg)
{
Simulator::Schedule (RRC_REAL_MSG_DELAY,
&LteEnbRrcSapProvider::RecvRrcConnectionReestablishmentComplete,
m_enbRrcSapProvider,
m_rnti,
msg);
Ptr<Packet> packet = Create<Packet> ();
RrcConnectionReestablishmentCompleteHeader rrcConnectionReestablishmentCompleteHeader;
rrcConnectionReestablishmentCompleteHeader.SetMessage (msg);
packet->AddHeader (rrcConnectionReestablishmentCompleteHeader);
LtePdcpSapProvider::TransmitPdcpSduParameters transmitPdcpSduParameters;
transmitPdcpSduParameters.pdcpSdu = packet;
transmitPdcpSduParameters.rnti = m_rnti;
transmitPdcpSduParameters.lcid = 1;
m_setupParameters.srb1SapProvider->TransmitPdcpSdu(transmitPdcpSduParameters);
}
@@ -250,7 +290,24 @@ LteUeRrcProtocolReal::DoReceivePdcpPdu (Ptr<Packet> p)
void
LteUeRrcProtocolReal::DoReceivePdcpSdu (LtePdcpSapUser::ReceivePdcpSduParameters params)
{
// TODO
// Get type of message received
RrcDlDcchMessage rrcDlDcchMessage;
params.pdcpSdu->PeekHeader(rrcDlDcchMessage);
// Declare possible headers to receive
RrcConnectionReconfigurationHeader rrcConnectionReconfigurationHeader;
// Deserialize packet and call member recv function with appropiate structure
switch( rrcDlDcchMessage.GetMessageType() )
{
case 4:
params.pdcpSdu->RemoveHeader (rrcConnectionReconfigurationHeader);
LteRrcSap::RrcConnectionReconfiguration rrcConnectionReconfigurationMsg;
rrcConnectionReconfigurationMsg = rrcConnectionReconfigurationHeader.GetMessage ();
m_ueRrcSapProvider->RecvRrcConnectionReconfiguration (rrcConnectionReconfigurationMsg);
break;
}
}
NS_OBJECT_ENSURE_REGISTERED (LteEnbRrcProtocolReal);
@@ -506,19 +563,66 @@ LteEnbRrcProtocolReal::DoSendRrcConnectionRelease (uint16_t rnti, LteRrcSap::Rrc
void
LteEnbRrcProtocolReal::DoReceivePdcpPdu (Ptr<Packet> p)
{
// TODO
// Get type of message received
RrcUlCcchMessage rrcUlCcchMessage;
p->PeekHeader(rrcUlCcchMessage);
// Declare possible headers to receive
RrcConnectionReestablishmentRequestHeader rrcConnectionReestablishmentRequestHeader;
RrcConnectionRequestHeader rrcConnectionRequestHeader;
// Deserialize packet and call member recv function with appropiate structure
switch( rrcUlCcchMessage.GetMessageType() )
{
case 0:
p->RemoveHeader (rrcConnectionReestablishmentRequestHeader);
LteRrcSap::RrcConnectionReestablishmentRequest rrcConnectionReestablishmentRequestMsg;
rrcConnectionReestablishmentRequestMsg = rrcConnectionReestablishmentRequestHeader.GetMessage ();
m_enbRrcSapProvider->RecvRrcConnectionReestablishmentRequest (m_rnti,rrcConnectionReestablishmentRequestMsg);
break;
case 1:
p->RemoveHeader (rrcConnectionRequestHeader);
LteRrcSap::RrcConnectionRequest rrcConnectionRequestMsg;
rrcConnectionRequestMsg = rrcConnectionRequestHeader.GetMessage ();
m_enbRrcSapProvider->RecvRrcConnectionRequest (m_rnti,rrcConnectionRequestMsg);
break;
}
}
void
LteEnbRrcProtocolReal::DoReceivePdcpSdu (LtePdcpSapUser::ReceivePdcpSduParameters params)
{
// TODO
// Get type of message received
RrcUlDcchMessage rrcUlDcchMessage;
params.pdcpSdu->PeekHeader(rrcUlDcchMessage);
// Declare possible headers to receive
RrcConnectionReconfigurationCompleteHeader rrcConnectionReconfigurationCompleteHeader;
RrcConnectionReestablishmentCompleteHeader rrcConnectionReestablishmentCompleteHeader;
RrcConnectionSetupCompleteHeader rrcConnectionSetupCompleteHeader;
params.pdcpSdu->RemoveHeader (rrcConnectionSetupCompleteHeader);
LteRrcSap::RrcConnectionSetupCompleted msg = rrcConnectionSetupCompleteHeader.GetMessage();
m_enbRrcSapProvider->RecvRrcConnectionSetupCompleted(params.rnti, msg);
// Deserialize packet and call member recv function with appropiate structure
switch( rrcUlDcchMessage.GetMessageType() )
{
case 2:
params.pdcpSdu->RemoveHeader (rrcConnectionReconfigurationCompleteHeader);
LteRrcSap::RrcConnectionReconfigurationCompleted rrcConnectionReconfigurationCompleteMsg;
rrcConnectionReconfigurationCompleteMsg = rrcConnectionReconfigurationCompleteHeader.GetMessage ();
m_enbRrcSapProvider->RecvRrcConnectionReconfigurationCompleted (params.rnti,rrcConnectionReconfigurationCompleteMsg);
break;
case 3:
params.pdcpSdu->RemoveHeader (rrcConnectionReestablishmentCompleteHeader);
LteRrcSap::RrcConnectionReestablishmentComplete rrcConnectionReestablishmentCompleteMsg;
rrcConnectionReestablishmentCompleteMsg = rrcConnectionReestablishmentCompleteHeader.GetMessage ();
m_enbRrcSapProvider->RecvRrcConnectionReestablishmentComplete (params.rnti,rrcConnectionReestablishmentCompleteMsg);
break;
case 4:
params.pdcpSdu->RemoveHeader (rrcConnectionSetupCompleteHeader);
LteRrcSap::RrcConnectionSetupCompleted rrcConnectionSetupCompletedMsg;
rrcConnectionSetupCompletedMsg = rrcConnectionSetupCompleteHeader.GetMessage ();
m_enbRrcSapProvider->RecvRrcConnectionSetupCompleted (params.rnti, rrcConnectionSetupCompletedMsg);
break;
}
}