Implement Nicola's review comments

This commit is contained in:
Lluis Parcerisa
2013-01-29 19:03:22 +01:00
parent b06db11580
commit c71b134f76
7 changed files with 719 additions and 138 deletions

View File

@@ -46,7 +46,6 @@ Asn1Header::GetInstanceTypeId (void) const
return GetTypeId ();
}
// Constructor
Asn1Header::Asn1Header ()
{
m_serializationPendingBits = 0x00;
@@ -54,7 +53,6 @@ Asn1Header::Asn1Header ()
m_isDataSerialized = false;
}
// Destructor
Asn1Header::~Asn1Header ()
{
}

View File

@@ -41,15 +41,26 @@ public:
Asn1Header ();
virtual ~Asn1Header ();
// Inherited from ns3::Header base class
static TypeId GetTypeId (void);
virtual TypeId GetInstanceTypeId (void) const;
uint32_t GetSerializedSize (void) const;
void Serialize (Buffer::Iterator bIterator) const;
// Pure virtual methods, implemented in child classes
virtual void PreSerialize (void) const = 0;
// Inherited from ns3::Header base class
// Pure virtual methods, to be implemented in child classes
virtual uint32_t Deserialize (Buffer::Iterator bIterator) = 0;
virtual void Print (std::ostream &os) const = 0;
/**
* This function serializes class attributes to m_serializationResult local Buffer.
* As ASN1 encoding produces a bitstream that does not have a fixed length,
* this function is needed to store the result, so its length can be retrieved
* with Header::GetSerializedSize() function.
* This method is pure virtual in this class (needs to be implemented in child classes)
* as the meningful information elements are in the subclasses.
*/
virtual void PreSerialize (void) const = 0;
protected:
mutable uint8_t m_serializationPendingBits;
@@ -137,5 +148,5 @@ protected:
} // namespace ns3
#endif // EPC_ASN1_HEADER_H
#endif // ASN1_HEADER_H

View File

@@ -448,19 +448,106 @@ RrcAsn1Header::SerializeSystemInformationBlockType1 (LteRrcSap::SystemInformatio
}
void
RrcAsn1Header::SerializeRadioResourceConfigCommonSIB () const
RrcAsn1Header::SerializeRadioResourceConfigCommonSib (LteRrcSap::RadioResourceConfigCommonSib radioResourceConfigCommonSib) const
{
SerializeSequence (std::bitset<0> (0),true);
// rach-ConfigCommon
SerializeSequence (std::bitset<0> (0),true);
SerializeSequence (std::bitset<1> (0),false); // preambleInfo
SerializeEnum (16,0); // numberOfRA-Preambles
// numberOfRA-Preambles
switch(radioResourceConfigCommonSib.rachConfigCommon.preambleInfo.numberOfRaPreambles)
{
case 4: SerializeEnum (16,0);
break;
case 8: SerializeEnum (16,1);
break;
case 12: SerializeEnum (16,2);
break;
case 16 : SerializeEnum (16,3);
break;
case 20: SerializeEnum (16,4);
break;
case 24: SerializeEnum (16,5);
break;
case 28: SerializeEnum (16,6);
break;
case 32: SerializeEnum (16,7);
break;
case 36: SerializeEnum (16,8);
break;
case 40: SerializeEnum (16,9);
break;
case 44: SerializeEnum (16,10);
break;
case 48: SerializeEnum (16,11);
break;
case 52: SerializeEnum (16,12);
break;
case 56: SerializeEnum (16,13);
break;
case 60: SerializeEnum (16,14);
break;
case 64: SerializeEnum (16,15);
break;
default: SerializeEnum (16,0);
}
SerializeSequence (std::bitset<0> (0),false); // powerRampingParameters
SerializeEnum (4,0); // powerRampingStep
SerializeEnum (16,0); // preambleInitialReceivedTargetPower
SerializeSequence (std::bitset<0> (0),false); // ra-SupervisionInfo
SerializeEnum (11,0); // preambleTransMax
SerializeEnum (8,0); // ra-ResponseWindowSize
// preambleTransMax
switch(radioResourceConfigCommonSib.rachConfigCommon.raSupervisionInfo.preambleTransMax)
{
case 3: SerializeEnum(11,0);
break;
case 4: SerializeEnum(11,1);
break;
case 5: SerializeEnum(11,2);
break;
case 6: SerializeEnum(11,3);
break;
case 7: SerializeEnum(11,4);
break;
case 8: SerializeEnum(11,5);
break;
case 10: SerializeEnum(11,6);
break;
case 20: SerializeEnum(11,7);
break;
case 50: SerializeEnum(11,8);
break;
case 100: SerializeEnum(11,9);
break;
case 200: SerializeEnum(11,10);
break;
default: SerializeEnum (11,0);
}
// ra-ResponseWindowSize
switch(radioResourceConfigCommonSib.rachConfigCommon.raSupervisionInfo.raResponseWindowSize)
{
case 2: SerializeEnum(8,0);
break;
case 3: SerializeEnum(8,1);
break;
case 4: SerializeEnum(8,2);
break;
case 5: SerializeEnum(8,3);
break;
case 6: SerializeEnum(8,4);
break;
case 7: SerializeEnum(8,5);
break;
case 8: SerializeEnum(8,6);
break;
case 10: SerializeEnum(8,7);
break;
default: SerializeEnum (8,0);
}
SerializeEnum (8,0); // mac-ContentionResolutionTimer
SerializeInteger (1,1,8); // maxHARQ-Msg3Tx
// bcch-Config
@@ -515,12 +602,12 @@ RrcAsn1Header::SerializeRadioResourceConfigCommonSIB () const
}
void
RrcAsn1Header::SerializeSystemInformationBlockType2 () const
RrcAsn1Header::SerializeSystemInformationBlockType2 (LteRrcSap::SystemInformationBlockType2 systemInformationBlockType2) const
{
SerializeSequence (std::bitset<2> (0),true);
// RadioResourceConfigCommonSIB
SerializeRadioResourceConfigCommonSIB ();
// RadioResourceConfigCommonSib
SerializeRadioResourceConfigCommonSib (systemInformationBlockType2.radioResourceConfigCommon);
// ue-TimersAndConstants
SerializeSequence (std::bitset<0> (0),true);
@@ -530,8 +617,27 @@ RrcAsn1Header::SerializeSystemInformationBlockType2 () const
SerializeEnum (8,0); // n310
SerializeEnum (7,0); // t311
SerializeEnum (8,0); // n311
// freqInfo
SerializeSequence (std::bitset<2> (0),false);
SerializeSequence (std::bitset<2> (3),false);
SerializeInteger ((int) systemInformationBlockType2.freqInfo.ulCarrierFreq, 0, MAX_EARFCN);
switch(systemInformationBlockType2.freqInfo.ulBandwidth)
{
case 6: SerializeEnum(6,0);
break;
case 15: SerializeEnum(6,1);
break;
case 25: SerializeEnum(6,2);
break;
case 50: SerializeEnum(6,3);
break;
case 75: SerializeEnum(6,4);
break;
case 100: SerializeEnum(6,5);
break;
default: SerializeEnum(6,0);
}
SerializeInteger (29,1,32); // additionalSpectrumEmission
// timeAlignmentTimerCommon
SerializeEnum (8,0);
@@ -1250,7 +1356,7 @@ RrcAsn1Header::DeserializeSystemInformationBlockType1 (LteRrcSap::SystemInformat
}
Buffer::Iterator
RrcAsn1Header::DeserializeSystemInformationBlockType2 (Buffer::Iterator bIterator)
RrcAsn1Header::DeserializeSystemInformationBlockType2 (LteRrcSap::SystemInformationBlockType2 *systemInformationBlockType2, Buffer::Iterator bIterator)
{
std::bitset<0> bitset0;
int n;
@@ -1264,7 +1370,7 @@ RrcAsn1Header::DeserializeSystemInformationBlockType2 (Buffer::Iterator bIterato
}
// Deserialize radioResourceConfigCommon
bIterator = DeserializeRadioResourceConfigCommonSib (bIterator);
bIterator = DeserializeRadioResourceConfigCommonSib (&systemInformationBlockType2->radioResourceConfigCommon, bIterator);
// Deserialize ue-TimersAndConstants
bIterator = DeserializeSequence (&bitset0,true,bIterator);
@@ -1281,14 +1387,40 @@ RrcAsn1Header::DeserializeSystemInformationBlockType2 (Buffer::Iterator bIterato
if (freqInfoOpts[1])
{
// Deserialize ul-CarrierFreq
// ...
bIterator = DeserializeInteger (&n, 0, MAX_EARFCN, bIterator);
systemInformationBlockType2->freqInfo.ulCarrierFreq = n;
}
if (freqInfoOpts[0])
{
// Deserialize ul-Bandwidth
// ...
bIterator = DeserializeEnum (6, &n, bIterator);
switch(n)
{
case 0:
systemInformationBlockType2->freqInfo.ulBandwidth = 6;
break;
case 1:
systemInformationBlockType2->freqInfo.ulBandwidth = 15;
break;
case 2:
systemInformationBlockType2->freqInfo.ulBandwidth = 25;
break;
case 3:
systemInformationBlockType2->freqInfo.ulBandwidth = 50;
break;
case 4:
systemInformationBlockType2->freqInfo.ulBandwidth = 75;
break;
case 5:
systemInformationBlockType2->freqInfo.ulBandwidth = 100;
break;
default:
systemInformationBlockType2->freqInfo.ulBandwidth = 6;
}
}
bIterator = DeserializeInteger (&n,1,32,bIterator); // additionalSpectrumEmission
// additionalSpectrumEmission
bIterator = DeserializeInteger (&n,1,32,bIterator);
if (sysInfoBlkT2Opts[0])
{
@@ -1421,32 +1553,161 @@ RrcAsn1Header::DeserializeRadioResourceConfigCommon (Buffer::Iterator bIterator)
}
Buffer::Iterator
RrcAsn1Header::DeserializeRadioResourceConfigCommonSib (Buffer::Iterator bIterator)
RrcAsn1Header::DeserializeRadioResourceConfigCommonSib (LteRrcSap::RadioResourceConfigCommonSib * radioResourceConfigCommonSib, Buffer::Iterator bIterator)
{
std::bitset<0> bitset0;
int n;
bIterator = DeserializeSequence (&bitset0,true,bIterator);
// rach-ConfigCommon
bIterator = DeserializeSequence (&bitset0,true,bIterator);
// preambleInfo
std::bitset<1> preamblesGroupAConfigPresent;
bIterator = DeserializeSequence (&preamblesGroupAConfigPresent,false,bIterator);
bIterator = DeserializeEnum (16,&n,bIterator); // numberOfRA-Preambles
// numberOfRA-Preambles
bIterator = DeserializeEnum (16,&n,bIterator);
switch(n)
{
case 0:
radioResourceConfigCommonSib->rachConfigCommon.preambleInfo.numberOfRaPreambles = 4;
break;
case 1:
radioResourceConfigCommonSib->rachConfigCommon.preambleInfo.numberOfRaPreambles = 8;
break;
case 2:
radioResourceConfigCommonSib->rachConfigCommon.preambleInfo.numberOfRaPreambles = 12;
break;
case 3:
radioResourceConfigCommonSib->rachConfigCommon.preambleInfo.numberOfRaPreambles = 16;
break;
case 4:
radioResourceConfigCommonSib->rachConfigCommon.preambleInfo.numberOfRaPreambles = 20;
break;
case 5:
radioResourceConfigCommonSib->rachConfigCommon.preambleInfo.numberOfRaPreambles = 24;
break;
case 6:
radioResourceConfigCommonSib->rachConfigCommon.preambleInfo.numberOfRaPreambles = 28;
break;
case 7:
radioResourceConfigCommonSib->rachConfigCommon.preambleInfo.numberOfRaPreambles = 32;
break;
case 8:
radioResourceConfigCommonSib->rachConfigCommon.preambleInfo.numberOfRaPreambles = 36;
break;
case 9:
radioResourceConfigCommonSib->rachConfigCommon.preambleInfo.numberOfRaPreambles = 40;
break;
case 10:
radioResourceConfigCommonSib->rachConfigCommon.preambleInfo.numberOfRaPreambles = 44;
break;
case 11:
radioResourceConfigCommonSib->rachConfigCommon.preambleInfo.numberOfRaPreambles = 48;
break;
case 12:
radioResourceConfigCommonSib->rachConfigCommon.preambleInfo.numberOfRaPreambles = 52;
break;
case 13:
radioResourceConfigCommonSib->rachConfigCommon.preambleInfo.numberOfRaPreambles = 56;
break;
case 14:
radioResourceConfigCommonSib->rachConfigCommon.preambleInfo.numberOfRaPreambles = 60;
break;
case 15:
radioResourceConfigCommonSib->rachConfigCommon.preambleInfo.numberOfRaPreambles = 64;
break;
default:
radioResourceConfigCommonSib->rachConfigCommon.preambleInfo.numberOfRaPreambles = 0;
}
radioResourceConfigCommonSib->rachConfigCommon.preambleInfo.numberOfRaPreambles = n;
if (preamblesGroupAConfigPresent[0])
{
// Deserialize preamblesGroupAConfig
// ...
}
// powerRampingParameters
bIterator = DeserializeSequence (&bitset0,false,bIterator);
bIterator = DeserializeEnum (4,&n,bIterator); // powerRampingStep
bIterator = DeserializeEnum (16,&n,bIterator); // preambleInitialReceivedTargetPower
// ra-SupervisionInfo
bIterator = DeserializeSequence (&bitset0,false,bIterator);
bIterator = DeserializeEnum (11,&n,bIterator); // preambleTransMax
bIterator = DeserializeEnum (8,&n,bIterator); // ra-ResponseWindowSize
switch(n)
{
case 0:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.preambleTransMax = 3;
break;
case 1:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.preambleTransMax = 4;
break;
case 2:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.preambleTransMax = 5;
break;
case 3:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.preambleTransMax = 6;
break;
case 4:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.preambleTransMax = 7;
break;
case 5:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.preambleTransMax = 8;
break;
case 6:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.preambleTransMax = 10;
break;
case 7:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.preambleTransMax = 20;
break;
case 8:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.preambleTransMax = 50;
break;
case 9:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.preambleTransMax = 100;
break;
case 10:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.preambleTransMax = 200;
break;
default:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.preambleTransMax = 0;
}
// ra-ResponseWindowSize
bIterator = DeserializeEnum (8,&n,bIterator);
switch(n)
{
case 0:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.raResponseWindowSize = 2;
break;
case 1:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.raResponseWindowSize = 3;
break;
case 2:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.raResponseWindowSize = 4;
break;
case 3:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.raResponseWindowSize = 5;
break;
case 4:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.raResponseWindowSize = 6;
break;
case 5:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.raResponseWindowSize = 7;
break;
case 6:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.raResponseWindowSize = 8;
break;
case 7:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.raResponseWindowSize = 10;
break;
default:
radioResourceConfigCommonSib->rachConfigCommon.raSupervisionInfo.raResponseWindowSize = 0;
}
bIterator = DeserializeEnum (8,&n,bIterator); // mac-ContentionResolutionTimer
bIterator = DeserializeInteger (&n,1,8,bIterator); //maxHARQ-Msg3Tx
@@ -1844,13 +2105,13 @@ RrcConnectionRequestHeader::GetMessage () const
}
std::bitset<8>
RrcConnectionRequestHeader::getMmec () const
RrcConnectionRequestHeader::GetMmec () const
{
return m_mmec;
}
std::bitset<32>
RrcConnectionRequestHeader::getMtmsi () const
RrcConnectionRequestHeader::GetMtmsi () const
{
return m_mTmsi;
}
@@ -1861,6 +2122,10 @@ RrcConnectionSetupHeader::RrcConnectionSetupHeader ()
{
}
RrcConnectionSetupHeader::~RrcConnectionSetupHeader ()
{
}
void
RrcConnectionSetupHeader::Print (std::ostream &os) const
{
@@ -1972,7 +2237,7 @@ RrcConnectionSetupHeader::Deserialize (Buffer::Iterator bIterator)
}
void
RrcConnectionSetupHeader::SetMessage (RrcConnectionSetup msg)
RrcConnectionSetupHeader::SetMessage (LteRrcSap::RrcConnectionSetup msg)
{
rrcTransactionIdentifier = msg.rrcTransactionIdentifier;
radioResourceConfigDedicated = msg.radioResourceConfigDedicated;
@@ -1982,7 +2247,7 @@ RrcConnectionSetupHeader::SetMessage (RrcConnectionSetup msg)
LteRrcSap::RrcConnectionSetup
RrcConnectionSetupHeader::GetMessage () const
{
RrcConnectionSetup msg;
LteRrcSap::RrcConnectionSetup msg;
msg.rrcTransactionIdentifier = rrcTransactionIdentifier;
msg.radioResourceConfigDedicated = radioResourceConfigDedicated;
return msg;
@@ -2036,6 +2301,10 @@ RrcConnectionSetupCompleteHeader::RrcConnectionSetupCompleteHeader ()
{
}
RrcConnectionSetupCompleteHeader::~RrcConnectionSetupCompleteHeader ()
{
}
void
RrcConnectionSetupCompleteHeader::PreSerialize () const
{
@@ -2112,7 +2381,7 @@ RrcConnectionSetupCompleteHeader::Print (std::ostream &os) const
}
void
RrcConnectionSetupCompleteHeader::SetMessage (RrcConnectionSetupCompleted msg)
RrcConnectionSetupCompleteHeader::SetMessage (LteRrcSap::RrcConnectionSetupCompleted msg)
{
m_rrcTransactionIdentifier = msg.rrcTransactionIdentifier;
m_isDataSerialized = false;
@@ -2138,6 +2407,10 @@ RrcConnectionReconfigurationCompleteHeader::RrcConnectionReconfigurationComplete
{
}
RrcConnectionReconfigurationCompleteHeader::~RrcConnectionReconfigurationCompleteHeader ()
{
}
void
RrcConnectionReconfigurationCompleteHeader::PreSerialize () const
{
@@ -2199,7 +2472,7 @@ RrcConnectionReconfigurationCompleteHeader::Print (std::ostream &os) const
}
void
RrcConnectionReconfigurationCompleteHeader::SetMessage (RrcConnectionReconfigurationCompleted msg)
RrcConnectionReconfigurationCompleteHeader::SetMessage (LteRrcSap::RrcConnectionReconfigurationCompleted msg)
{
m_rrcTransactionIdentifier = msg.rrcTransactionIdentifier;
m_isDataSerialized = false;
@@ -2208,7 +2481,7 @@ RrcConnectionReconfigurationCompleteHeader::SetMessage (RrcConnectionReconfigura
LteRrcSap::RrcConnectionReconfigurationCompleted
RrcConnectionReconfigurationCompleteHeader::GetMessage () const
{
RrcConnectionReconfigurationCompleted msg;
LteRrcSap::RrcConnectionReconfigurationCompleted msg;
msg.rrcTransactionIdentifier = m_rrcTransactionIdentifier;
return msg;
}
@@ -2225,6 +2498,10 @@ RrcConnectionReconfigurationHeader::RrcConnectionReconfigurationHeader ()
{
}
RrcConnectionReconfigurationHeader::~RrcConnectionReconfigurationHeader ()
{
}
void
RrcConnectionReconfigurationHeader::PreSerialize () const
{
@@ -2677,7 +2954,7 @@ RrcConnectionReconfigurationHeader::Print (std::ostream &os) const
}
void
RrcConnectionReconfigurationHeader::SetMessage (RrcConnectionReconfiguration msg)
RrcConnectionReconfigurationHeader::SetMessage (LteRrcSap::RrcConnectionReconfiguration msg)
{
m_rrcTransactionIdentifier = msg.rrcTransactionIdentifier;
m_haveMeasConfig = msg.haveMeasConfig;
@@ -2693,7 +2970,7 @@ RrcConnectionReconfigurationHeader::SetMessage (RrcConnectionReconfiguration msg
LteRrcSap::RrcConnectionReconfiguration
RrcConnectionReconfigurationHeader::GetMessage () const
{
RrcConnectionReconfiguration msg;
LteRrcSap::RrcConnectionReconfiguration msg;
msg.rrcTransactionIdentifier = m_rrcTransactionIdentifier;
msg.haveMeasConfig = m_haveMeasConfig;
@@ -2848,7 +3125,8 @@ HandoverPreparationInfoHeader::PreSerialize () const
SerializeSystemInformationBlockType1 (m_asConfig.sourceSystemInformationBlockType1);
// Serialize sourceSystemInformationBlockType2
SerializeSystemInformationBlockType2 ();
LteRrcSap::SystemInformationBlockType2 systemInformationBlockType2;
SerializeSystemInformationBlockType2 (systemInformationBlockType2);
// Serialize AntennaInfoCommon
SerializeSequence (std::bitset<0> (0),false);
@@ -2992,7 +3270,7 @@ HandoverPreparationInfoHeader::Deserialize (Buffer::Iterator bIterator)
bIterator = DeserializeSystemInformationBlockType1 (&m_asConfig.sourceSystemInformationBlockType1,bIterator);
// Deserialize sourceSystemInformationBlockType2
bIterator = DeserializeSystemInformationBlockType2 (bIterator);
bIterator = DeserializeSystemInformationBlockType2 (&m_asConfig.sourceSystemInformationBlockType2,bIterator);
// Deserialize antennaInfoCommon
bIterator = DeserializeSequence (&bitset0,false,bIterator);
@@ -3038,7 +3316,7 @@ HandoverPreparationInfoHeader::Print (std::ostream &os) const
}
void
HandoverPreparationInfoHeader::SetMessage (HandoverPreparationInfo msg)
HandoverPreparationInfoHeader::SetMessage (LteRrcSap::HandoverPreparationInfo msg)
{
m_asConfig = msg.asConfig;
m_isDataSerialized = false;
@@ -3047,7 +3325,7 @@ HandoverPreparationInfoHeader::SetMessage (HandoverPreparationInfo msg)
LteRrcSap::HandoverPreparationInfo
HandoverPreparationInfoHeader::GetMessage () const
{
HandoverPreparationInfo msg;
LteRrcSap::HandoverPreparationInfo msg;
msg.asConfig = m_asConfig;
return msg;
@@ -3065,6 +3343,10 @@ RrcConnectionReestablishmentRequestHeader::RrcConnectionReestablishmentRequestHe
{
}
RrcConnectionReestablishmentRequestHeader::~RrcConnectionReestablishmentRequestHeader ()
{
}
void
RrcConnectionReestablishmentRequestHeader::PreSerialize () const
{
@@ -3096,13 +3378,13 @@ RrcConnectionReestablishmentRequestHeader::PreSerialize () const
// Serialize ReestablishmentCause
switch (m_reestablishmentCause)
{
case RECONFIGURATION_FAILURE:
case LteRrcSap::RECONFIGURATION_FAILURE:
SerializeEnum (4,0);
break;
case HANDOVER_FAILURE:
case LteRrcSap::HANDOVER_FAILURE:
SerializeEnum (4,1);
break;
case OTHER_FAILURE:
case LteRrcSap::OTHER_FAILURE:
SerializeEnum (4,2);
break;
default:
@@ -3163,13 +3445,13 @@ RrcConnectionReestablishmentRequestHeader::Deserialize (Buffer::Iterator bIterat
switch (reestCs)
{
case 0:
m_reestablishmentCause = RECONFIGURATION_FAILURE;
m_reestablishmentCause = LteRrcSap::RECONFIGURATION_FAILURE;
break;
case 1:
m_reestablishmentCause = HANDOVER_FAILURE;
m_reestablishmentCause = LteRrcSap::HANDOVER_FAILURE;
break;
case 2:
m_reestablishmentCause = OTHER_FAILURE;
m_reestablishmentCause = LteRrcSap::OTHER_FAILURE;
break;
case 3:
break;
@@ -3192,7 +3474,7 @@ RrcConnectionReestablishmentRequestHeader::Print (std::ostream &os) const
}
void
RrcConnectionReestablishmentRequestHeader::SetMessage (RrcConnectionReestablishmentRequest msg)
RrcConnectionReestablishmentRequestHeader::SetMessage (LteRrcSap::RrcConnectionReestablishmentRequest msg)
{
m_ueIdentity = msg.ueIdentity;
m_reestablishmentCause = msg.reestablishmentCause;
@@ -3202,7 +3484,7 @@ RrcConnectionReestablishmentRequestHeader::SetMessage (RrcConnectionReestablishm
LteRrcSap::RrcConnectionReestablishmentRequest
RrcConnectionReestablishmentRequestHeader::GetMessage () const
{
RrcConnectionReestablishmentRequest msg;
LteRrcSap::RrcConnectionReestablishmentRequest msg;
msg.ueIdentity = m_ueIdentity;
msg.reestablishmentCause = m_reestablishmentCause;
@@ -3227,6 +3509,10 @@ RrcConnectionReestablishmentHeader::RrcConnectionReestablishmentHeader ()
{
}
RrcConnectionReestablishmentHeader::~RrcConnectionReestablishmentHeader ()
{
}
void
RrcConnectionReestablishmentHeader::PreSerialize () const
{
@@ -3321,7 +3607,7 @@ RrcConnectionReestablishmentHeader::Print (std::ostream &os) const
}
void
RrcConnectionReestablishmentHeader::SetMessage (RrcConnectionReestablishment msg)
RrcConnectionReestablishmentHeader::SetMessage (LteRrcSap::RrcConnectionReestablishment msg)
{
m_rrcTransactionIdentifier = msg.rrcTransactionIdentifier;
m_radioResourceConfigDedicated = msg.radioResourceConfigDedicated;
@@ -3331,7 +3617,7 @@ RrcConnectionReestablishmentHeader::SetMessage (RrcConnectionReestablishment msg
LteRrcSap::RrcConnectionReestablishment
RrcConnectionReestablishmentHeader::GetMessage () const
{
RrcConnectionReestablishment msg;
LteRrcSap::RrcConnectionReestablishment msg;
msg.rrcTransactionIdentifier = m_rrcTransactionIdentifier;
msg.radioResourceConfigDedicated = m_radioResourceConfigDedicated;
return msg;
@@ -3427,7 +3713,7 @@ RrcConnectionReestablishmentCompleteHeader::Print (std::ostream &os) const
}
void
RrcConnectionReestablishmentCompleteHeader::SetMessage (RrcConnectionReestablishmentComplete msg)
RrcConnectionReestablishmentCompleteHeader::SetMessage (LteRrcSap::RrcConnectionReestablishmentComplete msg)
{
m_rrcTransactionIdentifier = msg.rrcTransactionIdentifier;
m_isDataSerialized = false;
@@ -3436,7 +3722,7 @@ RrcConnectionReestablishmentCompleteHeader::SetMessage (RrcConnectionReestablish
LteRrcSap::RrcConnectionReestablishmentComplete
RrcConnectionReestablishmentCompleteHeader::GetMessage () const
{
RrcConnectionReestablishmentComplete msg;
LteRrcSap::RrcConnectionReestablishmentComplete msg;
msg.rrcTransactionIdentifier = m_rrcTransactionIdentifier;
return msg;
}
@@ -3453,6 +3739,10 @@ RrcConnectionReestablishmentRejectHeader::RrcConnectionReestablishmentRejectHead
{
}
RrcConnectionReestablishmentRejectHeader::~RrcConnectionReestablishmentRejectHeader ()
{
}
void
RrcConnectionReestablishmentRejectHeader::PreSerialize () const
{
@@ -3516,7 +3806,7 @@ RrcConnectionReestablishmentRejectHeader::Print (std::ostream &os) const
}
void
RrcConnectionReestablishmentRejectHeader::SetMessage (RrcConnectionReestablishmentReject msg)
RrcConnectionReestablishmentRejectHeader::SetMessage (LteRrcSap::RrcConnectionReestablishmentReject msg)
{
m_rrcConnectionReestablishmentReject = msg;
m_isDataSerialized = false;
@@ -3534,6 +3824,10 @@ RrcConnectionReleaseHeader::RrcConnectionReleaseHeader ()
{
}
RrcConnectionReleaseHeader::~RrcConnectionReleaseHeader ()
{
}
void
RrcConnectionReleaseHeader::PreSerialize () const
{
@@ -3637,7 +3931,7 @@ RrcConnectionReleaseHeader::Print (std::ostream &os) const
}
void
RrcConnectionReleaseHeader::SetMessage (RrcConnectionRelease msg)
RrcConnectionReleaseHeader::SetMessage (LteRrcSap::RrcConnectionRelease msg)
{
m_rrcConnectionRelease = msg;
m_isDataSerialized = false;
@@ -3655,6 +3949,10 @@ RrcConnectionRejectHeader::RrcConnectionRejectHeader ()
{
}
RrcConnectionRejectHeader::~RrcConnectionRejectHeader ()
{
}
void
RrcConnectionRejectHeader::PreSerialize () const
{
@@ -3741,7 +4039,7 @@ RrcConnectionRejectHeader::Print (std::ostream &os) const
}
void
RrcConnectionRejectHeader::SetMessage (RrcConnectionReject msg)
RrcConnectionRejectHeader::SetMessage (LteRrcSap::RrcConnectionReject msg)
{
m_rrcConnectionReject = msg;
m_isDataSerialized = false;
@@ -3759,6 +4057,10 @@ MeasurementReportHeader::MeasurementReportHeader ()
{
}
MeasurementReportHeader::~MeasurementReportHeader ()
{
}
void
MeasurementReportHeader::PreSerialize () const
{
@@ -3886,7 +4188,7 @@ MeasurementReportHeader::Print (std::ostream &os) const
}
void
MeasurementReportHeader::SetMessage (MeasurementReport msg)
MeasurementReportHeader::SetMessage (LteRrcSap::MeasurementReport msg)
{
m_measurementReport = msg;
m_isDataSerialized = false;
@@ -3895,7 +4197,7 @@ MeasurementReportHeader::SetMessage (MeasurementReport msg)
LteRrcSap::MeasurementReport
MeasurementReportHeader::GetMessage () const
{
MeasurementReport msg;
LteRrcSap::MeasurementReport msg;
msg = m_measurementReport;
return msg;
}

View File

@@ -42,17 +42,21 @@ public:
int GetMessageType ();
protected:
// Serialization functions
// Inherited from Asn1Header
static TypeId GetTypeId (void);
virtual TypeId GetInstanceTypeId (void) const;
uint32_t Deserialize (Buffer::Iterator bIterator) = 0;
virtual void PreSerialize (void) const = 0;
// Serialization functions
void SerializeSrbToAddModList (std::list<LteRrcSap::SrbToAddMod> srbToAddModList) const;
void SerializeDrbToAddModList (std::list<LteRrcSap::DrbToAddMod> drbToAddModList) const;
void SerializeLogicalChannelConfig (LteRrcSap::LogicalChannelConfig logicalChannelConfig) const;
void SerializeRadioResourceConfigDedicated (LteRrcSap::RadioResourceConfigDedicated radioResourceConfigDedicated) const;
void SerializePhysicalConfigDedicated (LteRrcSap::PhysicalConfigDedicated physicalConfigDedicated) const;
void SerializeSystemInformationBlockType1 (LteRrcSap::SystemInformationBlockType1 systemInformationBlockType1) const;
void SerializeSystemInformationBlockType2 () const;
void SerializeRadioResourceConfigCommonSIB () const;
void SerializeSystemInformationBlockType2 (LteRrcSap::SystemInformationBlockType2 systemInformationBlockType2) const;
void SerializeRadioResourceConfigCommonSib (LteRrcSap::RadioResourceConfigCommonSib radioResourceConfigCommonSib) const;
void SerializeMeasResults (LteRrcSap::MeasResults measResults) const;
void SerializePlmnIdentity (uint32_t plmnId) const;
@@ -63,14 +67,20 @@ protected:
Buffer::Iterator DeserializeRadioResourceConfigDedicated (LteRrcSap::RadioResourceConfigDedicated *radioResourceConfigDedicated, Buffer::Iterator bIterator);
Buffer::Iterator DeserializePhysicalConfigDedicated (LteRrcSap::PhysicalConfigDedicated *physicalConfigDedicated, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeSystemInformationBlockType1 (LteRrcSap::SystemInformationBlockType1 *systemInformationBlockType1, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeSystemInformationBlockType2 (Buffer::Iterator bIterator);
Buffer::Iterator DeserializeSystemInformationBlockType2 (LteRrcSap::SystemInformationBlockType2 *systemInformationBlockType2, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeRadioResourceConfigCommon (Buffer::Iterator bIterator);
Buffer::Iterator DeserializeRadioResourceConfigCommonSib (Buffer::Iterator bIterator);
Buffer::Iterator DeserializeRadioResourceConfigCommonSib (LteRrcSap::RadioResourceConfigCommonSib *radioResourceConfigCommonSib, Buffer::Iterator bIterator);
Buffer::Iterator DeserializeMeasResults (LteRrcSap::MeasResults *measResults, Buffer::Iterator bIterator);
Buffer::Iterator DeserializePlmnIdentity (uint32_t *plmnId, Buffer::Iterator bIterator);
/**
* This function prints RadioResourceConfigDedicated IE, for debugging purposes.
* @param os The output stream to use (i.e. std::cout)
* @param radioResourceConfigDedicated The information element to be printed
*/
void Print (std::ostream &os, LteRrcSap::RadioResourceConfigDedicated radioResourceConfigDedicated) const;
/// Stores RRC message type, according to 3GPP TS 36.331
int m_messageType;
};
@@ -82,11 +92,15 @@ protected:
class RrcUlDcchMessage : public RrcAsn1Header
{
public:
RrcUlDcchMessage();
~RrcUlDcchMessage();
RrcUlDcchMessage ();
~RrcUlDcchMessage ();
// Inherited from RrcAsn1Header
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void PreSerialize () const;
protected:
void SerializeUlDcchMessage (int msgType) const;
Buffer::Iterator DeserializeUlDcchMessage (Buffer::Iterator bIterator);
};
@@ -98,11 +112,15 @@ public:
class RrcDlDcchMessage : public RrcAsn1Header
{
public:
RrcDlDcchMessage();
~RrcDlDcchMessage();
RrcDlDcchMessage ();
~RrcDlDcchMessage ();
// Inherited from RrcAsn1Header
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void PreSerialize () const;
protected:
void SerializeDlDcchMessage (int msgType) const;
Buffer::Iterator DeserializeDlDcchMessage (Buffer::Iterator bIterator);
};
@@ -116,9 +134,13 @@ class RrcUlCcchMessage : public RrcAsn1Header
public:
RrcUlCcchMessage ();
~RrcUlCcchMessage ();
// Inherited from RrcAsn1Header
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void PreSerialize () const;
protected:
void SerializeUlCcchMessage (int msgType) const;
Buffer::Iterator DeserializeUlCcchMessage (Buffer::Iterator bIterator);
};
@@ -130,11 +152,15 @@ public:
class RrcDlCcchMessage : public RrcAsn1Header
{
public:
RrcDlCcchMessage();
~RrcDlCcchMessage();
RrcDlCcchMessage ();
~RrcDlCcchMessage ();
// Inherited from RrcAsn1Header
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void PreSerialize () const;
protected:
void SerializeDlCcchMessage (int msgType) const;
Buffer::Iterator DeserializeDlCcchMessage (Buffer::Iterator bIterator);
};
@@ -145,16 +171,38 @@ public:
class RrcConnectionRequestHeader : public RrcUlCcchMessage
{
public:
static TypeId GetTypeId (void);
RrcConnectionRequestHeader ();
~RrcConnectionRequestHeader ();
// Inherited from RrcAsn1Header
static TypeId GetTypeId (void);
void PreSerialize () const;
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
/**
* Receives a RrcConnectionRequest IE and stores the contents into the class attributes
* @param msg The information element to parse
*/
void SetMessage (LteRrcSap::RrcConnectionRequest msg);
/**
* Returns a RrcConnectionRequest IE from the values in the class attributes
* @return A RrcConnectionRequest, as defined in LteRrcSap
*/
LteRrcSap::RrcConnectionRequest GetMessage () const;
std::bitset<8> getMmec () const;
std::bitset<32> getMtmsi () const;
/**
* Get MMEC attribute
* @return m_mmec attribute
*/
std::bitset<8> GetMmec () const;
/**
* Get M-TMSI attribute
* @return m_tmsi attribute
*/
std::bitset<32> GetMtmsi () const;
private:
std::bitset<8> m_mmec;
@@ -170,16 +218,30 @@ private:
/**
* This class manages the serialization/deserialization of RrcConnectionSetup IE
*/
class RrcConnectionSetupHeader : public RrcDlCcchMessage,
LteRrcSap
class RrcConnectionSetupHeader : public RrcDlCcchMessage
{
public:
RrcConnectionSetupHeader ();
~RrcConnectionSetupHeader ();
// Inherited from RrcAsn1Header
void PreSerialize () const;
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void SetMessage (RrcConnectionSetup msg);
RrcConnectionSetup GetMessage () const;
/**
* Receives a RrcConnectionSetup IE and stores the contents into the class attributes
* @param msg The information element to parse
*/
void SetMessage (LteRrcSap::RrcConnectionSetup msg);
/**
* Returns a RrcConnectionSetup IE from the values in the class attributes
* @return A RrcConnectionSetup, as defined in LteRrcSap
*/
LteRrcSap::RrcConnectionSetup GetMessage () const;
uint8_t GetRrcTransactionIdentifier () const;
bool HavePhysicalConfigDedicated () const;
std::list<LteRrcSap::SrbToAddMod> GetSrbToAddModList () const;
@@ -190,25 +252,41 @@ public:
private:
uint8_t rrcTransactionIdentifier;
mutable RadioResourceConfigDedicated radioResourceConfigDedicated;
mutable LteRrcSap::RadioResourceConfigDedicated radioResourceConfigDedicated;
};
/**
* This class manages the serialization/deserialization of RrcConnectionSetupComplete IE
*/
class RrcConnectionSetupCompleteHeader : public RrcUlDcchMessage,
LteRrcSap
class RrcConnectionSetupCompleteHeader : public RrcUlDcchMessage
{
public:
RrcConnectionSetupCompleteHeader ();
~RrcConnectionSetupCompleteHeader ();
// Inherited from RrcAsn1Header
void PreSerialize () const;
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void SetMessage (RrcConnectionSetupCompleted msg);
/**
* Receives a RrcConnectionSetupCompleted IE and stores the contents into the class attributes
* @param msg The information element to parse
*/
void SetMessage (LteRrcSap::RrcConnectionSetupCompleted msg);
/**
* Returns a RrcConnectionSetupCompleted IE from the values in the class attributes
* @return A RrcConnectionSetupCompleted, as defined in LteRrcSap
*/
LteRrcSap::RrcConnectionSetupCompleted GetMessage () const;
/**
* Getter for m_rrcTransactionIdentifier
* @return m_rrcTransactionIdentifier
*/
uint8_t GetRrcTransactionIdentifier () const;
RrcConnectionSetupCompleted GetMessage () const;
private:
uint8_t m_rrcTransactionIdentifier;
@@ -217,16 +295,33 @@ private:
/**
* This class manages the serialization/deserialization of RrcConnectionSetupComplete IE
*/
class RrcConnectionReconfigurationCompleteHeader : public RrcUlDcchMessage,
LteRrcSap
class RrcConnectionReconfigurationCompleteHeader : public RrcUlDcchMessage
{
public:
RrcConnectionReconfigurationCompleteHeader ();
~RrcConnectionReconfigurationCompleteHeader ();
// Inherited from RrcAsn1Header
void PreSerialize () const;
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void SetMessage (RrcConnectionReconfigurationCompleted msg);
RrcConnectionReconfigurationCompleted GetMessage () const;
/**
* Receives a RrcConnectionReconfigurationCompleted IE and stores the contents into the class attributes
* @param msg The information element to parse
*/
void SetMessage (LteRrcSap::RrcConnectionReconfigurationCompleted msg);
/**
* Returns a RrcConnectionReconfigurationCompleted IE from the values in the class attributes
* @return A RrcConnectionReconfigurationCompleted, as defined in LteRrcSap
*/
LteRrcSap::RrcConnectionReconfigurationCompleted GetMessage () const;
/**
* Getter for m_rrcTransactionIdentifier
* @return m_rrcTransactionIdentifier
*/
uint8_t GetRrcTransactionIdentifier () const;
private:
@@ -237,24 +332,70 @@ private:
/**
* This class manages the serialization/deserialization of RrcConnectionReconfiguration IE
*/
class RrcConnectionReconfigurationHeader : public RrcDlDcchMessage,
LteRrcSap
class RrcConnectionReconfigurationHeader : public RrcDlDcchMessage
{
public:
RrcConnectionReconfigurationHeader ();
~RrcConnectionReconfigurationHeader ();
// Inherited from RrcAsn1Header
void PreSerialize () const;
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void SetMessage (RrcConnectionReconfiguration msg);
RrcConnectionReconfiguration GetMessage () const;
/**
* Receives a RrcConnectionReconfiguration IE and stores the contents into the class attributes
* @param msg The information element to parse
*/
void SetMessage (LteRrcSap::RrcConnectionReconfiguration msg);
/**
* Returns a RrcConnectionReconfiguration IE from the values in the class attributes
* @return A RrcConnectionReconfiguration, as defined in LteRrcSap
*/
LteRrcSap::RrcConnectionReconfiguration GetMessage () const;
/**
* Getter for m_rrcTransactionIdentifier
* @return m_rrcTransactionIdentifier
*/
uint8_t GetRrcTransactionIdentifier () const;
/**
* Getter for m_haveMeasConfig
* @return m_haveMeasConfig
*/
bool GetHaveMeasConfig ();
MeasConfig GetMeasConfig ();
/**
* Getter for m_measConfig
* @return m_measConfig
*/
LteRrcSap::MeasConfig GetMeasConfig ();
/**
* Getter for m_haveMobilityControlInfo
* @return m_haveMobilityControlInfo
*/
bool GetHaveMobilityControlInfo ();
MobilityControlInfo GetMobilityControlInfo ();
/**
* Getter for m_mobilityControlInfo
* @return m_mobilityControlInfo
*/
LteRrcSap::MobilityControlInfo GetMobilityControlInfo ();
/**
* Getter for m_haveRadioResourceConfigDedicated
* @return m_haveRadioResourceConfigDedicated
*/
bool GetHaveRadioResourceConfigDedicated ();
RadioResourceConfigDedicated GetRadioResourceConfigDedicated ();
/**
* Getter for m_radioResourceConfigDedicated
* @return m_radioResourceConfigDedicated
*/
LteRrcSap::RadioResourceConfigDedicated GetRadioResourceConfigDedicated ();
// RadioResourceConfigDedicated functions
bool HavePhysicalConfigDedicated () const;
@@ -266,89 +407,163 @@ public:
private:
uint8_t m_rrcTransactionIdentifier;
bool m_haveMeasConfig;
MeasConfig m_measConfig;
LteRrcSap::MeasConfig m_measConfig;
bool m_haveMobilityControlInfo;
MobilityControlInfo m_mobilityControlInfo;
LteRrcSap::MobilityControlInfo m_mobilityControlInfo;
bool m_haveRadioResourceConfigDedicated;
RadioResourceConfigDedicated m_radioResourceConfigDedicated;
LteRrcSap::RadioResourceConfigDedicated m_radioResourceConfigDedicated;
};
/**
* This class manages the serialization/deserialization of HandoverPreparationInfo IE
*/
class HandoverPreparationInfoHeader : public RrcAsn1Header,
LteRrcSap
class HandoverPreparationInfoHeader : public RrcAsn1Header
{
public:
HandoverPreparationInfoHeader ();
// Inherited from RrcAsn1Header
void PreSerialize () const;
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void SetMessage (HandoverPreparationInfo msg);
HandoverPreparationInfo GetMessage () const;
AsConfig GetAsConfig () const;
/**
* Receives a HandoverPreparationInfo IE and stores the contents into the class attributes
* @param msg The information element to parse
*/
void SetMessage (LteRrcSap::HandoverPreparationInfo msg);
/**
* Returns a HandoverPreparationInfo IE from the values in the class attributes
* @return A HandoverPreparationInfo, as defined in LteRrcSap
*/
LteRrcSap::HandoverPreparationInfo GetMessage () const;
/**
* Getter for m_asConfig
* @return m_asConfig
*/
LteRrcSap::AsConfig GetAsConfig () const;
private:
AsConfig m_asConfig;
LteRrcSap::AsConfig m_asConfig;
};
/**
* This class manages the serialization/deserialization of RRCConnectionReestablishmentRequest IE
*/
class RrcConnectionReestablishmentRequestHeader : public RrcUlCcchMessage,
LteRrcSap
class RrcConnectionReestablishmentRequestHeader : public RrcUlCcchMessage
{
public:
RrcConnectionReestablishmentRequestHeader ();
~RrcConnectionReestablishmentRequestHeader ();
// Inherited from RrcAsn1Header
void PreSerialize () const;
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;
/**
* Receives a RrcConnectionReestablishmentRequest IE and stores the contents into the class attributes
* @param msg The information element to parse
*/
void SetMessage (LteRrcSap::RrcConnectionReestablishmentRequest msg);
/**
* Returns a RrcConnectionReestablishmentRequest IE from the values in the class attributes
* @return A RrcConnectionReestablishmentRequest, as defined in LteRrcSap
*/
LteRrcSap::RrcConnectionReestablishmentRequest GetMessage () const;
/**
* Getter for m_ueIdentity
* @return m_ueIdentity
*/
LteRrcSap::ReestabUeIdentity GetUeIdentity () const;
/**
* Getter for m_reestablishmentCause
* @return m_reestablishmentCause
*/
LteRrcSap::ReestablishmentCause GetReestablishmentCause () const;
private:
ReestabUeIdentity m_ueIdentity;
ReestablishmentCause m_reestablishmentCause;
LteRrcSap::ReestabUeIdentity m_ueIdentity;
LteRrcSap::ReestablishmentCause m_reestablishmentCause;
};
/**
* This class manages the serialization/deserialization of RrcConnectionReestablishment IE
*/
class RrcConnectionReestablishmentHeader : public RrcDlCcchMessage,
LteRrcSap
class RrcConnectionReestablishmentHeader : public RrcDlCcchMessage
{
public:
RrcConnectionReestablishmentHeader ();
~RrcConnectionReestablishmentHeader ();
// Inherited from RrcAsn1Header
void PreSerialize () const;
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void SetMessage (RrcConnectionReestablishment msg);
RrcConnectionReestablishment GetMessage () const;
/**
* Receives a RrcConnectionReestablishment IE and stores the contents into the class attributes
* @param msg The information element to parse
*/
void SetMessage (LteRrcSap::RrcConnectionReestablishment msg);
/**
* Returns a RrcConnectionReestablishment IE from the values in the class attributes
* @return A RrcConnectionReestablishment, as defined in LteRrcSap
*/
LteRrcSap::RrcConnectionReestablishment GetMessage () const;
/**
* Getter for m_rrcTransactionIdentifier attribute
* @return m_rrcTransactionIdentifier
*/
uint8_t GetRrcTransactionIdentifier () const;
RadioResourceConfigDedicated GetRadioResourceConfigDedicated () const;
/**
* Getter for m_radioResourceConfigDedicated attribute
* @return m_radioResourceConfigDedicated
*/
LteRrcSap::RadioResourceConfigDedicated GetRadioResourceConfigDedicated () const;
private:
uint8_t m_rrcTransactionIdentifier;
RadioResourceConfigDedicated m_radioResourceConfigDedicated;
LteRrcSap::RadioResourceConfigDedicated m_radioResourceConfigDedicated;
};
/**
* This class manages the serialization/deserialization of RrcConnectionReestablishmentComplete IE
*/
class RrcConnectionReestablishmentCompleteHeader : public RrcUlDcchMessage,
LteRrcSap
class RrcConnectionReestablishmentCompleteHeader : public RrcUlDcchMessage
{
public:
RrcConnectionReestablishmentCompleteHeader ();
// Inherited from RrcAsn1Header
void PreSerialize () const;
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void SetMessage (RrcConnectionReestablishmentComplete msg);
RrcConnectionReestablishmentComplete GetMessage () const;
/**
* Receives a RrcConnectionReestablishmentComplete IE and stores the contents into the class attributes
* @param msg The information element to parse
*/
void SetMessage (LteRrcSap::RrcConnectionReestablishmentComplete msg);
/**
* Returns a RrcConnectionReestablishmentComplete IE from the values in the class attributes
* @return A RrcConnectionReestablishmentComplete, as defined in LteRrcSap
*/
LteRrcSap::RrcConnectionReestablishmentComplete GetMessage () const;
/**
* Getter for m_rrcTransactionIdentifier attribute
* @return m_rrcTransactionIdentifier
*/
uint8_t GetRrcTransactionIdentifier () const;
private:
@@ -358,78 +573,131 @@ private:
/**
* This class manages the serialization/deserialization of RrcConnectionReestablishmentReject IE
*/
class RrcConnectionReestablishmentRejectHeader : public RrcDlCcchMessage,
LteRrcSap
class RrcConnectionReestablishmentRejectHeader : public RrcDlCcchMessage
{
public:
RrcConnectionReestablishmentRejectHeader ();
~RrcConnectionReestablishmentRejectHeader ();
// Inherited from RrcAsn1Header
void PreSerialize () const;
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void SetMessage (RrcConnectionReestablishmentReject msg);
RrcConnectionReestablishmentReject GetMessage () const;
/**
* Receives a RrcConnectionReestablishmentReject IE and stores the contents into the class attributes
* @param msg The information element to parse
*/
void SetMessage (LteRrcSap::RrcConnectionReestablishmentReject msg);
/**
* Returns a RrcConnectionReestablishmentReject IE from the values in the class attributes
* @return A RrcConnectionReestablishmentReject, as defined in LteRrcSap
*/
LteRrcSap::RrcConnectionReestablishmentReject GetMessage () const;
private:
RrcConnectionReestablishmentReject m_rrcConnectionReestablishmentReject;
LteRrcSap::RrcConnectionReestablishmentReject m_rrcConnectionReestablishmentReject;
};
/**
* This class manages the serialization/deserialization of RrcConnectionRelease IE
*/
class RrcConnectionReleaseHeader : public RrcDlDcchMessage,
LteRrcSap
class RrcConnectionReleaseHeader : public RrcDlDcchMessage
{
public:
RrcConnectionReleaseHeader ();
~RrcConnectionReleaseHeader ();
// Inherited from RrcAsn1Header
void PreSerialize () const;
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void SetMessage (RrcConnectionRelease msg);
RrcConnectionRelease GetMessage () const;
/**
* Receives a RrcConnectionRelease IE and stores the contents into the class attributes
* @param msg The information element to parse
*/
void SetMessage (LteRrcSap::RrcConnectionRelease msg);
/**
* Returns a RrcConnectionRelease IE from the values in the class attributes
* @return A RrcConnectionRelease, as defined in LteRrcSap
*/
LteRrcSap::RrcConnectionRelease GetMessage () const;
/**
* Getter for m_rrcConnectionRelease attribute
* @return m_rrcConnectionRelease
*/
uint8_t GetRrcTransactionIdentifier () const;
private:
RrcConnectionRelease m_rrcConnectionRelease;
LteRrcSap::RrcConnectionRelease m_rrcConnectionRelease;
};
/**
* This class manages the serialization/deserialization of RrcConnectionReject IE
*/
class RrcConnectionRejectHeader : public RrcDlCcchMessage,
LteRrcSap
class RrcConnectionRejectHeader : public RrcDlCcchMessage
{
public:
RrcConnectionRejectHeader ();
~RrcConnectionRejectHeader ();
// Inherited from RrcAsn1Header
void PreSerialize () const;
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void SetMessage (RrcConnectionReject msg);
RrcConnectionReject GetMessage () const;
/**
* Receives a RrcConnectionReject IE and stores the contents into the class attributes
* @param msg The information element to parse
*/
void SetMessage (LteRrcSap::RrcConnectionReject msg);
/**
* Returns a RrcConnectionReject IE from the values in the class attributes
* @return A RrcConnectionReject, as defined in LteRrcSap
*/
LteRrcSap::RrcConnectionReject GetMessage () const;
private:
RrcConnectionReject m_rrcConnectionReject;
LteRrcSap::RrcConnectionReject m_rrcConnectionReject;
};
/**
* This class manages the serialization/deserialization of MeasurementReport IE
*/
class MeasurementReportHeader : public RrcUlDcchMessage,
LteRrcSap
class MeasurementReportHeader : public RrcUlDcchMessage
{
public:
MeasurementReportHeader ();
~MeasurementReportHeader ();
// Inherited from RrcAsn1Header
void PreSerialize () const;
uint32_t Deserialize (Buffer::Iterator bIterator);
void Print (std::ostream &os) const;
void SetMessage (MeasurementReport msg);
MeasurementReport GetMessage () const;
/**
* Receives a MeasurementReport IE and stores the contents into the class attributes
* @param msg The information element to parse
*/
void SetMessage (LteRrcSap::MeasurementReport msg);
/**
* Returns a MeasurementReport IE from the values in the class attributes
* @return A MeasurementReport, as defined in LteRrcSap
*/
LteRrcSap::MeasurementReport GetMessage () const;
private:
MeasurementReport m_measurementReport;
LteRrcSap::MeasurementReport m_measurementReport;
};
} // namespace ns3
#endif // EPC_ASN1_HEADER_H
#endif // RRC_HEADER_H

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>
*/

View File

@@ -380,6 +380,7 @@ public:
uint16_t sourceUeIdentity;
MasterInformationBlock sourceMasterInformationBlock;
SystemInformationBlockType1 sourceSystemInformationBlockType1;
SystemInformationBlockType2 sourceSystemInformationBlockType2;
uint16_t sourceDlCarrierFreq;
};

View File

@@ -280,8 +280,8 @@ RrcConnectionRequestTestCase::DoRun (void)
TestUtils::LogPacketInfo<RrcConnectionRequestHeader> (destination,"DESTINATION");
// Check that the destination and source headers contain the same values
NS_TEST_ASSERT_MSG_EQ (source.getMmec (),destination.getMmec (), "Different m_mmec!");
NS_TEST_ASSERT_MSG_EQ (source.getMtmsi (),destination.getMtmsi (), "Different m_mTmsi!");
NS_TEST_ASSERT_MSG_EQ (source.GetMmec (),destination.GetMmec (), "Different m_mmec!");
NS_TEST_ASSERT_MSG_EQ (source.GetMtmsi (),destination.GetMtmsi (), "Different m_mTmsi!");
packet = 0;
}