From c71b134f76ca4e33e3c9f4a48bb4107981dd5e23 Mon Sep 17 00:00:00 2001 From: Lluis Parcerisa Date: Tue, 29 Jan 2013 19:03:22 +0100 Subject: [PATCH] Implement Nicola's review comments --- src/lte/model/lte-asn1-header.cc | 2 - src/lte/model/lte-asn1-header.h | 17 +- src/lte/model/lte-rrc-header.cc | 396 ++++++++++++++++++++--- src/lte/model/lte-rrc-header.h | 434 +++++++++++++++++++++----- src/lte/model/lte-rrc-protocol-real.h | 3 +- src/lte/model/lte-rrc-sap.h | 1 + src/lte/test/test-asn1-encoding.cc | 4 +- 7 files changed, 719 insertions(+), 138 deletions(-) diff --git a/src/lte/model/lte-asn1-header.cc b/src/lte/model/lte-asn1-header.cc index 68e202057..159a67bb7 100644 --- a/src/lte/model/lte-asn1-header.cc +++ b/src/lte/model/lte-asn1-header.cc @@ -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 () { } diff --git a/src/lte/model/lte-asn1-header.h b/src/lte/model/lte-asn1-header.h index 3d7e8f46b..2afdcbdd5 100644 --- a/src/lte/model/lte-asn1-header.h +++ b/src/lte/model/lte-asn1-header.h @@ -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 diff --git a/src/lte/model/lte-rrc-header.cc b/src/lte/model/lte-rrc-header.cc index 0c7443749..a76208046 100644 --- a/src/lte/model/lte-rrc-header.cc +++ b/src/lte/model/lte-rrc-header.cc @@ -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; } diff --git a/src/lte/model/lte-rrc-header.h b/src/lte/model/lte-rrc-header.h index 2469b425e..e4eecb792 100644 --- a/src/lte/model/lte-rrc-header.h +++ b/src/lte/model/lte-rrc-header.h @@ -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 srbToAddModList) const; void SerializeDrbToAddModList (std::list 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 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 diff --git a/src/lte/model/lte-rrc-protocol-real.h b/src/lte/model/lte-rrc-protocol-real.h index 2cb74b678..7cbaebaf6 100644 --- a/src/lte/model/lte-rrc-protocol-real.h +++ b/src/lte/model/lte-rrc-protocol-real.h @@ -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 + * Authors: Nicola Baldo + * Lluis Parcerisa */ diff --git a/src/lte/model/lte-rrc-sap.h b/src/lte/model/lte-rrc-sap.h index 6bc0e1553..25cf06dc0 100644 --- a/src/lte/model/lte-rrc-sap.h +++ b/src/lte/model/lte-rrc-sap.h @@ -380,6 +380,7 @@ public: uint16_t sourceUeIdentity; MasterInformationBlock sourceMasterInformationBlock; SystemInformationBlockType1 sourceSystemInformationBlockType1; + SystemInformationBlockType2 sourceSystemInformationBlockType2; uint16_t sourceDlCarrierFreq; }; diff --git a/src/lte/test/test-asn1-encoding.cc b/src/lte/test/test-asn1-encoding.cc index bf5a51529..8963b36dd 100644 --- a/src/lte/test/test-asn1-encoding.cc +++ b/src/lte/test/test-asn1-encoding.cc @@ -280,8 +280,8 @@ RrcConnectionRequestTestCase::DoRun (void) TestUtils::LogPacketInfo (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; }