View | Details | Raw Unified | Return to bug 2754
Collapse All | Expand All

(-)a/src/lte/model/lte-asn1-header.cc (-7 / +2 lines)
 Lines 321-333    Link Here 
321
321
322
void Asn1Header::SerializeInteger (int n, int nmin, int nmax) const
322
void Asn1Header::SerializeInteger (int n, int nmin, int nmax) const
323
{
323
{
324
  // Misusage check: Ensure nmax>nmin ...
324
  NS_ASSERT_MSG (nmin <= n && n <= nmax,
325
  if (nmin > nmax)
325
                 "Integer " << n << " is outside range [" << nmin << ", " << nmax << "]");
326
    {
327
      int aux = nmin;
328
      nmin = nmax;
329
      nmax = aux;
330
    }
331
326
332
  // Clause 11.5.3 ITU-T X.691
327
  // Clause 11.5.3 ITU-T X.691
333
  int range = nmax - nmin + 1;
328
  int range = nmax - nmin + 1;
(-)a/src/lte/model/lte-enb-rrc.cc (-2 / +4 lines)
 Lines 235-241    Link Here 
235
    m_srb1->m_rlc = rlc;
235
    m_srb1->m_rlc = rlc;
236
    m_srb1->m_pdcp = pdcp;
236
    m_srb1->m_pdcp = pdcp;
237
    m_srb1->m_srbIdentity = 1;
237
    m_srb1->m_srbIdentity = 1;
238
    m_srb1->m_logicalChannelConfig.priority = 0;
238
    m_srb1->m_logicalChannelConfig.priority = 1;
239
    m_srb1->m_logicalChannelConfig.prioritizedBitRateKbps = 100;
239
    m_srb1->m_logicalChannelConfig.prioritizedBitRateKbps = 100;
240
    m_srb1->m_logicalChannelConfig.bucketSizeDurationMs = 100;
240
    m_srb1->m_logicalChannelConfig.bucketSizeDurationMs = 100;
241
    m_srb1->m_logicalChannelConfig.logicalChannelGroup = 0;
241
    m_srb1->m_logicalChannelConfig.logicalChannelGroup = 0;
 Lines 1310-1316    Link Here 
1310
uint8_t 
1310
uint8_t 
1311
UeManager::GetNewRrcTransactionIdentifier ()
1311
UeManager::GetNewRrcTransactionIdentifier ()
1312
{
1312
{
1313
  return ++m_lastRrcTransactionIdentifier;
1313
  ++m_lastRrcTransactionIdentifier;
1314
  m_lastRrcTransactionIdentifier %= 4;
1315
  return m_lastRrcTransactionIdentifier;
1314
}
1316
}
1315
1317
1316
uint8_t 
1318
uint8_t 
(-)a/src/lte/model/lte-rrc-header.cc (-188 / +49 lines)
 Lines 45-50    Link Here 
45
45
46
NS_LOG_COMPONENT_DEFINE ("RrcHeader");
46
NS_LOG_COMPONENT_DEFINE ("RrcHeader");
47
47
48
48
//////////////////// RrcAsn1Header class ///////////////////////////////
49
//////////////////// RrcAsn1Header class ///////////////////////////////
49
RrcAsn1Header::RrcAsn1Header ()
50
RrcAsn1Header::RrcAsn1Header ()
50
{
51
{
 Lines 72-77    Link Here 
72
  return m_messageType;
73
  return m_messageType;
73
}
74
}
74
75
76
int
77
RrcAsn1Header::BandwidthToEnum (uint8_t bandwidth) const
78
{
79
  int n;
80
  switch (bandwidth)
81
    {
82
      case 6: n = 0; break;
83
      case 15: n = 1; break;
84
      case 25: n = 2; break;
85
      case 50: n = 3; break;
86
      case 75: n = 4; break;
87
      case 100: n = 5; break;
88
      default:
89
        NS_FATAL_ERROR ("Wrong bandwidth: " << (uint16_t) bandwidth);
90
    }
91
  return n;
92
}
93
94
uint8_t
95
RrcAsn1Header::EnumToBandwidth (int n) const
96
{
97
  uint8_t bw;
98
  switch (n)
99
    {
100
      case 0: bw = 6; break;
101
      case 1: bw = 15; break;
102
      case 2: bw = 25; break;
103
      case 3: bw = 50; break;
104
      case 4: bw = 75; break;
105
      case 5: bw = 100; break;
106
      default:
107
        NS_FATAL_ERROR ("Wrong enum value for bandwidth: " << n);
108
    }
109
  return bw;
110
}
111
75
void
112
void
76
RrcAsn1Header::SerializeDrbToAddModList (std::list<LteRrcSap::DrbToAddMod> drbToAddModList) const
113
RrcAsn1Header::SerializeDrbToAddModList (std::list<LteRrcSap::DrbToAddMod> drbToAddModList) const
77
{
114
{
 Lines 565-571    Link Here 
565
  SerializeSequence (std::bitset<0> (0),false);
602
  SerializeSequence (std::bitset<0> (0),false);
566
  SerializeInteger (0,-126,24); // p0-NominalPUSCH
603
  SerializeInteger (0,-126,24); // p0-NominalPUSCH
567
  SerializeEnum (8,0); // alpha
604
  SerializeEnum (8,0); // alpha
568
  SerializeInteger (-50,-127,-96); // p0-NominalPUCCH
605
  SerializeInteger (-110,-127,-96); // p0-NominalPUCCH
569
  SerializeSequence (std::bitset<0> (0),false); // deltaFList-PUCCH
606
  SerializeSequence (std::bitset<0> (0),false); // deltaFList-PUCCH
570
  SerializeEnum (3,0); // deltaF-PUCCH-Format1
607
  SerializeEnum (3,0); // deltaF-PUCCH-Format1
571
  SerializeEnum (3,0); // deltaF-PUCCH-Format1b
608
  SerializeEnum (3,0); // deltaF-PUCCH-Format1b
 Lines 597-625    Link Here 
597
  // freqInfo
634
  // freqInfo
598
  SerializeSequence (std::bitset<2> (3),false);
635
  SerializeSequence (std::bitset<2> (3),false);
599
  SerializeInteger ((int) systemInformationBlockType2.freqInfo.ulCarrierFreq, 0, MAX_EARFCN);
636
  SerializeInteger ((int) systemInformationBlockType2.freqInfo.ulCarrierFreq, 0, MAX_EARFCN);
600
  switch (systemInformationBlockType2.freqInfo.ulBandwidth)
637
  SerializeEnum (6, BandwidthToEnum (systemInformationBlockType2.freqInfo.ulBandwidth));
601
    {
602
    case 6:
603
      SerializeEnum (6,0);
604
      break;
605
    case 15:
606
      SerializeEnum (6,1);
607
      break;
608
    case 25:
609
      SerializeEnum (6,2);
610
      break;
611
    case 50:
612
      SerializeEnum (6,3);
613
      break;
614
    case 75:
615
      SerializeEnum (6,4);
616
      break;
617
    case 100:
618
      SerializeEnum (6,5);
619
      break;
620
    default:
621
      SerializeEnum (6,0);
622
    }
623
638
624
  SerializeInteger (29,1,32); // additionalSpectrumEmission
639
  SerializeInteger (29,1,32); // additionalSpectrumEmission
625
  // timeAlignmentTimerCommon
640
  // timeAlignmentTimerCommon
 Lines 1083-1111    Link Here 
1083
          SerializeInteger (it->measObjectEutra.carrierFreq, 0, MAX_EARFCN);
1098
          SerializeInteger (it->measObjectEutra.carrierFreq, 0, MAX_EARFCN);
1084
1099
1085
          // Serialize  allowedMeasBandwidth
1100
          // Serialize  allowedMeasBandwidth
1086
          switch (it->measObjectEutra.allowedMeasBandwidth)
1101
          SerializeEnum (6, BandwidthToEnum (it->measObjectEutra.allowedMeasBandwidth));
1087
            {
1088
            case 6:
1089
              SerializeEnum (6,0);
1090
              break;
1091
            case 15:
1092
              SerializeEnum (6,1);
1093
              break;
1094
            case 25:
1095
              SerializeEnum (6,2);
1096
              break;
1097
            case 50:
1098
              SerializeEnum (6,3);
1099
              break;
1100
            case 75:
1101
              SerializeEnum (6,4);
1102
              break;
1103
            case 100:
1104
              SerializeEnum (6,5);
1105
              break;
1106
            default:
1107
              SerializeEnum (6,0);
1108
            }
1109
1102
1110
          SerializeBoolean (it->measObjectEutra.presenceAntennaPort1);
1103
          SerializeBoolean (it->measObjectEutra.presenceAntennaPort1);
1111
          SerializeBitstring (std::bitset<2> (it->measObjectEutra.neighCellConfig));
1104
          SerializeBitstring (std::bitset<2> (it->measObjectEutra.neighCellConfig));
 Lines 3100-3128    Link Here 
3100
    {
3093
    {
3101
      // Deserialize ul-Bandwidth
3094
      // Deserialize ul-Bandwidth
3102
      bIterator = DeserializeEnum (6, &n, bIterator);
3095
      bIterator = DeserializeEnum (6, &n, bIterator);
3103
      switch (n)
3096
      systemInformationBlockType2->freqInfo.ulBandwidth = EnumToBandwidth (n);
3104
        {
3105
        case 0:
3106
          systemInformationBlockType2->freqInfo.ulBandwidth = 6;
3107
          break;
3108
        case 1:
3109
          systemInformationBlockType2->freqInfo.ulBandwidth = 15;
3110
          break;
3111
        case 2:
3112
          systemInformationBlockType2->freqInfo.ulBandwidth = 25;
3113
          break;
3114
        case 3:
3115
          systemInformationBlockType2->freqInfo.ulBandwidth = 50;
3116
          break;
3117
        case 4:
3118
          systemInformationBlockType2->freqInfo.ulBandwidth = 75;
3119
          break;
3120
        case 5:
3121
          systemInformationBlockType2->freqInfo.ulBandwidth = 100;
3122
          break;
3123
        default:
3124
          systemInformationBlockType2->freqInfo.ulBandwidth = 6;
3125
        }
3126
    }
3097
    }
3127
3098
3128
  // additionalSpectrumEmission
3099
  // additionalSpectrumEmission
 Lines 3806-3833    Link Here 
3806
3777
3807
              // allowedMeasBandwidth
3778
              // allowedMeasBandwidth
3808
              bIterator = DeserializeEnum (6, &n, bIterator);
3779
              bIterator = DeserializeEnum (6, &n, bIterator);
3809
              switch (n)
3780
              elem.measObjectEutra.allowedMeasBandwidth = EnumToBandwidth (n);
3810
                {
3811
                case 0:
3812
                  elem.measObjectEutra.allowedMeasBandwidth = 6;
3813
                  break;
3814
                case 1:
3815
                  elem.measObjectEutra.allowedMeasBandwidth = 15;
3816
                  break;
3817
                case 2:
3818
                  elem.measObjectEutra.allowedMeasBandwidth = 25;
3819
                  break;
3820
                case 3:
3821
                  elem.measObjectEutra.allowedMeasBandwidth = 50;
3822
                  break;
3823
                case 4:
3824
                  elem.measObjectEutra.allowedMeasBandwidth = 75;
3825
                  break;
3826
                case 5:
3827
                default:
3828
                  elem.measObjectEutra.allowedMeasBandwidth = 100;
3829
                  break;
3830
                }
3831
3781
3832
              // presenceAntennaPort1
3782
              // presenceAntennaPort1
3833
              bIterator = DeserializeBoolean (&elem.measObjectEutra.presenceAntennaPort1, bIterator);
3783
              bIterator = DeserializeBoolean (&elem.measObjectEutra.presenceAntennaPort1, bIterator);
 Lines 4570-4575    Link Here 
4570
    }
4520
    }
4571
  return bIterator;
4521
  return bIterator;
4572
}
4522
}
4523
4573
//////////////////// RrcConnectionRequest class ////////////////////////
4524
//////////////////// RrcConnectionRequest class ////////////////////////
4574
4525
4575
// Constructor
4526
// Constructor
 Lines 5167-5220    Link Here 
5167
          SerializeSequence (std::bitset<1> (1),false);
5118
          SerializeSequence (std::bitset<1> (1),false);
5168
5119
5169
          // Serialize dl-Bandwidth
5120
          // Serialize dl-Bandwidth
5170
          switch (m_mobilityControlInfo.carrierBandwidth.dlBandwidth)
5121
          SerializeEnum (16, BandwidthToEnum (m_mobilityControlInfo.carrierBandwidth.dlBandwidth));
5171
            {
5172
            case 6:
5173
              SerializeEnum (16,0);
5174
              break;
5175
            case 15:
5176
              SerializeEnum (16,1);
5177
              break;
5178
            case 25:
5179
              SerializeEnum (16,2);
5180
              break;
5181
            case 50:
5182
              SerializeEnum (16,3);
5183
              break;
5184
            case 75:
5185
              SerializeEnum (16,4);
5186
              break;
5187
            case 100:
5188
              SerializeEnum (16,5);
5189
              break;
5190
            default:
5191
              SerializeEnum (16,6);
5192
            }
5193
5122
5194
          // Serialize ul-Bandwidth
5123
          // Serialize ul-Bandwidth
5195
          switch (m_mobilityControlInfo.carrierBandwidth.ulBandwidth)
5124
          SerializeEnum (16, BandwidthToEnum (m_mobilityControlInfo.carrierBandwidth.ulBandwidth));
5196
            {
5197
            case 6:
5198
              SerializeEnum (16,0);
5199
              break;
5200
            case 15:
5201
              SerializeEnum (16,1);
5202
              break;
5203
            case 25:
5204
              SerializeEnum (16,2);
5205
              break;
5206
            case 50:
5207
              SerializeEnum (16,3);
5208
              break;
5209
            case 75:
5210
              SerializeEnum (16,4);
5211
              break;
5212
            case 100:
5213
              SerializeEnum (16,5);
5214
              break;
5215
            default:
5216
              SerializeEnum (16,6);
5217
            }
5218
        }
5125
        }
5219
5126
5220
      // Serialize t304
5127
      // Serialize t304
 Lines 5346-5403    Link Here 
5346
                  bIterator = DeserializeSequence (&ulBandwidthPresent,false,bIterator);
5253
                  bIterator = DeserializeSequence (&ulBandwidthPresent,false,bIterator);
5347
5254
5348
                  bIterator = DeserializeEnum (16,&n,bIterator);
5255
                  bIterator = DeserializeEnum (16,&n,bIterator);
5349
                  switch (n)
5256
                  m_mobilityControlInfo.carrierBandwidth.dlBandwidth = EnumToBandwidth (n);
5350
                    {
5351
                    case 0:
5352
                      m_mobilityControlInfo.carrierBandwidth.dlBandwidth = 6;
5353
                      break;
5354
                    case 1:
5355
                      m_mobilityControlInfo.carrierBandwidth.dlBandwidth = 15;
5356
                      break;
5357
                    case 2:
5358
                      m_mobilityControlInfo.carrierBandwidth.dlBandwidth = 25;
5359
                      break;
5360
                    case 3:
5361
                      m_mobilityControlInfo.carrierBandwidth.dlBandwidth = 50;
5362
                      break;
5363
                    case 4:
5364
                      m_mobilityControlInfo.carrierBandwidth.dlBandwidth = 75;
5365
                      break;
5366
                    case 5:
5367
                      m_mobilityControlInfo.carrierBandwidth.dlBandwidth = 100;
5368
                      break;
5369
                    case 6:
5370
                      m_mobilityControlInfo.carrierBandwidth.dlBandwidth = 0;
5371
                      break;
5372
                    }
5373
5257
5374
                  if (ulBandwidthPresent[0])
5258
                  if (ulBandwidthPresent[0])
5375
                    {
5259
                    {
5376
                      bIterator = DeserializeEnum (16,&n,bIterator);
5260
                      bIterator = DeserializeEnum (16,&n,bIterator);
5377
                      switch (n)
5261
                      m_mobilityControlInfo.carrierBandwidth.ulBandwidth = EnumToBandwidth (n);
5378
                        {
5379
                        case 0:
5380
                          m_mobilityControlInfo.carrierBandwidth.ulBandwidth = 6;
5381
                          break;
5382
                        case 1:
5383
                          m_mobilityControlInfo.carrierBandwidth.ulBandwidth = 15;
5384
                          break;
5385
                        case 2:
5386
                          m_mobilityControlInfo.carrierBandwidth.ulBandwidth = 25;
5387
                          break;
5388
                        case 3:
5389
                          m_mobilityControlInfo.carrierBandwidth.ulBandwidth = 50;
5390
                          break;
5391
                        case 4:
5392
                          m_mobilityControlInfo.carrierBandwidth.ulBandwidth = 75;
5393
                          break;
5394
                        case 5:
5395
                          m_mobilityControlInfo.carrierBandwidth.ulBandwidth = 100;
5396
                          break;
5397
                        case 6:
5398
                          m_mobilityControlInfo.carrierBandwidth.ulBandwidth = 0;
5399
                          break;
5400
                        }
5401
                    }
5262
                    }
5402
                }
5263
                }
5403
5264
 Lines 5873-5879    Link Here 
5873
5734
5874
  // Serialize sourceMasterInformationBlock
5735
  // Serialize sourceMasterInformationBlock
5875
  SerializeSequence (std::bitset<0> (),false);
5736
  SerializeSequence (std::bitset<0> (),false);
5876
  SerializeEnum (6,m_asConfig.sourceMasterInformationBlock.dlBandwidth); // dl-Bandwidth
5737
  SerializeEnum (6, BandwidthToEnum (m_asConfig.sourceMasterInformationBlock.dlBandwidth)); // dl-Bandwidth
5877
  SerializeSequence (std::bitset<0> (),false); // phich-Config sequence
5738
  SerializeSequence (std::bitset<0> (),false); // phich-Config sequence
5878
  SerializeEnum (2,0); // phich-Duration
5739
  SerializeEnum (2,0); // phich-Duration
5879
  SerializeEnum (4,0); // phich-Resource
5740
  SerializeEnum (4,0); // phich-Resource
 Lines 5963-5969    Link Here 
5963
              // Deserialize sourceMasterInformationBlock
5824
              // Deserialize sourceMasterInformationBlock
5964
              bIterator = DeserializeSequence (&bitset0,false,bIterator);
5825
              bIterator = DeserializeSequence (&bitset0,false,bIterator);
5965
              bIterator = DeserializeEnum (6,&n,bIterator); // dl-Bandwidth
5826
              bIterator = DeserializeEnum (6,&n,bIterator); // dl-Bandwidth
5966
              m_asConfig.sourceMasterInformationBlock.dlBandwidth = n;
5827
              m_asConfig.sourceMasterInformationBlock.dlBandwidth = EnumToBandwidth (n);
5967
5828
5968
              // phich-Config
5829
              // phich-Config
5969
              bIterator = DeserializeSequence (&bitset0,false,bIterator);
5830
              bIterator = DeserializeSequence (&bitset0,false,bIterator);
(-)a/src/lte/model/lte-rrc-header.h (+18 lines)
 Lines 64-69    Link Here 
64
  uint32_t Deserialize (Buffer::Iterator bIterator) = 0;
64
  uint32_t Deserialize (Buffer::Iterator bIterator) = 0;
65
  virtual void PreSerialize (void) const = 0;
65
  virtual void PreSerialize (void) const = 0;
66
66
67
68
  // Auxiliary functions
69
  /**
70
   * Convert from bandwidth (in RBs) to ENUMERATED value
71
   *
72
   * \param bandwidth Bandwith in RBs: 6, 15, 25, 50, 75, 100
73
   * \returns ENUMERATED value: 0, 1, 2, 3, 4, 5
74
   */
75
  int BandwidthToEnum (uint8_t bandwidth) const;
76
  /**
77
   * Convert from ENUMERATED value to bandwidth (in RBs)
78
   *
79
   * \param n ENUMERATED value: 0, 1, 2, 3, 4, 5
80
   * \returns bandwidth Bandwith in RBs: 6, 15, 25, 50, 75, 100
81
   */
82
  uint8_t EnumToBandwidth (int n) const;
83
84
67
  // Serialization functions
85
  // Serialization functions
68
  /**
86
  /**
69
   * Serialize SRB to add mod list function
87
   * Serialize SRB to add mod list function
(-)a/src/lte/model/lte-rrc-sap.h (-1 / +1 lines)
 Lines 59-65    Link Here 
59
  virtual ~LteRrcSap ();
59
  virtual ~LteRrcSap ();
60
60
61
  /// Constraint values
61
  /// Constraint values
62
  static const uint8_t MaxReportCells = 255;
62
  static const uint8_t MaxReportCells = 8;
63
63
64
  // Information Elements
64
  // Information Elements
65
  /// PlmnIdentityInfo structure
65
  /// PlmnIdentityInfo structure
(-)a/src/lte/test/test-asn1-encoding.cc (-1 / +1 lines)
 Lines 737-743    Link Here 
737
  msg.asConfig.sourceDlCarrierFreq = 3;
737
  msg.asConfig.sourceDlCarrierFreq = 3;
738
  msg.asConfig.sourceUeIdentity = 11;
738
  msg.asConfig.sourceUeIdentity = 11;
739
  msg.asConfig.sourceRadioResourceConfig = CreateRadioResourceConfigDedicated ();
739
  msg.asConfig.sourceRadioResourceConfig = CreateRadioResourceConfigDedicated ();
740
  msg.asConfig.sourceMasterInformationBlock.dlBandwidth = 3;
740
  msg.asConfig.sourceMasterInformationBlock.dlBandwidth = 50;
741
  msg.asConfig.sourceMasterInformationBlock.systemFrameNumber = 1;
741
  msg.asConfig.sourceMasterInformationBlock.systemFrameNumber = 1;
742
742
743
  msg.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.csgIndication = true;
743
  msg.asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.csgIndication = true;

Return to bug 2754