Real implementation of ReestablishmentRequest, ReconfigurationCompleteHeader and ReestablishmentComplete
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user