A Discrete-Event Network Simulator
API
lte-rrc-header.cc
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Lluis Parcerisa <lparcerisa@cttc.cat>
19  */
20 
21 #include "ns3/log.h"
22 #include "ns3/lte-rrc-header.h"
23 
24 #include <stdio.h>
25 #include <sstream>
26 
27 #define MAX_DRB 11 // According to section 6.4 3GPP TS 36.331
28 #define MAX_EARFCN 65535
29 #define MAX_RAT_CAPABILITIES 8
30 #define MAX_SI_MESSAGE 32
31 #define MAX_SIB 32
32 
33 #define MAX_REPORT_CONFIG_ID 32
34 #define MAX_OBJECT_ID 32
35 #define MAX_MEAS_ID 32
36 #define MAX_CELL_MEAS 32
37 #define MAX_CELL_REPORT 8
38 
39 namespace ns3 {
40 
41 NS_LOG_COMPONENT_DEFINE ("RrcHeader");
42 
45 {
46 }
47 
48 TypeId
50 {
51  static TypeId tid = TypeId ("ns3::RrcAsn1Header")
52  .SetParent<Header> ()
53  ;
54  return tid;
55 }
56 
57 TypeId
59 {
60  return GetTypeId ();
61 }
62 
63 int
65 {
66  return m_messageType;
67 }
68 
69 void
70 RrcAsn1Header::SerializeDrbToAddModList (std::list<LteRrcSap::DrbToAddMod> drbToAddModList) const
71 {
72  // Serialize DRB-ToAddModList sequence-of
73  SerializeSequenceOf (drbToAddModList.size (),MAX_DRB,1);
74 
75  // Serialize the elements in the sequence-of list
76  std::list<LteRrcSap::DrbToAddMod>::iterator it = drbToAddModList.begin ();
77  for (; it != drbToAddModList.end (); it++)
78  {
79  // Serialize DRB-ToAddMod sequence
80  // 5 otional fields. Extension marker is present.
81  std::bitset<5> drbToAddModListOptionalFieldsPresent = std::bitset<5> ();
82  drbToAddModListOptionalFieldsPresent.set (4,1); // eps-BearerIdentity present
83  drbToAddModListOptionalFieldsPresent.set (3,0); // pdcp-Config not present
84  drbToAddModListOptionalFieldsPresent.set (2,1); // rlc-Config present
85  drbToAddModListOptionalFieldsPresent.set (1,1); // logicalChannelIdentity present
86  drbToAddModListOptionalFieldsPresent.set (0,1); // logicalChannelConfig present
87  SerializeSequence (drbToAddModListOptionalFieldsPresent,true);
88 
89  // Serialize eps-BearerIdentity::=INTEGER (0..15)
90  SerializeInteger (it->epsBearerIdentity,0,15);
91 
92  // Serialize drb-Identity ::= INTEGER (1..32)
93  SerializeInteger (it->drbIdentity,1,32);
94 
95  switch (it->rlcConfig.choice)
96  {
98  // Serialize rlc-Config choice
99  SerializeChoice (4,1,true);
100 
101  // Serialize UL-UM-RLC
102  SerializeSequence (std::bitset<0> (),false);
103  SerializeEnum (2,0); // sn-FieldLength
104 
105  // Serialize DL-UM-RLC
106  SerializeSequence (std::bitset<0> (),false);
107  SerializeEnum (2,0); // sn-FieldLength
108  SerializeEnum (32,0); // t-Reordering
109  break;
110 
112  // Serialize rlc-Config choice
113  SerializeChoice (4,2,true);
114 
115  // Serialize UL-UM-RLC
116  SerializeSequence (std::bitset<0> (),false);
117  SerializeEnum (2,0); // sn-FieldLength
118  break;
119 
121  // Serialize rlc-Config choice
122  SerializeChoice (4,3,true);
123 
124  // Serialize DL-UM-RLC
125  SerializeSequence (std::bitset<0> (),false);
126  SerializeEnum (2,0); // sn-FieldLength
127  SerializeEnum (32,0); // t-Reordering
128  break;
129 
131  default:
132  // Serialize rlc-Config choice
133  SerializeChoice (4,0,true);
134 
135  // Serialize UL-AM-RLC
136  SerializeSequence (std::bitset<0> (),false);
137  SerializeEnum (64,0); // t-PollRetransmit
138  SerializeEnum (8,0); // pollPDU
139  SerializeEnum (16,0); // pollByte
140  SerializeEnum (8,0); // maxRetxThreshold
141 
142  // Serialize DL-AM-RLC
143  SerializeSequence (std::bitset<0> (),false);
144  SerializeEnum (32,0); // t-Reordering
145  SerializeEnum (64,0); // t-StatusProhibit
146  break;
147  }
148 
149  // Serialize logicalChannelIdentity ::=INTEGER (3..10)
150  SerializeInteger (it->logicalChannelIdentity,3,10);
151 
152  // Serialize logicalChannelConfig
153  SerializeLogicalChannelConfig (it->logicalChannelConfig);
154  }
155 }
156 
157 void
158 RrcAsn1Header::SerializeSrbToAddModList (std::list<LteRrcSap::SrbToAddMod> srbToAddModList) const
159 {
160  // Serialize SRB-ToAddModList ::= SEQUENCE (SIZE (1..2)) OF SRB-ToAddMod
161  SerializeSequenceOf (srbToAddModList.size (),2,1);
162 
163  // Serialize the elements in the sequence-of list
164  std::list<LteRrcSap::SrbToAddMod>::iterator it = srbToAddModList.begin ();
165  for (; it != srbToAddModList.end (); it++)
166  {
167  // Serialize SRB-ToAddMod sequence
168  // 2 otional fields. Extension marker is present.
169  std::bitset<2> srbToAddModListOptionalFieldsPresent = std::bitset<2> ();
170  srbToAddModListOptionalFieldsPresent.set (1,0); // rlc-Config not present
171  srbToAddModListOptionalFieldsPresent.set (0,1); // logicalChannelConfig present
172  SerializeSequence (srbToAddModListOptionalFieldsPresent,true);
173 
174  // Serialize srb-Identity ::= INTEGER (1..2)
175  SerializeInteger (it->srbIdentity,1,2);
176 
177  // Serialize logicalChannelConfig choice
178  // 2 options, selected option 0 (var "explicitValue", of type LogicalChannelConfig)
179  SerializeChoice (2,0,false);
180 
181  // Serialize LogicalChannelConfig
182  SerializeLogicalChannelConfig (it->logicalChannelConfig);
183  }
184 }
185 
186 void
188 {
189  // Serialize LogicalChannelConfig sequence
190  // 1 optional field (ul-SpecificParameters), which is present. Extension marker present.
191  SerializeSequence (std::bitset<1> (1),true);
192 
193  // Serialize ul-SpecificParameters sequence
194  // 1 optional field (logicalChannelGroup), which is present. No extension marker.
195  SerializeSequence (std::bitset<1> (1),false);
196 
197  // Serialize priority ::= INTEGER (1..16)
198  SerializeInteger (logicalChannelConfig.priority,1,16);
199 
200  // Serialize prioritisedBitRate
201  int prioritizedBitRate;
202  switch (logicalChannelConfig.prioritizedBitRateKbps)
203  {
204  case 0:
205  prioritizedBitRate = 0;
206  break;
207  case 8:
208  prioritizedBitRate = 1;
209  break;
210  case 16:
211  prioritizedBitRate = 2;
212  break;
213  case 32:
214  prioritizedBitRate = 3;
215  break;
216  case 64:
217  prioritizedBitRate = 4;
218  break;
219  case 128:
220  prioritizedBitRate = 5;
221  break;
222  case 256:
223  prioritizedBitRate = 6;
224  break;
225  default:
226  prioritizedBitRate = 7; // Infinity
227  }
228  SerializeEnum (16,prioritizedBitRate);
229 
230  // Serialize bucketSizeDuration
231  int bucketSizeDuration;
232  switch (logicalChannelConfig.bucketSizeDurationMs)
233  {
234  case 50:
235  bucketSizeDuration = 0;
236  break;
237  case 100:
238  bucketSizeDuration = 1;
239  break;
240  case 150:
241  bucketSizeDuration = 2;
242  break;
243  case 300:
244  bucketSizeDuration = 3;
245  break;
246  case 500:
247  bucketSizeDuration = 4;
248  break;
249  case 1000:
250  bucketSizeDuration = 5;
251  break;
252  default:
253  bucketSizeDuration = 5;
254  }
255  SerializeEnum (8,bucketSizeDuration);
256 
257  // Serialize logicalChannelGroup ::= INTEGER (0..3)
258  SerializeInteger (logicalChannelConfig.logicalChannelGroup,0,3);
259 }
260 
261 void
263 {
264  // Serialize PhysicalConfigDedicated Sequence
265  std::bitset<10> optionalFieldsPhysicalConfigDedicated;
266  optionalFieldsPhysicalConfigDedicated.set (9,physicalConfigDedicated.havePdschConfigDedicated); // pdsch-ConfigDedicated
267  optionalFieldsPhysicalConfigDedicated.set (8,0); // pucch-ConfigDedicated not present
268  optionalFieldsPhysicalConfigDedicated.set (7,0); // pusch-ConfigDedicated not present
269  optionalFieldsPhysicalConfigDedicated.set (6,0); // uplinkPowerControlDedicated not present
270  optionalFieldsPhysicalConfigDedicated.set (5,0); // tpc-PDCCH-ConfigPUCCH not present
271  optionalFieldsPhysicalConfigDedicated.set (4,0); // tpc-PDCCH-ConfigPUSCH not present
272  optionalFieldsPhysicalConfigDedicated.set (3,0); // cqi-ReportConfig not present
273  optionalFieldsPhysicalConfigDedicated.set (2,physicalConfigDedicated.haveSoundingRsUlConfigDedicated); // soundingRS-UL-ConfigDedicated
274  optionalFieldsPhysicalConfigDedicated.set (1,physicalConfigDedicated.haveAntennaInfoDedicated); // antennaInfo
275  optionalFieldsPhysicalConfigDedicated.set (0,0); // schedulingRequestConfig not present
276  SerializeSequence (optionalFieldsPhysicalConfigDedicated,true);
277 
278  if (physicalConfigDedicated.havePdschConfigDedicated)
279  {
280  // Serialize Pdsch-ConfigDedicated Sequence:
281  // 0 optional / default fields, no extension marker.
282  SerializeSequence (std::bitset<0> (),false);
283 
284  // Serialize p-a
285  // Assuming the value in the struct is the enum index
286  SerializeEnum (8,physicalConfigDedicated.pdschConfigDedicated.pa);
287 
288  // Serialize release
289  SerializeNull ();
290  }
291 
292  if (physicalConfigDedicated.haveSoundingRsUlConfigDedicated)
293  {
294  // Serialize SoundingRS-UL-ConfigDedicated choice:
295  switch (physicalConfigDedicated.soundingRsUlConfigDedicated.type)
296  {
298  SerializeChoice (2,0,false);
299  SerializeNull ();
300  break;
301 
303  default:
304  // 2 options, selected: 1 (setup)
305  SerializeChoice (2,1,false);
306 
307  // Serialize setup sequence
308  // 0 optional / default fields, no extension marker.
309  SerializeSequence (std::bitset<0> (),false);
310 
311  // Serialize srs-Bandwidth
312  SerializeEnum (4,physicalConfigDedicated.soundingRsUlConfigDedicated.srsBandwidth);
313 
314  // Serialize srs-HoppingBandwidth
315  SerializeEnum (4,0);
316 
317  // Serialize freqDomainPosition
318  SerializeInteger (0,0,23);
319 
320  // Serialize duration
321  SerializeBoolean (false);
322 
323  // Serialize srs-ConfigIndex
324  SerializeInteger (physicalConfigDedicated.soundingRsUlConfigDedicated.srsConfigIndex,0,1023);
325 
326  // Serialize transmissionComb
327  SerializeInteger (0,0,1);
328 
329  // Serialize cyclicShift
330  SerializeEnum (8,0);
331 
332  break;
333  }
334  }
335 
336  if (physicalConfigDedicated.haveAntennaInfoDedicated)
337  {
338  // Serialize antennaInfo choice
339  // 2 options. Selected: 0 ("explicitValue" of type "AntennaInfoDedicated")
340  SerializeChoice (2,0,false);
341 
342  // Serialize AntennaInfoDedicated sequence
343  // 1 optional parameter, not present. No extension marker.
344  SerializeSequence (std::bitset<1> (0),false);
345 
346  // Serialize transmissionMode
347  // Assuming the value in the struct is the enum index
348  SerializeEnum (8,physicalConfigDedicated.antennaInfo.transmissionMode);
349 
350  // Serialize ue-TransmitAntennaSelection choice
351  SerializeChoice (2,0,false);
352 
353  // Serialize release
354  SerializeNull ();
355  }
356 }
357 
358 void
360 {
361  bool isSrbToAddModListPresent = !radioResourceConfigDedicated.srbToAddModList.empty ();
362  bool isDrbToAddModListPresent = !radioResourceConfigDedicated.drbToAddModList.empty ();
363  bool isDrbToReleaseListPresent = !radioResourceConfigDedicated.drbToReleaseList.empty ();
364 
365  // 6 optional fields. Extension marker is present.
366  std::bitset<6> optionalFieldsPresent = std::bitset<6> ();
367  optionalFieldsPresent.set (5,isSrbToAddModListPresent); // srb-ToAddModList present
368  optionalFieldsPresent.set (4,isDrbToAddModListPresent); // drb-ToAddModList present
369  optionalFieldsPresent.set (3,isDrbToReleaseListPresent); // drb-ToReleaseList present
370  optionalFieldsPresent.set (2,0); // mac-MainConfig not present
371  optionalFieldsPresent.set (1,0); // sps-Config not present
372  optionalFieldsPresent.set (0,(radioResourceConfigDedicated.havePhysicalConfigDedicated) ? 1 : 0);
373  SerializeSequence (optionalFieldsPresent,true);
374 
375  // Serialize srbToAddModList
376  if (isSrbToAddModListPresent)
377  {
378  SerializeSrbToAddModList (radioResourceConfigDedicated.srbToAddModList);
379  }
380 
381  // Serialize drbToAddModList
382  if (isDrbToAddModListPresent)
383  {
384  SerializeDrbToAddModList (radioResourceConfigDedicated.drbToAddModList);
385  }
386 
387  // Serialize drbToReleaseList
388  if (isDrbToReleaseListPresent)
389  {
390  SerializeSequenceOf (radioResourceConfigDedicated.drbToReleaseList.size (),MAX_DRB,1);
391  std::list<uint8_t>::iterator it = radioResourceConfigDedicated.drbToReleaseList.begin ();
392  for (; it != radioResourceConfigDedicated.drbToReleaseList.end (); it++)
393  {
394  // DRB-Identity ::= INTEGER (1..32)
395  SerializeInteger (*it,1,32);
396  }
397  }
398 
399  if (radioResourceConfigDedicated.havePhysicalConfigDedicated)
400  {
401  SerializePhysicalConfigDedicated (radioResourceConfigDedicated.physicalConfigDedicated);
402  }
403 }
404 
405 void
407 {
408  // 3 optional fields, no extension marker.
409  std::bitset<3> sysInfoBlk1Opts;
410  sysInfoBlk1Opts.set (2,0); // p-Max absent
411  sysInfoBlk1Opts.set (1,0); // tdd-Config absent
412  sysInfoBlk1Opts.set (0,0); // nonCriticalExtension absent
413  SerializeSequence (sysInfoBlk1Opts,false);
414 
415  // Serialize cellAccessRelatedInfo
416  // 1 optional field (csgIdentity) which is present, no extension marker.
417  SerializeSequence (std::bitset<1> (1),false);
418 
419  // Serialize plmn-IdentityList
420  SerializeSequenceOf (1,6,1);
421 
422  // PLMN-IdentityInfo
423  SerializeSequence (std::bitset<0> (),false);
424 
426 
427  // Serialize trackingAreaCode
428  SerializeBitstring (std::bitset<16> (0));
429  // Serialize cellIdentity
430  SerializeBitstring (std::bitset<28> (systemInformationBlockType1.cellAccessRelatedInfo.cellIdentity));
431  // Serialize cellBarred
432  SerializeEnum (2,0);
433  // Serialize intraFreqReselection
434  SerializeEnum (2,0);
435  // Serialize csg-Indication
436  SerializeBoolean (systemInformationBlockType1.cellAccessRelatedInfo.csgIndication);
437  // Serialize csg-Identity
438  SerializeBitstring (std::bitset<27> (systemInformationBlockType1.cellAccessRelatedInfo.csgIdentity));
439 
440  // Serialize cellSelectionInfo
441  SerializeSequence (std::bitset<1> (0),false);
442  // Serialize q-RxLevMin
443  SerializeInteger (-50,-70,-22);
444 
445  // Serialize freqBandIndicator
446  SerializeInteger (1,1,64);
447 
448  // Serialize schedulingInfoList
450  // SchedulingInfo
451  SerializeSequence (std::bitset<0> (),false);
452  // si-Periodicity
453  SerializeEnum (7,0);
454  // sib-MappingInfo
455  SerializeSequenceOf (0,MAX_SIB - 1,0);
456 
457  // Serialize si-WindowLength
458  SerializeEnum (7,0);
459 
460  // Serialize systemInfoValueTag
461  SerializeInteger (0,0,31);
462 }
463 
464 void
466 {
467  // 9 optional fields. Extension marker yes.
468  std::bitset<9> rrCfgCmmOpts;
469  rrCfgCmmOpts.set (8,1); // rach-ConfigCommon is present
470  rrCfgCmmOpts.set (7,0); // pdsch-ConfigCommon not present
471  rrCfgCmmOpts.set (6,0); // phich-Config not present
472  rrCfgCmmOpts.set (5,0); // pucch-ConfigCommon not present
473  rrCfgCmmOpts.set (4,0); // soundingRS-UL-ConfigCommon not present
474  rrCfgCmmOpts.set (3,0); // uplinkPowerControlCommon not present
475  rrCfgCmmOpts.set (2,0); // antennaInfoCommon not present
476  rrCfgCmmOpts.set (1,0); // p-Max not present
477  rrCfgCmmOpts.set (0,0); // tdd-Config not present
478 
479  SerializeSequence (rrCfgCmmOpts,true);
480 
481  if (rrCfgCmmOpts[8])
482  {
483  // Serialize RACH-ConfigCommon
484  SerializeRachConfigCommon (radioResourceConfigCommon.rachConfigCommon);
485  }
486 
487  // Serialize PRACH-Config
488  // 1 optional, 0 extension marker.
489  SerializeSequence (std::bitset<1> (0),false);
490 
491  // Serialize PRACH-Config rootSequenceIndex
492  SerializeInteger (0,0,1023);
493 
494  // Serialize PUSCH-ConfigCommon
495  SerializeSequence (std::bitset<0> (),false);
496 
497  // Serialize pusch-ConfigBasic
498  SerializeSequence (std::bitset<0> (),false);
499  SerializeInteger (1,1,4);
500  SerializeEnum (2,0);
501  SerializeInteger (0,0,98);
502  SerializeBoolean (false);
503 
504  // Serialize UL-ReferenceSignalsPUSCH
505  SerializeSequence (std::bitset<0> (),false);
506  SerializeBoolean (false);
507  SerializeInteger (0,0,29);
508  SerializeBoolean (false);
509  SerializeInteger (4,0,7);
510 
511  // Serialize UL-CyclicPrefixLength
512  SerializeEnum (2,0);
513 }
514 
515 void
517 {
518  SerializeSequence (std::bitset<0> (0),true);
519 
520  // rach-ConfigCommon
521  SerializeRachConfigCommon (radioResourceConfigCommonSib.rachConfigCommon);
522 
523  // bcch-Config
524  SerializeSequence (std::bitset<0> (0),false);
525  SerializeEnum (4,0); // modificationPeriodCoeff
526  // pcch-Config
527  SerializeSequence (std::bitset<0> (0),false);
528  SerializeEnum (4,0); // defaultPagingCycle
529  SerializeEnum (8,0); // nB
530  // prach-Config
531  SerializeSequence (std::bitset<1> (0),false);
532  SerializeInteger (0,0,1023); // rootSequenceIndex
533  // pdsch-ConfigCommon
534  SerializeSequence (std::bitset<0> (0),false);
535  SerializeInteger (0,-60,50); // referenceSignalPower
536  SerializeInteger (0,0,3); // p-b
537  // pusch-ConfigCommon
538  SerializeSequence (std::bitset<0> (0),false);
539  SerializeSequence (std::bitset<0> (0),false); // pusch-ConfigBasic
540  SerializeInteger (1,1,4); // n-SB
541  SerializeEnum (2,0); // hoppingMode
542  SerializeInteger (0,0,98); // pusch-HoppingOffset
543  SerializeBoolean (false); // enable64QAM
544  SerializeSequence (std::bitset<0> (0),false); // UL-ReferenceSignalsPUSCH
545  SerializeBoolean (false); // groupHoppingEnabled
546  SerializeInteger (0,0,29); // groupAssignmentPUSCH
547  SerializeBoolean (false); // sequenceHoppingEnabled
548  SerializeInteger (0,0,7); // cyclicShift
549  // pucch-ConfigCommon
550  SerializeSequence (std::bitset<0> (0),false);
551  SerializeEnum (3,0); // deltaPUCCH-Shift
552  SerializeInteger (0,0,98); // nRB-CQI
553  SerializeInteger (0,0,7); // nCS-AN
554  SerializeInteger (0,0,2047); // n1PUCCH-AN
555  // soundingRS-UL-ConfigCommon
556  SerializeChoice (2,0,false);
557  SerializeNull (); // release
558  // uplinkPowerControlCommon
559  SerializeSequence (std::bitset<0> (0),false);
560  SerializeInteger (0,-126,24); // p0-NominalPUSCH
561  SerializeEnum (8,0); // alpha
562  SerializeInteger (-50,-127,-96); // p0-NominalPUCCH
563  SerializeSequence (std::bitset<0> (0),false); // deltaFList-PUCCH
564  SerializeEnum (3,0); // deltaF-PUCCH-Format1
565  SerializeEnum (3,0); // deltaF-PUCCH-Format1b
566  SerializeEnum (4,0); // deltaF-PUCCH-Format2
567  SerializeEnum (3,0); // deltaF-PUCCH-Format2a
568  SerializeEnum (3,0); // deltaF-PUCCH-Format2b
569  SerializeInteger (0,-1,6);
570  // ul-CyclicPrefixLength
571  SerializeEnum (2,0);
572 }
573 
574 void
576 {
577  SerializeSequence (std::bitset<2> (0),true);
578 
579  // RadioResourceConfigCommonSib
581 
582  // ue-TimersAndConstants
583  SerializeSequence (std::bitset<0> (0),true);
584  SerializeEnum (8,0); // t300
585  SerializeEnum (8,0); // t301
586  SerializeEnum (7,0); // t310
587  SerializeEnum (8,0); // n310
588  SerializeEnum (7,0); // t311
589  SerializeEnum (8,0); // n311
590 
591  // freqInfo
592  SerializeSequence (std::bitset<2> (3),false);
593  SerializeInteger ((int) systemInformationBlockType2.freqInfo.ulCarrierFreq, 0, MAX_EARFCN);
594  switch (systemInformationBlockType2.freqInfo.ulBandwidth)
595  {
596  case 6:
597  SerializeEnum (6,0);
598  break;
599  case 15:
600  SerializeEnum (6,1);
601  break;
602  case 25:
603  SerializeEnum (6,2);
604  break;
605  case 50:
606  SerializeEnum (6,3);
607  break;
608  case 75:
609  SerializeEnum (6,4);
610  break;
611  case 100:
612  SerializeEnum (6,5);
613  break;
614  default:
615  SerializeEnum (6,0);
616  }
617 
618  SerializeInteger (29,1,32); // additionalSpectrumEmission
619  // timeAlignmentTimerCommon
620  SerializeEnum (8,0);
621 }
622 
623 void
625 {
626  // Watchdog: if list has 0 elements, set boolean to false
627  if (measResults.measResultListEutra.empty ())
628  {
629  measResults.haveMeasResultNeighCells = false;
630  }
631 
632  // Serialize MeasResults sequence, 1 optional value, extension marker present
633  SerializeSequence (std::bitset<1> (measResults.haveMeasResultNeighCells),true);
634 
635  // Serialize measId
636  SerializeInteger (measResults.measId,1,MAX_MEAS_ID);
637 
638  // Serialize measResultServCell sequence
639  SerializeSequence (std::bitset<0> (0),false);
640 
641  // Serialize rsrpResult
642  SerializeInteger (measResults.rsrpResult,0,97);
643 
644  // Serialize rsrqResult
645  SerializeInteger (measResults.rsrqResult,0,34);
646 
647  if (measResults.haveMeasResultNeighCells)
648  {
649  // Serialize Choice = 0 (MeasResultListEUTRA)
650  SerializeChoice (4,0,false);
651 
652  // Serialize measResultNeighCells
654 
655  // serialize MeasResultEutra elements in the list
656  std::list<LteRrcSap::MeasResultEutra>::iterator it;
657  for (it = measResults.measResultListEutra.begin (); it != measResults.measResultListEutra.end (); it++)
658  {
659  SerializeSequence (std::bitset<1> (it->haveCgiInfo),false);
660 
661  // Serialize PhysCellId
662  SerializeInteger (it->physCellId, 0, 503);
663 
664  // Serialize CgiInfo
665  if (it->haveCgiInfo)
666  {
667  SerializeSequence (std::bitset<1> (it->cgiInfo.plmnIdentityList.size ()),false);
668 
669  // Serialize cellGlobalId
670  SerializeSequence (std::bitset<0> (0),false);
671  SerializePlmnIdentity (it->cgiInfo.plmnIdentity);
672  SerializeBitstring (std::bitset<28> (it->cgiInfo.cellIdentity));
673 
674  // Serialize trackingAreaCode
675  SerializeBitstring (std::bitset<16> (it->cgiInfo.trackingAreaCode));
676 
677  // Serialize plmn-IdentityList
678  if (!it->cgiInfo.plmnIdentityList.empty ())
679  {
680  SerializeSequenceOf (it->cgiInfo.plmnIdentityList.size (),5,1);
681  std::list<uint32_t>::iterator it2;
682  for (it2 = it->cgiInfo.plmnIdentityList.begin (); it2 != it->cgiInfo.plmnIdentityList.end (); it2++)
683  {
684  SerializePlmnIdentity (*it2);
685  }
686  }
687  }
688 
689  // Serialize measResult
690  std::bitset<2> measResultFieldsPresent;
691  measResultFieldsPresent[1] = it->haveRsrpResult;
692  measResultFieldsPresent[0] = it->haveRsrqResult;
693  SerializeSequence (measResultFieldsPresent,true);
694 
695  if (it->haveRsrpResult)
696  {
697  SerializeInteger (it->rsrpResult,0,97);
698  }
699 
700  if (it->haveRsrqResult)
701  {
702  SerializeInteger (it->rsrqResult,0,34);
703  }
704  }
705  }
706 }
707 
708 void
710 {
711  // plmn-Identity sequence, mcc is optional, no extension marker
712  SerializeSequence (std::bitset<1> (0), false);
713 
714  // Serialize mnc
715  int nDig = (plmnId > 99) ? 3 : 2;
716 
717  SerializeSequenceOf (nDig,3,2);
718  for (int i = nDig - 1; i >= 0; i--)
719  {
720  int n = floor (plmnId / pow (10,i));
721  SerializeInteger (n,0,9);
722  plmnId -= n * pow (10,i);
723  }
724 
725  // cellReservedForOperatorUse
726  SerializeEnum (2,0);
727 }
728 
729 void
731 {
732  // rach-ConfigCommon
733  SerializeSequence (std::bitset<0> (0),true);
734 
735  // preambleInfo
736  SerializeSequence (std::bitset<1> (0),false);
737 
738  // numberOfRA-Preambles
739  switch (rachConfigCommon.preambleInfo.numberOfRaPreambles)
740  {
741  case 4:
742  SerializeEnum (16,0);
743  break;
744  case 8:
745  SerializeEnum (16,1);
746  break;
747  case 12:
748  SerializeEnum (16,2);
749  break;
750  case 16:
751  SerializeEnum (16,3);
752  break;
753  case 20:
754  SerializeEnum (16,4);
755  break;
756  case 24:
757  SerializeEnum (16,5);
758  break;
759  case 28:
760  SerializeEnum (16,6);
761  break;
762  case 32:
763  SerializeEnum (16,7);
764  break;
765  case 36:
766  SerializeEnum (16,8);
767  break;
768  case 40:
769  SerializeEnum (16,9);
770  break;
771  case 44:
772  SerializeEnum (16,10);
773  break;
774  case 48:
775  SerializeEnum (16,11);
776  break;
777  case 52:
778  SerializeEnum (16,12);
779  break;
780  case 56:
781  SerializeEnum (16,13);
782  break;
783  case 60:
784  SerializeEnum (16,14);
785  break;
786  case 64:
787  SerializeEnum (16,15);
788  break;
789  default:
790  SerializeEnum (16,0);
791  }
792 
793  SerializeSequence (std::bitset<0> (0),false); // powerRampingParameters
794  SerializeEnum (4,0); // powerRampingStep
795  SerializeEnum (16,0); // preambleInitialReceivedTargetPower
796  SerializeSequence (std::bitset<0> (0),false); // ra-SupervisionInfo
797 
798  // preambleTransMax
799  switch (rachConfigCommon.raSupervisionInfo.preambleTransMax)
800  {
801  case 3:
802  SerializeEnum (11,0);
803  break;
804  case 4:
805  SerializeEnum (11,1);
806  break;
807  case 5:
808  SerializeEnum (11,2);
809  break;
810  case 6:
811  SerializeEnum (11,3);
812  break;
813  case 7:
814  SerializeEnum (11,4);
815  break;
816  case 8:
817  SerializeEnum (11,5);
818  break;
819  case 10:
820  SerializeEnum (11,6);
821  break;
822  case 20:
823  SerializeEnum (11,7);
824  break;
825  case 50:
826  SerializeEnum (11,8);
827  break;
828  case 100:
829  SerializeEnum (11,9);
830  break;
831  case 200:
832  SerializeEnum (11,10);
833  break;
834  default:
835  SerializeEnum (11,0);
836  }
837 
838  // ra-ResponseWindowSize
839  switch (rachConfigCommon.raSupervisionInfo.raResponseWindowSize)
840  {
841  case 2:
842  SerializeEnum (8,0);
843  break;
844  case 3:
845  SerializeEnum (8,1);
846  break;
847  case 4:
848  SerializeEnum (8,2);
849  break;
850  case 5:
851  SerializeEnum (8,3);
852  break;
853  case 6:
854  SerializeEnum (8,4);
855  break;
856  case 7:
857  SerializeEnum (8,5);
858  break;
859  case 8:
860  SerializeEnum (8,6);
861  break;
862  case 10:
863  SerializeEnum (8,7);
864  break;
865  default:
866  SerializeEnum (8,0);
867  }
868 
869  SerializeEnum (8,0); // mac-ContentionResolutionTimer
870  SerializeInteger (1,1,8); // maxHARQ-Msg3Tx
871 }
872 
873 void
874 RrcAsn1Header::SerializeQoffsetRange (int8_t qOffsetRange) const
875 {
876  switch (qOffsetRange)
877  {
878  case -24:
879  SerializeEnum (31,0);
880  break;
881  case -22:
882  SerializeEnum (31,1);
883  break;
884  case -20:
885  SerializeEnum (31,2);
886  break;
887  case -18:
888  SerializeEnum (31,3);
889  break;
890  case -16:
891  SerializeEnum (31,4);
892  break;
893  case -14:
894  SerializeEnum (31,5);
895  break;
896  case -12:
897  SerializeEnum (31,6);
898  break;
899  case -10:
900  SerializeEnum (31,7);
901  break;
902  case -8:
903  SerializeEnum (31,8);
904  break;
905  case -6:
906  SerializeEnum (31,9);
907  break;
908  case -5:
909  SerializeEnum (31,10);
910  break;
911  case -4:
912  SerializeEnum (31,11);
913  break;
914  case -3:
915  SerializeEnum (31,12);
916  break;
917  case -2:
918  SerializeEnum (31,13);
919  break;
920  case -1:
921  SerializeEnum (31,14);
922  break;
923  case 0:
924  SerializeEnum (31,15);
925  break;
926  case 1:
927  SerializeEnum (31,16);
928  break;
929  case 2:
930  SerializeEnum (31,17);
931  break;
932  case 3:
933  SerializeEnum (31,18);
934  break;
935  case 4:
936  SerializeEnum (31,19);
937  break;
938  case 5:
939  SerializeEnum (31,20);
940  break;
941  case 6:
942  SerializeEnum (31,21);
943  break;
944  case 8:
945  SerializeEnum (31,22);
946  break;
947  case 10:
948  SerializeEnum (31,23);
949  break;
950  case 12:
951  SerializeEnum (31,24);
952  break;
953  case 14:
954  SerializeEnum (31,25);
955  break;
956  case 16:
957  SerializeEnum (31,26);
958  break;
959  case 18:
960  SerializeEnum (31,27);
961  break;
962  case 20:
963  SerializeEnum (31,28);
964  break;
965  case 22:
966  SerializeEnum (31,29);
967  break;
968  case 24:
969  SerializeEnum (31,30);
970  break;
971  default:
972  SerializeEnum (31,15);
973  }
974 }
975 
976 void
978 {
979  switch (thresholdEutra.choice)
980  {
982  SerializeChoice (2,0,false);
983  SerializeInteger (thresholdEutra.range, 0, 97);
984  break;
986  default:
987  SerializeChoice (2,1,false);
988  SerializeInteger (thresholdEutra.range, 0, 34);
989  }
990 }
991 
992 void
994 {
995  // Serialize MeasConfig sequence
996  // 11 optional fields, extension marker present
997  std::bitset<11> measConfigOptional;
998  measConfigOptional.set (10, !measConfig.measObjectToRemoveList.empty () );
999  measConfigOptional.set (9, !measConfig.measObjectToAddModList.empty () );
1000  measConfigOptional.set (8, !measConfig.reportConfigToRemoveList.empty () );
1001  measConfigOptional.set (7, !measConfig.reportConfigToAddModList.empty () );
1002  measConfigOptional.set (6, !measConfig.measIdToRemoveList.empty () );
1003  measConfigOptional.set (5, !measConfig.measIdToAddModList.empty () );
1004  measConfigOptional.set (4, measConfig.haveQuantityConfig );
1005  measConfigOptional.set (3, measConfig.haveMeasGapConfig );
1006  measConfigOptional.set (2, measConfig.haveSmeasure );
1007  measConfigOptional.set (1, false ); // preRegistrationInfoHRPD
1008  measConfigOptional.set (0, measConfig.haveSpeedStatePars );
1009  SerializeSequence (measConfigOptional,true);
1010 
1011  if (!measConfig.measObjectToRemoveList.empty ())
1012  {
1014  for (std::list<uint8_t>::iterator it = measConfig.measObjectToRemoveList.begin (); it != measConfig.measObjectToRemoveList.end (); it++)
1015  {
1016  SerializeInteger (*it, 1, MAX_OBJECT_ID);
1017  }
1018  }
1019 
1020  if (!measConfig.measObjectToAddModList.empty ())
1021  {
1023  for (std::list<LteRrcSap::MeasObjectToAddMod>::iterator it = measConfig.measObjectToAddModList.begin (); it != measConfig.measObjectToAddModList.end (); it++)
1024  {
1025  SerializeSequence (std::bitset<0> (), false);
1026  SerializeInteger (it->measObjectId, 1, MAX_OBJECT_ID);
1027  SerializeChoice (4, 0, true); // Select MeasObjectEUTRA
1028 
1029  // Serialize measObjectEutra
1030  std::bitset<5> measObjOpts;
1031  measObjOpts.set (4,!it->measObjectEutra.cellsToRemoveList.empty () );
1032  measObjOpts.set (3,!it->measObjectEutra.cellsToAddModList.empty () );
1033  measObjOpts.set (2,!it->measObjectEutra.blackCellsToRemoveList.empty () );
1034  measObjOpts.set (1,!it->measObjectEutra.blackCellsToAddModList.empty () );
1035  measObjOpts.set (0,it->measObjectEutra.haveCellForWhichToReportCGI);
1036  SerializeSequence (measObjOpts, true);
1037 
1038  // Serialize carrierFreq
1039  SerializeInteger (it->measObjectEutra.carrierFreq, 0, MAX_EARFCN);
1040 
1041  // Serialize allowedMeasBandwidth
1042  switch (it->measObjectEutra.allowedMeasBandwidth)
1043  {
1044  case 6:
1045  SerializeEnum (6,0);
1046  break;
1047  case 15:
1048  SerializeEnum (6,1);
1049  break;
1050  case 25:
1051  SerializeEnum (6,2);
1052  break;
1053  case 50:
1054  SerializeEnum (6,3);
1055  break;
1056  case 75:
1057  SerializeEnum (6,4);
1058  break;
1059  case 100:
1060  SerializeEnum (6,5);
1061  break;
1062  default:
1063  SerializeEnum (6,0);
1064  }
1065 
1066  SerializeBoolean (it->measObjectEutra.presenceAntennaPort1);
1067  SerializeBitstring (std::bitset<2> (it->measObjectEutra.neighCellConfig));
1068  SerializeQoffsetRange (it->measObjectEutra.offsetFreq);
1069 
1070  if (!it->measObjectEutra.cellsToRemoveList.empty ())
1071  {
1072  SerializeSequenceOf (it->measObjectEutra.cellsToRemoveList.size (),MAX_CELL_MEAS,1);
1073  for (std::list<uint8_t>::iterator it2 = it->measObjectEutra.cellsToRemoveList.begin (); it2 != it->measObjectEutra.cellsToRemoveList.end (); it2++)
1074  {
1075  SerializeInteger (*it2, 1, MAX_CELL_MEAS);
1076  }
1077  }
1078 
1079  if (!it->measObjectEutra.cellsToAddModList.empty ())
1080  {
1081  SerializeSequenceOf (it->measObjectEutra.cellsToAddModList.size (), MAX_CELL_MEAS, 1);
1082  for (std::list<LteRrcSap::CellsToAddMod>::iterator it2 = it->measObjectEutra.cellsToAddModList.begin (); it2 != it->measObjectEutra.cellsToAddModList.end (); it2++)
1083  {
1084  SerializeSequence (std::bitset<0> (), false);
1085 
1086  // Serialize cellIndex
1087  SerializeInteger (it2->cellIndex, 1, MAX_CELL_MEAS);
1088 
1089  // Serialize PhysCellId
1090  SerializeInteger (it2->physCellId,0,503);
1091 
1092  // Serialize cellIndividualOffset
1093  SerializeQoffsetRange (it2->cellIndividualOffset);
1094  }
1095  }
1096 
1097  if (!it->measObjectEutra.blackCellsToRemoveList.empty () )
1098  {
1099  SerializeSequenceOf (it->measObjectEutra.blackCellsToRemoveList.size (),MAX_CELL_MEAS,1);
1100  for (std::list<uint8_t>::iterator it2 = it->measObjectEutra.blackCellsToRemoveList.begin (); it2 != it->measObjectEutra.blackCellsToRemoveList.end (); it2++)
1101  {
1102  SerializeInteger (*it2, 1, MAX_CELL_MEAS);
1103  }
1104  }
1105 
1106  if (!it->measObjectEutra.blackCellsToAddModList.empty () )
1107  {
1108  SerializeSequenceOf (it->measObjectEutra.blackCellsToAddModList.size (), MAX_CELL_MEAS, 1);
1109  for (std::list<LteRrcSap::BlackCellsToAddMod>::iterator it2 = it->measObjectEutra.blackCellsToAddModList.begin (); it2 != it->measObjectEutra.blackCellsToAddModList.end (); it2++)
1110  {
1111  SerializeSequence (std::bitset<0> (),false);
1112  SerializeInteger (it2->cellIndex, 1, MAX_CELL_MEAS);
1113 
1114  // Serialize PhysCellIdRange
1115  // range optional
1116  std::bitset<1> rangePresent = std::bitset<1> (it2->physCellIdRange.haveRange);
1117  SerializeSequence (rangePresent,false);
1118  SerializeInteger (it2->physCellIdRange.start,0,503);
1119  if (it2->physCellIdRange.haveRange)
1120  {
1121  switch (it2->physCellIdRange.range)
1122  {
1123  case 4:
1124  SerializeEnum (16, 0);
1125  break;
1126  case 8:
1127  SerializeEnum (16, 1);
1128  break;
1129  case 12:
1130  SerializeEnum (16, 2);
1131  break;
1132  case 16:
1133  SerializeEnum (16, 3);
1134  break;
1135  case 24:
1136  SerializeEnum (16, 4);
1137  break;
1138  case 32:
1139  SerializeEnum (16, 5);
1140  break;
1141  case 48:
1142  SerializeEnum (16, 6);
1143  break;
1144  case 64:
1145  SerializeEnum (16, 7);
1146  break;
1147  case 84:
1148  SerializeEnum (16, 8);
1149  break;
1150  case 96:
1151  SerializeEnum (16, 9);
1152  break;
1153  case 128:
1154  SerializeEnum (16, 10);
1155  break;
1156  case 168:
1157  SerializeEnum (16, 11);
1158  break;
1159  case 252:
1160  SerializeEnum (16, 12);
1161  break;
1162  case 504:
1163  SerializeEnum (16, 13);
1164  break;
1165  default:
1166  SerializeEnum (16, 0);
1167  }
1168  }
1169  }
1170 
1171  }
1172 
1173  if (it->measObjectEutra.haveCellForWhichToReportCGI)
1174  {
1175  SerializeInteger (it->measObjectEutra.cellForWhichToReportCGI,0,503);
1176  }
1177  }
1178  }
1179 
1180 
1181  if (!measConfig.reportConfigToRemoveList.empty () )
1182  {
1184  for (std::list<uint8_t>::iterator it = measConfig.reportConfigToRemoveList.begin (); it != measConfig.reportConfigToRemoveList.end (); it++)
1185  {
1187  }
1188  }
1189 
1190  if (!measConfig.reportConfigToAddModList.empty () )
1191  {
1193  for (std::list<LteRrcSap::ReportConfigToAddMod>::iterator it = measConfig.reportConfigToAddModList.begin (); it != measConfig.reportConfigToAddModList.end (); it++)
1194  {
1195  SerializeSequence (std::bitset<0> (), false);
1196  SerializeInteger (it->reportConfigId,1,MAX_REPORT_CONFIG_ID);
1197  SerializeChoice (2,0,false); // reportConfigEUTRA
1198 
1199  // Serialize ReportConfigEUTRA
1200  SerializeSequence (std::bitset<0> (), true);
1201  switch (it->reportConfigEutra.triggerType)
1202  {
1204  SerializeChoice (2, 1, false);
1205  SerializeSequence (std::bitset<0> (),false);
1206  switch (it->reportConfigEutra.purpose)
1207  {
1209  SerializeEnum (2,1);
1210  break;
1212  default:
1213  SerializeEnum (2,0);
1214  }
1215  break;
1217  default:
1218  SerializeChoice (2, 0, false);
1219  SerializeSequence (std::bitset<0> (),false);
1220  switch (it->reportConfigEutra.eventId)
1221  {
1223  SerializeChoice (5, 0, true);
1224  SerializeSequence (std::bitset<0> (),false);
1225  SerializeThresholdEutra (it->reportConfigEutra.threshold1);
1226  break;
1228  SerializeChoice (5, 1, true);
1229  SerializeSequence (std::bitset<0> (),false);
1230  SerializeThresholdEutra (it->reportConfigEutra.threshold1);
1231  break;
1233  SerializeChoice (5, 2, true);
1234  SerializeSequence (std::bitset<0> (),false);
1235  SerializeInteger (it->reportConfigEutra.a3Offset,-30,30);
1236  SerializeBoolean (it->reportConfigEutra.reportOnLeave);
1237  break;
1239  SerializeChoice (5, 3, true);
1240  SerializeSequence (std::bitset<0> (),false);
1241  SerializeThresholdEutra (it->reportConfigEutra.threshold1);
1242  break;
1244  default:
1245  SerializeChoice (5, 4, true);
1246  SerializeSequence (std::bitset<0> (),false);
1247  SerializeThresholdEutra (it->reportConfigEutra.threshold1);
1248  SerializeThresholdEutra (it->reportConfigEutra.threshold2);
1249  }
1250 
1251  SerializeInteger (it->reportConfigEutra.hysteresis, 0, 30);
1252 
1253  switch (it->reportConfigEutra.timeToTrigger)
1254  {
1255  case 0:
1256  SerializeEnum (16, 0);
1257  break;
1258  case 40:
1259  SerializeEnum (16, 1);
1260  break;
1261  case 64:
1262  SerializeEnum (16, 2);
1263  break;
1264  case 80:
1265  SerializeEnum (16, 3);
1266  break;
1267  case 100:
1268  SerializeEnum (16, 4);
1269  break;
1270  case 128:
1271  SerializeEnum (16, 5);
1272  break;
1273  case 160:
1274  SerializeEnum (16, 6);
1275  break;
1276  case 256:
1277  SerializeEnum (16, 7);
1278  break;
1279  case 320:
1280  SerializeEnum (16, 8);
1281  break;
1282  case 480:
1283  SerializeEnum (16, 9);
1284  break;
1285  case 512:
1286  SerializeEnum (16, 10);
1287  break;
1288  case 640:
1289  SerializeEnum (16, 11);
1290  break;
1291  case 1024:
1292  SerializeEnum (16, 12);
1293  break;
1294  case 1280:
1295  SerializeEnum (16, 13);
1296  break;
1297  case 2560:
1298  SerializeEnum (16, 14);
1299  break;
1300  case 5120:
1301  default:
1302  SerializeEnum (16, 15);
1303  }
1304  } // end trigger type
1305 
1306  // Serialize triggerQuantity
1307  if (it->reportConfigEutra.triggerQuantity == LteRrcSap::ReportConfigEutra::RSRP)
1308  {
1309  SerializeEnum (2, 0);
1310  }
1311  else
1312  {
1313  SerializeEnum (2, 1);
1314  }
1315 
1316  // Serialize reportQuantity
1317  if (it->reportConfigEutra.reportQuantity == LteRrcSap::ReportConfigEutra::SAME_AS_TRIGGER_QUANTITY)
1318  {
1319  SerializeEnum (2, 0);
1320  }
1321  else
1322  {
1323  SerializeEnum (2, 1);
1324  }
1325 
1326  // Serialize maxReportCells
1327  SerializeInteger (it->reportConfigEutra.maxReportCells, 1, MAX_CELL_REPORT);
1328 
1329  // Serialize reportInterval
1330  switch (it->reportConfigEutra.reportInterval)
1331  {
1333  SerializeEnum (16, 0);
1334  break;
1336  SerializeEnum (16, 1);
1337  break;
1339  SerializeEnum (16, 2);
1340  break;
1342  SerializeEnum (16, 3);
1343  break;
1345  SerializeEnum (16, 4);
1346  break;
1348  SerializeEnum (16, 5);
1349  break;
1351  SerializeEnum (16, 6);
1352  break;
1354  SerializeEnum (16, 7);
1355  break;
1357  SerializeEnum (16, 8);
1358  break;
1360  SerializeEnum (16, 9);
1361  break;
1363  SerializeEnum (16, 10);
1364  break;
1366  SerializeEnum (16, 11);
1367  break;
1369  SerializeEnum (16, 12);
1370  break;
1372  SerializeEnum (16, 13);
1373  break;
1375  SerializeEnum (16, 14);
1376  break;
1378  default:
1379  SerializeEnum (16, 15);
1380  }
1381 
1382  // Serialize reportAmount
1383  switch (it->reportConfigEutra.reportAmount)
1384  {
1385  case 1:
1386  SerializeEnum (8, 0);
1387  break;
1388  case 2:
1389  SerializeEnum (8, 1);
1390  break;
1391  case 4:
1392  SerializeEnum (8, 2);
1393  break;
1394  case 8:
1395  SerializeEnum (8, 3);
1396  break;
1397  case 16:
1398  SerializeEnum (8, 4);
1399  break;
1400  case 32:
1401  SerializeEnum (8, 5);
1402  break;
1403  case 64:
1404  SerializeEnum (8, 6);
1405  break;
1406  default:
1407  SerializeEnum (8, 7);
1408  }
1409  }
1410  }
1411 
1412  if (!measConfig.measIdToRemoveList.empty () )
1413  {
1414  SerializeSequenceOf (measConfig.measIdToRemoveList.size (), MAX_MEAS_ID, 1);
1415  for (std::list<uint8_t>::iterator it = measConfig.measIdToRemoveList.begin (); it != measConfig.measIdToRemoveList.end (); it++)
1416  {
1417  SerializeInteger (*it, 1, MAX_MEAS_ID);
1418  }
1419  }
1420 
1421  if (!measConfig.measIdToAddModList.empty () )
1422  {
1423  SerializeSequenceOf ( measConfig.measIdToAddModList.size (), MAX_MEAS_ID, 1);
1424  for (std::list<LteRrcSap::MeasIdToAddMod>::iterator it = measConfig.measIdToAddModList.begin (); it != measConfig.measIdToAddModList.end (); it++)
1425  {
1426  SerializeInteger (it->measId, 1, MAX_MEAS_ID);
1427  SerializeInteger (it->measObjectId, 1, MAX_OBJECT_ID);
1428  SerializeInteger (it->reportConfigId, 1, MAX_REPORT_CONFIG_ID);
1429  }
1430  }
1431 
1432  if (measConfig.haveQuantityConfig )
1433  {
1434  // QuantityConfig sequence
1435  // 4 optional fields, only first (EUTRA) present. Extension marker yes.
1436  std::bitset<4> quantityConfigOpts (0);
1437  quantityConfigOpts.set (3,1);
1438  SerializeSequence (quantityConfigOpts, true);
1439  SerializeSequence (std::bitset<0> (), false);
1440 
1441  switch (measConfig.quantityConfig.filterCoefficientRSRP)
1442  {
1443  case 0:
1444  SerializeEnum (16, 0);
1445  break;
1446  case 1:
1447  SerializeEnum (16, 1);
1448  break;
1449  case 2:
1450  SerializeEnum (16, 2);
1451  break;
1452  case 3:
1453  SerializeEnum (16, 3);
1454  break;
1455  case 4:
1456  SerializeEnum (16, 4);
1457  break;
1458  case 5:
1459  SerializeEnum (16, 5);
1460  break;
1461  case 6:
1462  SerializeEnum (16, 6);
1463  break;
1464  case 7:
1465  SerializeEnum (16, 7);
1466  break;
1467  case 8:
1468  SerializeEnum (16, 8);
1469  break;
1470  case 9:
1471  SerializeEnum (16, 9);
1472  break;
1473  case 11:
1474  SerializeEnum (16, 10);
1475  break;
1476  case 13:
1477  SerializeEnum (16, 11);
1478  break;
1479  case 15:
1480  SerializeEnum (16, 12);
1481  break;
1482  case 17:
1483  SerializeEnum (16, 13);
1484  break;
1485  case 19:
1486  SerializeEnum (16, 14);
1487  break;
1488  default:
1489  SerializeEnum (16, 4);
1490  }
1491 
1492  switch (measConfig.quantityConfig.filterCoefficientRSRQ)
1493  {
1494  case 0:
1495  SerializeEnum (16, 0);
1496  break;
1497  case 1:
1498  SerializeEnum (16, 1);
1499  break;
1500  case 2:
1501  SerializeEnum (16, 2);
1502  break;
1503  case 3:
1504  SerializeEnum (16, 3);
1505  break;
1506  case 4:
1507  SerializeEnum (16, 4);
1508  break;
1509  case 5:
1510  SerializeEnum (16, 5);
1511  break;
1512  case 6:
1513  SerializeEnum (16, 6);
1514  break;
1515  case 7:
1516  SerializeEnum (16, 7);
1517  break;
1518  case 8:
1519  SerializeEnum (16, 8);
1520  break;
1521  case 9:
1522  SerializeEnum (16, 9);
1523  break;
1524  case 11:
1525  SerializeEnum (16, 10);
1526  break;
1527  case 13:
1528  SerializeEnum (16, 11);
1529  break;
1530  case 15:
1531  SerializeEnum (16, 12);
1532  break;
1533  case 17:
1534  SerializeEnum (16, 13);
1535  break;
1536  case 19:
1537  SerializeEnum (16, 14);
1538  break;
1539  default:
1540  SerializeEnum (16, 4);
1541  }
1542  }
1543 
1544  if (measConfig.haveMeasGapConfig )
1545  {
1546  switch (measConfig.measGapConfig.type)
1547  {
1549  SerializeChoice (2, 0, false);
1550  SerializeNull ();
1551  break;
1553  default:
1554  SerializeChoice (2, 1, false);
1555  SerializeSequence (std::bitset<0> (),false);
1556  switch (measConfig.measGapConfig.gapOffsetChoice)
1557  {
1559  SerializeChoice (2, 0, true);
1560  SerializeInteger (measConfig.measGapConfig.gapOffsetValue, 0, 39);
1561  break;
1563  default:
1564  SerializeChoice (2, 1, true);
1565  SerializeInteger (measConfig.measGapConfig.gapOffsetValue, 0, 79);
1566  }
1567  }
1568  }
1569 
1570  if (measConfig.haveSmeasure )
1571  {
1572  SerializeInteger (measConfig.sMeasure, 0, 97);
1573  }
1574 
1575  // ...Here preRegistrationInfoHRPD would be serialized
1576 
1577  if (measConfig.haveSpeedStatePars )
1578  {
1579  switch (measConfig.speedStatePars.type)
1580  {
1582  SerializeChoice (2, 0, false);
1583  SerializeNull ();
1584  break;
1586  default:
1587  SerializeChoice (2, 1, false);
1588  SerializeSequence (std::bitset<0> (), false);
1590  {
1591  case 30:
1592  SerializeEnum (8, 0);
1593  break;
1594  case 60:
1595  SerializeEnum (8, 1);
1596  break;
1597  case 120:
1598  SerializeEnum (8, 2);
1599  break;
1600  case 180:
1601  SerializeEnum (8, 3);
1602  break;
1603  case 240:
1604  SerializeEnum (8, 4);
1605  break;
1606  default:
1607  SerializeEnum (8, 5);
1608  break;
1609  }
1610 
1612  {
1613  case 30:
1614  SerializeEnum (8, 0);
1615  break;
1616  case 60:
1617  SerializeEnum (8, 1);
1618  break;
1619  case 120:
1620  SerializeEnum (8, 2);
1621  break;
1622  case 180:
1623  SerializeEnum (8, 3);
1624  break;
1625  case 240:
1626  SerializeEnum (8, 4);
1627  break;
1628  default:
1629  SerializeEnum (8, 5);
1630  break;
1631  }
1632 
1635 
1636  SerializeSequence (std::bitset<0> (), false);
1637  switch (measConfig.speedStatePars.timeToTriggerSf.sfMedium)
1638  {
1639  case 25:
1640  SerializeEnum (4, 0);
1641  break;
1642  case 50:
1643  SerializeEnum (4, 1);
1644  break;
1645  case 75:
1646  SerializeEnum (4, 2);
1647  break;
1648  case 100:
1649  default:
1650  SerializeEnum (4, 3);
1651  }
1652 
1653  switch (measConfig.speedStatePars.timeToTriggerSf.sfHigh)
1654  {
1655  case 25:
1656  SerializeEnum (4, 0);
1657  break;
1658  case 50:
1659  SerializeEnum (4, 1);
1660  break;
1661  case 75:
1662  SerializeEnum (4, 2);
1663  break;
1664  case 100:
1665  default:
1666  SerializeEnum (4, 3);
1667  }
1668  }
1669  }
1670 }
1671 
1674 {
1675  int thresholdEutraChoice, range;
1676  bIterator = DeserializeChoice (2, false, &thresholdEutraChoice, bIterator);
1677 
1678  switch (thresholdEutraChoice)
1679  {
1680  case 0:
1682  bIterator = DeserializeInteger (&range, 0, 97, bIterator);
1683  thresholdEutra->range = range;
1684  break;
1685  case 1:
1686  default:
1688  bIterator = DeserializeInteger (&range, 0, 34, bIterator);
1689  thresholdEutra->range = range;
1690  }
1691 
1692  return bIterator;
1693 }
1694 
1697 {
1698  int n;
1699  bIterator = DeserializeEnum (31, &n, bIterator);
1700  switch (n)
1701  {
1702  case 0:
1703  *qOffsetRange = -24;
1704  break;
1705  case 1:
1706  *qOffsetRange = -22;
1707  break;
1708  case 2:
1709  *qOffsetRange = -20;
1710  break;
1711  case 3:
1712  *qOffsetRange = -18;
1713  break;
1714  case 4:
1715  *qOffsetRange = -16;
1716  break;
1717  case 5:
1718  *qOffsetRange = -14;
1719  break;
1720  case 6:
1721  *qOffsetRange = -12;
1722  break;
1723  case 7:
1724  *qOffsetRange = -10;
1725  break;
1726  case 8:
1727  *qOffsetRange = -8;
1728  break;
1729  case 9:
1730  *qOffsetRange = -6;
1731  break;
1732  case 10:
1733  *qOffsetRange = -5;
1734  break;
1735  case 11:
1736  *qOffsetRange = -4;
1737  break;
1738  case 12:
1739  *qOffsetRange = -3;
1740  break;
1741  case 13:
1742  *qOffsetRange = -2;
1743  break;
1744  case 14:
1745  *qOffsetRange = -1;
1746  break;
1747  case 15:
1748  *qOffsetRange = 0;
1749  break;
1750  case 16:
1751  *qOffsetRange = 1;
1752  break;
1753  case 17:
1754  *qOffsetRange = 2;
1755  break;
1756  case 18:
1757  *qOffsetRange = 3;
1758  break;
1759  case 19:
1760  *qOffsetRange = 4;
1761  break;
1762  case 20:
1763  *qOffsetRange = 5;
1764  break;
1765  case 21:
1766  *qOffsetRange = 6;
1767  break;
1768  case 22:
1769  *qOffsetRange = 8;
1770  break;
1771  case 23:
1772  *qOffsetRange = 10;
1773  break;
1774  case 24:
1775  *qOffsetRange = 12;
1776  break;
1777  case 25:
1778  *qOffsetRange = 14;
1779  break;
1780  case 26:
1781  *qOffsetRange = 16;
1782  break;
1783  case 27:
1784  *qOffsetRange = 18;
1785  break;
1786  case 28:
1787  *qOffsetRange = 20;
1788  break;
1789  case 29:
1790  *qOffsetRange = 22;
1791  break;
1792  case 30:
1793  default:
1794  *qOffsetRange = 24;
1795  }
1796  return bIterator;
1797 }
1798 
1801 {
1802  // Deserialize RadioResourceConfigDedicated sequence
1803  std::bitset<6> optionalFieldsPresent = std::bitset<6> ();
1804  bIterator = DeserializeSequence (&optionalFieldsPresent,true,bIterator);
1805 
1806  if (optionalFieldsPresent[5])
1807  {
1808  // Deserialize srb-ToAddModList
1809  bIterator = DeserializeSrbToAddModList (&(radioResourceConfigDedicated->srbToAddModList),bIterator);
1810  }
1811 
1812  if (optionalFieldsPresent[4])
1813  {
1814  // Deserialize drb-ToAddModList
1815  bIterator = DeserializeDrbToAddModList (&(radioResourceConfigDedicated->drbToAddModList),bIterator);
1816  }
1817 
1818  if (optionalFieldsPresent[3])
1819  {
1820  // Deserialize drb-ToReleaseList
1821  int n;
1822  int val;
1823  bIterator = DeserializeSequenceOf (&n,MAX_DRB,1,bIterator);
1824  for (int i = 0; i < n; i++)
1825  {
1826  bIterator = DeserializeInteger (&val,1,32,bIterator);
1827  radioResourceConfigDedicated->drbToReleaseList.push_back (val);
1828  }
1829  }
1830 
1831  if (optionalFieldsPresent[2])
1832  {
1833  // Deserialize mac-MainConfig
1834  // ...
1835  }
1836 
1837  if (optionalFieldsPresent[1])
1838  {
1839  // Deserialize sps-Config
1840  // ...
1841  }
1842 
1843  radioResourceConfigDedicated->havePhysicalConfigDedicated = optionalFieldsPresent[0];
1844  if (optionalFieldsPresent[0])
1845  {
1846  // Deserialize physicalConfigDedicated
1847  bIterator = DeserializePhysicalConfigDedicated (&radioResourceConfigDedicated->physicalConfigDedicated,bIterator);
1848  }
1849 
1850  return bIterator;
1851 }
1852 
1854 RrcAsn1Header::DeserializeSrbToAddModList (std::list<LteRrcSap::SrbToAddMod> *srbToAddModList, Buffer::Iterator bIterator)
1855 {
1856  int numElems;
1857  bIterator = DeserializeSequenceOf (&numElems,2,1,bIterator);
1858 
1859  srbToAddModList->clear ();
1860 
1861  // Deserialize SRB-ToAddMod elements
1862  for (int i = 0; i < numElems; i++)
1863  {
1864  LteRrcSap::SrbToAddMod srbToAddMod;
1865  // Deserialize SRB-ToAddMod sequence
1866  // 2 optional fields, extension marker present
1867  std::bitset<2> optionalFields;
1868  bIterator = DeserializeSequence (&optionalFields,true,bIterator);
1869 
1870  // Deserialize srbIdentity
1871  int n;
1872  bIterator = DeserializeInteger (&n,1,2,bIterator);
1873  srbToAddMod.srbIdentity = n;
1874 
1875  if (optionalFields[1])
1876  {
1877  // Deserialize rlcConfig choice
1878  // ...
1879  }
1880 
1881  if (optionalFields[0])
1882  {
1883  // Deserialize logicalChannelConfig choice
1884  int sel;
1885  bIterator = DeserializeChoice (2,false,&sel,bIterator);
1886 
1887  // Deserialize logicalChannelConfig defaultValue
1888  if (sel == 1)
1889  {
1890  bIterator = DeserializeNull (bIterator);
1891  }
1892 
1893  // Deserialize logicalChannelConfig explicitValue
1894  else if (sel == 0)
1895  {
1896  bIterator = DeserializeLogicalChannelConfig (&srbToAddMod.logicalChannelConfig,bIterator);
1897  }
1898  }
1899  srbToAddModList->insert (srbToAddModList->end (),srbToAddMod);
1900  }
1901 
1902  return bIterator;
1903 }
1904 
1906 RrcAsn1Header::DeserializeDrbToAddModList (std::list<LteRrcSap::DrbToAddMod> *drbToAddModList, Buffer::Iterator bIterator)
1907 {
1908  int n;
1909  int val;
1910  bIterator = DeserializeSequenceOf (&n,MAX_DRB,1,bIterator);
1911 
1912  drbToAddModList->clear ();
1913 
1914  for (int i = 0; i < n; i++)
1915  {
1916  LteRrcSap::DrbToAddMod drbToAddMod;
1917 
1918  std::bitset<5> optionalFields;
1919  bIterator = DeserializeSequence (&optionalFields,true,bIterator);
1920 
1921  if (optionalFields[4])
1922  {
1923  // Deserialize epsBearerIdentity
1924  bIterator = DeserializeInteger (&val,0,15,bIterator);
1925  drbToAddMod.epsBearerIdentity = val;
1926  }
1927 
1928  bIterator = DeserializeInteger (&val,1,32,bIterator);
1929  drbToAddMod.drbIdentity = val;
1930 
1931  if (optionalFields[3])
1932  {
1933  // Deserialize pdcp-Config
1934  // ...
1935  }
1936 
1937  if (optionalFields[2])
1938  {
1939  // Deserialize RLC-Config
1940  int chosen;
1941  bIterator = DeserializeChoice (4,true,&chosen,bIterator);
1942 
1943  int sel;
1944  std::bitset<0> bitset0;
1945  switch (chosen)
1946  {
1947  case 0:
1949 
1950  // Deserialize UL-AM-RLC
1951  bIterator = DeserializeSequence (&bitset0,false, bIterator);
1952  bIterator = DeserializeEnum (64,&sel, bIterator); // t-PollRetransmit
1953  bIterator = DeserializeEnum (8,&sel, bIterator); // pollPDU
1954  bIterator = DeserializeEnum (16,&sel, bIterator); // pollByte
1955  bIterator = DeserializeEnum (8,&sel, bIterator); // maxRetxThreshold
1956 
1957  // Deserialize DL-AM-RLC
1958  bIterator = DeserializeSequence (&bitset0,false, bIterator);
1959  bIterator = DeserializeEnum (32,&sel, bIterator); // t-Reordering
1960  bIterator = DeserializeEnum (64,&sel, bIterator); // t-StatusProhibit
1961  break;
1962 
1963  case 1:
1965 
1966  // Deserialize UL-UM-RLC
1967  bIterator = DeserializeSequence (&bitset0,false, bIterator);
1968  bIterator = DeserializeEnum (2,&sel, bIterator); // sn-FieldLength
1969 
1970  // Deserialize DL-UM-RLC
1971  bIterator = DeserializeSequence (&bitset0,false, bIterator);
1972  bIterator = DeserializeEnum (2,&sel, bIterator); // sn-FieldLength
1973  bIterator = DeserializeEnum (32,&sel, bIterator); // t-Reordering
1974  break;
1975 
1976  case 2:
1978 
1979  // Deserialize UL-UM-RLC
1980  bIterator = DeserializeSequence (&bitset0,false, bIterator);
1981  bIterator = DeserializeEnum (2,&sel, bIterator); // sn-FieldLength
1982  break;
1983 
1984  case 3:
1986 
1987  // Deserialize DL-UM-RLC
1988  bIterator = DeserializeSequence (&bitset0,false, bIterator);
1989  bIterator = DeserializeEnum (2,&sel, bIterator); // sn-FieldLength
1990  bIterator = DeserializeEnum (32,&sel, bIterator); // t-Reordering
1991  break;
1992  }
1993 
1994  }
1995 
1996  if (optionalFields[1])
1997  {
1998  bIterator = DeserializeInteger (&val,3,10,bIterator);
1999  drbToAddMod.logicalChannelIdentity = val;
2000  }
2001 
2002  if (optionalFields[0])
2003  {
2004  bIterator = DeserializeLogicalChannelConfig (&drbToAddMod.logicalChannelConfig,bIterator);
2005  }
2006 
2007  drbToAddModList->insert (drbToAddModList->end (),drbToAddMod);
2008  }
2009  return bIterator;
2010 }
2011 
2014 {
2015  int n;
2016 
2017  // Deserialize LogicalChannelConfig sequence
2018  // 1 optional field, extension marker is present.
2019  std::bitset<1> bitset1;
2020  bIterator = DeserializeSequence (&bitset1,true,bIterator);
2021 
2022  if (bitset1[0])
2023  {
2024  // Deserialize ul-SpecificParameters sequence
2025  bIterator = DeserializeSequence (&bitset1,false,bIterator);
2026 
2027  // Deserialize priority
2028  bIterator = DeserializeInteger (&n,1,16,bIterator);
2029  logicalChannelConfig->priority = n;
2030 
2031  // Deserialize prioritisedBitRate
2032  bIterator = DeserializeEnum (16,&n,bIterator);
2033  uint16_t prioritizedBitRateKbps;
2034 
2035  switch (n)
2036  {
2037  case 0:
2038  prioritizedBitRateKbps = 0;
2039  break;
2040  case 1:
2041  prioritizedBitRateKbps = 8;
2042  break;
2043  case 2:
2044  prioritizedBitRateKbps = 16;
2045  break;
2046  case 3:
2047  prioritizedBitRateKbps = 32;
2048  break;
2049  case 4:
2050  prioritizedBitRateKbps = 64;
2051  break;
2052  case 5:
2053  prioritizedBitRateKbps = 128;
2054  break;
2055  case 6:
2056  prioritizedBitRateKbps = 256;
2057  break;
2058  case 7:
2059  prioritizedBitRateKbps = 10000;
2060  break;
2061  default:
2062  prioritizedBitRateKbps = 10000;
2063  }
2064  logicalChannelConfig->prioritizedBitRateKbps = prioritizedBitRateKbps;
2065 
2066  // Deserialize bucketSizeDuration
2067  bIterator = DeserializeEnum (8,&n,bIterator);
2068  uint16_t bucketSizeDurationMs;
2069  switch (n)
2070  {
2071  case 0:
2072  bucketSizeDurationMs = 50;
2073  break;
2074  case 1:
2075  bucketSizeDurationMs = 100;
2076  break;
2077  case 2:
2078  bucketSizeDurationMs = 150;
2079  break;
2080  case 3:
2081  bucketSizeDurationMs = 300;
2082  break;
2083  case 4:
2084  bucketSizeDurationMs = 500;
2085  break;
2086  case 5:
2087  bucketSizeDurationMs = 1000;
2088  break;
2089  default:
2090  bucketSizeDurationMs = 1000;
2091  }
2092  logicalChannelConfig->bucketSizeDurationMs = bucketSizeDurationMs;
2093 
2094  if (bitset1[0])
2095  {
2096  // Deserialize logicalChannelGroup
2097  bIterator = DeserializeInteger (&n,0,3,bIterator);
2098  logicalChannelConfig->logicalChannelGroup = n;
2099  }
2100  }
2101  return bIterator;
2102 }
2103 
2106 {
2107  std::bitset<10> optionalFieldPresent;
2108  bIterator = DeserializeSequence (&optionalFieldPresent,true,bIterator);
2109 
2110  physicalConfigDedicated->havePdschConfigDedicated = optionalFieldPresent[9];
2111  if (optionalFieldPresent[9])
2112  {
2113  // Deserialize pdsch-ConfigDedicated
2114  std::bitset<0> bitset0;
2115  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2116 
2117  int slct;
2118 
2119  // Deserialize p-a
2120  bIterator = DeserializeEnum (8,&slct,bIterator);
2121  physicalConfigDedicated->pdschConfigDedicated.pa = slct;
2122 
2123  bIterator = DeserializeNull (bIterator);
2124 
2125  }
2126  if (optionalFieldPresent[8])
2127  {
2128  // Deserialize pucch-ConfigDedicated
2129  // ...
2130  }
2131  if (optionalFieldPresent[7])
2132  {
2133  // Deserialize pusch-ConfigDedicated
2134  // ...
2135  }
2136  if (optionalFieldPresent[6])
2137  {
2138  // Deserialize uplinkPowerControlDedicated
2139  // ...
2140  }
2141  if (optionalFieldPresent[5])
2142  {
2143  // Deserialize tpc-PDCCH-ConfigPUCCH
2144  // ...
2145  }
2146  if (optionalFieldPresent[4])
2147  {
2148  // Deserialize tpc-PDCCH-ConfigPUSCH
2149  // ...
2150  }
2151  if (optionalFieldPresent[3])
2152  {
2153  // Deserialize cqi-ReportConfig
2154  // ...
2155  }
2156  physicalConfigDedicated->haveSoundingRsUlConfigDedicated = optionalFieldPresent[2];
2157  if (optionalFieldPresent[2])
2158  {
2159  // Deserialize soundingRS-UL-ConfigDedicated
2160  int sel;
2161  bIterator = DeserializeChoice (2,false,&sel,bIterator);
2162 
2163  if (sel == 0)
2164  {
2166 
2167  bIterator = DeserializeNull (bIterator);
2168  }
2169 
2170  else if (sel == 1)
2171  {
2173 
2174  std::bitset<0> bitset0;
2175  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2176 
2177  int slct;
2178 
2179  // Deserialize srs-Bandwidth
2180  bIterator = DeserializeEnum (4,&slct,bIterator);
2181  physicalConfigDedicated->soundingRsUlConfigDedicated.srsBandwidth = slct;
2182 
2183  // Deserialize srs-HoppingBandwidth
2184  bIterator = DeserializeEnum (4,&slct,bIterator);
2185 
2186  // Deserialize freqDomainPosition
2187  bIterator = DeserializeInteger (&slct,0,23,bIterator);
2188 
2189  // Deserialize duration
2190  bool duration;
2191  bIterator = DeserializeBoolean (&duration,bIterator);
2192 
2193  // Deserialize srs-ConfigIndex
2194  bIterator = DeserializeInteger (&slct,0,1023,bIterator);
2195  physicalConfigDedicated->soundingRsUlConfigDedicated.srsConfigIndex = slct;
2196 
2197  // Deserialize transmissionComb
2198  bIterator = DeserializeInteger (&slct,0,1,bIterator);
2199 
2200  // Deserialize cyclicShift
2201  bIterator = DeserializeEnum (8,&slct,bIterator);
2202  }
2203  }
2204  physicalConfigDedicated->haveAntennaInfoDedicated = optionalFieldPresent[1];
2205  if (optionalFieldPresent[1])
2206  {
2207  // Deserialize antennaInfo
2208  int sel;
2209  bIterator = DeserializeChoice (2,false,&sel,bIterator);
2210  if (sel == 1)
2211  {
2212  bIterator = DeserializeNull (bIterator);
2213  }
2214  else if (sel == 0)
2215  {
2216  std::bitset<1> codebookSubsetRestrictionPresent;
2217  bIterator = DeserializeSequence (&codebookSubsetRestrictionPresent,false,bIterator);
2218 
2219  int txmode;
2220  bIterator = DeserializeEnum (8,&txmode,bIterator);
2221  physicalConfigDedicated->antennaInfo.transmissionMode = txmode;
2222 
2223  if (codebookSubsetRestrictionPresent[0])
2224  {
2225  // Deserialize codebookSubsetRestriction
2226  // ...
2227  }
2228 
2229  int txantennaselchosen;
2230  bIterator = DeserializeChoice (2,false,&txantennaselchosen,bIterator);
2231  if (txantennaselchosen == 0)
2232  {
2233  // Deserialize ue-TransmitAntennaSelection release
2234  bIterator = DeserializeNull (bIterator);
2235  }
2236  else if (txantennaselchosen == 1)
2237  {
2238  // Deserialize ue-TransmitAntennaSelection setup
2239  // ...
2240  }
2241  }
2242  }
2243  if (optionalFieldPresent[0])
2244  {
2245  // Deserialize schedulingRequestConfig
2246  // ...
2247  }
2248  return bIterator;
2249 }
2250 
2251 void
2252 RrcAsn1Header::Print (std::ostream &os) const
2253 {
2254  NS_LOG_FUNCTION (this << &os);
2255  NS_FATAL_ERROR ("RrcAsn1Header Print() function must also specify LteRrcSap::RadioResourceConfigDedicated as a second argument");
2256 }
2257 
2258 void
2259 RrcAsn1Header::Print (std::ostream &os, LteRrcSap::RadioResourceConfigDedicated radioResourceConfigDedicated) const
2260 {
2261  os << " srbToAddModList: " << std::endl;
2262  std::list<LteRrcSap::SrbToAddMod>::iterator it = radioResourceConfigDedicated.srbToAddModList.begin ();
2263  for (; it != radioResourceConfigDedicated.srbToAddModList.end (); it++)
2264  {
2265  os << " srbIdentity: " << (int)it->srbIdentity << std::endl;
2266  os << " logicalChannelConfig: " << std::endl;
2267  os << " priority: " << (int)it->logicalChannelConfig.priority << std::endl;
2268  os << " prioritizedBitRateKbps: " << (int)it->logicalChannelConfig.prioritizedBitRateKbps << std::endl;
2269  os << " bucketSizeDurationMs: " << (int)it->logicalChannelConfig.bucketSizeDurationMs << std::endl;
2270  os << " logicalChannelGroup: " << (int)it->logicalChannelConfig.logicalChannelGroup << std::endl;
2271  }
2272  os << std::endl;
2273 
2274  os << " drbToAddModList: " << std::endl;
2275  std::list<LteRrcSap::DrbToAddMod>::iterator it2 = radioResourceConfigDedicated.drbToAddModList.begin ();
2276  for (; it2 != radioResourceConfigDedicated.drbToAddModList.end (); it2++)
2277  {
2278  os << " epsBearerIdentity: " << (int)it2->epsBearerIdentity << std::endl;
2279  os << " drbIdentity: " << (int)it2->drbIdentity << std::endl;
2280  os << " rlcConfig: " << it2->rlcConfig.choice << std::endl;
2281  os << " logicalChannelIdentity: " << (int)it2->logicalChannelIdentity << std::endl;
2282  os << " logicalChannelConfig: " << std::endl;
2283  os << " priority: " << (int)it2->logicalChannelConfig.priority << std::endl;
2284  os << " prioritizedBitRateKbps: " << (int)it2->logicalChannelConfig.prioritizedBitRateKbps << std::endl;
2285  os << " bucketSizeDurationMs: " << (int)it2->logicalChannelConfig.bucketSizeDurationMs << std::endl;
2286  os << " logicalChannelGroup: " << (int)it2->logicalChannelConfig.logicalChannelGroup << std::endl;
2287  }
2288  os << std::endl;
2289 
2290  os << " drbToReleaseList: ";
2291  std::list<uint8_t>::iterator it3 = radioResourceConfigDedicated.drbToReleaseList.begin ();
2292  for (; it3 != radioResourceConfigDedicated.drbToReleaseList.end (); it3++)
2293  {
2294  os << (int)*it3 << ", ";
2295  }
2296  os << std::endl;
2297 
2298  os << " havePhysicalConfigDedicated: " << radioResourceConfigDedicated.havePhysicalConfigDedicated << std::endl;
2299 
2300  if (radioResourceConfigDedicated.havePhysicalConfigDedicated)
2301  {
2302  os << " physicalConfigDedicated: " << std::endl;
2303 
2304  os << " haveSoundingRsUlConfigDedicated: " << radioResourceConfigDedicated.physicalConfigDedicated.haveSoundingRsUlConfigDedicated << std::endl;
2305  if (radioResourceConfigDedicated.physicalConfigDedicated.haveSoundingRsUlConfigDedicated)
2306  {
2307  os << " soundingRsUlConfigDedicated: " << std::endl;
2308  os << " type: " << radioResourceConfigDedicated.physicalConfigDedicated.soundingRsUlConfigDedicated.type << std::endl;
2309  os << " srsBandwidth: " << (int)radioResourceConfigDedicated.physicalConfigDedicated.soundingRsUlConfigDedicated.srsBandwidth << std::endl;
2310  os << " srsConfigIndex: " << (int)radioResourceConfigDedicated.physicalConfigDedicated.soundingRsUlConfigDedicated.srsConfigIndex << std::endl;
2311  }
2312 
2313  os << " haveAntennaInfoDedicated: " << radioResourceConfigDedicated.physicalConfigDedicated.haveAntennaInfoDedicated << std::endl;
2314  if (radioResourceConfigDedicated.physicalConfigDedicated.haveAntennaInfoDedicated)
2315  {
2316  os << " antennaInfo Tx mode: " << (int)radioResourceConfigDedicated.physicalConfigDedicated.antennaInfo.transmissionMode << std::endl;
2317  }
2318  }
2319 }
2320 
2323 {
2324  std::bitset<0> bitset0;
2325  int n;
2326 
2327  std::bitset<3> sysInfoBlkT1Opts;
2328  bIterator = DeserializeSequence (&sysInfoBlkT1Opts,false,bIterator);
2329 
2330  // Deserialize cellAccessRelatedInfo
2331  std::bitset<1> cellAccessRelatedInfoOpts;
2332  bIterator = DeserializeSequence (&cellAccessRelatedInfoOpts,false,bIterator);
2333 
2334  // Deserialize plmn-IdentityList
2335  int numPlmnIdentityInfoElements;
2336  bIterator = DeserializeSequenceOf (&numPlmnIdentityInfoElements,6,1,bIterator);
2337  for (int i = 0; i < numPlmnIdentityInfoElements; i++)
2338  {
2339  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2340 
2341  // plmn-Identity
2342  bIterator = DeserializePlmnIdentity (&systemInformationBlockType1->cellAccessRelatedInfo.plmnIdentityInfo.plmnIdentity,bIterator);
2343  }
2344 
2345  // Deserialize trackingAreaCode
2346  std::bitset<16> trackingAreaCode;
2347  bIterator = DeserializeBitstring (&trackingAreaCode,bIterator);
2348 
2349  // Deserialize cellIdentity
2350  std::bitset<28> cellIdentity;
2351  bIterator = DeserializeBitstring (&cellIdentity,bIterator);
2352  systemInformationBlockType1->cellAccessRelatedInfo.cellIdentity = cellIdentity.to_ulong ();
2353 
2354  // Deserialize cellBarred
2355  bIterator = DeserializeEnum (2,&n,bIterator);
2356 
2357  // Deserialize intraFreqReselection
2358  bIterator = DeserializeEnum (2,&n,bIterator);
2359 
2360  // Deserialize csg-Indication
2361  bIterator = DeserializeBoolean (&systemInformationBlockType1->cellAccessRelatedInfo.csgIndication,bIterator);
2362 
2363  if (cellAccessRelatedInfoOpts[0])
2364  {
2365  // Deserialize csg-Identity
2366  std::bitset<27> csgIdentity;
2367  bIterator = DeserializeBitstring (&csgIdentity,bIterator);
2368  systemInformationBlockType1->cellAccessRelatedInfo.csgIdentity = csgIdentity.to_ulong ();
2369  }
2370 
2371  // Deserialize cellSelectionInfo
2372  std::bitset<1> qRxLevMinOffsetPresent;
2373  bIterator = DeserializeSequence (&qRxLevMinOffsetPresent,false,bIterator);
2374  bIterator = DeserializeInteger (&n,-70,-22,bIterator); //q-RxLevMin
2375  if (qRxLevMinOffsetPresent[0])
2376  {
2377  // Deserialize qRxLevMinOffset
2378  // ...
2379  }
2380 
2381  if (sysInfoBlkT1Opts[2])
2382  {
2383  // Deserialize p-Max
2384  // ...
2385  }
2386 
2387  // freqBandIndicator
2388  bIterator = DeserializeInteger (&n,1,64,bIterator);
2389 
2390  // schedulingInfoList
2391  int numSchedulingInfo;
2392  bIterator = DeserializeSequenceOf (&numSchedulingInfo,MAX_SI_MESSAGE,1,bIterator);
2393  for (int i = 0; i < numSchedulingInfo; i++)
2394  {
2395  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2396  bIterator = DeserializeEnum (7,&n,bIterator); // si-Periodicity
2397  int numSibType;
2398  bIterator = DeserializeSequenceOf (&numSibType,MAX_SIB - 1,0, bIterator); // sib-MappingInfo
2399  for (int j = 0; j < numSibType; j++)
2400  {
2401  bIterator = DeserializeEnum (16,&n,bIterator); // SIB-Type
2402  }
2403  }
2404 
2405  if (sysInfoBlkT1Opts[1])
2406  {
2407  // tdd-Config
2408  // ...
2409  }
2410 
2411  // si-WindowLength
2412  bIterator = DeserializeEnum (7,&n,bIterator);
2413 
2414  // systemInfoValueTag
2415  bIterator = DeserializeInteger (&n,0,31,bIterator);
2416 
2417  if (sysInfoBlkT1Opts[0])
2418  {
2419  // Deserialize nonCriticalExtension
2420  // ...
2421  }
2422  return bIterator;
2423 }
2424 
2427 {
2428  std::bitset<0> bitset0;
2429  int n;
2430 
2431  std::bitset<2> sysInfoBlkT2Opts;
2432  bIterator = DeserializeSequence (&sysInfoBlkT2Opts,true,bIterator);
2433  if (sysInfoBlkT2Opts[1])
2434  {
2435  // Deserialize ac-BarringInfo
2436  // ...
2437  }
2438 
2439  // Deserialize radioResourceConfigCommon
2440  bIterator = DeserializeRadioResourceConfigCommonSib (&systemInformationBlockType2->radioResourceConfigCommon, bIterator);
2441 
2442  // Deserialize ue-TimersAndConstants
2443  bIterator = DeserializeSequence (&bitset0,true,bIterator);
2444  bIterator = DeserializeEnum (8,&n,bIterator); // t300
2445  bIterator = DeserializeEnum (8,&n,bIterator); // t301
2446  bIterator = DeserializeEnum (7,&n,bIterator); // t310
2447  bIterator = DeserializeEnum (8,&n,bIterator); // n310
2448  bIterator = DeserializeEnum (7,&n,bIterator); // t311
2449  bIterator = DeserializeEnum (8,&n,bIterator); // n311
2450 
2451  // Deserialize freqInfo
2452  std::bitset<2> freqInfoOpts;
2453  bIterator = DeserializeSequence (&freqInfoOpts,false,bIterator);
2454  if (freqInfoOpts[1])
2455  {
2456  // Deserialize ul-CarrierFreq
2457  bIterator = DeserializeInteger (&n, 0, MAX_EARFCN, bIterator);
2458  systemInformationBlockType2->freqInfo.ulCarrierFreq = n;
2459  }
2460  if (freqInfoOpts[0])
2461  {
2462  // Deserialize ul-Bandwidth
2463  bIterator = DeserializeEnum (6, &n, bIterator);
2464  switch (n)
2465  {
2466  case 0:
2467  systemInformationBlockType2->freqInfo.ulBandwidth = 6;
2468  break;
2469  case 1:
2470  systemInformationBlockType2->freqInfo.ulBandwidth = 15;
2471  break;
2472  case 2:
2473  systemInformationBlockType2->freqInfo.ulBandwidth = 25;
2474  break;
2475  case 3:
2476  systemInformationBlockType2->freqInfo.ulBandwidth = 50;
2477  break;
2478  case 4:
2479  systemInformationBlockType2->freqInfo.ulBandwidth = 75;
2480  break;
2481  case 5:
2482  systemInformationBlockType2->freqInfo.ulBandwidth = 100;
2483  break;
2484  default:
2485  systemInformationBlockType2->freqInfo.ulBandwidth = 6;
2486  }
2487  }
2488 
2489  // additionalSpectrumEmission
2490  bIterator = DeserializeInteger (&n,1,32,bIterator);
2491 
2492  if (sysInfoBlkT2Opts[0])
2493  {
2494  // Deserialize mbsfn-SubframeConfigList
2495  // ...
2496  }
2497 
2498  // Deserialize timeAlignmentTimerCommon
2499  bIterator = DeserializeEnum (8,&n,bIterator);
2500 
2501  return bIterator;
2502 }
2503 
2504 
2507 {
2508  std::bitset<0> bitset0;
2509  int n;
2510 
2511  std::bitset<9> rrCfgCommOptions;
2512  bIterator = DeserializeSequence (&rrCfgCommOptions,true,bIterator);
2513 
2514  // rach-ConfigCommon
2515  if (rrCfgCommOptions[8])
2516  {
2517  bIterator = DeserializeRachConfigCommon (&radioResourceConfigCommon->rachConfigCommon, bIterator);
2518  }
2519 
2520  // prach-Config
2521  std::bitset<1> prachConfigInfoPresent;
2522  bIterator = DeserializeSequence (&prachConfigInfoPresent,false,bIterator);
2523 
2524  // prach-Config -> rootSequenceIndex
2525  bIterator = DeserializeInteger (&n,0,1023,bIterator);
2526 
2527  // prach-Config -> prach-ConfigInfo
2528  if (prachConfigInfoPresent[0])
2529  {
2530  // ...
2531  }
2532 
2533  // pdsch-ConfigCommon
2534  if (rrCfgCommOptions[7])
2535  {
2536  // ...
2537  }
2538 
2539  // pusch-ConfigCommon
2540  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2541 
2542  // pusch-ConfigCommon -> pusch-ConfigBasic
2543  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2544 
2545  // pusch-ConfigCommon -> pusch-ConfigBasic -> n-SB
2546  bIterator = DeserializeInteger (&n,1,4,bIterator);
2547 
2548  // pusch-ConfigCommon -> pusch-ConfigBasic -> hoppingMode
2549  bIterator = DeserializeEnum (2,&n,bIterator);
2550 
2551  // pusch-ConfigCommon -> pusch-ConfigBasic -> pusch-HoppingOffset
2552  bIterator = DeserializeInteger (&n,0,98,bIterator);
2553 
2554  // pusch-ConfigCommon -> pusch-ConfigBasic -> enable64QAM
2555  bool enable64QAM;
2556  bIterator = DeserializeBoolean (&enable64QAM,bIterator);
2557 
2558  // ul-ReferenceSignalsPUSCH
2559  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2560 
2561  // groupHoppingEnabled
2562  bool dummyBool;
2563  bIterator = DeserializeBoolean (&dummyBool,bIterator);
2564 
2565  // groupAssignmentPUSCH
2566  bIterator = DeserializeInteger (&n,0,29,bIterator);
2567 
2568  // sequenceHoppingEnabled
2569  bIterator = DeserializeBoolean (&dummyBool,bIterator);
2570 
2571  // cyclicShift
2572  bIterator = DeserializeInteger (&n,0,7,bIterator);
2573 
2574  // phich-Config
2575  if (rrCfgCommOptions[6])
2576  {
2577  // ...
2578  }
2579 
2580  // pucch-ConfigCommon
2581  if (rrCfgCommOptions[5])
2582  {
2583  // ...
2584  }
2585 
2586  // soundingRS-UL-ConfigCommon
2587  if (rrCfgCommOptions[4])
2588  {
2589  // ...
2590  }
2591 
2592  // uplinkPowerControlCommon
2593  if (rrCfgCommOptions[3])
2594  {
2595  // ...
2596  }
2597 
2598  // antennaInfoCommon
2599  if (rrCfgCommOptions[2])
2600  {
2601  // ...
2602  }
2603 
2604  // p-Max
2605  if (rrCfgCommOptions[1])
2606  {
2607  // ...
2608  }
2609 
2610  // tdd-Config
2611  if (rrCfgCommOptions[0])
2612  {
2613  // ...
2614  }
2615 
2616  // ul-CyclicPrefixLength
2617  bIterator = DeserializeEnum (2,&n,bIterator);
2618 
2619  return bIterator;
2620 }
2621 
2624 {
2625  std::bitset<0> bitset0;
2626  int n;
2627 
2628  bIterator = DeserializeSequence (&bitset0,true,bIterator);
2629 
2630  // preambleInfo
2631  std::bitset<1> preamblesGroupAConfigPresent;
2632  bIterator = DeserializeSequence (&preamblesGroupAConfigPresent,false,bIterator);
2633 
2634  // numberOfRA-Preambles
2635  bIterator = DeserializeEnum (16,&n,bIterator);
2636  switch (n)
2637  {
2638  case 0:
2639  rachConfigCommon->preambleInfo.numberOfRaPreambles = 4;
2640  break;
2641  case 1:
2642  rachConfigCommon->preambleInfo.numberOfRaPreambles = 8;
2643  break;
2644  case 2:
2645  rachConfigCommon->preambleInfo.numberOfRaPreambles = 12;
2646  break;
2647  case 3:
2648  rachConfigCommon->preambleInfo.numberOfRaPreambles = 16;
2649  break;
2650  case 4:
2651  rachConfigCommon->preambleInfo.numberOfRaPreambles = 20;
2652  break;
2653  case 5:
2654  rachConfigCommon->preambleInfo.numberOfRaPreambles = 24;
2655  break;
2656  case 6:
2657  rachConfigCommon->preambleInfo.numberOfRaPreambles = 28;
2658  break;
2659  case 7:
2660  rachConfigCommon->preambleInfo.numberOfRaPreambles = 32;
2661  break;
2662  case 8:
2663  rachConfigCommon->preambleInfo.numberOfRaPreambles = 36;
2664  break;
2665  case 9:
2666  rachConfigCommon->preambleInfo.numberOfRaPreambles = 40;
2667  break;
2668  case 10:
2669  rachConfigCommon->preambleInfo.numberOfRaPreambles = 44;
2670  break;
2671  case 11:
2672  rachConfigCommon->preambleInfo.numberOfRaPreambles = 48;
2673  break;
2674  case 12:
2675  rachConfigCommon->preambleInfo.numberOfRaPreambles = 52;
2676  break;
2677  case 13:
2678  rachConfigCommon->preambleInfo.numberOfRaPreambles = 56;
2679  break;
2680  case 14:
2681  rachConfigCommon->preambleInfo.numberOfRaPreambles = 60;
2682  break;
2683  case 15:
2684  rachConfigCommon->preambleInfo.numberOfRaPreambles = 64;
2685  break;
2686  default:
2687  rachConfigCommon->preambleInfo.numberOfRaPreambles = 0;
2688  }
2689 
2690  rachConfigCommon->preambleInfo.numberOfRaPreambles = n;
2691 
2692  if (preamblesGroupAConfigPresent[0])
2693  {
2694  // Deserialize preamblesGroupAConfig
2695  // ...
2696  }
2697 
2698  // powerRampingParameters
2699  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2700  bIterator = DeserializeEnum (4,&n,bIterator); // powerRampingStep
2701  bIterator = DeserializeEnum (16,&n,bIterator); // preambleInitialReceivedTargetPower
2702 
2703  // ra-SupervisionInfo
2704  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2705  bIterator = DeserializeEnum (11,&n,bIterator); // preambleTransMax
2706  switch (n)
2707  {
2708  case 0:
2709  rachConfigCommon->raSupervisionInfo.preambleTransMax = 3;
2710  break;
2711  case 1:
2712  rachConfigCommon->raSupervisionInfo.preambleTransMax = 4;
2713  break;
2714  case 2:
2715  rachConfigCommon->raSupervisionInfo.preambleTransMax = 5;
2716  break;
2717  case 3:
2718  rachConfigCommon->raSupervisionInfo.preambleTransMax = 6;
2719  break;
2720  case 4:
2721  rachConfigCommon->raSupervisionInfo.preambleTransMax = 7;
2722  break;
2723  case 5:
2724  rachConfigCommon->raSupervisionInfo.preambleTransMax = 8;
2725  break;
2726  case 6:
2727  rachConfigCommon->raSupervisionInfo.preambleTransMax = 10;
2728  break;
2729  case 7:
2730  rachConfigCommon->raSupervisionInfo.preambleTransMax = 20;
2731  break;
2732  case 8:
2733  rachConfigCommon->raSupervisionInfo.preambleTransMax = 50;
2734  break;
2735  case 9:
2736  rachConfigCommon->raSupervisionInfo.preambleTransMax = 100;
2737  break;
2738  case 10:
2739  rachConfigCommon->raSupervisionInfo.preambleTransMax = 200;
2740  break;
2741  default:
2742  rachConfigCommon->raSupervisionInfo.preambleTransMax = 0;
2743  }
2744 
2745  // ra-ResponseWindowSize
2746  bIterator = DeserializeEnum (8,&n,bIterator);
2747  switch (n)
2748  {
2749  case 0:
2750  rachConfigCommon->raSupervisionInfo.raResponseWindowSize = 2;
2751  break;
2752  case 1:
2753  rachConfigCommon->raSupervisionInfo.raResponseWindowSize = 3;
2754  break;
2755  case 2:
2756  rachConfigCommon->raSupervisionInfo.raResponseWindowSize = 4;
2757  break;
2758  case 3:
2759  rachConfigCommon->raSupervisionInfo.raResponseWindowSize = 5;
2760  break;
2761  case 4:
2762  rachConfigCommon->raSupervisionInfo.raResponseWindowSize = 6;
2763  break;
2764  case 5:
2765  rachConfigCommon->raSupervisionInfo.raResponseWindowSize = 7;
2766  break;
2767  case 6:
2768  rachConfigCommon->raSupervisionInfo.raResponseWindowSize = 8;
2769  break;
2770  case 7:
2771  rachConfigCommon->raSupervisionInfo.raResponseWindowSize = 10;
2772  break;
2773  default:
2774  rachConfigCommon->raSupervisionInfo.raResponseWindowSize = 0;
2775  }
2776 
2777  bIterator = DeserializeEnum (8,&n,bIterator); // mac-ContentionResolutionTimer
2778  bIterator = DeserializeInteger (&n,1,8,bIterator); //maxHARQ-Msg3Tx
2779  return bIterator;
2780 }
2781 
2784 {
2785  std::bitset<0> bitset0;
2786  int n;
2787 
2788  bIterator = DeserializeSequence (&bitset0,true,bIterator);
2789 
2790  // rach-ConfigCommon
2791  bIterator = DeserializeRachConfigCommon (&radioResourceConfigCommonSib->rachConfigCommon, bIterator);
2792 
2793  // bcch-Config
2794  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2795  bIterator = DeserializeEnum (4,&n,bIterator); // modificationPeriodCoeff
2796 
2797  // pcch-Config
2798  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2799  bIterator = DeserializeEnum (4,&n,bIterator); // defaultPagingCycle
2800  bIterator = DeserializeEnum (8,&n,bIterator); // nB
2801 
2802  // prach-Config
2803  std::bitset<1> prachConfigInfoPresent;
2804  bIterator = DeserializeSequence (&prachConfigInfoPresent,false,bIterator);
2805  // prach-Config -> rootSequenceIndex
2806  bIterator = DeserializeInteger (&n,0,1023,bIterator);
2807  // prach-Config -> prach-ConfigInfo
2808  if (prachConfigInfoPresent[0])
2809  {
2810  // ...
2811  }
2812 
2813  // pdsch-ConfigCommon
2814  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2815  bIterator = DeserializeInteger (&n,-60,50,bIterator); // referenceSignalPower
2816  bIterator = DeserializeInteger (&n,0,3,bIterator); // p-b
2817 
2818  // pusch-ConfigCommon
2819  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2820 
2821  // pusch-ConfigCommon -> pusch-ConfigBasic
2822  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2823 
2824  // pusch-ConfigCommon -> pusch-ConfigBasic -> n-SB
2825  bIterator = DeserializeInteger (&n,1,4,bIterator);
2826 
2827  // pusch-ConfigCommon -> pusch-ConfigBasic -> hoppingMode
2828  bIterator = DeserializeEnum (2,&n,bIterator);
2829 
2830  // pusch-ConfigCommon -> pusch-ConfigBasic -> pusch-HoppingOffset
2831  bIterator = DeserializeInteger (&n,0,98,bIterator);
2832 
2833  // pusch-ConfigCommon -> pusch-ConfigBasic -> enable64QAM
2834  bool dummyBoolean;
2835  bIterator = DeserializeBoolean (&dummyBoolean,bIterator);
2836 
2837  // ul-ReferenceSignalsPUSCH
2838  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2839 
2840  // groupHoppingEnabled
2841  bIterator = DeserializeBoolean (&dummyBoolean,bIterator);
2842 
2843  // groupAssignmentPUSCH
2844  bIterator = DeserializeInteger (&n,0,29,bIterator);
2845 
2846  // sequenceHoppingEnabled
2847  bIterator = DeserializeBoolean (&dummyBoolean,bIterator);
2848 
2849  // cyclicShift
2850  bIterator = DeserializeInteger (&n,0,7,bIterator);
2851 
2852  // pucch-ConfigCommon
2853  bIterator = DeserializeEnum (3,&n,bIterator); // deltaPUCCH-Shift
2854  bIterator = DeserializeInteger (&n,0,98,bIterator); // nRB-CQI
2855  bIterator = DeserializeInteger (&n,0,7,bIterator); // nCS-AN
2856  bIterator = DeserializeInteger (&n,0,2047,bIterator); // n1PUCCH-AN
2857 
2858  // soundingRS-UL-ConfigCommon
2859  int choice;
2860  bIterator = DeserializeChoice (2,false,&choice,bIterator);
2861  if (choice == 0)
2862  {
2863  bIterator = DeserializeNull (bIterator); // release
2864  }
2865  if (choice == 1)
2866  {
2867  // setup
2868  // ...
2869  }
2870 
2871  // uplinkPowerControlCommon
2872  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2873  bIterator = DeserializeInteger (&n,-126,24,bIterator); // p0-NominalPUSCH
2874  bIterator = DeserializeEnum (8,&n,bIterator); // alpha
2875  bIterator = DeserializeInteger (&n,-127,-96,bIterator); // p0-NominalPUCCH
2876  //deltaFList-PUCCH
2877  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2878  bIterator = DeserializeEnum (3,&n,bIterator); // deltaF-PUCCH-Format1
2879  bIterator = DeserializeEnum (3,&n,bIterator); // deltaF-PUCCH-Format1b
2880  bIterator = DeserializeEnum (4,&n,bIterator); // deltaF-PUCCH-Format2
2881  bIterator = DeserializeEnum (3,&n,bIterator); // deltaF-PUCCH-Format2a
2882  bIterator = DeserializeEnum (3,&n,bIterator); // deltaF-PUCCH-Format2b
2883  bIterator = DeserializeInteger (&n,-1,6,bIterator); // deltaPreambleMsg3
2884 
2885  // ul-CyclicPrefixLength
2886  bIterator = DeserializeEnum (2,&n,bIterator);
2887 
2888  return bIterator;
2889 }
2890 
2893 {
2894  int n;
2895  std::bitset<0> b0;
2896  std::bitset<1> measResultNeighCellsPresent;
2897  bIterator = DeserializeSequence (&measResultNeighCellsPresent,true,bIterator);
2898 
2899  // Deserialize measId
2900  bIterator = DeserializeInteger (&n, 1, MAX_MEAS_ID, bIterator);
2901  measResults->measId = n;
2902 
2903  // Deserialize measResultServCell
2904  bIterator = DeserializeSequence (&b0,false,bIterator);
2905 
2906  // Deserialize rsrpResult
2907  bIterator = DeserializeInteger (&n, 0, 97, bIterator);
2908  measResults->rsrpResult = n;
2909 
2910  // Deserialize rsrqResult
2911  bIterator = DeserializeInteger (&n, 0, 34, bIterator);
2912  measResults->rsrqResult = n;
2913 
2914  measResults->haveMeasResultNeighCells = measResultNeighCellsPresent[0];
2915  if ( measResults->haveMeasResultNeighCells)
2916  {
2917  int measResultNeighCellsChoice;
2918 
2919  // Deserialize measResultNeighCells
2920  bIterator = DeserializeChoice (4,false,&measResultNeighCellsChoice,bIterator);
2921 
2922  if (measResultNeighCellsChoice == 0)
2923  {
2924  // Deserialize measResultListEUTRA
2925  int numElems;
2926  bIterator = DeserializeSequenceOf (&numElems,MAX_CELL_REPORT,1,bIterator);
2927 
2928  for (int i = 0; i < numElems; i++)
2929  {
2930  LteRrcSap::MeasResultEutra measResultEutra;
2931 
2932  std::bitset<1> isCgiInfoPresent;
2933  bIterator = DeserializeSequence (&isCgiInfoPresent,false,bIterator);
2934 
2935  // PhysCellId
2936  bIterator = DeserializeInteger (&n,0,503,bIterator);
2937  measResultEutra.physCellId = n;
2938 
2939  measResultEutra.haveCgiInfo = isCgiInfoPresent[0];
2940  if (isCgiInfoPresent[0])
2941  {
2942  std::bitset<1> havePlmnIdentityList;
2943  bIterator = DeserializeSequence (&havePlmnIdentityList,false,bIterator);
2944 
2945  // Deserialize cellGlobalId
2946  bIterator = DeserializeSequence (&b0,false,bIterator);
2947 
2948  // Deserialize plmn-Identity
2949  bIterator = DeserializePlmnIdentity (&measResultEutra.cgiInfo.plmnIdentity,bIterator);
2950 
2951  // Deserialize CellIdentity
2952  std::bitset<28> cellId;
2953  bIterator = DeserializeBitstring (&cellId,bIterator);
2954  measResultEutra.cgiInfo.cellIdentity = cellId.to_ulong ();
2955 
2956  // Deserialize trackingAreaCode
2957  std::bitset<16> trArCo;
2958  bIterator = DeserializeBitstring (&trArCo,bIterator);
2959  measResultEutra.cgiInfo.trackingAreaCode = trArCo.to_ulong ();
2960 
2961  // Deserialize plmn-IdentityList
2962  if (havePlmnIdentityList[0])
2963  {
2964  int numPlmnElems;
2965  bIterator = DeserializeSequenceOf (&numPlmnElems, 5, 1, bIterator);
2966 
2967  for ( int j = 0; j < numPlmnElems; j++)
2968  {
2969  uint32_t plmnId;
2970  bIterator = DeserializePlmnIdentity (&plmnId,bIterator);
2971  measResultEutra.cgiInfo.plmnIdentityList.push_back (plmnId);
2972  }
2973  }
2974  }
2975 
2976  // Deserialize measResult
2977  std::bitset<2> measResultOpts;
2978  bIterator = DeserializeSequence (&measResultOpts, true, bIterator);
2979 
2980  measResultEutra.haveRsrpResult = measResultOpts[1];
2981  if (measResultOpts[1])
2982  {
2983  // Deserialize rsrpResult
2984  bIterator = DeserializeInteger (&n,0,97,bIterator);
2985  measResultEutra.rsrpResult = n;
2986  }
2987 
2988  measResultEutra.haveRsrqResult = measResultOpts[0];
2989  if (measResultOpts[0])
2990  {
2991  // Deserialize rsrqResult
2992  bIterator = DeserializeInteger (&n,0,34,bIterator);
2993  measResultEutra.rsrqResult = n;
2994  }
2995 
2996  measResults->measResultListEutra.push_back (measResultEutra);
2997  }
2998  }
2999 
3000  if (measResultNeighCellsChoice == 1)
3001  {
3002  // Deserialize measResultListUTRA
3003  // ...
3004  }
3005 
3006  if (measResultNeighCellsChoice == 2)
3007  {
3008  // Deserialize measResultListGERAN
3009  // ...
3010  }
3011  if (measResultNeighCellsChoice == 3)
3012  {
3013  // Deserialize measResultsCDMA2000
3014  // ...
3015  }
3016  }
3017 
3018  return bIterator;
3019 }
3020 
3023 {
3024  int n;
3025  std::bitset<1> isMccPresent;
3026  bIterator = DeserializeSequence (&isMccPresent,false,bIterator);
3027 
3028  if (isMccPresent[0])
3029  {
3030  // Deserialize mcc
3031  // ...
3032  }
3033 
3034  // Deserialize mnc
3035  int mncDigits;
3036  int mnc = 0;
3037  bIterator = DeserializeSequenceOf (&mncDigits,3,2,bIterator);
3038 
3039  for (int j = mncDigits - 1; j >= 0; j--)
3040  {
3041  bIterator = DeserializeInteger (&n,0,9,bIterator);
3042  mnc += n * pow (10,j);
3043  }
3044 
3045  *plmnId = mnc;
3046 
3047  // cellReservedForOperatorUse
3048  bIterator = DeserializeEnum (2,&n,bIterator);
3049  return bIterator;
3050 }
3051 
3054 {
3055  std::bitset<0> bitset0;
3056  std::bitset<2> bitset2;
3057  std::bitset<11> bitset11;
3058  int n;
3059 
3060  // measConfig
3061  bIterator = DeserializeSequence (&bitset11,true,bIterator);
3062 
3063  if (bitset11[10])
3064  {
3065  // measObjectToRemoveList
3066  int measObjectToRemoveListElems;
3067  bIterator = DeserializeSequenceOf (&measObjectToRemoveListElems, MAX_OBJECT_ID, 1, bIterator);
3068 
3069  for (int i = 0; i < measObjectToRemoveListElems; i++)
3070  {
3071  bIterator = DeserializeInteger (&n, 1, MAX_OBJECT_ID, bIterator);
3072  measConfig->measObjectToRemoveList.push_back (n);
3073  }
3074  }
3075 
3076  if (bitset11[9])
3077  {
3078  // measObjectToAddModList
3079  int measObjectToAddModListElems;
3080  bIterator = DeserializeSequenceOf (&measObjectToAddModListElems, MAX_OBJECT_ID, 1, bIterator);
3081 
3082  for (int i = 0; i < measObjectToAddModListElems; i++)
3083  {
3085 
3086  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3087 
3088  bIterator = DeserializeInteger (&n, 1, MAX_OBJECT_ID, bIterator);
3089  elem.measObjectId = n;
3090 
3091  int measObjectChoice;
3092  bIterator = DeserializeChoice (4, true, &measObjectChoice, bIterator);
3093 
3094  switch (measObjectChoice)
3095  {
3096  case 1:
3097  // Deserialize measObjectUTRA
3098  // ...
3099  break;
3100 
3101  case 2:
3102  // Deserialize measObjectGERAN
3103  // ...
3104  break;
3105 
3106  case 3:
3107  // Deserialize measObjectCDMA2000
3108  // ...
3109  break;
3110 
3111  case 0:
3112  default:
3113  // Deserialize measObjectEUTRA
3114  std::bitset<5> measObjectEutraOpts;
3115  bIterator = DeserializeSequence (&measObjectEutraOpts, true, bIterator);
3116 
3117  // carrierFreq
3118  bIterator = DeserializeInteger (&n, 0, MAX_EARFCN, bIterator);
3119  elem.measObjectEutra.carrierFreq = n;
3120 
3121  // allowedMeasBandwidth
3122  bIterator = DeserializeEnum (6, &n, bIterator);
3123  switch (n)
3124  {
3125  case 0:
3127  break;
3128  case 1:
3130  break;
3131  case 2:
3133  break;
3134  case 3:
3136  break;
3137  case 4:
3139  break;
3140  case 5:
3141  default:
3143  break;
3144  }
3145 
3146  // presenceAntennaPort1
3147  bIterator = DeserializeBoolean (&elem.measObjectEutra.presenceAntennaPort1, bIterator);
3148 
3149  // neighCellConfig
3150  bIterator = DeserializeBitstring (&bitset2, bIterator);
3151  elem.measObjectEutra.neighCellConfig = bitset2.to_ulong ();
3152 
3153  // offsetFreq
3154  bIterator = DeserializeQoffsetRange (&elem.measObjectEutra.offsetFreq, bIterator);
3155 
3156  if (measObjectEutraOpts[4])
3157  {
3158  // cellsToRemoveList
3159  int numElems;
3160  bIterator = DeserializeSequenceOf (&numElems, MAX_CELL_MEAS, 1, bIterator);
3161 
3162  for (int i = 0; i < numElems; i++)
3163  {
3164  bIterator = DeserializeInteger (&n, 1, MAX_CELL_MEAS, bIterator);
3165  elem.measObjectEutra.cellsToRemoveList.push_back (n);
3166  }
3167  }
3168 
3169  if (measObjectEutraOpts[3])
3170  {
3171  // cellsToAddModList
3172  int numElems;
3173  bIterator = DeserializeSequenceOf (&numElems, MAX_CELL_MEAS, 1, bIterator);
3174 
3175  for (int i = 0; i < numElems; i++)
3176  {
3177  LteRrcSap::CellsToAddMod cellsToAddMod;
3178 
3179  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3180 
3181  // cellIndex
3182  bIterator = DeserializeInteger (&n, 1, MAX_CELL_MEAS, bIterator);
3183  cellsToAddMod.cellIndex = n;
3184 
3185  // PhysCellId
3186  bIterator = DeserializeInteger (&n, 0, 503, bIterator);
3187  cellsToAddMod.physCellId = n;
3188 
3189  // cellIndividualOffset
3190  bIterator = DeserializeQoffsetRange ( &cellsToAddMod.cellIndividualOffset, bIterator);
3191 
3192  elem.measObjectEutra.cellsToAddModList.push_back (cellsToAddMod);
3193  }
3194  }
3195 
3196  if (measObjectEutraOpts[2])
3197  {
3198  // blackCellsToRemoveList
3199  int numElems;
3200  bIterator = DeserializeSequenceOf (&numElems, MAX_CELL_MEAS, 1, bIterator);
3201 
3202  for (int i = 0; i < numElems; i++)
3203  {
3204  bIterator = DeserializeInteger (&n, 1, MAX_CELL_MEAS, bIterator);
3205  elem.measObjectEutra.blackCellsToRemoveList.push_back (n);
3206  }
3207  }
3208 
3209 
3210  if (measObjectEutraOpts[1])
3211  {
3212  // blackCellsToAddModList
3213  int numElems;
3214  bIterator = DeserializeSequenceOf (&numElems, MAX_CELL_MEAS, 1, bIterator);
3215 
3216  for (int i = 0; i < numElems; i++)
3217  {
3218  LteRrcSap::BlackCellsToAddMod blackCellsToAddMod;
3219  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3220 
3221  bIterator = DeserializeInteger (&n, 1, MAX_CELL_MEAS, bIterator);
3222  blackCellsToAddMod.cellIndex = n;
3223 
3224  // PhysCellIdRange
3225  std::bitset<1> isRangePresent;
3226  bIterator = DeserializeSequence (&isRangePresent, false, bIterator);
3227 
3228  // start
3229  bIterator = DeserializeInteger (&n, 0, 503, bIterator);
3230  blackCellsToAddMod.physCellIdRange.start = n;
3231 
3232  blackCellsToAddMod.physCellIdRange.haveRange = isRangePresent[0];
3233  // initialize range to silence compiler warning
3234  blackCellsToAddMod.physCellIdRange.range = 0;
3235  if (blackCellsToAddMod.physCellIdRange.haveRange)
3236  {
3237  // range
3238  bIterator = DeserializeEnum (16, &n, bIterator);
3239  switch (n)
3240  {
3241  case 0:
3242  blackCellsToAddMod.physCellIdRange.range = 4;
3243  break;
3244  case 1:
3245  blackCellsToAddMod.physCellIdRange.range = 8;
3246  break;
3247  case 2:
3248  blackCellsToAddMod.physCellIdRange.range = 12;
3249  break;
3250  case 3:
3251  blackCellsToAddMod.physCellIdRange.range = 16;
3252  break;
3253  case 4:
3254  blackCellsToAddMod.physCellIdRange.range = 24;
3255  break;
3256  case 5:
3257  blackCellsToAddMod.physCellIdRange.range = 32;
3258  break;
3259  case 6:
3260  blackCellsToAddMod.physCellIdRange.range = 48;
3261  break;
3262  case 7:
3263  blackCellsToAddMod.physCellIdRange.range = 64;
3264  break;
3265  case 8:
3266  blackCellsToAddMod.physCellIdRange.range = 84;
3267  break;
3268  case 9:
3269  blackCellsToAddMod.physCellIdRange.range = 96;
3270  break;
3271  case 10:
3272  blackCellsToAddMod.physCellIdRange.range = 128;
3273  break;
3274  case 11:
3275  blackCellsToAddMod.physCellIdRange.range = 168;
3276  break;
3277  case 12:
3278  blackCellsToAddMod.physCellIdRange.range = 252;
3279  break;
3280  case 13:
3281  blackCellsToAddMod.physCellIdRange.range = 504;
3282  break;
3283  default:
3284  blackCellsToAddMod.physCellIdRange.range = 0;
3285  }
3286  }
3287 
3288  elem.measObjectEutra.blackCellsToAddModList.push_back (blackCellsToAddMod);
3289  }
3290  }
3291 
3292  elem.measObjectEutra.haveCellForWhichToReportCGI = measObjectEutraOpts[0];
3293  if (measObjectEutraOpts[0])
3294  {
3295  // cellForWhichToReportCGI
3296  bIterator = DeserializeInteger (&n, 0, 503, bIterator);
3298  }
3299  }
3300  measConfig->measObjectToAddModList.push_back (elem);
3301  }
3302  }
3303 
3304  if (bitset11[8])
3305  {
3306  // reportConfigToRemoveList
3307  int reportConfigToRemoveListElems;
3308  bIterator = DeserializeSequenceOf (&reportConfigToRemoveListElems, MAX_REPORT_CONFIG_ID, 1, bIterator);
3309 
3310  for (int i = 0; i < reportConfigToRemoveListElems; i++)
3311  {
3312  bIterator = DeserializeInteger (&n, 1, MAX_REPORT_CONFIG_ID, bIterator);
3313  measConfig->reportConfigToRemoveList.push_back (n);
3314  }
3315  }
3316 
3317  if (bitset11[7])
3318  {
3319  // reportConfigToAddModList
3320  int reportConfigToAddModListElems;
3321  bIterator = DeserializeSequenceOf (&reportConfigToAddModListElems, MAX_REPORT_CONFIG_ID, 1, bIterator);
3322 
3323  for (int i = 0; i < reportConfigToAddModListElems; i++)
3324  {
3326 
3327  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3328  bIterator = DeserializeInteger (&n, 1, MAX_REPORT_CONFIG_ID, bIterator);
3329  elem.reportConfigId = n;
3330 
3331  // Deserialize reportConfig
3332  int reportConfigChoice;
3333  bIterator = DeserializeChoice (2, false, &reportConfigChoice, bIterator);
3334 
3335  if (reportConfigChoice == 0)
3336  {
3337  // reportConfigEUTRA
3338  bIterator = DeserializeSequence (&bitset0, true, bIterator);
3339 
3340  // triggerType
3341  int triggerTypeChoice;
3342  bIterator = DeserializeChoice (2, false, &triggerTypeChoice, bIterator);
3343 
3344  if (triggerTypeChoice == 0)
3345  {
3346  // event
3348  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3349 
3350  // eventId
3351  int eventIdChoice;
3352  bIterator = DeserializeChoice (5, true, &eventIdChoice, bIterator);
3353 
3354  switch (eventIdChoice)
3355  {
3356  case 0:
3358  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3359  bIterator = DeserializeThresholdEutra (&elem.reportConfigEutra.threshold1, bIterator);
3360  break;
3361 
3362  case 1:
3364  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3365  bIterator = DeserializeThresholdEutra (&elem.reportConfigEutra.threshold1, bIterator);
3366  break;
3367 
3368  case 2:
3370  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3371  bIterator = DeserializeInteger (&n, -30, 30, bIterator);
3372  elem.reportConfigEutra.a3Offset = n;
3373  bIterator = DeserializeBoolean (&elem.reportConfigEutra.reportOnLeave, bIterator);
3374  break;
3375 
3376  case 3:
3378  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3379  bIterator = DeserializeThresholdEutra (&elem.reportConfigEutra.threshold1, bIterator);
3380  break;
3381 
3382  case 4:
3383  default:
3385  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3386  bIterator = DeserializeThresholdEutra (&elem.reportConfigEutra.threshold1, bIterator);
3387  bIterator = DeserializeThresholdEutra (&elem.reportConfigEutra.threshold2, bIterator);
3388  }
3389 
3390  bIterator = DeserializeInteger (&n, 0, 30, bIterator);
3391  elem.reportConfigEutra.hysteresis = n;
3392 
3393  bIterator = DeserializeEnum (16, &n, bIterator);
3394  switch (n)
3395  {
3396  case 0:
3398  break;
3399  case 1:
3400  elem.reportConfigEutra.timeToTrigger = 40;
3401  break;
3402  case 2:
3403  elem.reportConfigEutra.timeToTrigger = 64;
3404  break;
3405  case 3:
3406  elem.reportConfigEutra.timeToTrigger = 80;
3407  break;
3408  case 4:
3409  elem.reportConfigEutra.timeToTrigger = 100;
3410  break;
3411  case 5:
3412  elem.reportConfigEutra.timeToTrigger = 128;
3413  break;
3414  case 6:
3415  elem.reportConfigEutra.timeToTrigger = 160;
3416  break;
3417  case 7:
3418  elem.reportConfigEutra.timeToTrigger = 256;
3419  break;
3420  case 8:
3421  elem.reportConfigEutra.timeToTrigger = 320;
3422  break;
3423  case 9:
3424  elem.reportConfigEutra.timeToTrigger = 480;
3425  break;
3426  case 10:
3427  elem.reportConfigEutra.timeToTrigger = 512;
3428  break;
3429  case 11:
3430  elem.reportConfigEutra.timeToTrigger = 640;
3431  break;
3432  case 12:
3433  elem.reportConfigEutra.timeToTrigger = 1024;
3434  break;
3435  case 13:
3436  elem.reportConfigEutra.timeToTrigger = 1280;
3437  break;
3438  case 14:
3439  elem.reportConfigEutra.timeToTrigger = 2560;
3440  break;
3441  case 15:
3442  default:
3443  elem.reportConfigEutra.timeToTrigger = 5120;
3444  break;
3445  }
3446  }
3447 
3448  if (triggerTypeChoice == 1)
3449  {
3450  // periodical
3452 
3453  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3454  bIterator = DeserializeEnum (2, &n, bIterator);
3455  if (n == 0)
3456  {
3458  }
3459  else
3460  {
3462  }
3463  }
3464 
3465  // triggerQuantity
3466  bIterator = DeserializeEnum (2, &n, bIterator);
3467  if (n == 0)
3468  {
3470  }
3471  else
3472  {
3474  }
3475 
3476  // reportQuantity
3477  bIterator = DeserializeEnum (2, &n, bIterator);
3478  if (n == 0)
3479  {
3481  }
3482  else
3483  {
3485  }
3486 
3487  // maxReportCells
3488  bIterator = DeserializeInteger (&n, 1, MAX_CELL_REPORT, bIterator);
3490 
3491  // reportInterval
3492  bIterator = DeserializeEnum (16, &n, bIterator);
3493  switch (n)
3494  {
3495  case 0:
3497  break;
3498  case 1:
3500  break;
3501  case 2:
3503  break;
3504  case 3:
3506  break;
3507  case 4:
3509  break;
3510  case 5:
3512  break;
3513  case 6:
3515  break;
3516  case 7:
3518  break;
3519  case 8:
3521  break;
3522  case 9:
3524  break;
3525  case 10:
3527  break;
3528  case 11:
3530  break;
3531  case 12:
3533  break;
3534  case 13:
3536  break;
3537  case 14:
3539  break;
3540  case 15:
3541  default:
3543  }
3544 
3545  // reportAmount
3546  bIterator = DeserializeEnum (8, &n, bIterator);
3547  switch (n)
3548  {
3549  case 0:
3551  break;
3552  case 1:
3554  break;
3555  case 2:
3557  break;
3558  case 3:
3560  break;
3561  case 4:
3562  elem.reportConfigEutra.reportAmount = 16;
3563  break;
3564  case 5:
3565  elem.reportConfigEutra.reportAmount = 32;
3566  break;
3567  case 6:
3568  elem.reportConfigEutra.reportAmount = 64;
3569  break;
3570  default:
3572  }
3573  }
3574 
3575  if (reportConfigChoice == 1)
3576  {
3577  // ReportConfigInterRAT
3578  // ...
3579  }
3580 
3581  measConfig->reportConfigToAddModList.push_back (elem);
3582  }
3583  }
3584 
3585  if (bitset11[6])
3586  {
3587  // measIdToRemoveList
3588  int measIdToRemoveListElems;
3589  bIterator = DeserializeSequenceOf (&measIdToRemoveListElems, MAX_MEAS_ID, 1, bIterator);
3590 
3591  for (int i = 0; i < measIdToRemoveListElems; i++)
3592  {
3593  bIterator = DeserializeInteger (&n, 1, MAX_MEAS_ID, bIterator);
3594  measConfig->measIdToRemoveList.push_back (n);
3595  }
3596  }
3597 
3598  if (bitset11[5])
3599  {
3600  // measIdToAddModList
3601  int measIdToAddModListElems;
3602  bIterator = DeserializeSequenceOf (&measIdToAddModListElems, MAX_MEAS_ID, 1, bIterator);
3603 
3604  for (int i = 0; i < measIdToAddModListElems; i++)
3605  {
3607 
3608  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3609 
3610  bIterator = DeserializeInteger (&n, 1, MAX_MEAS_ID, bIterator);
3611  elem.measId = n;
3612 
3613  bIterator = DeserializeInteger (&n, 1, MAX_OBJECT_ID, bIterator);
3614  elem.measObjectId = n;
3615 
3616  bIterator = DeserializeInteger (&n, 1, MAX_REPORT_CONFIG_ID, bIterator);
3617  elem.reportConfigId = n;
3618 
3619  measConfig->measIdToAddModList.push_back (elem);
3620  }
3621  }
3622 
3623  measConfig->haveQuantityConfig = bitset11[4];
3624  if (measConfig->haveQuantityConfig)
3625  {
3626  // quantityConfig
3627  std::bitset<4> quantityConfigOpts;
3628  bIterator = DeserializeSequence (&quantityConfigOpts, true, bIterator);
3629 
3630  if (quantityConfigOpts[3])
3631  {
3632  // quantityConfigEUTRA
3633  bIterator = DeserializeSequence (&bitset0,false,bIterator);
3634  bIterator = DeserializeEnum (16, &n, bIterator);
3635  switch (n)
3636  {
3637  case 0:
3638  measConfig->quantityConfig.filterCoefficientRSRP = 0;
3639  break;
3640  case 1:
3641  measConfig->quantityConfig.filterCoefficientRSRP = 1;
3642  break;
3643  case 2:
3644  measConfig->quantityConfig.filterCoefficientRSRP = 2;
3645  break;
3646  case 3:
3647  measConfig->quantityConfig.filterCoefficientRSRP = 3;
3648  break;
3649  case 4:
3650  measConfig->quantityConfig.filterCoefficientRSRP = 4;
3651  break;
3652  case 5:
3653  measConfig->quantityConfig.filterCoefficientRSRP = 5;
3654  break;
3655  case 6:
3656  measConfig->quantityConfig.filterCoefficientRSRP = 6;
3657  break;
3658  case 7:
3659  measConfig->quantityConfig.filterCoefficientRSRP = 7;
3660  break;
3661  case 8:
3662  measConfig->quantityConfig.filterCoefficientRSRP = 8;
3663  break;
3664  case 9:
3665  measConfig->quantityConfig.filterCoefficientRSRP = 9;
3666  break;
3667  case 10:
3668  measConfig->quantityConfig.filterCoefficientRSRP = 11;
3669  break;
3670  case 11:
3671  measConfig->quantityConfig.filterCoefficientRSRP = 13;
3672  break;
3673  case 12:
3674  measConfig->quantityConfig.filterCoefficientRSRP = 15;
3675  break;
3676  case 13:
3677  measConfig->quantityConfig.filterCoefficientRSRP = 17;
3678  break;
3679  case 14:
3680  measConfig->quantityConfig.filterCoefficientRSRP = 19;
3681  break;
3682  case 15:
3683  measConfig->quantityConfig.filterCoefficientRSRP = 0;
3684  break;
3685  default:
3686  measConfig->quantityConfig.filterCoefficientRSRP = 4;
3687  }
3688  bIterator = DeserializeEnum (16, &n, bIterator);
3689  switch (n)
3690  {
3691  case 0:
3692  measConfig->quantityConfig.filterCoefficientRSRQ = 0;
3693  break;
3694  case 1:
3695  measConfig->quantityConfig.filterCoefficientRSRQ = 1;
3696  break;
3697  case 2:
3698  measConfig->quantityConfig.filterCoefficientRSRQ = 2;
3699  break;
3700  case 3:
3701  measConfig->quantityConfig.filterCoefficientRSRQ = 3;
3702  break;
3703  case 4:
3704  measConfig->quantityConfig.filterCoefficientRSRQ = 4;
3705  break;
3706  case 5:
3707  measConfig->quantityConfig.filterCoefficientRSRQ = 5;
3708  break;
3709  case 6:
3710  measConfig->quantityConfig.filterCoefficientRSRQ = 6;
3711  break;
3712  case 7:
3713  measConfig->quantityConfig.filterCoefficientRSRQ = 7;
3714  break;
3715  case 8:
3716  measConfig->quantityConfig.filterCoefficientRSRQ = 8;
3717  break;
3718  case 9:
3719  measConfig->quantityConfig.filterCoefficientRSRQ = 9;
3720  break;
3721  case 10:
3722  measConfig->quantityConfig.filterCoefficientRSRQ = 11;
3723  break;
3724  case 11:
3725  measConfig->quantityConfig.filterCoefficientRSRQ = 13;
3726  break;
3727  case 12:
3728  measConfig->quantityConfig.filterCoefficientRSRQ = 15;
3729  break;
3730  case 13:
3731  measConfig->quantityConfig.filterCoefficientRSRQ = 17;
3732  break;
3733  case 14:
3734  measConfig->quantityConfig.filterCoefficientRSRQ = 19;
3735  break;
3736  case 15:
3737  measConfig->quantityConfig.filterCoefficientRSRQ = 0;
3738  break;
3739  default:
3740  measConfig->quantityConfig.filterCoefficientRSRQ = 4;
3741  }
3742  }
3743  if (quantityConfigOpts[2])
3744  {
3745  // quantityConfigUTRA
3746  // ...
3747  }
3748  if (quantityConfigOpts[1])
3749  {
3750  // quantityConfigGERAN
3751  // ...
3752  }
3753  if (quantityConfigOpts[0])
3754  {
3755  // quantityConfigCDMA2000
3756  // ...
3757  }
3758  }
3759 
3760  measConfig->haveMeasGapConfig = bitset11[3];
3761  if (measConfig->haveMeasGapConfig)
3762  {
3763  // measGapConfig
3764  int measGapConfigChoice;
3765  bIterator = DeserializeChoice (2, false, &measGapConfigChoice, bIterator);
3766  switch (measGapConfigChoice)
3767  {
3768  case 0:
3770  bIterator = DeserializeNull (bIterator);
3771  break;
3772  case 1:
3773  default:
3775  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3776 
3777  int gapOffsetChoice;
3778  bIterator = DeserializeChoice (2, true, &gapOffsetChoice, bIterator);
3779  switch (gapOffsetChoice)
3780  {
3781  case 0:
3783  bIterator = DeserializeInteger (&n, 0, 39, bIterator);
3784  measConfig->measGapConfig.gapOffsetValue = n;
3785  break;
3786  case 1:
3787  default:
3789  bIterator = DeserializeInteger (&n, 0, 79, bIterator);
3790  measConfig->measGapConfig.gapOffsetValue = n;
3791  }
3792  }
3793  }
3794 
3795  measConfig->haveSmeasure = bitset11[2];
3796  if (measConfig->haveSmeasure)
3797  {
3798  // s-Measure
3799  bIterator = DeserializeInteger (&n, 0, 97, bIterator);
3800  measConfig->sMeasure = n;
3801  }
3802 
3803  if (bitset11[1])
3804  {
3805  // preRegistrationInfoHRPD
3806  // ...
3807  }
3808 
3809  measConfig->haveSpeedStatePars = bitset11[0];
3810  if (measConfig->haveSpeedStatePars)
3811  {
3812  // speedStatePars
3813  int speedStateParsChoice;
3814  bIterator = DeserializeChoice (2, false, &speedStateParsChoice, bIterator);
3815  switch (speedStateParsChoice)
3816  {
3817  case 0:
3819  bIterator = DeserializeNull (bIterator);
3820  break;
3821  case 1:
3822  default:
3824  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3825 
3826  // Deserialize mobilityStateParameters
3827  // Deserialize t-Evaluation
3828  bIterator = DeserializeEnum (8, &n, bIterator);
3829  switch (n)
3830  {
3831  case 0:
3833  break;
3834  case 1:
3836  break;
3837  case 2:
3839  break;
3840  case 3:
3842  break;
3843  case 4:
3845  break;
3846  default:
3848  }
3849  // Deserialize t-HystNormal
3850  bIterator = DeserializeEnum (8, &n, bIterator);
3851  switch (n)
3852  {
3853  case 0:
3855  break;
3856  case 1:
3858  break;
3859  case 2:
3861  break;
3862  case 3:
3864  break;
3865  case 4:
3867  break;
3868  default:
3870  }
3871 
3872  bIterator = DeserializeInteger (&n, 1, 16, bIterator);
3874 
3875  bIterator = DeserializeInteger (&n, 1, 16, bIterator);
3877 
3878  // Deserialize timeToTriggerSf
3879  bIterator = DeserializeEnum (4, &n, bIterator);
3880  measConfig->speedStatePars.timeToTriggerSf.sfMedium = (n + 1) * 25;
3881  bIterator = DeserializeEnum (4, &n, bIterator);
3882  measConfig->speedStatePars.timeToTriggerSf.sfHigh = (n + 1) * 25;
3883  }
3884  }
3885  return bIterator;
3886 }
3888 
3889 // Constructor
3891 {
3892  m_mmec = std::bitset<8> (0ul);
3893  m_mTmsi = std::bitset<32> (0ul);
3895  m_spare = std::bitset<1> (0ul);
3896 }
3897 
3898 // Destructor
3900 {
3901 }
3902 
3903 TypeId
3905 {
3906  static TypeId tid = TypeId ("ns3::RrcConnectionRequestHeader")
3907  .SetParent<Header> ()
3908  ;
3909  return tid;
3910 }
3911 
3912 void
3913 RrcConnectionRequestHeader::Print (std::ostream &os) const
3914 {
3915  os << "MMEC:" << m_mmec << std::endl;
3916  os << "MTMSI:" << m_mTmsi << std::endl;
3917  os << "EstablishmentCause:" << m_establishmentCause << std::endl;
3918  os << "Spare: " << m_spare << std::endl;
3919 }
3920 
3921 void
3923 {
3925 
3927 
3928  // Serialize RRCConnectionRequest sequence:
3929  // no default or optional fields. Extension marker not present.
3930  SerializeSequence (std::bitset<0> (),false);
3931 
3932  // Serialize criticalExtensions choice:
3933  // 2 options, selected: 0 (option: rrcConnectionRequest-r8)
3934  SerializeChoice (2,0,false);
3935 
3936  // Serialize RRCConnectionRequest-r8-IEs sequence:
3937  // no default or optional fields. Extension marker not present.
3938  SerializeSequence (std::bitset<0> (),false);
3939 
3940  // Serialize InitialUE-Identity choice:
3941  // 2 options, selected: 0 (option: s-TMSI)
3942  SerializeChoice (2,0,false);
3943 
3944  // Serialize S-TMSI sequence:
3945  // no default or optional fields. Extension marker not present.
3946  SerializeSequence (std::bitset<0> (),false);
3947 
3948  // Serialize mmec : MMEC ::= BIT STRING (SIZE (8))
3950 
3951  // Serialize m-TMSI ::= BIT STRING (SIZE (32))
3953 
3954  // Serialize establishmentCause : EstablishmentCause ::= ENUMERATED
3956 
3957  // Serialize spare : BIT STRING (SIZE (1))
3958  SerializeBitstring (std::bitset<1> ());
3959 
3960  // Finish serialization
3962 }
3963 
3964 uint32_t
3966 {
3967  std::bitset<1> dummy;
3968  std::bitset<0> optionalOrDefaultMask;
3969  int selectedOption;
3970 
3971  bIterator = DeserializeUlCcchMessage (bIterator);
3972 
3973  // Deserialize RCConnectionRequest sequence
3974  bIterator = DeserializeSequence (&optionalOrDefaultMask,false,bIterator);
3975 
3976  // Deserialize criticalExtensions choice:
3977  bIterator = DeserializeChoice (2,false,&selectedOption,bIterator);
3978 
3979  // Deserialize RRCConnectionRequest-r8-IEs sequence
3980  bIterator = DeserializeSequence (&optionalOrDefaultMask,false,bIterator);
3981 
3982  // Deserialize InitialUE-Identity choice
3983  bIterator = DeserializeChoice (2,false,&selectedOption,bIterator);
3984 
3985  // Deserialize S-TMSI sequence
3986  bIterator = DeserializeSequence (&optionalOrDefaultMask,false,bIterator);
3987 
3988  // Deserialize mmec
3989  bIterator = DeserializeBitstring (&m_mmec,bIterator);
3990 
3991  // Deserialize m-TMSI
3992  bIterator = DeserializeBitstring (&m_mTmsi,bIterator);
3993 
3994  // Deserialize establishmentCause
3995  bIterator = DeserializeEnum (8,&selectedOption,bIterator);
3996 
3997  // Deserialize spare
3998  bIterator = DeserializeBitstring (&dummy,bIterator);
3999 
4000  return GetSerializedSize ();
4001 }
4002 
4003 void
4005 {
4006  m_mTmsi = std::bitset<32> ((uint32_t)msg.ueIdentity);
4007  m_mmec = std::bitset<8> ((uint32_t)(msg.ueIdentity >> 32));
4008  m_isDataSerialized = false;
4009 }
4010 
4013 {
4015  msg.ueIdentity = (((uint64_t) m_mmec.to_ulong ()) << 32) | (m_mTmsi.to_ulong ());
4016 
4017  return msg;
4018 }
4019 
4020 std::bitset<8>
4022 {
4023  return m_mmec;
4024 }
4025 
4026 std::bitset<32>
4028 {
4029  return m_mTmsi;
4030 }
4031 
4032 
4035 {
4036 }
4037 
4039 {
4040 }
4041 
4042 void
4043 RrcConnectionSetupHeader::Print (std::ostream &os) const
4044 {
4045  os << "rrcTransactionIdentifier: " << (int)m_rrcTransactionIdentifier << std::endl;
4046  os << "radioResourceConfigDedicated:" << std::endl;
4048 }
4049 
4050 void
4052 {
4054 
4056 
4057  SerializeInteger (15,0,15);
4058 
4059  // Serialize RRCConnectionSetup sequence:
4060  // no default or optional fields. Extension marker not present.
4061  SerializeSequence (std::bitset<0> (),false);
4062 
4063  // Serialize rrc-TransactionIdentifier ::=INTEGER (0..3)
4065 
4066  // Serialize criticalExtensions choice:
4067  // 2 options, selected: 0 (option: c1)
4068  SerializeChoice (2,0,false);
4069 
4070  // Serialize c1 choice:
4071  // 8 options, selected: 0 (option: rrcConnectionSetup-r8)
4072  SerializeChoice (8,0,false);
4073 
4074  // Serialize rrcConnectionSetup-r8 sequence
4075  // 1 optional fields (not present). Extension marker not present.
4076  SerializeSequence (std::bitset<1> (0),false);
4077 
4078  // Serialize RadioResourceConfigDedicated sequence
4080 
4081  // Serialize nonCriticalExtension sequence
4082  // 2 optional fields, none present. No extension marker.
4083  SerializeSequence (std::bitset<2> (0),false);
4084 
4085  // Finish serialization
4087 }
4088 
4089 
4090 uint32_t
4092 {
4093  int n;
4094 
4095  std::bitset<0> bitset0;
4096  std::bitset<1> bitset1;
4097  std::bitset<2> bitset2;
4098 
4099  bIterator = DeserializeDlCcchMessage (bIterator);
4100 
4101  bIterator = DeserializeInteger (&n,0,15,bIterator);
4102 
4103  // Deserialize RRCConnectionSetup sequence
4104  bIterator = DeserializeSequence (&bitset0,false,bIterator);
4105 
4106  // Deserialize rrc-TransactionIdentifier ::=INTEGER (0..3)
4107  bIterator = DeserializeInteger (&n,0,3,bIterator);
4109 
4110  // Deserialize criticalExtensions choice
4111  int criticalExtensionChoice;
4112  bIterator = DeserializeChoice (2,false,&criticalExtensionChoice,bIterator);
4113  if (criticalExtensionChoice == 1)
4114  {
4115  // Deserialize criticalExtensionsFuture
4116  bIterator = DeserializeSequence (&bitset0,false,bIterator);
4117  }
4118  else if (criticalExtensionChoice == 0)
4119  {
4120  // Deserialize c1
4121  int c1;
4122  bIterator = DeserializeChoice (8,false,&c1,bIterator);
4123 
4124  if (c1 > 0)
4125  {
4126  // Deserialize spareX , X:=7..1
4127  bIterator = DeserializeNull (bIterator);
4128  }
4129  else if (c1 == 0)
4130  {
4131  // Deserialize rrcConnectionSetup-r8
4132  // 1 optional fields, no extension marker.
4133  bIterator = DeserializeSequence (&bitset1,false,bIterator);
4134 
4135  // Deserialize radioResourceConfigDedicated
4137 
4138  if (bitset1[0])
4139  {
4140  // Deserialize nonCriticalExtension
4141  // 2 optional fields, no extension marker.
4142  bIterator = DeserializeSequence (&bitset2,false,bIterator);
4143 
4144  // Deserialization of lateR8NonCriticalExtension and nonCriticalExtension
4145  // ...
4146  }
4147  }
4148  }
4149  return GetSerializedSize ();
4150 }
4151 
4152 void
4154 {
4157  m_isDataSerialized = false;
4158 }
4159 
4162 {
4166  return msg;
4167 }
4168 
4169 uint8_t
4171 {
4173 }
4174 
4175 bool
4177 {
4179 }
4180 
4181 std::list<LteRrcSap::SrbToAddMod>
4183 {
4185 }
4186 
4187 std::list<LteRrcSap::DrbToAddMod>
4189 {
4191 }
4192 
4193 std::list<uint8_t>
4195 {
4197 }
4198 
4201 {
4203 }
4204 
4207 {
4209 }
4210 
4212 
4214 {
4215 }
4216 
4218 {
4219 }
4220 
4221 void
4223 {
4225 
4226  // Serialize DCCH message
4228 
4229  // Serialize RRCConnectionSetupComplete sequence:
4230  // no default or optional fields. Extension marker not present.
4231  SerializeSequence (std::bitset<0> (),false);
4232 
4233  // Serialize rrc-TransactionIdentifier
4235 
4236  // Serialize criticalExtensions choice
4237  // 2 options, selected 0 (c1)
4238  SerializeChoice (2,0,false);
4239 
4240  // Choose spare3 NULL
4241  SerializeChoice (4,1,false);
4242 
4243  // Serialize spare3 NULL
4244  SerializeNull ();
4245 
4246  // Finish serialization
4248 }
4249 
4250 uint32_t
4252 {
4253  std::bitset<0> bitset0;
4254 
4255  bIterator = DeserializeUlDcchMessage (bIterator);
4256 
4257  bIterator = DeserializeSequence (&bitset0,false,bIterator);
4258 
4259  int n;
4260  bIterator = DeserializeInteger (&n,0,3,bIterator);
4262 
4263  bIterator = DeserializeChoice (2,false,&n,bIterator);
4264 
4265  if (n == 1)
4266  {
4267  // Deserialize criticalExtensionsFuture
4268  bIterator = DeserializeSequence (&bitset0,false,bIterator);
4269  }
4270  else if (n == 0)
4271  {
4272  // Deserialize c1
4273  int c1Chosen;
4274  bIterator = DeserializeChoice (4,false,&c1Chosen,bIterator);
4275 
4276  if (c1Chosen == 0)
4277  {
4278  // Deserialize rrcConnectionSetupComplete-r8
4279  // ...
4280  }
4281  else
4282  {
4283  bIterator = DeserializeNull (bIterator);
4284  }
4285  }
4286 
4287  return GetSerializedSize ();
4288 }
4289 
4290 void
4292 {
4293  os << "rrcTransactionIdentifier: " << (int) m_rrcTransactionIdentifier << std::endl;
4294 }
4295 
4296 void
4298 {
4300  m_isDataSerialized = false;
4301 }
4302 
4303 uint8_t
4305 {
4307 }
4308 
4311 {
4314  return msg;
4315 }
4316 
4318 
4320 {
4321 }
4322 
4324 {
4325 }
4326 
4327 void
4329 {
4331 
4332  // Serialize DCCH message
4334 
4335  // Serialize RRCConnectionSetupComplete sequence:
4336  // no default or optional fields. Extension marker not present.
4337  SerializeSequence (std::bitset<0> (),false);
4338 
4339  // Serialize rrc-TransactionIdentifier
4341 
4342  // Serialize criticalExtensions choice
4343  // 2 options, selected 1 (criticalExtensionsFuture)
4344  SerializeChoice (2,1,false);
4345 
4346  // Choose criticalExtensionsFuture
4347  SerializeSequence (std::bitset<0> (),false);
4348 
4349  // Finish serialization
4351 }
4352 
4353 uint32_t
4355 {
4356  std::bitset<0> bitset0;
4357  int n;
4358 
4359  bIterator = DeserializeUlDcchMessage (bIterator);
4360  bIterator = DeserializeSequence (&bitset0,false,bIterator);
4361 
4362  bIterator = DeserializeInteger (&n,0,3,bIterator);
4364 
4365  bIterator = DeserializeChoice (2,false,&n,bIterator);
4366 
4367  if (n == 1)
4368  {
4369  // Deserialize criticalExtensionsFuture
4370  bIterator = DeserializeSequence (&bitset0,false,bIterator);
4371  }
4372  else if (n == 0)
4373  {
4374  // Deserialize rrcConnectionReconfigurationComplete-r8
4375  // ...
4376  }
4377 
4378  return GetSerializedSize ();
4379 }
4380 
4381 void
4383 {
4384  os << "rrcTransactionIdentifier: " << (int) m_rrcTransactionIdentifier << std::endl;
4385 }
4386 
4387 void
4389 {
4391  m_isDataSerialized = false;
4392 }
4393 
4396 {
4399  return msg;
4400 }
4401 
4402 uint8_t
4404 {
4406 }
4407 
4409 
4411 {
4412 }
4413 
4415 {
4416 }
4417 
4418 void
4420 {
4422 
4424 
4425  // Serialize RRCConnectionSetupComplete sequence:
4426  // no default or optional fields. Extension marker not present.
4427  SerializeSequence (std::bitset<0> (),false);
4428 
4429  // Serialize rrc-TransactionIdentifier
4431 
4432  // Serialize criticalExtensions choice
4433  // 2 options, selected 0 (c1)
4434  SerializeChoice (2,0,false);
4435 
4436  // Serialize c1 choice
4437  // 8 options, selected 0 (rrcConnectionReconfiguration-r8)
4438  SerializeChoice (8,0,false);
4439 
4440  // Serialize RRCConnectionReconfiguration-r8-IEs sequence:
4441  // 6 optional fields. Extension marker not present.
4442  std::bitset<6> options;
4443  options.set (5,m_haveMeasConfig);
4444  options.set (4,m_haveMobilityControlInfo);
4445  options.set (3,0); // No dedicatedInfoNASList
4446  options.set (2,m_haveRadioResourceConfigDedicated);
4447  options.set (1,0); // No securityConfigHO
4448  options.set (0,0); // No nonCriticalExtension
4449  SerializeSequence (options,false);
4450 
4451  if (m_haveMeasConfig)
4452  {
4454  }
4455 
4457  {
4458  // Serialize MobilityControlInfo
4459 
4460  // 4 optional fields, extension marker present.
4461  std::bitset<4> mobCtrlIntoOptional;
4462  mobCtrlIntoOptional.set (3,m_mobilityControlInfo.haveCarrierFreq);
4463  mobCtrlIntoOptional.set (2,m_mobilityControlInfo.haveCarrierBandwidth);
4464  mobCtrlIntoOptional.set (1,0); // No additionalSpectrumEmission
4465  mobCtrlIntoOptional.set (0,m_mobilityControlInfo.haveRachConfigDedicated);
4466  SerializeSequence (mobCtrlIntoOptional,true);
4467 
4468  // Serialize targetPhysCellId
4470 
4472  {
4473  SerializeSequence (std::bitset<1> (1),false);
4476  }
4477 
4479  {
4480  SerializeSequence (std::bitset<1> (1),false);
4481 
4482  // Serialize dl-Bandwidth
4484  {
4485  case 6:
4486  SerializeEnum (16,0);
4487  break;
4488  case 15:
4489  SerializeEnum (16,1);
4490  break;
4491  case 25:
4492  SerializeEnum (16,2);
4493  break;
4494  case 50:
4495  SerializeEnum (16,3);
4496  break;
4497  case 75:
4498  SerializeEnum (16,4);
4499  break;
4500  case 100:
4501  SerializeEnum (16,5);
4502  break;
4503  default:
4504  SerializeEnum (16,6);
4505  }
4506 
4507  // Serialize ul-Bandwidth
4509  {
4510  case 6:
4511  SerializeEnum (16,0);
4512  break;
4513  case 15:
4514  SerializeEnum (16,1);
4515  break;
4516  case 25:
4517  SerializeEnum (16,2);
4518  break;
4519  case 50:
4520  SerializeEnum (16,3);
4521  break;
4522  case 75:
4523  SerializeEnum (16,4);
4524  break;
4525  case 100:
4526  SerializeEnum (16,5);
4527  break;
4528  default:
4529  SerializeEnum (16,6);
4530  }
4531  }
4532 
4533  // Serialize t304
4534  SerializeEnum (8,0);
4535 
4536  // Serialize newUE-Identitiy
4538 
4539  // Serialize radioResourceConfigCommon
4541 
4543  {
4544  SerializeSequence (std::bitset<0> (),false);
4547  }
4548  }
4549 
4551  {
4552  // Serialize RadioResourceConfigDedicated
4554  }
4555 
4556  // Finish serialization
4558 }
4559 
4560 uint32_t
4562 {
4563  std::bitset<0> bitset0;
4564 
4565  bIterator = DeserializeDlDcchMessage (bIterator);
4566 
4567  // RRCConnectionReconfiguration sequence
4568  bIterator = DeserializeSequence (&bitset0,false,bIterator);
4569 
4570  // rrc-TransactionIdentifier
4571  int n;
4572  bIterator = DeserializeInteger (&n,0,3,bIterator);
4574 
4575  // criticalExtensions
4576  int sel;
4577  bIterator = DeserializeChoice (2,false,&sel,bIterator);
4578  if (sel == 1)
4579  {
4580  // criticalExtensionsFuture
4581  bIterator = DeserializeSequence (&bitset0,false,bIterator);
4582  }
4583  else if (sel == 0)
4584  {
4585  // c1
4586  int c1Chosen;
4587  bIterator = DeserializeChoice (8,false,&c1Chosen,bIterator);
4588  if (c1Chosen > 0)
4589  {
4590  bIterator = DeserializeNull (bIterator);
4591  }
4592  else if (c1Chosen == 0)
4593  {
4594  // rrcConnectionReconfiguration-r8
4595  std::bitset<6> rrcConnRecOpts;
4596  bIterator = DeserializeSequence (&rrcConnRecOpts,false,bIterator);
4597 
4598  m_haveMeasConfig = rrcConnRecOpts[5];
4599  if (m_haveMeasConfig)
4600  {
4601  bIterator = DeserializeMeasConfig (&m_measConfig, bIterator);
4602  }
4603 
4604  m_haveMobilityControlInfo = rrcConnRecOpts[4];
4606  {
4607  // mobilityControlInfo
4608  std::bitset<4> mobCtrlOpts;
4609  bIterator = DeserializeSequence (&mobCtrlOpts,true,bIterator);
4610 
4611  // PhysCellId
4612  bIterator = DeserializeInteger (&n,0,503,bIterator);
4614 
4615  // carrierFreq
4616  m_mobilityControlInfo.haveCarrierFreq = mobCtrlOpts[3];
4618  {
4619  std::bitset<1> ulCarrierFreqPresent;
4620  bIterator = DeserializeSequence (&ulCarrierFreqPresent,false,bIterator);
4621 
4622  bIterator = DeserializeInteger (&n,0,MAX_EARFCN,bIterator);
4624 
4625  if (ulCarrierFreqPresent[0])
4626  {
4627  bIterator = DeserializeInteger (&n,0,MAX_EARFCN,bIterator);
4629  }
4630  }
4631 
4632  // carrierBandwidth
4635  {
4636  std::bitset<1> ulBandwidthPresent;
4637  bIterator = DeserializeSequence (&ulBandwidthPresent,false,bIterator);
4638 
4639  bIterator = DeserializeEnum (16,&n,bIterator);
4640  switch (n)
4641  {
4642  case 0:
4644  break;
4645  case 1:
4647  break;
4648  case 2:
4650  break;
4651  case 3:
4653  break;
4654  case 4:
4656  break;
4657  case 5:
4659  break;
4660  case 6:
4662  break;
4663  }
4664 
4665  if (ulBandwidthPresent[0])
4666  {
4667  bIterator = DeserializeEnum (16,&n,bIterator);
4668  switch (n)
4669  {
4670  case 0:
4672  break;
4673  case 1:
4675  break;
4676  case 2:
4678  break;
4679  case 3:
4681  break;
4682  case 4:
4684  break;
4685  case 5:
4687  break;
4688  case 6:
4690  break;
4691  }
4692  }
4693  }
4694 
4695  // additionalSpectrumEmission
4696  if (mobCtrlOpts[1])
4697  {
4698  // ...
4699  }
4700 
4701  // t304
4702  bIterator = DeserializeEnum (8,&n,bIterator);
4703 
4704  // newUE-Identity
4705  std::bitset<16> cRnti;
4706  bIterator = DeserializeBitstring (&cRnti, bIterator);
4707  m_mobilityControlInfo.newUeIdentity = cRnti.to_ulong ();
4708 
4709  // radioResourceConfigCommon
4711 
4714  {
4715  bIterator = DeserializeSequence (&bitset0, false, bIterator);
4716  bIterator = DeserializeInteger (&n,0,63, bIterator);
4718  bIterator = DeserializeInteger (&n,0,15, bIterator);
4720  }
4721  }
4722 
4723  // dedicatedInfoNASList
4724  if (rrcConnRecOpts[3])
4725  {
4726  // ...
4727  }
4728 
4729  // radioResourceConfigDedicated
4730  m_haveRadioResourceConfigDedicated = rrcConnRecOpts[2];
4732  {
4734  }
4735 
4736  // securityConfigHO
4737  if (rrcConnRecOpts[1])
4738  {
4739  // ...
4740  }
4741 
4742  // nonCriticalExtension
4743  if (rrcConnRecOpts[0])
4744  {
4745  // ...
4746  }
4747  }
4748  }
4749 
4750  return GetSerializedSize ();
4751 }
4752 
4753 void
4755 {
4756  os << "rrcTransactionIdentifier: " << (int) m_rrcTransactionIdentifier << std::endl;
4757  os << "haveMeasConfig: " << m_haveMeasConfig << std::endl;
4758  if (m_haveMeasConfig)
4759  {
4760  if (!m_measConfig.measObjectToRemoveList.empty ())
4761  {
4762  os << " measObjectToRemoveList: ";
4763  std::list<uint8_t> auxList = m_measConfig.measObjectToRemoveList;
4764  std::list<uint8_t>::iterator it = auxList.begin ();
4765  for (; it != auxList.end (); it++)
4766  {
4767  os << (int) *it << ", ";
4768  }
4769  os << std::endl;
4770  }
4771  if (!m_measConfig.reportConfigToRemoveList.empty ())
4772  {
4773  os << " reportConfigToRemoveList: ";
4774  std::list<uint8_t> auxList = m_measConfig.reportConfigToRemoveList;
4775  std::list<uint8_t>::iterator it = auxList.begin ();
4776  for (; it != auxList.end (); it++)
4777  {
4778  os << (int) *it << ", ";
4779  }
4780  os << std::endl;
4781  }
4782  if (!m_measConfig.measIdToRemoveList.empty ())
4783  {
4784  os << " measIdToRemoveList: ";
4785  std::list<uint8_t> auxList = m_measConfig.measIdToRemoveList;
4786  std::list<uint8_t>::iterator it = auxList.begin ();
4787  for (; it != auxList.end (); it++)
4788  {
4789  os << (int) *it << ", ";
4790  }
4791  os << std::endl;
4792  }
4793 
4794  if (!m_measConfig.measObjectToAddModList.empty ())
4795  {
4796  os << " measObjectToAddMod: " << std::endl;
4797  std::list<LteRrcSap::MeasObjectToAddMod> auxList = m_measConfig.measObjectToAddModList;
4798  std::list<LteRrcSap::MeasObjectToAddMod>::iterator it = auxList.begin ();
4799  for (; it != auxList.end (); it++)
4800  {
4801  os << " measObjectId: " << (int)it->measObjectId << std::endl;
4802  os << " carrierFreq: " << (int)it->measObjectEutra.carrierFreq << std::endl;
4803  os << " allowedMeasBandwidth: " << (int)it->measObjectEutra.allowedMeasBandwidth << std::endl;
4804  os << " presenceAntennaPort1: " << it->measObjectEutra.presenceAntennaPort1 << std::endl;
4805  os << " neighCellConfig: " << (int) it->measObjectEutra.neighCellConfig << std::endl;
4806  os << " offsetFreq: " << (int)it->measObjectEutra.offsetFreq << std::endl;
4807 
4808 
4809  if (!it->measObjectEutra.cellsToRemoveList.empty ())
4810  {
4811  os << " cellsToRemoveList: ";
4812  std::list<uint8_t> auxList = it->measObjectEutra.cellsToRemoveList;
4813  std::list<uint8_t>::iterator it = auxList.begin ();
4814  for (; it != auxList.end (); it++)
4815  {
4816  os << (int) *it << ", ";
4817  }
4818  os << std::endl;
4819  }
4820 
4821  if (!it->measObjectEutra.blackCellsToRemoveList.empty ())
4822  {
4823  os << " blackCellsToRemoveList: ";
4824  std::list<uint8_t> auxList = it->measObjectEutra.blackCellsToRemoveList;
4825  std::list<uint8_t>::iterator it = auxList.begin ();
4826  for (; it != auxList.end (); it++)
4827  {
4828  os << (int) *it << ", ";
4829  }
4830  os << std::endl;
4831  }
4832 
4833  if (!it->measObjectEutra.cellsToAddModList.empty ())
4834  {
4835  os << " cellsToAddModList: " << std::endl;
4836  std::list<LteRrcSap::CellsToAddMod> auxList = it->measObjectEutra.cellsToAddModList;
4837  std::list<LteRrcSap::CellsToAddMod>::iterator it = auxList.begin ();
4838  for (; it != auxList.end (); it++)
4839  {
4840  os << " cellIndex: " << (int)it->cellIndex << std::endl;
4841  os << " physCellId: " << (int)it->physCellId << std::endl;
4842  os << " cellIndividualOffset: " << (int)it->cellIndividualOffset << std::endl;
4843  os << " ------ " << std::endl;
4844  }
4845  }
4846 
4847  if (!it->measObjectEutra.blackCellsToAddModList.empty ())
4848  {
4849  os << " blackCellsToAddModList: " << std::endl;
4850  std::list<LteRrcSap::BlackCellsToAddMod> auxList = it->measObjectEutra.blackCellsToAddModList;
4851  std::list<LteRrcSap::BlackCellsToAddMod>::iterator it = auxList.begin ();
4852  for (; it != auxList.end (); it++)
4853  {
4854  os << " cellIndex: " << (int)it->cellIndex << std::endl;
4855  os << " physCellIdRange.start: " << (int)it->physCellIdRange.start << std::endl;
4856  os << " physCellIdRange.haveRange: " << it->physCellIdRange.haveRange << std::endl;
4857  os << " physCellIdRange.range: " << (int)it->physCellIdRange.range << std::endl;
4858  os << " ------ " << std::endl;
4859  }
4860  }
4861 
4862  os << " haveCellForWhichToReportCGI: " << it->measObjectEutra.haveCellForWhichToReportCGI << std::endl;
4863  os << " cellForWhichToReportCGI: " << (int)it->measObjectEutra.cellForWhichToReportCGI << std::endl;
4864  os << " ------------- " << std::endl;
4865  }
4866 
4867  }
4868 
4869  if (!m_measConfig.reportConfigToAddModList.empty ())
4870  {
4871  os << " reportConfigToAddModList: " << std::endl;
4872  std::list<LteRrcSap::ReportConfigToAddMod> auxList = m_measConfig.reportConfigToAddModList;
4873  std::list<LteRrcSap::ReportConfigToAddMod>::iterator it = auxList.begin ();
4874  for (; it != auxList.end (); it++)
4875  {
4876  os << " reportConfigId: " << (int)it->reportConfigId << std::endl;
4877  os << " reportConfigEutra.triggerType " << (int)it->reportConfigEutra.triggerType << std::endl;
4878  if (it->reportConfigEutra.triggerType == LteRrcSap::ReportConfigEutra::EVENT)
4879  {
4880  os << " reportConfigEutra.eventId " << (int)it->reportConfigEutra.eventId << std::endl;
4881  if (it->reportConfigEutra.eventId == LteRrcSap::ReportConfigEutra::EVENT_A3)
4882  {
4883  os << " reportConfigEutra.reportOnLeave " << (int)it->reportConfigEutra.reportOnLeave << std::endl;
4884  os << " reportConfigEutra.a3Offset " << (int)it->reportConfigEutra.a3Offset << std::endl;
4885  }
4886  else
4887  {
4888  os << " reportConfigEutra.threshold1.choice " << (int)it->reportConfigEutra.threshold1.choice << std::endl;
4889  os << " reportConfigEutra.threshold1.range " << (int)it->reportConfigEutra.threshold1.range << std::endl;
4890  if (it->reportConfigEutra.eventId == LteRrcSap::ReportConfigEutra::EVENT_A5)
4891  {
4892  os << " reportConfigEutra.threshold2.choice " << (int)it->reportConfigEutra.threshold2.choice << std::endl;
4893  os << " reportConfigEutra.threshold2.range " << (int)it->reportConfigEutra.threshold2.range << std::endl;
4894  }
4895  }
4896  os << " reportConfigEutra.hysteresis " << (int)it->reportConfigEutra.hysteresis << std::endl;
4897  os << " reportConfigEutra.timeToTrigger " << (int)it->reportConfigEutra.timeToTrigger << std::endl;
4898  }
4899  else
4900  {
4901  os << " reportConfigEutra.purpose " << (int)it->reportConfigEutra.purpose << std::endl;
4902  }
4903  os << " reportConfigEutra.triggerQuantity " << (int)it->reportConfigEutra.triggerQuantity << std::endl;
4904  os << " reportConfigEutra.reportQuantity " << (int)it->reportConfigEutra.reportQuantity << std::endl;
4905  os << " reportConfigEutra.maxReportCells " << (int)it->reportConfigEutra.maxReportCells << std::endl;
4906  os << " reportConfigEutra.reportInterval " << (int)it->reportConfigEutra.reportInterval << std::endl;
4907  os << " reportConfigEutra.reportAmount " << (int)it->reportConfigEutra.reportAmount << std::endl;
4908  }
4909  }
4910 
4911  if (!m_measConfig.measIdToAddModList.empty ())
4912  {
4913  os << " measIdToAddModList: " << std::endl;
4914  std::list<LteRrcSap::MeasIdToAddMod> auxList = m_measConfig.measIdToAddModList;
4915  std::list<LteRrcSap::MeasIdToAddMod>::iterator it = auxList.begin ();
4916  for (; it != auxList.end (); it++)
4917  {
4918  os << " measId: " << (int)it->measId << std::endl;
4919  os << " measObjectId: " << (int)it->measObjectId << std::endl;
4920  os << " reportConfigId: " << (int)it->reportConfigId << std::endl;
4921  os << " ------ " << std::endl;
4922  }
4923  }
4924 
4925  os << " haveQuantityConfig: " << m_measConfig.haveQuantityConfig << std::endl;
4927  {
4928  os << " filterCoefficientRSRP: " << (int)m_measConfig.quantityConfig.filterCoefficientRSRP << std::endl;
4929  os << " filterCoefficientRSRQ:" << (int)m_measConfig.quantityConfig.filterCoefficientRSRQ << std::endl;
4930  }
4931 
4932  os << " haveMeasGapConfig: " << m_measConfig.haveMeasGapConfig << std::endl;
4934  {
4935  os << " measGapConfig.type: " << m_measConfig.measGapConfig.type << std::endl;
4936  os << " measGapConfig.gap (gap0/1,value): (" << m_measConfig.measGapConfig.gapOffsetChoice
4937  << "," << (int) m_measConfig.measGapConfig.gapOffsetValue << ")" << std::endl;
4938  }
4939 
4940  os << " haveSmeasure: " << m_measConfig.haveSmeasure << std::endl;
4942  {
4943  os << " sMeasure: " << (int) m_measConfig.sMeasure << std::endl;
4944  }
4945 
4946  os << " haveSpeedStatePars: " << m_measConfig.haveSpeedStatePars << std::endl;
4948  {
4949  os << " speedStatePars.type: " << m_measConfig.speedStatePars.type << std::endl;
4950  os << " speedStatePars.mobilityStateParameters.tEvaluation: " << (int)m_measConfig.speedStatePars.mobilityStateParameters.tEvaluation << std::endl;
4951  os << " speedStatePars.mobilityStateParameters.tHystNormal: " << (int)m_measConfig.speedStatePars.mobilityStateParameters.tHystNormal << std::endl;
4952  os << " speedStatePars.mobilityStateParameters.nCellChangeMedium: " << (int)m_measConfig.speedStatePars.mobilityStateParameters.nCellChangeMedium << std::endl;
4953  os << " speedStatePars.mobilityStateParameters.nCellChangeHigh: " << (int)m_measConfig.speedStatePars.mobilityStateParameters.nCellChangeHigh << std::endl;
4954  os << " speedStatePars.timeToTriggerSf.sfMedium: " << (int)m_measConfig.speedStatePars.timeToTriggerSf.sfMedium << std::endl;
4955  os << " speedStatePars.timeToTriggerSf.sfHigh: " << (int)m_measConfig.speedStatePars.timeToTriggerSf.sfHigh << std::endl;
4956  }
4957  }
4958 
4959  os << "haveMobilityControlInfo: " << m_haveMobilityControlInfo << std::endl;
4961  {
4962  os << "targetPhysCellId: " << (int)m_mobilityControlInfo.targetPhysCellId << std::endl;
4963  os << "haveCarrierFreq: " << m_mobilityControlInfo.haveCarrierFreq << std::endl;
4965  {
4966  os << " carrierFreq.dlCarrierFreq: " << (int) m_mobilityControlInfo.carrierFreq.dlCarrierFreq << std::endl;
4967  os << " carrierFreq.dlCarrierFreq: " << (int) m_mobilityControlInfo.carrierFreq.ulCarrierFreq << std::endl;
4968  }
4969  os << "haveCarrierBandwidth: " << m_mobilityControlInfo.haveCarrierBandwidth << std::endl;
4971  {
4972  os << " carrierBandwidth.dlBandwidth: " << (int) m_mobilityControlInfo.carrierBandwidth.dlBandwidth << std::endl;
4973  os << " carrierBandwidth.ulBandwidth: " << (int) m_mobilityControlInfo.carrierBandwidth.ulBandwidth << std::endl;
4974  }
4975  os << "newUeIdentity: " << (int) m_mobilityControlInfo.newUeIdentity << std::endl;
4976  os << "haveRachConfigDedicated: " << m_mobilityControlInfo.haveRachConfigDedicated << std::endl;
4978  {
4979  os << "raPreambleIndex: " << (int) m_mobilityControlInfo.rachConfigDedicated.raPreambleIndex << std::endl;
4980  os << "raPrachMaskIndex: " << (int) m_mobilityControlInfo.rachConfigDedicated.raPrachMaskIndex << std::endl;
4981  }
4982  }
4983  os << "haveRadioResourceConfigDedicated: " << m_haveRadioResourceConfigDedicated << std::endl;
4985  {
4987  }
4988 }
4989 
4990 void
4992 {
4995  m_measConfig = msg.measConfig;
5000 
5001  m_isDataSerialized = false;
5002 }
5003 
5006 {
5008 
5011  msg.measConfig = m_measConfig;
5016 
5017  return msg;
5018 }
5019 
5020 uint8_t
5022 {
5024 }
5025 
5026 bool
5028 {
5029  return m_haveMeasConfig;
5030 }
5031 
5034 {
5035  return m_measConfig;
5036 }
5037 
5038 bool
5040 {
5042 }
5043 
5046 {
5047  return m_mobilityControlInfo;
5048 }
5049 
5050 bool
5052 {
5054 }
5055 
5058 {
5060 }
5061 
5062 bool
5064 {
5066 }
5067 
5068 std::list<LteRrcSap::SrbToAddMod>
5070 {
5072 }
5073 
5074 std::list<LteRrcSap::DrbToAddMod>
5076 {
5078 }
5079 
5080 std::list<uint8_t>
5082 {
5084 }
5085 
5088 {
5090 }
5091 
5092 
5094 
5096 {
5097 }
5098 
5099 void
5101 {
5103 
5104  // Serialize HandoverPreparationInformation sequence:
5105  // no default or optional fields. Extension marker not present.
5106  SerializeSequence (std::bitset<0> (),false);
5107 
5108  // Serialize criticalExtensions choice
5109  // 2 options, selected 0 (c1)
5110  SerializeChoice (2,0,false);
5111 
5112  // Serialize c1 choice
5113  // 8 options, selected 0 (handoverPreparationInformation-r8)
5114  SerializeChoice (8,0,false);
5115 
5116  // Serialize HandoverPreparationInformation-r8-IEs sequence
5117  // 4 optional fields, no extension marker.
5118  std::bitset<4> handoverPrepInfoOpts;
5119  handoverPrepInfoOpts.set (3,1); // as-Config present
5120  handoverPrepInfoOpts.set (2,0); // rrm-Config not present
5121  handoverPrepInfoOpts.set (1,0); // as-Context not present
5122  handoverPrepInfoOpts.set (0,0); // nonCriticalExtension not present
5123  SerializeSequence (handoverPrepInfoOpts,false);
5124 
5125  // Serialize ue-RadioAccessCapabilityInfo
5127 
5128  // Serialize as-Config
5129  SerializeSequence (std::bitset<0> (),true);
5130 
5131  // Serialize sourceMeasConfig
5133 
5134  // Serialize sourceRadioResourceConfig
5136 
5137  // Serialize sourceSecurityAlgorithmConfig
5138  SerializeSequence (std::bitset<0> (),false);
5139  // cipheringAlgorithm
5140  SerializeEnum (8,0);
5141  // integrityProtAlgorithm
5142  SerializeEnum (8,0);
5143 
5144  // Serialize sourceUE-Identity
5145  SerializeBitstring (std::bitset<16> (m_asConfig.sourceUeIdentity));
5146 
5147  // Serialize sourceMasterInformationBlock
5148  SerializeSequence (std::bitset<0> (),false);
5150  SerializeSequence (std::bitset<0> (),false); // phich-Config sequence
5151  SerializeEnum (2,0); // phich-Duration
5152  SerializeEnum (4,0); // phich-Resource
5153  SerializeBitstring (std::bitset<8> (m_asConfig.sourceMasterInformationBlock.systemFrameNumber)); // systemFrameNumber
5154  SerializeBitstring (std::bitset<10> (321)); // spare
5155 
5156  // Serialize sourceSystemInformationBlockType1 sequence
5158 
5159  // Serialize sourceSystemInformationBlockType2
5161 
5162  // Serialize AntennaInfoCommon
5163  SerializeSequence (std::bitset<0> (0),false);
5164  SerializeEnum (4,0); // antennaPortsCount
5165 
5166  // Serialize sourceDlCarrierFreq
5168 
5169  // Finish serialization
5171 }
5172 
5173 uint32_t
5175 {
5176  std::bitset<0> bitset0;
5177  int n;
5178 
5179  // Deserialize HandoverPreparationInformation sequence
5180  // 0 optional fields, no extension marker
5181  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5182 
5183  // Deserialize criticalExtensions choice
5184  int criticalExtensionsChosen;
5185  bIterator = DeserializeChoice (2,false,&criticalExtensionsChosen,bIterator);
5186 
5187  if (criticalExtensionsChosen == 1)
5188  {
5189  // Deserialize criticalExtensionsFuture
5190  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5191  }
5192  else if (criticalExtensionsChosen == 0)
5193  {
5194  // Deserialize c1 choice
5195  int c1Chosen;
5196  bIterator = DeserializeChoice (8,false,&c1Chosen,bIterator);
5197  if (c1Chosen > 0)
5198  {
5199  bIterator = DeserializeNull (bIterator);
5200  }
5201  else if (c1Chosen == 0)
5202  {
5203  // Deserialize handoverPreparationInformation-r8
5204  std::bitset<4> handoverPrepInfoOpts;
5205  bIterator = DeserializeSequence (&handoverPrepInfoOpts,false,bIterator);
5206 
5207  // Deserialize ue-RadioAccessCapabilityInfo
5208  bIterator = DeserializeSequenceOf (&n,MAX_RAT_CAPABILITIES,0,bIterator);
5209  for (int i = 0; i < n; i++)
5210  {
5211  // Deserialize UE-CapabilityRAT-Container
5212  // ...
5213  }
5214 
5215  if (handoverPrepInfoOpts[3])
5216  {
5217  // Deserialize as-Config sequence
5218  bIterator = DeserializeSequence (&bitset0,true,bIterator);
5219 
5220  // Deserialize sourceMeasConfig
5221  bIterator = DeserializeMeasConfig (&m_asConfig.sourceMeasConfig, bIterator);
5222 
5223  // Deserialize sourceRadioResourceConfig
5225 
5226  // Deserialize sourceSecurityAlgorithmConfig
5227  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5228  bIterator = DeserializeEnum (8,&n,bIterator); // cipheringAlgorithm
5229  bIterator = DeserializeEnum (8,&n,bIterator); // integrityProtAlgorithm
5230 
5231  // Deserialize sourceUE-Identity
5232  std::bitset<16> cRnti;
5233  bIterator = DeserializeBitstring (&cRnti,bIterator);
5234  m_asConfig.sourceUeIdentity = cRnti.to_ulong ();
5235 
5236  // Deserialize sourceMasterInformationBlock
5237  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5238  bIterator = DeserializeEnum (6,&n,bIterator); // dl-Bandwidth
5240 
5241  // phich-Config
5242  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5243  bIterator = DeserializeEnum (2,&n,bIterator); // phich-Duration
5244  bIterator = DeserializeEnum (4,&n,bIterator); // phich-Resource
5245 
5246  // systemFrameNumber
5247  std::bitset<8> systemFrameNumber;
5248  bIterator = DeserializeBitstring (&systemFrameNumber,bIterator);
5249  m_asConfig.sourceMasterInformationBlock.systemFrameNumber = systemFrameNumber.to_ulong ();
5250  // spare
5251  std::bitset<10> spare;
5252  bIterator = DeserializeBitstring (&spare,bIterator);
5253 
5254  // Deserialize sourceSystemInformationBlockType1
5256 
5257  // Deserialize sourceSystemInformationBlockType2
5259 
5260  // Deserialize antennaInfoCommon
5261  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5262  bIterator = DeserializeEnum (4,&n,bIterator); // antennaPortsCount
5263 
5264  // Deserialize sourceDl-CarrierFreq
5265  bIterator = DeserializeInteger (&n,0,MAX_EARFCN,bIterator);
5267  }
5268  if (handoverPrepInfoOpts[2])
5269  {
5270  // Deserialize rrm-Config
5271  // ...
5272  }
5273  if (handoverPrepInfoOpts[1])
5274  {
5275  // Deserialize as-Context
5276  // ...
5277  }
5278  if (handoverPrepInfoOpts[0])
5279  {
5280  // Deserialize nonCriticalExtension
5281  // ...
5282  }
5283  }
5284  }
5285 
5286  return GetSerializedSize ();
5287 }
5288 
5289 void
5291 {
5293  os << "sourceUeIdentity: " << m_asConfig.sourceUeIdentity << std::endl;
5294  os << "dlBandwidth: " << (int)m_asConfig.sourceMasterInformationBlock.dlBandwidth << std::endl;
5295  os << "systemFrameNumber: " << (int)m_asConfig.sourceMasterInformationBlock.systemFrameNumber << std::endl;
5296  os << "plmnIdentityInfo.plmnIdentity: " << (int) m_asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.plmnIdentityInfo.plmnIdentity << std::endl;
5297  os << "cellAccessRelatedInfo.cellIdentity " << (int)m_asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.cellIdentity << std::endl;
5298  os << "cellAccessRelatedInfo.csgIndication: " << m_asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.csgIndication << std::endl;
5299  os << "cellAccessRelatedInfo.csgIdentity: " << (int)m_asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.csgIdentity << std::endl;
5300  os << "sourceDlCarrierFreq: " << m_asConfig.sourceDlCarrierFreq << std::endl;
5301 }
5302 
5303 void
5305 {
5306  m_asConfig = msg.asConfig;
5307  m_isDataSerialized = false;
5308 }
5309 
5312 {
5314  msg.asConfig = m_asConfig;
5315 
5316  return msg;
5317 }
5318 
5321 {
5322  return m_asConfig;
5323 }
5324 
5326 
5328 {
5329 }
5330 
5332 {
5333 }
5334 
5335 void
5337 {
5339 
5341 
5342  // Serialize RrcConnectionReestablishmentReques sequence:
5343  // no default or optional fields. Extension marker not present.
5344  SerializeSequence (std::bitset<0> (),false);
5345 
5346  // Serialize criticalExtensions choice
5347  // chosen: rrcConnectionReestablishmentRequest-r8
5348  SerializeChoice (2,0,false);
5349 
5350  // Serialize RRCConnectionReestablishmentRequest-r8-IEs sequence
5351  // no default or optional fields. Extension marker not present.
5352  SerializeSequence (std::bitset<0> (),false);
5353 
5354  // Serialize ue-Identity
5355  SerializeSequence (std::bitset<0> (),false);
5356  // Serialize c-RNTI
5357  SerializeBitstring (std::bitset<16> (m_ueIdentity.cRnti));
5358  // Serialize physCellId
5360  // Serialize shortMAC-I
5361  SerializeBitstring (std::bitset<16> (0));
5362 
5363  // Serialize ReestablishmentCause
5364  switch (m_reestablishmentCause)
5365  {
5367  SerializeEnum (4,0);
5368  break;
5370  SerializeEnum (4,1);
5371  break;
5373  SerializeEnum (4,2);
5374  break;
5375  default:
5376  SerializeEnum (4,3);
5377  }
5378 
5379  // Serialize spare
5380  SerializeBitstring (std::bitset<2> (0));
5381 
5382  // Finish serialization
5384 }
5385 
5386 uint32_t
5388 {
5389  std::bitset<0> bitset0;
5390  int n;
5391 
5392  bIterator = DeserializeUlCcchMessage (bIterator);
5393 
5394  // Deserialize RrcConnectionReestablishmentRequest sequence
5395  // 0 optional fields, no extension marker
5396  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5397 
5398  // Deserialize criticalExtensions choice
5399  bIterator = DeserializeChoice (2,false,&n,bIterator);
5400  if ( n == 1)
5401  {
5402  // Deserialize criticalExtensionsFuture
5403  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5404  }
5405  else if ( n == 0)
5406  {
5407  // Deserialize RRCConnectionReestablishmentRequest-r8-IEs
5408  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5409 
5410  // Deserialize ReestabUE-Identity sequence
5411  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5412 
5413  // Deserialize c-RNTI
5414  std::bitset<16> cRnti;
5415  bIterator = DeserializeBitstring (&cRnti,bIterator);
5416  m_ueIdentity.cRnti = cRnti.to_ulong ();
5417 
5418  // Deserialize physCellId
5419  int physCellId;
5420  bIterator = DeserializeInteger (&physCellId,0,503,bIterator);
5421  m_ueIdentity.physCellId = physCellId;
5422 
5423  // Deserialize shortMAC-I
5424  std::bitset<16> shortMacI;
5425  bIterator = DeserializeBitstring (&shortMacI,bIterator);
5426 
5427  // Deserialize ReestablishmentCause
5428  int reestCs;
5429  bIterator = DeserializeEnum (4,&reestCs,bIterator);
5430  switch (reestCs)
5431  {
5432  case 0:
5434  break;
5435  case 1:
5437  break;
5438  case 2:
5440  break;
5441  case 3:
5442  break;
5443  }
5444 
5445  // Deserialize spare
5446  std::bitset<2> spare;
5447  bIterator = DeserializeBitstring (&spare,bIterator);
5448  }
5449 
5450  return GetSerializedSize ();
5451 }
5452 
5453 void
5455 {
5456  os << "ueIdentity.cRnti: " << (int)m_ueIdentity.cRnti << std::endl;
5457  os << "ueIdentity.physCellId: " << (int)m_ueIdentity.physCellId << std::endl;
5458  os << "m_reestablishmentCause: " << m_reestablishmentCause << std::endl;
5459 }
5460 
5461 void
5463 {
5464  m_ueIdentity = msg.ueIdentity;
5466  m_isDataSerialized = false;
5467 }
5468 
5471 {
5473  msg.ueIdentity = m_ueIdentity;
5475 
5476  return msg;
5477 }
5478 
5481 {
5482  return m_ueIdentity;
5483 }
5484 
5487 {
5488  return m_reestablishmentCause;
5489 }
5490 
5492 
5494 {
5495 }
5496 
5498 {
5499 }
5500 
5501 void
5503 {
5505 
5507 
5508  // Serialize RrcConnectionReestablishment sequence:
5509  // no default or optional fields. Extension marker not present.
5510  SerializeSequence (std::bitset<0> (),false);
5511 
5512  // Serialize rrc-TransactionIdentifier
5514 
5515  // Serialize criticalExtensions choice
5516  SerializeChoice (2,0,false);
5517 
5518  // Serialize c1 choice
5519  SerializeChoice (8,0,false);
5520 
5521  // Serialize RRCConnectionReestablishment-r8-IEs sequence
5522  // 1 optional field, no extension marker
5523  SerializeSequence (std::bitset<1> (0),false);
5524 
5525  // Serialize radioResourceConfigDedicated
5527 
5528  // Serialize nextHopChainingCount
5529  SerializeInteger (0,0,7);
5530 
5531  // Finish serialization
5533 }
5534 
5535 uint32_t
5537 {
5538  std::bitset<0> bitset0;
5539  int n;
5540 
5541  bIterator = DeserializeDlCcchMessage (bIterator);
5542 
5543  // Deserialize RrcConnectionReestablishment sequence
5544  // 0 optional fields, no extension marker
5545  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5546 
5547  // Deserialize rrc-TransactionIdentifier
5548  bIterator = DeserializeInteger (&n,0,3,bIterator);
5550 
5551  // Deserialize criticalExtensions choice
5552  int criticalExtensionsChoice;
5553  bIterator = DeserializeChoice (2,false,&criticalExtensionsChoice,bIterator);
5554  if (criticalExtensionsChoice == 1)
5555  {
5556  // Deserialize criticalExtensionsFuture
5557  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5558  }
5559  else if (criticalExtensionsChoice == 0)
5560  {
5561  // Deserialize c1
5562  int c1;
5563  bIterator = DeserializeChoice (8,false,&c1,bIterator);
5564  if (c1 > 0)
5565  {
5566  bIterator = DeserializeNull (bIterator);
5567  }
5568  else if (c1 == 0)
5569  {
5570  // Deserialize rrcConnectionReestablishment-r8
5571  // 1 optional field
5572  std::bitset<1> nonCriticalExtensionPresent;
5573  bIterator = DeserializeSequence (&nonCriticalExtensionPresent,false,bIterator);
5574 
5575  // Deserialize RadioResourceConfigDedicated
5577 
5578  // Deserialize nextHopChainingCount
5579  bIterator = DeserializeInteger (&n,0,7,bIterator);
5580  }
5581  }
5582 
5583  return GetSerializedSize ();
5584 }
5585 
5586 void
5588 {
5589  os << "rrcTransactionIdentifier: " << (int)m_rrcTransactionIdentifier << std::endl;
5590  os << "RadioResourceConfigDedicated: " << std::endl;
5592 }
5593 
5594 void
5596 {
5599  m_isDataSerialized = false;
5600 }
5601 
5604 {
5608  return msg;
5609 }
5610 
5611 uint8_t
5613 {
5615 }
5616 
5619 {
5621 }
5622 
5624 
5626 {
5627 }
5628 
5629 void
5631 {
5633 
5634  // Serialize DCCH message
5636 
5637  // Serialize RrcConnectionReestablishmentComplete sequence:
5638  // no default or optional fields. Extension marker not present.
5639  SerializeSequence (std::bitset<0> (),false);
5640 
5641  // Serialize rrc-TransactionIdentifier
5643 
5644  // Serialize criticalExtensions choice
5645  SerializeChoice (2,0,false);
5646 
5647  // Serialize rrcConnectionReestablishmentComplete-r8 sequence
5648  // 1 optional field (not present), no extension marker.
5649  SerializeSequence (std::bitset<1> (0),false);
5650 
5651  // Finish serialization
5653 }
5654 
5655 uint32_t
5657 {
5658  std::bitset<0> bitset0;
5659  int n;
5660 
5661  bIterator = DeserializeUlDcchMessage (bIterator);
5662 
5663  // Deserialize RrcConnectionReestablishmentComplete sequence
5664  // 0 optional fields, no extension marker
5665  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5666 
5667  // Deserialize rrc-TransactionIdentifier
5668  bIterator = DeserializeInteger (&n,0,3,bIterator);
5670 
5671  // Deserialize criticalExtensions choice
5672  int criticalExtensionsChoice;
5673  bIterator = DeserializeChoice (2,false,&criticalExtensionsChoice,bIterator);
5674  if (criticalExtensionsChoice == 1)
5675  {
5676  // Deserialize criticalExtensionsFuture
5677  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5678  }
5679  else if (criticalExtensionsChoice == 0)
5680  {
5681  // Deserialize rrcConnectionReestablishmentComplete-r8
5682  std::bitset<1> opts;
5683  bIterator = DeserializeSequence (&opts,false,bIterator);
5684  if (opts[0])
5685  {
5686  // Deserialize RRCConnectionReestablishmentComplete-v920-IEs
5687  // ...
5688  }
5689  }
5690 
5691  return GetSerializedSize ();
5692 }
5693 
5694 void
5696 {
5697  os << "rrcTransactionIdentifier: " << (int)m_rrcTransactionIdentifier << std::endl;
5698 }
5699 
5700 void
5702 {
5704  m_isDataSerialized = false;
5705 }
5706 
5709 {
5712  return msg;
5713 }
5714 
5715 uint8_t
5717 {
5719 }
5720 
5722 
5724 {
5725 }
5726 
5728 {
5729 }
5730 
5731 void
5733 {
5735 
5736  // Serialize CCCH message
5738 
5739  // Serialize RrcConnectionReestablishmentReject sequence:
5740  // no default or optional fields. Extension marker not present.
5741  SerializeSequence (std::bitset<0> (),false);
5742 
5743  // Serialize criticalExtensions choice
5744  SerializeChoice (2,0,false);
5745 
5746  // Serialize RRCConnectionReestablishmentReject-r8-IEs sequence
5747  // 1 optional field (not present), no extension marker.
5748  SerializeSequence (std::bitset<1> (0),false);
5749 
5750  // Finish serialization
5752 }
5753 
5754 uint32_t
5756 {
5757  std::bitset<0> bitset0;
5758 
5759  bIterator = DeserializeDlCcchMessage (bIterator);
5760 
5761  // Deserialize RrcConnectionReestablishmentReject sequence
5762  // 0 optional fields, no extension marker
5763  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5764 
5765  // Deserialize criticalExtensions choice
5766  int criticalExtensionsChoice;
5767  bIterator = DeserializeChoice (2,false,&criticalExtensionsChoice,bIterator);
5768  if (criticalExtensionsChoice == 1)
5769  {
5770  // Deserialize criticalExtensionsFuture
5771  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5772  }
5773  else if (criticalExtensionsChoice == 0)
5774  {
5775  // Deserialize rrcConnectionReestablishmentReject-r8
5776  std::bitset<1> opts;
5777  bIterator = DeserializeSequence (&opts,false,bIterator);
5778  if (opts[0])
5779  {
5780  // Deserialize RRCConnectionReestablishmentReject-v8a0-IEs
5781  // ...
5782  }
5783  }
5784 
5785  return GetSerializedSize ();
5786 }
5787 
5788 void
5790 {
5791 }
5792 
5793 void
5795 {
5797  m_isDataSerialized = false;
5798 }
5799 
5802 {
5804 }
5805 
5807 
5809 {
5810 }
5811 
5813 {
5814 }
5815 
5816 void
5818 {
5820 
5821  // Serialize DCCH message
5823 
5824  // Serialize RrcConnectionRelease sequence:
5825  // no default or optional fields. Extension marker not present.
5826  SerializeSequence (std::bitset<0> (),false);
5827 
5828  // Serialize rrc-TransactionIdentifier
5830 
5831  // Serialize criticalExtensions choice
5832  SerializeChoice (2,0,false);
5833 
5834  // Serialize c1 choice
5835  SerializeChoice (4,0,false);
5836 
5837  // Serialize RRCConnectionRelease-r8-IEs sequence
5838  // 3 optional field (not present), no extension marker.
5839  SerializeSequence (std::bitset<3> (0),false);
5840 
5841  // Serialize ReleaseCause
5842  SerializeEnum (4,1);
5843 
5844  // Finish serialization
5846 }
5847 
5848 uint32_t
5850 {
5851  std::bitset<0> bitset0;
5852  int n;
5853 
5854  bIterator = DeserializeDlDcchMessage (bIterator);
5855 
5856  // Deserialize RrcConnectionRelease sequence
5857  // 0 optional fields, no extension marker
5858  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5859 
5860  // Deserialize rrc-TransactionIdentifier
5861  bIterator = DeserializeInteger (&n,0,3,bIterator);
5863 
5864  // Deserialize criticalExtensions choice
5865  int criticalExtensionsChoice;
5866  bIterator = DeserializeChoice (2,false,&criticalExtensionsChoice,bIterator);
5867  if (criticalExtensionsChoice == 1)
5868  {
5869  // Deserialize criticalExtensionsFuture
5870  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5871  }
5872  else if (criticalExtensionsChoice == 0)
5873  {
5874  // Deserialize c1
5875  int c1Choice;
5876  bIterator = DeserializeChoice (4,false,&c1Choice,bIterator);
5877 
5878  if (c1Choice == 0)
5879  {
5880  // Deserialize RRCConnectionRelease-r8-IEs
5881  std::bitset<3> opts;
5882  bIterator = DeserializeSequence (&opts,false,bIterator);
5883 
5884  // Deserialize releaseCause
5885  bIterator = DeserializeEnum (4,&n,bIterator);
5886 
5887  if (opts[2])
5888  {
5889  // Deserialize redirectedCarrierInfo
5890  // ...
5891  }
5892  if (opts[1])
5893  {
5894  // Deserialize idleModeMobilityControlInfo
5895  // ...
5896  }
5897  if (opts[0])
5898  {
5899  // Deserialize nonCriticalExtension
5900  // ...
5901  }
5902  }
5903 
5904  else
5905  {
5906  bIterator = DeserializeNull (bIterator);
5907  }
5908  }
5909 
5910  return GetSerializedSize ();
5911 }
5912 
5913 void
5914 RrcConnectionReleaseHeader::Print (std::ostream &os) const
5915 {
5916 }
5917 
5918 void
5920 {
5921  m_rrcConnectionRelease = msg;
5922  m_isDataSerialized = false;
5923 }
5924 
5927 {
5928  return m_rrcConnectionRelease;
5929 }
5930 
5932 
5934 {
5935 }
5936 
5938 {
5939 }
5940 
5941 void
5943 {
5945 
5946  // Serialize CCCH message
5948 
5949  // Serialize RrcConnectionReject sequence:
5950  // no default or optional fields. Extension marker not present.
5951  SerializeSequence (std::bitset<0> (),false);
5952 
5953  // Serialize criticalExtensions choice
5954  SerializeChoice (2,0,false);
5955 
5956  // Serialize c1 choice
5957  SerializeChoice (4,0,false);
5958 
5959  // Serialize rrcConnectionReject-r8 sequence
5960  // 1 optional field (not present), no extension marker.
5961  SerializeSequence (std::bitset<1> (0),false);
5962 
5963  // Serialize waitTime
5965 
5966  // Finish serialization
5968 }
5969 
5970 uint32_t
5972 {
5973  std::bitset<0> bitset0;
5974  int n;
5975 
5976  bIterator = DeserializeDlCcchMessage (bIterator);
5977 
5978  // Deserialize RrcConnectionReject sequence
5979  // 0 optional fields, no extension marker
5980  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5981 
5982  // Deserialize criticalExtensions choice
5983  int criticalExtensionsChoice;
5984  bIterator = DeserializeChoice (2,false,&criticalExtensionsChoice,bIterator);
5985  if (criticalExtensionsChoice == 1)
5986  {
5987  // Deserialize criticalExtensionsFuture
5988  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5989  }
5990  else if (criticalExtensionsChoice == 0)
5991  {
5992  // Deserialize c1 choice
5993  int c1Choice;
5994  bIterator = DeserializeChoice (4,false,&c1Choice,bIterator);
5995 
5996  if (c1Choice > 0)
5997  {
5998  bIterator = DeserializeNull (bIterator);
5999  }
6000  else if (c1Choice == 0)
6001  {
6002  // Deserialize rrcConnectionReject-r8
6003  std::bitset<1> opts;
6004  bIterator = DeserializeSequence (&opts,false,bIterator);
6005 
6006  bIterator = DeserializeInteger (&n,1,16,bIterator);
6008 
6009  if (opts[0])
6010  {
6011  // Deserialize RRCConnectionReject-v8a0-IEs
6012  // ...
6013  }
6014  }
6015  }
6016 
6017  return GetSerializedSize ();
6018 }
6019 
6020 void
6021 RrcConnectionRejectHeader::Print (std::ostream &os) const
6022 {
6023  os << "wait time: " << (int)m_rrcConnectionReject.waitTime << std::endl;
6024 }
6025 
6026 void
6028 {
6029  m_rrcConnectionReject = msg;
6030  m_isDataSerialized = false;
6031 }
6032 
6035 {
6036  return m_rrcConnectionReject;
6037 }
6038 
6040 
6042 {
6043 }
6044 
6046 {
6047 }
6048 
6049 void
6051 {
6053 
6054  // Serialize DCCH message
6056 
6057  // Serialize MeasurementReport sequence:
6058  // no default or optional fields. Extension marker not present.
6059  SerializeSequence (std::bitset<0> (),false);
6060 
6061  // Serialize criticalExtensions choice:
6062  // c1 chosen
6063  SerializeChoice (2,0,false);
6064 
6065  // Serialize c1 choice
6066  // measurementReport-r8 chosen
6067  SerializeChoice (8,0,false);
6068 
6069  // Serialize MeasurementReport-r8-IEs sequence:
6070  // 1 optional fields, not present. Extension marker not present.
6071  SerializeSequence (std::bitset<1> (0),false);
6072 
6073  // Serialize measResults
6075 
6076  // Finish serialization
6078 }
6079 
6080 uint32_t
6082 {
6083  std::bitset<0> bitset0;
6084 
6085  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6086 
6087  bIterator = DeserializeUlDcchMessage (bIterator);
6088 
6089  int criticalExtensionsChoice;
6090  bIterator = DeserializeChoice (2,false,&criticalExtensionsChoice,bIterator);
6091 
6092  if (criticalExtensionsChoice == 1)
6093  {
6094  // Deserialize criticalExtensionsFuture
6095  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6096  }
6097  else if (criticalExtensionsChoice == 0)
6098  {
6099  // Deserialize c1
6100  int c1Choice;
6101  bIterator = DeserializeChoice (8,false,&c1Choice,bIterator);
6102 
6103  if (c1Choice > 0)
6104  {
6105  bIterator = DeserializeNull (bIterator);
6106  }
6107  else
6108  {
6109  // Deserialize measurementReport-r8
6110  std::bitset<1> isNonCriticalExtensionPresent;
6111  bIterator = DeserializeSequence (&isNonCriticalExtensionPresent,false,bIterator);
6112 
6113  // Deserialize measResults
6114  bIterator = DeserializeMeasResults (&m_measurementReport.measResults, bIterator);
6115 
6116  if (isNonCriticalExtensionPresent[0])
6117  {
6118  // Deserialize nonCriticalExtension MeasurementReport-v8a0-IEs
6119  // ...
6120  }
6121 
6122  }
6123  }
6124 
6125  return GetSerializedSize ();
6126 }
6127 
6128 void
6129 MeasurementReportHeader::Print (std::ostream &os) const
6130 {
6131  os << "measId = " << (int)m_measurementReport.measResults.measId << std::endl;
6132  os << "rsrpResult = " << (int)m_measurementReport.measResults.rsrpResult << std::endl;
6133  os << "rsrqResult = " << (int)m_measurementReport.measResults.rsrqResult << std::endl;
6134  os << "haveMeasResultNeighCells = " << (int)m_measurementReport.measResults.haveMeasResultNeighCells << std::endl;
6135 
6137  {
6138  std::list<LteRrcSap::MeasResultEutra> measResultListEutra = m_measurementReport.measResults.measResultListEutra;
6139  std::list<LteRrcSap::MeasResultEutra>::iterator it = measResultListEutra.begin ();
6140  for (; it != measResultListEutra.end (); it++)
6141  {
6142  os << " physCellId =" << (int) it->physCellId << std::endl;
6143  os << " haveCgiInfo =" << it->haveCgiInfo << std::endl;
6144  if (it->haveCgiInfo)
6145  {
6146  os << " plmnIdentity = " << (int) it->cgiInfo.plmnIdentity << std::endl;
6147  os << " cellIdentity = " << (int) it->cgiInfo.cellIdentity << std::endl;
6148  os << " trackingAreaCode = " << (int) it->cgiInfo.trackingAreaCode << std::endl;
6149  os << " havePlmnIdentityList = " << !it->cgiInfo.plmnIdentityList.empty () << std::endl;
6150  if (!it->cgiInfo.plmnIdentityList.empty ())
6151  {
6152  for (std::list<uint32_t>::iterator it2 = it->cgiInfo.plmnIdentityList.begin (); it2 != it->cgiInfo.plmnIdentityList.begin (); it2++)
6153  {
6154  os << " plmnId : " << *it2 << std::endl;
6155  }
6156  }
6157  }
6158 
6159  os << " haveRsrpResult =" << it->haveRsrpResult << std::endl;
6160  if (it->haveRsrpResult)
6161  {
6162  os << " rsrpResult =" << (int) it->rsrpResult << std::endl;
6163  }
6164 
6165  os << " haveRsrqResult =" << it->haveRsrqResult << std::endl;
6166  if (it->haveRsrqResult)
6167  {
6168  os << " rsrqResult =" << (int) it->rsrqResult << std::endl;
6169  }
6170 
6171  }
6172  }
6173 }
6174 
6175 void
6177 {
6178  m_measurementReport = msg;
6179  m_isDataSerialized = false;
6180 }
6181 
6184 {
6186  msg = m_measurementReport;
6187  return msg;
6188 }
6189 
6192 {
6193 }
6194 
6196 {
6197 }
6198 
6199 uint32_t
6201 {
6202  DeserializeUlDcchMessage (bIterator);
6203  return 1;
6204 }
6205 
6206 void
6207 RrcUlDcchMessage::Print (std::ostream &os) const
6208 {
6209  std::cout << "UL DCCH MSG TYPE: " << m_messageType << std::endl;
6210 }
6211 
6212 void
6214 {
6216 }
6217 
6220 {
6221  std::bitset<0> bitset0;
6222  int n;
6223 
6224  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6225  bIterator = DeserializeChoice (2,false,&n,bIterator);
6226  if (n == 1)
6227  {
6228  // Deserialize messageClassExtension
6229  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6230  m_messageType = -1;
6231  }
6232  else if (n == 0)
6233  {
6234  // Deserialize c1
6235  bIterator = DeserializeChoice (16,false,&m_messageType,bIterator);
6236  }
6237 
6238  return bIterator;
6239 }
6240 
6241 void
6243 {
6244  SerializeSequence (std::bitset<0> (),false);
6245  // Choose c1
6246  SerializeChoice (2,0,false);
6247  // Choose message type
6248  SerializeChoice (16,messageType,false);
6249 }
6250 
6253 {
6254 }
6255 
6257 {
6258 }
6259 
6260 uint32_t
6262 {
6263  DeserializeDlDcchMessage (bIterator);
6264  return 1;
6265 }
6266 
6267 void
6268 RrcDlDcchMessage::Print (std::ostream &os) const
6269 {
6270  std::cout << "DL DCCH MSG TYPE: " << m_messageType << std::endl;
6271 }
6272 
6273 void
6275 {
6277 }
6278 
6281 {
6282  std::bitset<0> bitset0;
6283  int n;
6284 
6285  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6286  bIterator = DeserializeChoice (2,false,&n,bIterator);
6287  if (n == 1)
6288  {
6289  // Deserialize messageClassExtension
6290  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6291  m_messageType = -1;
6292  }
6293  else if (n == 0)
6294  {
6295  // Deserialize c1
6296  bIterator = DeserializeChoice (16,false,&m_messageType,bIterator);
6297  }
6298 
6299  return bIterator;
6300 }
6301 
6302 void
6304 {
6305  SerializeSequence (std::bitset<0> (),false);
6306  // Choose c1
6307  SerializeChoice (2,0,false);
6308  // Choose message type
6309  SerializeChoice (16,messageType,false);
6310 }
6311 
6314 {
6315 }
6316 
6318 {
6319 }
6320 
6321 uint32_t
6323 {
6324  DeserializeUlCcchMessage (bIterator);
6325  return 1;
6326 }
6327 
6328 void
6329 RrcUlCcchMessage::Print (std::ostream &os) const
6330 {
6331  std::cout << "UL CCCH MSG TYPE: " << m_messageType << std::endl;
6332 }
6333 
6334 void
6336 {
6338 }
6339 
6342 {
6343  std::bitset<0> bitset0;
6344  int n;
6345 
6346  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6347  bIterator = DeserializeChoice (2,false,&n,bIterator);
6348  if (n == 1)
6349  {
6350  // Deserialize messageClassExtension
6351  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6352  m_messageType = -1;
6353  }
6354  else if (n == 0)
6355  {
6356  // Deserialize c1
6357  bIterator = DeserializeChoice (2,false,&m_messageType,bIterator);
6358  }
6359 
6360  return bIterator;
6361 }
6362 
6363 void
6365 {
6366  SerializeSequence (std::bitset<0> (),false);
6367  // Choose c1
6368  SerializeChoice (2,0,false);
6369  // Choose message type
6370  SerializeChoice (2,messageType,false);
6371 }
6372 
6375 {
6376 }
6377 
6379 {
6380 }
6381 
6382 uint32_t
6384 {
6385  DeserializeDlCcchMessage (bIterator);
6386  return 1;
6387 }
6388 
6389 void
6390 RrcDlCcchMessage::Print (std::ostream &os) const
6391 {
6392  std::cout << "DL CCCH MSG TYPE: " << m_messageType << std::endl;
6393 }
6394 
6395 void
6397 {
6399 }
6400 
6403 {
6404  std::bitset<0> bitset0;
6405  int n;
6406 
6407  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6408  bIterator = DeserializeChoice (2,false,&n,bIterator);
6409  if (n == 1)
6410  {
6411  // Deserialize messageClassExtension
6412  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6413  m_messageType = -1;
6414  }
6415  else if (n == 0)
6416  {
6417  // Deserialize c1
6418  bIterator = DeserializeChoice (4,false,&m_messageType,bIterator);
6419  }
6420 
6421  return bIterator;
6422 }
6423 
6424 void
6426 {
6427  SerializeSequence (std::bitset<0> (),false);
6428  // Choose c1
6429  SerializeChoice (2,0,false);
6430  // Choose message type
6431  SerializeChoice (4,messageType,false);
6432 }
6433 
6434 } // namespace ns3
6435 
#define MAX_OBJECT_ID
Protocol header serialization and deserialization.
Definition: header.h:42
void SerializeSystemInformationBlockType1(LteRrcSap::SystemInformationBlockType1 systemInformationBlockType1) const
Buffer::Iterator DeserializeSystemInformationBlockType1(LteRrcSap::SystemInformationBlockType1 *systemInformationBlockType1, Buffer::Iterator bIterator)
bool GetHaveMobilityControlInfo()
Getter for m_haveMobilityControlInfo.
SystemInformationBlockType2 sourceSystemInformationBlockType2
Definition: lte-rrc-sap.h:553
#define MAX_CELL_REPORT
LteRrcSap::ReestablishmentCause GetReestablishmentCause() const
Getter for m_reestablishmentCause.
Buffer::Iterator DeserializeRadioResourceConfigCommonSib(LteRrcSap::RadioResourceConfigCommonSib *radioResourceConfigCommonSib, Buffer::Iterator bIterator)
void Print(std::ostream &os) const
void SerializeDlDcchMessage(int msgType) const
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
PdschConfigDedicated pdschConfigDedicated
Definition: lte-rrc-sap.h:204
uint32_t Deserialize(Buffer::Iterator bIterator)
#define MAX_MEAS_ID
Buffer::Iterator DeserializeUlCcchMessage(Buffer::Iterator bIterator)
std::list< MeasObjectToAddMod > measObjectToAddModList
Definition: lte-rrc-sap.h:463
Buffer::Iterator DeserializeLogicalChannelConfig(LteRrcSap::LogicalChannelConfig *logicalChannelConfig, Buffer::Iterator bIterator)
uint32_t Deserialize(Buffer::Iterator bIterator)
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
SoundingRsUlConfigDedicated soundingRsUlConfigDedicated
Definition: lte-rrc-sap.h:200
void SerializeMeasConfig(LteRrcSap::MeasConfig measConfig) const
uint8_t hysteresis
Parameter used within the entry and leave condition of an event triggered reporting condition...
Definition: lte-rrc-sap.h:349
LteRrcSap::RadioResourceConfigDedicated GetRadioResourceConfigDedicated()
Getter for m_radioResourceConfigDedicated.
std::list< CellsToAddMod > cellsToAddModList
Definition: lte-rrc-sap.h:294
void SerializeSequenceOf(int numElems, int nMax, int nMin) const
Serialize a Sequence.
QuantityConfig quantityConfig
Definition: lte-rrc-sap.h:469
Buffer::Iterator DeserializeChoice(int numOptions, bool isExtensionMarkerPresent, int *selectedOption, Buffer::Iterator bIterator)
Deserialize a Choice (set of options)
std::list< uint8_t > reportConfigToRemoveList
Definition: lte-rrc-sap.h:464
void SerializeRadioResourceConfigCommon(LteRrcSap::RadioResourceConfigCommon radioResourceConfigCommon) const
enum ns3::LteRrcSap::ReportConfigEutra::@75 reportQuantity
The quantities to be included in the measurement report, always assumed to be BOTH.
std::list< MeasResultEutra > measResultListEutra
Definition: lte-rrc-sap.h:582
enum ns3::RrcConnectionRequestHeader::@65 m_establishmentCause
ThresholdEutra threshold1
Threshold for event A1, A2, A4, and A5.
Definition: lte-rrc-sap.h:339
automatically resized byte buffer
Definition: buffer.h:92
Buffer::Iterator DeserializeNull(Buffer::Iterator bIterator)
Deserialize nothing (null op)
Buffer::Iterator DeserializeDrbToAddModList(std::list< LteRrcSap::DrbToAddMod > *drbToAddModLis, Buffer::Iterator bIterator)
enum ns3::LteRrcSap::SpeedStatePars::@79 type
RSRP is used for the threshold.
Definition: lte-rrc-sap.h:314
void SetMessage(LteRrcSap::RrcConnectionRequest msg)
Receives a RrcConnectionRequest IE and stores the contents into the class attributes.
void SetMessage(LteRrcSap::RrcConnectionSetupCompleted msg)
Receives a RrcConnectionSetupCompleted IE and stores the contents into the class attributes.
Buffer::Iterator DeserializeMeasConfig(LteRrcSap::MeasConfig *measConfig, Buffer::Iterator bIterator)
enum ns3::LteRrcSap::ReportConfigEutra::@72 eventId
Choice of E-UTRA event triggered reporting criteria.
std::list< uint8_t > GetDrbToReleaseList() const
Gets m_radioResourceConfigDedicated.drbToReleaseList.
void SetMessage(LteRrcSap::RrcConnectionReestablishmentRequest msg)
Receives a RrcConnectionReestablishmentRequest IE and stores the contents into the class attributes...
uint8_t GetRrcTransactionIdentifier() const
Getter for m_rrcTransactionIdentifier.
static TypeId GetTypeId(void)
uint32_t Deserialize(Buffer::Iterator bIterator)
std::list< SrbToAddMod > srbToAddModList
Definition: lte-rrc-sap.h:253
LteRrcSap::RrcConnectionReestablishmentReject m_rrcConnectionReestablishmentReject
LteRrcSap::MobilityControlInfo m_mobilityControlInfo
RadioResourceConfigDedicated radioResourceConfigDedicated
Definition: lte-rrc-sap.h:611
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:201
void SerializeRadioResourceConfigDedicated(LteRrcSap::RadioResourceConfigDedicated radioResourceConfigDedicated) const
void Print(std::ostream &os) const
void SerializeDlCcchMessage(int msgType) const
std::list< uint8_t > measObjectToRemoveList
Definition: lte-rrc-sap.h:462
uint32_t Deserialize(Buffer::Iterator bIterator)
void SetMessage(LteRrcSap::RrcConnectionReestablishmentComplete msg)
Receives a RrcConnectionReestablishmentComplete IE and stores the contents into the class attributes...
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
void SerializeBoolean(bool value) const
Serialize a bool.
void SetMessage(LteRrcSap::RrcConnectionReestablishment msg)
Receives a RrcConnectionReestablishment IE and stores the contents into the class attributes...
#define NS_FATAL_ERROR(msg)
Fatal error handling.
Definition: fatal-error.h:100
LteRrcSap::ReestablishmentCause m_reestablishmentCause
enum ns3::LteRrcSap::ReportConfigEutra::@76 reportInterval
Indicates the interval between periodical reports.
void SerializeRadioResourceConfigCommonSib(LteRrcSap::RadioResourceConfigCommonSib radioResourceConfigCommonSib) const
LteRrcSap::MeasConfig GetMeasConfig()
Getter for m_measConfig.
Event A2: Serving becomes worse than absolute threshold.
Definition: lte-rrc-sap.h:332
std::list< LteRrcSap::SrbToAddMod > GetSrbToAddModList() const
Gets m_radioResourceConfigDedicated.srbToAddModList.
void Print(std::ostream &os) const
Buffer::Iterator DeserializePhysicalConfigDedicated(LteRrcSap::PhysicalConfigDedicated *physicalConfigDedicated, Buffer::Iterator bIterator)
LteRrcSap::RrcConnectionReestablishment GetMessage() const
Returns a RrcConnectionReestablishment IE from the values in the class attributes.
RachConfigDedicated rachConfigDedicated
Definition: lte-rrc-sap.h:506
#define MAX_CELL_MEAS
Buffer::Iterator DeserializeSequence(std::bitset< N > *optionalOrDefaultMask, bool isExtensionMarkerPresent, Buffer::Iterator bIterator)
Deserialize a sequence.
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
uint32_t Deserialize(Buffer::Iterator bIterator)
LteRrcSap::RadioResourceConfigDedicated m_radioResourceConfigDedicated
LteRrcSap::RrcConnectionRelease GetMessage() const
Returns a RrcConnectionRelease IE from the values in the class attributes.
bool m_isDataSerialized
true if data is serialized
RSRQ is used for the threshold.
Definition: lte-rrc-sap.h:315
LteRrcSap::RrcConnectionReestablishmentRequest GetMessage() const
Returns a RrcConnectionReestablishmentRequest IE from the values in the class attributes.
uint32_t Deserialize(Buffer::Iterator bIterator)
LteRrcSap::HandoverPreparationInfo GetMessage() const
Returns a HandoverPreparationInfo IE from the values in the class attributes.
iterator in a Buffer instance
Definition: buffer.h:98
Buffer::Iterator DeserializeDlCcchMessage(Buffer::Iterator bIterator)
Buffer::Iterator DeserializeRadioResourceConfigDedicated(LteRrcSap::RadioResourceConfigDedicated *radioResourceConfigDedicated, Buffer::Iterator bIterator)
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
std::list< BlackCellsToAddMod > blackCellsToAddModList
Definition: lte-rrc-sap.h:296
Buffer::Iterator DeserializeDlDcchMessage(Buffer::Iterator bIterator)
SystemInformationBlockType1 sourceSystemInformationBlockType1
Definition: lte-rrc-sap.h:552
LteRrcSap::MeasurementReport m_measurementReport
void SetMessage(LteRrcSap::RrcConnectionRelease msg)
Receives a RrcConnectionRelease IE and stores the contents into the class attributes.
Buffer::Iterator DeserializePlmnIdentity(uint32_t *plmnId, Buffer::Iterator bIterator)
void SerializeLogicalChannelConfig(LteRrcSap::LogicalChannelConfig logicalChannelConfig) const
uint32_t Deserialize(Buffer::Iterator bIterator)
Event A5: PCell becomes worse than absolute threshold1 AND Neighbour becomes better than another abso...
Definition: lte-rrc-sap.h:335
Buffer::Iterator DeserializeRachConfigCommon(LteRrcSap::RachConfigCommon *rachConfigCommon, Buffer::Iterator bIterator)
#define MAX_SIB
void SerializeNull() const
Serialize nothing (null op)
Reference Signal Received Quality.
Definition: lte-rrc-sap.h:363
Buffer::Iterator DeserializeBoolean(bool *value, Buffer::Iterator bIterator)
Deserialize a boolean.
void Print(std::ostream &os) const
void SetMessage(LteRrcSap::RrcConnectionReestablishmentReject msg)
Receives a RrcConnectionReestablishmentReject IE and stores the contents into the class attributes...
uint32_t Deserialize(Buffer::Iterator bIterator)
std::list< LteRrcSap::DrbToAddMod > GetDrbToAddModList() const
Gets m_radioResourceConfigDedicated.drbToAddModList.
LogicalChannelConfig logicalChannelConfig
Definition: lte-rrc-sap.h:211
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
Buffer::Iterator DeserializeSystemInformationBlockType2(LteRrcSap::SystemInformationBlockType2 *systemInformationBlockType2, Buffer::Iterator bIterator)
LteRrcSap::RrcConnectionRelease m_rrcConnectionRelease
uint32_t GetSerializedSize(void) const
Buffer::Iterator DeserializeEnum(int numElems, int *selectedElem, Buffer::Iterator bIterator)
Deserialize an Enum.
uint8_t GetRrcTransactionIdentifier() const
Getter for m_rrcTransactionIdentifier.
uint32_t Deserialize(Buffer::Iterator bIterator)
std::list< uint32_t > plmnIdentityList
Definition: lte-rrc-sap.h:562
LteRrcSap::RrcConnectionReestablishmentReject GetMessage() const
Returns a RrcConnectionReestablishmentReject IE from the values in the class attributes.
void SerializeUlDcchMessage(int msgType) const
Buffer::Iterator DeserializeInteger(int *n, int nmin, int nmax, Buffer::Iterator bIterator)
Deserialize an integer.
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
enum ns3::LteRrcSap::MeasGapConfig::@78 gapOffsetChoice
void SerializeRachConfigCommon(LteRrcSap::RachConfigCommon rachConfigCommon) const
void Print(std::ostream &os) const
std::list< MeasIdToAddMod > measIdToAddModList
Definition: lte-rrc-sap.h:467
Event A4: Neighbour becomes better than absolute threshold.
Definition: lte-rrc-sap.h:334
Buffer m_serializationResult
serialization result
PhysicalConfigDedicated physicalConfigDedicated
Definition: lte-rrc-sap.h:257
void SetMessage(LteRrcSap::RrcConnectionReject msg)
Receives a RrcConnectionReject IE and stores the contents into the class attributes.
void Print(std::ostream &os) const
enum ns3::LteRrcSap::ReportConfigEutra::@71 triggerType
uint32_t Deserialize(Buffer::Iterator bIterator)
void Print(std::ostream &os) const
Buffer::Iterator DeserializeMeasResults(LteRrcSap::MeasResults *measResults, Buffer::Iterator bIterator)
MobilityStateParameters mobilityStateParameters
Definition: lte-rrc-sap.h:456
enum ns3::LteRrcSap::SoundingRsUlConfigDedicated::@68 type
LteRrcSap::PhysicalConfigDedicated GetPhysicalConfigDedicated() const
Gets m_radioResourceConfigDedicated.physicalConfigDedicated.
LteRrcSap::RadioResourceConfigDedicated GetRadioResourceConfigDedicated() const
Getter for m_radioResourceConfigDedicated attribute.
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
RadioResourceConfigDedicated radioResourceConfigDedicated
Definition: lte-rrc-sap.h:595
This class extends Asn1Header functions, adding serialization/deserialization of some Information ele...
void SetMessage(LteRrcSap::MeasurementReport msg)
Receives a MeasurementReport IE and stores the contents into the class attributes.
void SerializeInteger(int n, int nmin, int nmax) const
Serialize an Integer.
uint8_t GetRrcTransactionIdentifier() const
Getter for m_rrcTransactionIdentifier attribute.
LteRrcSap::RadioResourceConfigDedicated m_radioResourceConfigDedicated
void Print(std::ostream &os) const
RadioResourceConfigDedicated sourceRadioResourceConfig
Definition: lte-rrc-sap.h:549
void SetMessage(LteRrcSap::RrcConnectionReconfigurationCompleted msg)
Receives a RrcConnectionReconfigurationCompleted IE and stores the contents into the class attributes...
uint32_t Deserialize(Buffer::Iterator bIterator)
LteRrcSap::RrcConnectionRequest GetMessage() const
Returns a RrcConnectionRequest IE from the values in the class attributes.
bool reportOnLeave
Indicates whether or not the UE shall initiate the measurement reporting procedure when the leaving c...
Definition: lte-rrc-sap.h:343
void Print(std::ostream &os) const
Buffer::Iterator DeserializeQoffsetRange(int8_t *qOffsetRange, Buffer::Iterator bIterator)
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
enum ns3::LteRrcSap::MeasGapConfig::@77 type
void Print(std::ostream &os) const
enum ns3::LteRrcSap::ThresholdEutra::@70 choice
uint32_t Deserialize(Buffer::Iterator bIterator)
uint8_t maxReportCells
Maximum number of cells, excluding the serving cell, to be included in the measurement report...
Definition: lte-rrc-sap.h:373
void Print(std::ostream &os) const
std::list< uint8_t > GetDrbToReleaseList() const
Gets m_radioResourceConfigDedicated.drbToReleaseList.
RadioResourceConfigDedicated radioResourceConfigDedicated
Definition: lte-rrc-sap.h:629
LteRrcSap::MeasurementReport GetMessage() const
Returns a MeasurementReport IE from the values in the class attributes.
Buffer::Iterator DeserializeRadioResourceConfigCommon(LteRrcSap::RadioResourceConfigCommon *radioResourceConfigCommon, Buffer::Iterator bIterator)
MeasGapConfig measGapConfig
Definition: lte-rrc-sap.h:471
void SerializeUlCcchMessage(int msgType) const
uint8_t range
Value range used in RSRP/RSRQ threshold.
Definition: lte-rrc-sap.h:317
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
bool GetHaveMeasConfig()
Getter for m_haveMeasConfig.
uint8_t reportAmount
Number of measurement reports applicable, always assumed to be infinite.
Definition: lte-rrc-sap.h:396
LteRrcSap::RrcConnectionSetup GetMessage() const
Returns a RrcConnectionSetup IE from the values in the class attributes.
RadioResourceConfigCommonSib radioResourceConfigCommon
Definition: lte-rrc-sap.h:536
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
Event A3: Neighbour becomes amount of offset better than PCell.
Definition: lte-rrc-sap.h:333
void SetMessage(LteRrcSap::HandoverPreparationInfo msg)
Receives a HandoverPreparationInfo IE and stores the contents into the class attributes.
RadioResourceConfigCommon radioResourceConfigCommon
Definition: lte-rrc-sap.h:504
#define MAX_REPORT_CONFIG_ID
void SerializeBitstring(std::bitset< N > bitstring) const
Serialize a bitstring.
LteRrcSap::AsConfig GetAsConfig() const
Getter for m_asConfig.
CarrierBandwidthEutra carrierBandwidth
Definition: lte-rrc-sap.h:502
std::list< LteRrcSap::DrbToAddMod > GetDrbToAddModList() const
Gets m_radioResourceConfigDedicated.drbToAddModList.
int8_t a3Offset
Offset value for Event A3. An integer between -30 and 30. The actual value is (value * 0...
Definition: lte-rrc-sap.h:346
void SerializeMeasResults(LteRrcSap::MeasResults measResults) const
Reference Signal Received Power.
Definition: lte-rrc-sap.h:362
LogicalChannelConfig logicalChannelConfig
Definition: lte-rrc-sap.h:220
enum ns3::LteRrcSap::ReportConfigEutra::@74 triggerQuantity
The quantities used to evaluate the triggering condition for the event, see 3GPP TS 36...
#define MAX_SI_MESSAGE
SpeedStatePars speedStatePars
Definition: lte-rrc-sap.h:475
LteRrcSap::RrcConnectionReconfigurationCompleted GetMessage() const
Returns a RrcConnectionReconfigurationCompleted IE from the values in the class attributes.
LteRrcSap::ReestabUeIdentity GetUeIdentity() const
Getter for m_ueIdentity.
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
LteRrcSap::RrcConnectionReconfiguration GetMessage() const
Returns a RrcConnectionReconfiguration IE from the values in the class attributes.
#define MAX_RAT_CAPABILITIES
bool GetHaveRadioResourceConfigDedicated()
Getter for m_haveRadioResourceConfigDedicated.
void SetMessage(LteRrcSap::RrcConnectionSetup msg)
Receives a RrcConnectionSetup IE and stores the contents into the class attributes.
uint32_t Deserialize(Buffer::Iterator bIterator)
std::list< uint8_t > blackCellsToRemoveList
Definition: lte-rrc-sap.h:295
void Print(std::ostream &os) const
int m_messageType
Stores RRC message type, according to 3GPP TS 36.331.
std::list< DrbToAddMod > drbToAddModList
Definition: lte-rrc-sap.h:254
void SerializeSequence(std::bitset< N > optionalOrDefaultMask, bool isExtensionMarkerPresent) const
Serialize a sequence.
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
uint8_t GetRrcTransactionIdentifier() const
Getter for m_rrcTransactionIdentifier attribute.
enum ns3::LteRrcSap::RlcConfig::@66 choice
LteRrcSap::RadioResourceConfigDedicated m_radioResourceConfigDedicated
LteRrcSap::PhysicalConfigDedicated GetPhysicalConfigDedicated() const
Gets m_radioResourceConfigDedicated.physicalConfigDedicated.
void Print(std::ostream &os) const
uint32_t Deserialize(Buffer::Iterator bIterator)
Buffer::Iterator DeserializeSequenceOf(int *numElems, int nMax, int nMin, Buffer::Iterator bIterator)
Deserialize a Sequence.
LteRrcSap::RrcConnectionReestablishmentComplete GetMessage() const
Returns a RrcConnectionReestablishmentComplete IE from the values in the class attributes.
#define MAX_EARFCN
void SerializeDrbToAddModList(std::list< LteRrcSap::DrbToAddMod > drbToAddModList) const
void SetMessage(LteRrcSap::RrcConnectionReconfiguration msg)
Receives a RrcConnectionReconfiguration IE and stores the contents into the class attributes...
uint8_t GetRrcTransactionIdentifier() const
Getter for m_rrcTransactionIdentifier.
void SerializePhysicalConfigDedicated(LteRrcSap::PhysicalConfigDedicated physicalConfigDedicated) const
uint8_t GetRrcTransactionIdentifier() const
Getter for m_rrcTransactionIdentifier.
void FinalizeSerialization() const
Finalizes an in progress serialization.
enum ns3::LteRrcSap::ReportConfigEutra::@73 purpose
void Print(std::ostream &os) const
Both the RSRP and RSRQ quantities are to be included in the measurement report.
Definition: lte-rrc-sap.h:369
void SerializePlmnIdentity(uint32_t plmnId) const
void SerializeQoffsetRange(int8_t qOffsetRange) const
std::list< uint8_t > cellsToRemoveList
Definition: lte-rrc-sap.h:293
void SerializeSystemInformationBlockType2(LteRrcSap::SystemInformationBlockType2 systemInformationBlockType2) const
void SerializeSrbToAddModList(std::list< LteRrcSap::SrbToAddMod > srbToAddModList) const
LteRrcSap::RadioResourceConfigDedicated GetRadioResourceConfigDedicated() const
Getter for m_radioResourceConfigDedicated.
uint32_t Deserialize(Buffer::Iterator bIterator)
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
uint16_t timeToTrigger
Time during which specific criteria for the event needs to be met in order to trigger a measurement r...
Definition: lte-rrc-sap.h:352
Threshold for event evaluation.
Definition: lte-rrc-sap.h:310
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
This class only serves to discriminate which message type has been received in uplink (ue to eNb) for...
Event A1: Serving becomes better than absolute threshold.
Definition: lte-rrc-sap.h:331
std::list< uint8_t > measIdToRemoveList
Definition: lte-rrc-sap.h:466
LteRrcSap::RrcConnectionReject m_rrcConnectionReject
a unique identifier for an interface.
Definition: type-id.h:51
Buffer::Iterator DeserializeSrbToAddModList(std::list< LteRrcSap::SrbToAddMod > *srbToAddModList, Buffer::Iterator bIterator)
bool HavePhysicalConfigDedicated() const
Gets m_radioResourceConfigDedicated.havePhysicalConfigDedicated.
LteRrcSap::RrcConnectionReject GetMessage() const
Returns a RrcConnectionReject IE from the values in the class attributes.
LteRrcSap::MobilityControlInfo GetMobilityControlInfo()
Getter for m_mobilityControlInfo.
std::list< ReportConfigToAddMod > reportConfigToAddModList
Definition: lte-rrc-sap.h:465
void SerializeThresholdEutra(LteRrcSap::ThresholdEutra thresholdEutra) const
TypeId SetParent(TypeId tid)
Definition: type-id.cc:631
uint32_t Deserialize(Buffer::Iterator bIterator)
LteRrcSap::RrcConnectionSetupCompleted GetMessage() const
Returns a RrcConnectionSetupCompleted IE from the values in the class attributes. ...
std::bitset< 32 > GetMtmsi() const
Get M-TMSI attribute.
void SerializeChoice(int numOptions, int selectedOption, bool isExtensionMarkerPresent) const
Serialize a Choice (set of options)
Buffer::Iterator DeserializeUlDcchMessage(Buffer::Iterator bIterator)
SpeedStateScaleFactors timeToTriggerSf
Definition: lte-rrc-sap.h:457
std::list< LteRrcSap::SrbToAddMod > GetSrbToAddModList() const
Gets m_radioResourceConfigDedicated.srbToAddModList.
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
bool HavePhysicalConfigDedicated() const
Gets m_radioResourceConfigDedicated.havePhysicalConfigDedicated.
RaSupervisionInfo raSupervisionInfo
Definition: lte-rrc-sap.h:237
std::bitset< 8 > GetMmec() const
Get MMEC attribute.
void SerializeEnum(int numElems, int selectedElem) const
Serialize an Enum.
MasterInformationBlock sourceMasterInformationBlock
Definition: lte-rrc-sap.h:551
Buffer::Iterator DeserializeThresholdEutra(LteRrcSap::ThresholdEutra *thresholdEutra, Buffer::Iterator bIterator)
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
#define MAX_DRB
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
Buffer::Iterator DeserializeBitstring(std::bitset< N > *bitstring, Buffer::Iterator bIterator)
Deserialize a bitstring.
ThresholdEutra threshold2
Threshold for event A5.
Definition: lte-rrc-sap.h:340
uint32_t Deserialize(Buffer::Iterator bIterator)