diff -r 44edef71b17e src/lte/model/lte-asn1-header.cc --- a/src/lte/model/lte-asn1-header.cc Tue Feb 20 15:52:26 2018 +0100 +++ b/src/lte/model/lte-asn1-header.cc Wed Feb 21 16:07:07 2018 +0100 @@ -321,13 +321,8 @@ void Asn1Header::SerializeInteger (int n, int nmin, int nmax) const { - // Misusage check: Ensure nmax>nmin ... - if (nmin > nmax) - { - int aux = nmin; - nmin = nmax; - nmax = aux; - } + NS_ASSERT_MSG (nmin <= n && n <= nmax, + "Integer " << n << " is outside range [" << nmin << ", " << nmax << "]"); // Clause 11.5.3 ITU-T X.691 int range = nmax - nmin + 1; diff -r 44edef71b17e src/lte/model/lte-enb-rrc.cc --- a/src/lte/model/lte-enb-rrc.cc Tue Feb 20 15:52:26 2018 +0100 +++ b/src/lte/model/lte-enb-rrc.cc Wed Feb 21 16:07:07 2018 +0100 @@ -235,7 +235,7 @@ m_srb1->m_rlc = rlc; m_srb1->m_pdcp = pdcp; m_srb1->m_srbIdentity = 1; - m_srb1->m_logicalChannelConfig.priority = 0; + m_srb1->m_logicalChannelConfig.priority = 1; m_srb1->m_logicalChannelConfig.prioritizedBitRateKbps = 100; m_srb1->m_logicalChannelConfig.bucketSizeDurationMs = 100; m_srb1->m_logicalChannelConfig.logicalChannelGroup = 0; @@ -1310,7 +1310,9 @@ uint8_t UeManager::GetNewRrcTransactionIdentifier () { - return ++m_lastRrcTransactionIdentifier; + ++m_lastRrcTransactionIdentifier; + m_lastRrcTransactionIdentifier %= 4; + return m_lastRrcTransactionIdentifier; } uint8_t diff -r 44edef71b17e src/lte/model/lte-rrc-header.cc --- a/src/lte/model/lte-rrc-header.cc Tue Feb 20 15:52:26 2018 +0100 +++ b/src/lte/model/lte-rrc-header.cc Wed Feb 21 16:07:07 2018 +0100 @@ -45,6 +45,7 @@ NS_LOG_COMPONENT_DEFINE ("RrcHeader"); + //////////////////// RrcAsn1Header class /////////////////////////////// RrcAsn1Header::RrcAsn1Header () { @@ -72,6 +73,42 @@ return m_messageType; } +int +RrcAsn1Header::BandwidthToEnum (uint8_t bandwidth) const +{ + int n; + switch (bandwidth) + { + case 6: n = 0; break; + case 15: n = 1; break; + case 25: n = 2; break; + case 50: n = 3; break; + case 75: n = 4; break; + case 100: n = 5; break; + default: + NS_FATAL_ERROR ("Wrong bandwidth: " << (uint16_t) bandwidth); + } + return n; +} + +uint8_t +RrcAsn1Header::EnumToBandwidth (int n) const +{ + uint8_t bw; + switch (n) + { + case 0: bw = 6; break; + case 1: bw = 15; break; + case 2: bw = 25; break; + case 3: bw = 50; break; + case 4: bw = 75; break; + case 5: bw = 100; break; + default: + NS_FATAL_ERROR ("Wrong enum value for bandwidth: " << n); + } + return bw; +} + void RrcAsn1Header::SerializeDrbToAddModList (std::list drbToAddModList) const { @@ -565,7 +602,7 @@ SerializeSequence (std::bitset<0> (0),false); SerializeInteger (0,-126,24); // p0-NominalPUSCH SerializeEnum (8,0); // alpha - SerializeInteger (-50,-127,-96); // p0-NominalPUCCH + SerializeInteger (-110,-127,-96); // p0-NominalPUCCH SerializeSequence (std::bitset<0> (0),false); // deltaFList-PUCCH SerializeEnum (3,0); // deltaF-PUCCH-Format1 SerializeEnum (3,0); // deltaF-PUCCH-Format1b @@ -597,29 +634,7 @@ // freqInfo 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); - } + SerializeEnum (6, BandwidthToEnum (systemInformationBlockType2.freqInfo.ulBandwidth)); SerializeInteger (29,1,32); // additionalSpectrumEmission // timeAlignmentTimerCommon @@ -1083,29 +1098,7 @@ SerializeInteger (it->measObjectEutra.carrierFreq, 0, MAX_EARFCN); // Serialize allowedMeasBandwidth - switch (it->measObjectEutra.allowedMeasBandwidth) - { - 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); - } + SerializeEnum (6, BandwidthToEnum (it->measObjectEutra.allowedMeasBandwidth)); SerializeBoolean (it->measObjectEutra.presenceAntennaPort1); SerializeBitstring (std::bitset<2> (it->measObjectEutra.neighCellConfig)); @@ -3100,29 +3093,7 @@ { // 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; - } + systemInformationBlockType2->freqInfo.ulBandwidth = EnumToBandwidth (n); } // additionalSpectrumEmission @@ -3806,28 +3777,7 @@ // allowedMeasBandwidth bIterator = DeserializeEnum (6, &n, bIterator); - switch (n) - { - case 0: - elem.measObjectEutra.allowedMeasBandwidth = 6; - break; - case 1: - elem.measObjectEutra.allowedMeasBandwidth = 15; - break; - case 2: - elem.measObjectEutra.allowedMeasBandwidth = 25; - break; - case 3: - elem.measObjectEutra.allowedMeasBandwidth = 50; - break; - case 4: - elem.measObjectEutra.allowedMeasBandwidth = 75; - break; - case 5: - default: - elem.measObjectEutra.allowedMeasBandwidth = 100; - break; - } + elem.measObjectEutra.allowedMeasBandwidth = EnumToBandwidth (n); // presenceAntennaPort1 bIterator = DeserializeBoolean (&elem.measObjectEutra.presenceAntennaPort1, bIterator); @@ -4570,6 +4520,7 @@ } return bIterator; } + //////////////////// RrcConnectionRequest class //////////////////////// // Constructor @@ -5167,54 +5118,10 @@ SerializeSequence (std::bitset<1> (1),false); // Serialize dl-Bandwidth - switch (m_mobilityControlInfo.carrierBandwidth.dlBandwidth) - { - case 6: - SerializeEnum (16,0); - break; - case 15: - SerializeEnum (16,1); - break; - case 25: - SerializeEnum (16,2); - break; - case 50: - SerializeEnum (16,3); - break; - case 75: - SerializeEnum (16,4); - break; - case 100: - SerializeEnum (16,5); - break; - default: - SerializeEnum (16,6); - } + SerializeEnum (16, BandwidthToEnum (m_mobilityControlInfo.carrierBandwidth.dlBandwidth)); // Serialize ul-Bandwidth - switch (m_mobilityControlInfo.carrierBandwidth.ulBandwidth) - { - case 6: - SerializeEnum (16,0); - break; - case 15: - SerializeEnum (16,1); - break; - case 25: - SerializeEnum (16,2); - break; - case 50: - SerializeEnum (16,3); - break; - case 75: - SerializeEnum (16,4); - break; - case 100: - SerializeEnum (16,5); - break; - default: - SerializeEnum (16,6); - } + SerializeEnum (16, BandwidthToEnum (m_mobilityControlInfo.carrierBandwidth.ulBandwidth)); } // Serialize t304 @@ -5346,58 +5253,12 @@ bIterator = DeserializeSequence (&ulBandwidthPresent,false,bIterator); bIterator = DeserializeEnum (16,&n,bIterator); - switch (n) - { - case 0: - m_mobilityControlInfo.carrierBandwidth.dlBandwidth = 6; - break; - case 1: - m_mobilityControlInfo.carrierBandwidth.dlBandwidth = 15; - break; - case 2: - m_mobilityControlInfo.carrierBandwidth.dlBandwidth = 25; - break; - case 3: - m_mobilityControlInfo.carrierBandwidth.dlBandwidth = 50; - break; - case 4: - m_mobilityControlInfo.carrierBandwidth.dlBandwidth = 75; - break; - case 5: - m_mobilityControlInfo.carrierBandwidth.dlBandwidth = 100; - break; - case 6: - m_mobilityControlInfo.carrierBandwidth.dlBandwidth = 0; - break; - } + m_mobilityControlInfo.carrierBandwidth.dlBandwidth = EnumToBandwidth (n); if (ulBandwidthPresent[0]) { bIterator = DeserializeEnum (16,&n,bIterator); - switch (n) - { - case 0: - m_mobilityControlInfo.carrierBandwidth.ulBandwidth = 6; - break; - case 1: - m_mobilityControlInfo.carrierBandwidth.ulBandwidth = 15; - break; - case 2: - m_mobilityControlInfo.carrierBandwidth.ulBandwidth = 25; - break; - case 3: - m_mobilityControlInfo.carrierBandwidth.ulBandwidth = 50; - break; - case 4: - m_mobilityControlInfo.carrierBandwidth.ulBandwidth = 75; - break; - case 5: - m_mobilityControlInfo.carrierBandwidth.ulBandwidth = 100; - break; - case 6: - m_mobilityControlInfo.carrierBandwidth.ulBandwidth = 0; - break; - } + m_mobilityControlInfo.carrierBandwidth.ulBandwidth = EnumToBandwidth (n); } } @@ -5873,7 +5734,7 @@ // Serialize sourceMasterInformationBlock SerializeSequence (std::bitset<0> (),false); - SerializeEnum (6,m_asConfig.sourceMasterInformationBlock.dlBandwidth); // dl-Bandwidth + SerializeEnum (6, BandwidthToEnum (m_asConfig.sourceMasterInformationBlock.dlBandwidth)); // dl-Bandwidth SerializeSequence (std::bitset<0> (),false); // phich-Config sequence SerializeEnum (2,0); // phich-Duration SerializeEnum (4,0); // phich-Resource @@ -5963,7 +5824,7 @@ // Deserialize sourceMasterInformationBlock bIterator = DeserializeSequence (&bitset0,false,bIterator); bIterator = DeserializeEnum (6,&n,bIterator); // dl-Bandwidth - m_asConfig.sourceMasterInformationBlock.dlBandwidth = n; + m_asConfig.sourceMasterInformationBlock.dlBandwidth = EnumToBandwidth (n); // phich-Config bIterator = DeserializeSequence (&bitset0,false,bIterator); diff -r 44edef71b17e src/lte/model/lte-rrc-header.h --- a/src/lte/model/lte-rrc-header.h Tue Feb 20 15:52:26 2018 +0100 +++ b/src/lte/model/lte-rrc-header.h Wed Feb 21 16:07:07 2018 +0100 @@ -64,6 +64,24 @@ uint32_t Deserialize (Buffer::Iterator bIterator) = 0; virtual void PreSerialize (void) const = 0; + + // Auxiliary functions + /** + * Convert from bandwidth (in RBs) to ENUMERATED value + * + * \param bandwidth Bandwith in RBs: 6, 15, 25, 50, 75, 100 + * \returns ENUMERATED value: 0, 1, 2, 3, 4, 5 + */ + int BandwidthToEnum (uint8_t bandwidth) const; + /** + * Convert from ENUMERATED value to bandwidth (in RBs) + * + * \param n ENUMERATED value: 0, 1, 2, 3, 4, 5 + * \returns bandwidth Bandwith in RBs: 6, 15, 25, 50, 75, 100 + */ + uint8_t EnumToBandwidth (int n) const; + + // Serialization functions /** * Serialize SRB to add mod list function diff -r 44edef71b17e src/lte/model/lte-rrc-sap.h --- a/src/lte/model/lte-rrc-sap.h Tue Feb 20 15:52:26 2018 +0100 +++ b/src/lte/model/lte-rrc-sap.h Wed Feb 21 16:07:07 2018 +0100 @@ -59,7 +59,7 @@ virtual ~LteRrcSap (); /// Constraint values - static const uint8_t MaxReportCells = 255; + static const uint8_t MaxReportCells = 8; // Information Elements /// PlmnIdentityInfo structure diff -r 44edef71b17e src/lte/test/test-asn1-encoding.cc --- a/src/lte/test/test-asn1-encoding.cc Tue Feb 20 15:52:26 2018 +0100 +++ b/src/lte/test/test-asn1-encoding.cc Wed Feb 21 16:07:07 2018 +0100 @@ -737,7 +737,7 @@ msg.asConfig.sourceDlCarrierFreq = 3; msg.asConfig.sourceUeIdentity = 11; msg.asConfig.sourceRadioResourceConfig = CreateRadioResourceConfigDedicated (); - msg.asConfig.sourceMasterInformationBlock.dlBandwidth = 3; + msg.asConfig.sourceMasterInformationBlock.dlBandwidth = 50; msg.asConfig.sourceMasterInformationBlock.systemFrameNumber = 1; msg.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.csgIndication = true;