A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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 NS_LOG_COMPONENT_DEFINE ("RrcHeader");
40 
41 namespace ns3 {
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,0); // pdsch-ConfigDedicated not present
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.haveSoundingRsUlConfigDedicated)
279  {
280  // Serialize SoundingRS-UL-ConfigDedicated choice:
281  switch (physicalConfigDedicated.soundingRsUlConfigDedicated.type)
282  {
284  SerializeChoice (2,0,false);
285  SerializeNull ();
286  break;
287 
289  default:
290  // 2 options, selected: 1 (setup)
291  SerializeChoice (2,1,false);
292 
293  // Serialize setup sequence
294  // 0 optional / default fields, no extension marker.
295  SerializeSequence (std::bitset<0> (),false);
296 
297  // Serialize srs-Bandwidth
298  SerializeEnum (4,physicalConfigDedicated.soundingRsUlConfigDedicated.srsBandwidth);
299 
300  // Serialize srs-HoppingBandwidth
301  SerializeEnum (4,0);
302 
303  // Serialize freqDomainPosition
304  SerializeInteger (0,0,23);
305 
306  // Serialize duration
307  SerializeBoolean (false);
308 
309  // Serialize srs-ConfigIndex
310  SerializeInteger (physicalConfigDedicated.soundingRsUlConfigDedicated.srsConfigIndex,0,1023);
311 
312  // Serialize transmissionComb
313  SerializeInteger (0,0,1);
314 
315  // Serialize cyclicShift
316  SerializeEnum (8,0);
317 
318  break;
319  }
320  }
321 
322  if (physicalConfigDedicated.haveAntennaInfoDedicated)
323  {
324  // Serialize antennaInfo choice
325  // 2 options. Selected: 0 ("explicitValue" of type "AntennaInfoDedicated")
326  SerializeChoice (2,0,false);
327 
328  // Serialize AntennaInfoDedicated sequence
329  // 1 optional parameter, not present. No extension marker.
330  SerializeSequence (std::bitset<1> (0),false);
331 
332  // Serialize transmissionMode
333  // Assuming the value in the struct is the enum index
334  SerializeEnum (8,physicalConfigDedicated.antennaInfo.transmissionMode);
335 
336  // Serialize ue-TransmitAntennaSelection choice
337  SerializeChoice (2,0,false);
338 
339  // Serialize release
340  SerializeNull ();
341  }
342 }
343 
344 void
346 {
347  bool isSrbToAddModListPresent = !radioResourceConfigDedicated.srbToAddModList.empty ();
348  bool isDrbToAddModListPresent = !radioResourceConfigDedicated.drbToAddModList.empty ();
349  bool isDrbToReleaseListPresent = !radioResourceConfigDedicated.drbToReleaseList.empty ();
350 
351  // 6 optional fields. Extension marker is present.
352  std::bitset<6> optionalFieldsPresent = std::bitset<6> ();
353  optionalFieldsPresent.set (5,isSrbToAddModListPresent); // srb-ToAddModList present
354  optionalFieldsPresent.set (4,isDrbToAddModListPresent); // drb-ToAddModList present
355  optionalFieldsPresent.set (3,isDrbToReleaseListPresent); // drb-ToReleaseList present
356  optionalFieldsPresent.set (2,0); // mac-MainConfig not present
357  optionalFieldsPresent.set (1,0); // sps-Config not present
358  optionalFieldsPresent.set (0,(radioResourceConfigDedicated.havePhysicalConfigDedicated) ? 1 : 0);
359  SerializeSequence (optionalFieldsPresent,true);
360 
361  // Serialize srbToAddModList
362  if (isSrbToAddModListPresent)
363  {
364  SerializeSrbToAddModList (radioResourceConfigDedicated.srbToAddModList);
365  }
366 
367  // Serialize drbToAddModList
368  if (isDrbToAddModListPresent)
369  {
370  SerializeDrbToAddModList (radioResourceConfigDedicated.drbToAddModList);
371  }
372 
373  // Serialize drbToReleaseList
374  if (isDrbToReleaseListPresent)
375  {
376  SerializeSequenceOf (radioResourceConfigDedicated.drbToReleaseList.size (),MAX_DRB,1);
377  std::list<uint8_t>::iterator it = radioResourceConfigDedicated.drbToReleaseList.begin ();
378  for (; it != radioResourceConfigDedicated.drbToReleaseList.end (); it++)
379  {
380  // DRB-Identity ::= INTEGER (1..32)
381  SerializeInteger (*it,1,32);
382  }
383  }
384 
385  if (radioResourceConfigDedicated.havePhysicalConfigDedicated)
386  {
387  SerializePhysicalConfigDedicated (radioResourceConfigDedicated.physicalConfigDedicated);
388  }
389 }
390 
391 void
393 {
394  // 3 optional fields, no extension marker.
395  std::bitset<3> sysInfoBlk1Opts;
396  sysInfoBlk1Opts.set (2,0); // p-Max absent
397  sysInfoBlk1Opts.set (1,0); // tdd-Config absent
398  sysInfoBlk1Opts.set (0,0); // nonCriticalExtension absent
399  SerializeSequence (sysInfoBlk1Opts,false);
400 
401  // Serialize cellAccessRelatedInfo
402  // 1 optional field (csgIdentity) which is present, no extension marker.
403  SerializeSequence (std::bitset<1> (1),false);
404 
405  // Serialize plmn-IdentityList
406  SerializeSequenceOf (1,6,1);
407 
408  // PLMN-IdentityInfo
409  SerializeSequence (std::bitset<0> (),false);
410 
412 
413  // Serialize trackingAreaCode
414  SerializeBitstring (std::bitset<16> (0));
415  // Serialize cellIdentity
416  SerializeBitstring (std::bitset<28> (systemInformationBlockType1.cellAccessRelatedInfo.cellIdentity));
417  // Serialize cellBarred
418  SerializeEnum (2,0);
419  // Serialize intraFreqReselection
420  SerializeEnum (2,0);
421  // Serialize csg-Indication
422  SerializeBoolean (systemInformationBlockType1.cellAccessRelatedInfo.csgIndication);
423  // Serialize csg-Identity
424  SerializeBitstring (std::bitset<27> (systemInformationBlockType1.cellAccessRelatedInfo.csgIdentity));
425 
426  // Serialize cellSelectionInfo
427  SerializeSequence (std::bitset<1> (0),false);
428  // Serialize q-RxLevMin
429  SerializeInteger (-50,-70,-22);
430 
431  // Serialize freqBandIndicator
432  SerializeInteger (1,1,64);
433 
434  // Serialize schedulingInfoList
436  // SchedulingInfo
437  SerializeSequence (std::bitset<0> (),false);
438  // si-Periodicity
439  SerializeEnum (7,0);
440  // sib-MappingInfo
441  SerializeSequenceOf (0,MAX_SIB - 1,0);
442 
443  // Serialize si-WindowLength
444  SerializeEnum (7,0);
445 
446  // Serialize systemInfoValueTag
447  SerializeInteger (0,0,31);
448 }
449 
450 void
452 {
453  // 9 optional fields. Extension marker yes.
454  std::bitset<9> rrCfgCmmOpts;
455  rrCfgCmmOpts.set (8,1); // rach-ConfigCommon is present
456  rrCfgCmmOpts.set (7,0); // pdsch-ConfigCommon not present
457  rrCfgCmmOpts.set (6,0); // phich-Config not present
458  rrCfgCmmOpts.set (5,0); // pucch-ConfigCommon not present
459  rrCfgCmmOpts.set (4,0); // soundingRS-UL-ConfigCommon not present
460  rrCfgCmmOpts.set (3,0); // uplinkPowerControlCommon not present
461  rrCfgCmmOpts.set (2,0); // antennaInfoCommon not present
462  rrCfgCmmOpts.set (1,0); // p-Max not present
463  rrCfgCmmOpts.set (0,0); // tdd-Config not present
464 
465  SerializeSequence (rrCfgCmmOpts,true);
466 
467  if (rrCfgCmmOpts[8])
468  {
469  // Serialize RACH-ConfigCommon
470  SerializeRachConfigCommon (radioResourceConfigCommon.rachConfigCommon);
471  }
472 
473  // Serialize PRACH-Config
474  // 1 optional, 0 extension marker.
475  SerializeSequence (std::bitset<1> (0),false);
476 
477  // Serialize PRACH-Config rootSequenceIndex
478  SerializeInteger (0,0,1023);
479 
480  // Serialize PUSCH-ConfigCommon
481  SerializeSequence (std::bitset<0> (),false);
482 
483  // Serialize pusch-ConfigBasic
484  SerializeSequence (std::bitset<0> (),false);
485  SerializeInteger (1,1,4);
486  SerializeEnum (2,0);
487  SerializeInteger (0,0,98);
488  SerializeBoolean (false);
489 
490  // Serialize UL-ReferenceSignalsPUSCH
491  SerializeSequence (std::bitset<0> (),false);
492  SerializeBoolean (false);
493  SerializeInteger (0,0,29);
494  SerializeBoolean (false);
495  SerializeInteger (4,0,7);
496 
497  // Serialize UL-CyclicPrefixLength
498  SerializeEnum (2,0);
499 }
500 
501 void
503 {
504  SerializeSequence (std::bitset<0> (0),true);
505 
506  // rach-ConfigCommon
507  SerializeRachConfigCommon (radioResourceConfigCommonSib.rachConfigCommon);
508 
509  // bcch-Config
510  SerializeSequence (std::bitset<0> (0),false);
511  SerializeEnum (4,0); // modificationPeriodCoeff
512  // pcch-Config
513  SerializeSequence (std::bitset<0> (0),false);
514  SerializeEnum (4,0); // defaultPagingCycle
515  SerializeEnum (8,0); // nB
516  // prach-Config
517  SerializeSequence (std::bitset<1> (0),false);
518  SerializeInteger (0,0,1023); // rootSequenceIndex
519  // pdsch-ConfigCommon
520  SerializeSequence (std::bitset<0> (0),false);
521  SerializeInteger (0,-60,50); // referenceSignalPower
522  SerializeInteger (0,0,3); // p-b
523  // pusch-ConfigCommon
524  SerializeSequence (std::bitset<0> (0),false);
525  SerializeSequence (std::bitset<0> (0),false); // pusch-ConfigBasic
526  SerializeInteger (1,1,4); // n-SB
527  SerializeEnum (2,0); // hoppingMode
528  SerializeInteger (0,0,98); // pusch-HoppingOffset
529  SerializeBoolean (false); // enable64QAM
530  SerializeSequence (std::bitset<0> (0),false); // UL-ReferenceSignalsPUSCH
531  SerializeBoolean (false); // groupHoppingEnabled
532  SerializeInteger (0,0,29); // groupAssignmentPUSCH
533  SerializeBoolean (false); // sequenceHoppingEnabled
534  SerializeInteger (0,0,7); // cyclicShift
535  // pucch-ConfigCommon
536  SerializeSequence (std::bitset<0> (0),false);
537  SerializeEnum (3,0); // deltaPUCCH-Shift
538  SerializeInteger (0,0,98); // nRB-CQI
539  SerializeInteger (0,0,7); // nCS-AN
540  SerializeInteger (0,0,2047); // n1PUCCH-AN
541  // soundingRS-UL-ConfigCommon
542  SerializeChoice (2,0,false);
543  SerializeNull (); // release
544  // uplinkPowerControlCommon
545  SerializeSequence (std::bitset<0> (0),false);
546  SerializeInteger (0,-126,24); // p0-NominalPUSCH
547  SerializeEnum (8,0); // alpha
548  SerializeInteger (-50,-127,-96); // p0-NominalPUCCH
549  SerializeSequence (std::bitset<0> (0),false); // deltaFList-PUCCH
550  SerializeEnum (3,0); // deltaF-PUCCH-Format1
551  SerializeEnum (3,0); // deltaF-PUCCH-Format1b
552  SerializeEnum (4,0); // deltaF-PUCCH-Format2
553  SerializeEnum (3,0); // deltaF-PUCCH-Format2a
554  SerializeEnum (3,0); // deltaF-PUCCH-Format2b
555  SerializeInteger (0,-1,6);
556  // ul-CyclicPrefixLength
557  SerializeEnum (2,0);
558 }
559 
560 void
562 {
563  SerializeSequence (std::bitset<2> (0),true);
564 
565  // RadioResourceConfigCommonSib
567 
568  // ue-TimersAndConstants
569  SerializeSequence (std::bitset<0> (0),true);
570  SerializeEnum (8,0); // t300
571  SerializeEnum (8,0); // t301
572  SerializeEnum (7,0); // t310
573  SerializeEnum (8,0); // n310
574  SerializeEnum (7,0); // t311
575  SerializeEnum (8,0); // n311
576 
577  // freqInfo
578  SerializeSequence (std::bitset<2> (3),false);
579  SerializeInteger ((int) systemInformationBlockType2.freqInfo.ulCarrierFreq, 0, MAX_EARFCN);
580  switch (systemInformationBlockType2.freqInfo.ulBandwidth)
581  {
582  case 6:
583  SerializeEnum (6,0);
584  break;
585  case 15:
586  SerializeEnum (6,1);
587  break;
588  case 25:
589  SerializeEnum (6,2);
590  break;
591  case 50:
592  SerializeEnum (6,3);
593  break;
594  case 75:
595  SerializeEnum (6,4);
596  break;
597  case 100:
598  SerializeEnum (6,5);
599  break;
600  default:
601  SerializeEnum (6,0);
602  }
603 
604  SerializeInteger (29,1,32); // additionalSpectrumEmission
605  // timeAlignmentTimerCommon
606  SerializeEnum (8,0);
607 }
608 
609 void
611 {
612  // Watchdog: if list has 0 elements, set boolean to false
613  if (measResults.measResultListEutra.empty ())
614  {
615  measResults.haveMeasResultNeighCells = false;
616  }
617 
618  // Serialize MeasResults sequence, 1 optional value, extension marker present
619  SerializeSequence (std::bitset<1> (measResults.haveMeasResultNeighCells),true);
620 
621  // Serialize measId
622  SerializeInteger (measResults.measId,1,MAX_MEAS_ID);
623 
624  // Serialize measResultServCell sequence
625  SerializeSequence (std::bitset<0> (0),false);
626 
627  // Serialize rsrpResult
628  SerializeInteger (measResults.rsrpResult,0,97);
629 
630  // Serialize rsrqResult
631  SerializeInteger (measResults.rsrqResult,0,34);
632 
633  if (measResults.haveMeasResultNeighCells)
634  {
635  // Serialize Choice = 0 (MeasResultListEUTRA)
636  SerializeChoice (4,0,false);
637 
638  // Serialize measResultNeighCells
640 
641  // serialize MeasResultEutra elements in the list
642  std::list<LteRrcSap::MeasResultEutra>::iterator it;
643  for (it = measResults.measResultListEutra.begin (); it != measResults.measResultListEutra.end (); it++)
644  {
645  SerializeSequence (std::bitset<1> (it->haveCgiInfo),false);
646 
647  // Serialize PhysCellId
648  SerializeInteger (it->physCellId, 0, 503);
649 
650  // Serialize CgiInfo
651  if (it->haveCgiInfo)
652  {
653  SerializeSequence (std::bitset<1> (it->cgiInfo.plmnIdentityList.size ()),false);
654 
655  // Serialize cellGlobalId
656  SerializeSequence (std::bitset<0> (0),false);
657  SerializePlmnIdentity (it->cgiInfo.plmnIdentity);
658  SerializeBitstring (std::bitset<28> (it->cgiInfo.cellIdentity));
659 
660  // Serialize trackingAreaCode
661  SerializeBitstring (std::bitset<16> (it->cgiInfo.trackingAreaCode));
662 
663  // Serialize plmn-IdentityList
664  if (!it->cgiInfo.plmnIdentityList.empty ())
665  {
666  SerializeSequenceOf (it->cgiInfo.plmnIdentityList.size (),5,1);
667  std::list<uint32_t>::iterator it2;
668  for (it2 = it->cgiInfo.plmnIdentityList.begin (); it2 != it->cgiInfo.plmnIdentityList.end (); it2++)
669  {
670  SerializePlmnIdentity (*it2);
671  }
672  }
673  }
674 
675  // Serialize measResult
676  std::bitset<2> measResultFieldsPresent;
677  measResultFieldsPresent[1] = it->haveRsrpResult;
678  measResultFieldsPresent[0] = it->haveRsrqResult;
679  SerializeSequence (measResultFieldsPresent,true);
680 
681  if (it->haveRsrpResult)
682  {
683  SerializeInteger (it->rsrpResult,0,97);
684  }
685 
686  if (it->haveRsrqResult)
687  {
688  SerializeInteger (it->rsrqResult,0,34);
689  }
690  }
691  }
692 }
693 
694 void
696 {
697  // plmn-Identity sequence, mcc is optional, no extension marker
698  SerializeSequence (std::bitset<1> (0), false);
699 
700  // Serialize mnc
701  int nDig = (plmnId > 99) ? 3 : 2;
702 
703  SerializeSequenceOf (nDig,3,2);
704  for (int i = nDig - 1; i >= 0; i--)
705  {
706  int n = floor (plmnId / pow (10,i));
707  SerializeInteger (n,0,9);
708  plmnId -= n * pow (10,i);
709  }
710 
711  // cellReservedForOperatorUse
712  SerializeEnum (2,0);
713 }
714 
715 void
717 {
718  // rach-ConfigCommon
719  SerializeSequence (std::bitset<0> (0),true);
720 
721  // preambleInfo
722  SerializeSequence (std::bitset<1> (0),false);
723 
724  // numberOfRA-Preambles
725  switch (rachConfigCommon.preambleInfo.numberOfRaPreambles)
726  {
727  case 4:
728  SerializeEnum (16,0);
729  break;
730  case 8:
731  SerializeEnum (16,1);
732  break;
733  case 12:
734  SerializeEnum (16,2);
735  break;
736  case 16:
737  SerializeEnum (16,3);
738  break;
739  case 20:
740  SerializeEnum (16,4);
741  break;
742  case 24:
743  SerializeEnum (16,5);
744  break;
745  case 28:
746  SerializeEnum (16,6);
747  break;
748  case 32:
749  SerializeEnum (16,7);
750  break;
751  case 36:
752  SerializeEnum (16,8);
753  break;
754  case 40:
755  SerializeEnum (16,9);
756  break;
757  case 44:
758  SerializeEnum (16,10);
759  break;
760  case 48:
761  SerializeEnum (16,11);
762  break;
763  case 52:
764  SerializeEnum (16,12);
765  break;
766  case 56:
767  SerializeEnum (16,13);
768  break;
769  case 60:
770  SerializeEnum (16,14);
771  break;
772  case 64:
773  SerializeEnum (16,15);
774  break;
775  default:
776  SerializeEnum (16,0);
777  }
778 
779  SerializeSequence (std::bitset<0> (0),false); // powerRampingParameters
780  SerializeEnum (4,0); // powerRampingStep
781  SerializeEnum (16,0); // preambleInitialReceivedTargetPower
782  SerializeSequence (std::bitset<0> (0),false); // ra-SupervisionInfo
783 
784  // preambleTransMax
785  switch (rachConfigCommon.raSupervisionInfo.preambleTransMax)
786  {
787  case 3:
788  SerializeEnum (11,0);
789  break;
790  case 4:
791  SerializeEnum (11,1);
792  break;
793  case 5:
794  SerializeEnum (11,2);
795  break;
796  case 6:
797  SerializeEnum (11,3);
798  break;
799  case 7:
800  SerializeEnum (11,4);
801  break;
802  case 8:
803  SerializeEnum (11,5);
804  break;
805  case 10:
806  SerializeEnum (11,6);
807  break;
808  case 20:
809  SerializeEnum (11,7);
810  break;
811  case 50:
812  SerializeEnum (11,8);
813  break;
814  case 100:
815  SerializeEnum (11,9);
816  break;
817  case 200:
818  SerializeEnum (11,10);
819  break;
820  default:
821  SerializeEnum (11,0);
822  }
823 
824  // ra-ResponseWindowSize
825  switch (rachConfigCommon.raSupervisionInfo.raResponseWindowSize)
826  {
827  case 2:
828  SerializeEnum (8,0);
829  break;
830  case 3:
831  SerializeEnum (8,1);
832  break;
833  case 4:
834  SerializeEnum (8,2);
835  break;
836  case 5:
837  SerializeEnum (8,3);
838  break;
839  case 6:
840  SerializeEnum (8,4);
841  break;
842  case 7:
843  SerializeEnum (8,5);
844  break;
845  case 8:
846  SerializeEnum (8,6);
847  break;
848  case 10:
849  SerializeEnum (8,7);
850  break;
851  default:
852  SerializeEnum (8,0);
853  }
854 
855  SerializeEnum (8,0); // mac-ContentionResolutionTimer
856  SerializeInteger (1,1,8); // maxHARQ-Msg3Tx
857 }
858 
859 void
860 RrcAsn1Header::SerializeQoffsetRange (int8_t qOffsetRange) const
861 {
862  switch (qOffsetRange)
863  {
864  case -24:
865  SerializeEnum (31,0);
866  break;
867  case -22:
868  SerializeEnum (31,1);
869  break;
870  case -20:
871  SerializeEnum (31,2);
872  break;
873  case -18:
874  SerializeEnum (31,3);
875  break;
876  case -16:
877  SerializeEnum (31,4);
878  break;
879  case -14:
880  SerializeEnum (31,5);
881  break;
882  case -12:
883  SerializeEnum (31,6);
884  break;
885  case -10:
886  SerializeEnum (31,7);
887  break;
888  case -8:
889  SerializeEnum (31,8);
890  break;
891  case -6:
892  SerializeEnum (31,9);
893  break;
894  case -5:
895  SerializeEnum (31,10);
896  break;
897  case -4:
898  SerializeEnum (31,11);
899  break;
900  case -3:
901  SerializeEnum (31,12);
902  break;
903  case -2:
904  SerializeEnum (31,13);
905  break;
906  case -1:
907  SerializeEnum (31,14);
908  break;
909  case 0:
910  SerializeEnum (31,15);
911  break;
912  case 1:
913  SerializeEnum (31,16);
914  break;
915  case 2:
916  SerializeEnum (31,17);
917  break;
918  case 3:
919  SerializeEnum (31,18);
920  break;
921  case 4:
922  SerializeEnum (31,19);
923  break;
924  case 5:
925  SerializeEnum (31,20);
926  break;
927  case 6:
928  SerializeEnum (31,21);
929  break;
930  case 8:
931  SerializeEnum (31,22);
932  break;
933  case 10:
934  SerializeEnum (31,23);
935  break;
936  case 12:
937  SerializeEnum (31,24);
938  break;
939  case 14:
940  SerializeEnum (31,25);
941  break;
942  case 16:
943  SerializeEnum (31,26);
944  break;
945  case 18:
946  SerializeEnum (31,27);
947  break;
948  case 20:
949  SerializeEnum (31,28);
950  break;
951  case 22:
952  SerializeEnum (31,29);
953  break;
954  case 24:
955  SerializeEnum (31,30);
956  break;
957  default:
958  SerializeEnum (31,15);
959  }
960 }
961 
962 void
964 {
965  switch (thresholdEutra.choice)
966  {
968  SerializeChoice (2,0,false);
969  SerializeInteger (thresholdEutra.range, 0, 97);
970  break;
972  default:
973  SerializeChoice (2,1,false);
974  SerializeInteger (thresholdEutra.range, 0, 34);
975  }
976 }
977 
978 void
980 {
981  // Serialize MeasConfig sequence
982  // 11 optional fields, extension marker present
983  std::bitset<11> measConfigOptional;
984  measConfigOptional.set (10, !measConfig.measObjectToRemoveList.empty () );
985  measConfigOptional.set (9, !measConfig.measObjectToAddModList.empty () );
986  measConfigOptional.set (8, !measConfig.reportConfigToRemoveList.empty () );
987  measConfigOptional.set (7, !measConfig.reportConfigToAddModList.empty () );
988  measConfigOptional.set (6, !measConfig.measIdToRemoveList.empty () );
989  measConfigOptional.set (5, !measConfig.measIdToAddModList.empty () );
990  measConfigOptional.set (4, measConfig.haveQuantityConfig );
991  measConfigOptional.set (3, measConfig.haveMeasGapConfig );
992  measConfigOptional.set (2, measConfig.haveSmeasure );
993  measConfigOptional.set (1, false ); // preRegistrationInfoHRPD
994  measConfigOptional.set (0, measConfig.haveSpeedStatePars );
995  SerializeSequence (measConfigOptional,true);
996 
997  if (!measConfig.measObjectToRemoveList.empty ())
998  {
1000  for (std::list<uint8_t>::iterator it = measConfig.measObjectToRemoveList.begin (); it != measConfig.measObjectToRemoveList.end (); it++)
1001  {
1002  SerializeInteger (*it, 1, MAX_OBJECT_ID);
1003  }
1004  }
1005 
1006  if (!measConfig.measObjectToAddModList.empty ())
1007  {
1009  for (std::list<LteRrcSap::MeasObjectToAddMod>::iterator it = measConfig.measObjectToAddModList.begin (); it != measConfig.measObjectToAddModList.end (); it++)
1010  {
1011  SerializeSequence (std::bitset<0> (), false);
1012  SerializeInteger (it->measObjectId, 1, MAX_OBJECT_ID);
1013  SerializeChoice (4, 0, true); // Select MeasObjectEUTRA
1014 
1015  // Serialize measObjectEutra
1016  std::bitset<5> measObjOpts;
1017  measObjOpts.set (4,!it->measObjectEutra.cellsToRemoveList.empty () );
1018  measObjOpts.set (3,!it->measObjectEutra.cellsToAddModList.empty () );
1019  measObjOpts.set (2,!it->measObjectEutra.blackCellsToRemoveList.empty () );
1020  measObjOpts.set (1,!it->measObjectEutra.blackCellsToAddModList.empty () );
1021  measObjOpts.set (0,it->measObjectEutra.haveCellForWhichToReportCGI);
1022  SerializeSequence (measObjOpts, true);
1023 
1024  // Serialize carrierFreq
1025  SerializeInteger (it->measObjectEutra.carrierFreq, 0, MAX_EARFCN);
1026 
1027  // Serialize allowedMeasBandwidth
1028  switch (it->measObjectEutra.allowedMeasBandwidth)
1029  {
1030  case 6:
1031  SerializeEnum (6,0);
1032  break;
1033  case 15:
1034  SerializeEnum (6,1);
1035  break;
1036  case 25:
1037  SerializeEnum (6,2);
1038  break;
1039  case 50:
1040  SerializeEnum (6,3);
1041  break;
1042  case 75:
1043  SerializeEnum (6,4);
1044  break;
1045  case 100:
1046  SerializeEnum (6,5);
1047  break;
1048  default:
1049  SerializeEnum (6,0);
1050  }
1051 
1052  SerializeBoolean (it->measObjectEutra.presenceAntennaPort1);
1053  SerializeBitstring (std::bitset<2> (it->measObjectEutra.neighCellConfig));
1054  SerializeQoffsetRange (it->measObjectEutra.offsetFreq);
1055 
1056  if (!it->measObjectEutra.cellsToRemoveList.empty ())
1057  {
1058  SerializeSequenceOf (it->measObjectEutra.cellsToRemoveList.size (),MAX_CELL_MEAS,1);
1059  for (std::list<uint8_t>::iterator it2 = it->measObjectEutra.cellsToRemoveList.begin (); it2 != it->measObjectEutra.cellsToRemoveList.end (); it2++)
1060  {
1061  SerializeInteger (*it2, 1, MAX_CELL_MEAS);
1062  }
1063  }
1064 
1065  if (!it->measObjectEutra.cellsToAddModList.empty ())
1066  {
1067  SerializeSequenceOf (it->measObjectEutra.cellsToAddModList.size (), MAX_CELL_MEAS, 1);
1068  for (std::list<LteRrcSap::CellsToAddMod>::iterator it2 = it->measObjectEutra.cellsToAddModList.begin (); it2 != it->measObjectEutra.cellsToAddModList.end (); it2++)
1069  {
1070  SerializeSequence (std::bitset<0> (), false);
1071 
1072  // Serialize cellIndex
1073  SerializeInteger (it2->cellIndex, 1, MAX_CELL_MEAS);
1074 
1075  // Serialize PhysCellId
1076  SerializeInteger (it2->physCellId,0,503);
1077 
1078  // Serialize cellIndividualOffset
1079  SerializeQoffsetRange (it2->cellIndividualOffset);
1080  }
1081  }
1082 
1083  if (!it->measObjectEutra.blackCellsToRemoveList.empty () )
1084  {
1085  SerializeSequenceOf (it->measObjectEutra.blackCellsToRemoveList.size (),MAX_CELL_MEAS,1);
1086  for (std::list<uint8_t>::iterator it2 = it->measObjectEutra.blackCellsToRemoveList.begin (); it2 != it->measObjectEutra.blackCellsToRemoveList.end (); it2++)
1087  {
1088  SerializeInteger (*it2, 1, MAX_CELL_MEAS);
1089  }
1090  }
1091 
1092  if (!it->measObjectEutra.blackCellsToAddModList.empty () )
1093  {
1094  SerializeSequenceOf (it->measObjectEutra.blackCellsToAddModList.size (), MAX_CELL_MEAS, 1);
1095  for (std::list<LteRrcSap::BlackCellsToAddMod>::iterator it2 = it->measObjectEutra.blackCellsToAddModList.begin (); it2 != it->measObjectEutra.blackCellsToAddModList.end (); it2++)
1096  {
1097  SerializeSequence (std::bitset<0> (),false);
1098  SerializeInteger (it2->cellIndex, 1, MAX_CELL_MEAS);
1099 
1100  // Serialize PhysCellIdRange
1101  // range optional
1102  std::bitset<1> rangePresent = std::bitset<1> (it2->physCellIdRange.haveRange);
1103  SerializeSequence (rangePresent,false);
1104  SerializeInteger (it2->physCellIdRange.start,0,503);
1105  if (it2->physCellIdRange.haveRange)
1106  {
1107  switch (it2->physCellIdRange.range)
1108  {
1109  case 4:
1110  SerializeEnum (16, 0);
1111  break;
1112  case 8:
1113  SerializeEnum (16, 1);
1114  break;
1115  case 12:
1116  SerializeEnum (16, 2);
1117  break;
1118  case 16:
1119  SerializeEnum (16, 3);
1120  break;
1121  case 24:
1122  SerializeEnum (16, 4);
1123  break;
1124  case 32:
1125  SerializeEnum (16, 5);
1126  break;
1127  case 48:
1128  SerializeEnum (16, 6);
1129  break;
1130  case 64:
1131  SerializeEnum (16, 7);
1132  break;
1133  case 84:
1134  SerializeEnum (16, 8);
1135  break;
1136  case 96:
1137  SerializeEnum (16, 9);
1138  break;
1139  case 128:
1140  SerializeEnum (16, 10);
1141  break;
1142  case 168:
1143  SerializeEnum (16, 11);
1144  break;
1145  case 252:
1146  SerializeEnum (16, 12);
1147  break;
1148  case 504:
1149  SerializeEnum (16, 13);
1150  break;
1151  default:
1152  SerializeEnum (16, 0);
1153  }
1154  }
1155  }
1156 
1157  }
1158 
1159  if (it->measObjectEutra.haveCellForWhichToReportCGI)
1160  {
1161  SerializeInteger (it->measObjectEutra.cellForWhichToReportCGI,0,503);
1162  }
1163  }
1164  }
1165 
1166 
1167  if (!measConfig.reportConfigToRemoveList.empty () )
1168  {
1170  for (std::list<uint8_t>::iterator it = measConfig.reportConfigToRemoveList.begin (); it != measConfig.reportConfigToRemoveList.end (); it++)
1171  {
1173  }
1174  }
1175 
1176  if (!measConfig.reportConfigToAddModList.empty () )
1177  {
1179  for (std::list<LteRrcSap::ReportConfigToAddMod>::iterator it = measConfig.reportConfigToAddModList.begin (); it != measConfig.reportConfigToAddModList.end (); it++)
1180  {
1181  SerializeSequence (std::bitset<0> (), false);
1182  SerializeInteger (it->reportConfigId,1,MAX_REPORT_CONFIG_ID);
1183  SerializeChoice (2,0,false); // reportConfigEUTRA
1184 
1185  // Serialize ReportConfigEUTRA
1186  SerializeSequence (std::bitset<0> (), true);
1187  switch (it->reportConfigEutra.triggerType)
1188  {
1190  SerializeChoice (2, 1, false);
1191  SerializeSequence (std::bitset<0> (),false);
1192  switch (it->reportConfigEutra.purpose)
1193  {
1195  SerializeEnum (2,1);
1196  break;
1198  default:
1199  SerializeEnum (2,0);
1200  }
1201  break;
1203  default:
1204  SerializeChoice (2, 0, false);
1205  SerializeSequence (std::bitset<0> (),false);
1206  switch (it->reportConfigEutra.eventId)
1207  {
1209  SerializeChoice (5, 0, true);
1210  SerializeSequence (std::bitset<0> (),false);
1211  SerializeThresholdEutra (it->reportConfigEutra.threshold1);
1212  break;
1214  SerializeChoice (5, 1, true);
1215  SerializeSequence (std::bitset<0> (),false);
1216  SerializeThresholdEutra (it->reportConfigEutra.threshold1);
1217  break;
1219  SerializeChoice (5, 2, true);
1220  SerializeSequence (std::bitset<0> (),false);
1221  SerializeInteger (it->reportConfigEutra.a3Offset,-30,30);
1222  SerializeBoolean (it->reportConfigEutra.reportOnLeave);
1223  break;
1225  SerializeChoice (5, 3, true);
1226  SerializeSequence (std::bitset<0> (),false);
1227  SerializeThresholdEutra (it->reportConfigEutra.threshold1);
1228  break;
1230  default:
1231  SerializeChoice (5, 4, true);
1232  SerializeSequence (std::bitset<0> (),false);
1233  SerializeThresholdEutra (it->reportConfigEutra.threshold1);
1234  SerializeThresholdEutra (it->reportConfigEutra.threshold2);
1235  }
1236 
1237  SerializeInteger (it->reportConfigEutra.hysteresis, 0, 30);
1238 
1239  switch (it->reportConfigEutra.timeToTrigger)
1240  {
1241  case 0:
1242  SerializeEnum (16, 0);
1243  break;
1244  case 40:
1245  SerializeEnum (16, 1);
1246  break;
1247  case 64:
1248  SerializeEnum (16, 2);
1249  break;
1250  case 80:
1251  SerializeEnum (16, 3);
1252  break;
1253  case 100:
1254  SerializeEnum (16, 4);
1255  break;
1256  case 128:
1257  SerializeEnum (16, 5);
1258  break;
1259  case 160:
1260  SerializeEnum (16, 6);
1261  break;
1262  case 256:
1263  SerializeEnum (16, 7);
1264  break;
1265  case 320:
1266  SerializeEnum (16, 8);
1267  break;
1268  case 480:
1269  SerializeEnum (16, 9);
1270  break;
1271  case 512:
1272  SerializeEnum (16, 10);
1273  break;
1274  case 640:
1275  SerializeEnum (16, 11);
1276  break;
1277  case 1024:
1278  SerializeEnum (16, 12);
1279  break;
1280  case 1280:
1281  SerializeEnum (16, 13);
1282  break;
1283  case 2560:
1284  SerializeEnum (16, 14);
1285  break;
1286  case 5120:
1287  default:
1288  SerializeEnum (16, 15);
1289  }
1290  } // end trigger type
1291 
1292  // Serialize triggerQuantity
1293  if (it->reportConfigEutra.triggerQuantity == LteRrcSap::ReportConfigEutra::RSRP)
1294  {
1295  SerializeEnum (2, 0);
1296  }
1297  else
1298  {
1299  SerializeEnum (2, 1);
1300  }
1301 
1302  // Serialize reportQuantity
1303  if (it->reportConfigEutra.reportQuantity == LteRrcSap::ReportConfigEutra::SAME_AS_TRIGGER_QUANTITY)
1304  {
1305  SerializeEnum (2, 0);
1306  }
1307  else
1308  {
1309  SerializeEnum (2, 1);
1310  }
1311 
1312  // Serialize maxReportCells
1313  SerializeInteger (it->reportConfigEutra.maxReportCells, 1, MAX_CELL_REPORT);
1314 
1315  // Serialize reportInterval
1316  switch (it->reportConfigEutra.reportInterval)
1317  {
1319  SerializeEnum (16, 0);
1320  break;
1322  SerializeEnum (16, 1);
1323  break;
1325  SerializeEnum (16, 2);
1326  break;
1328  SerializeEnum (16, 3);
1329  break;
1331  SerializeEnum (16, 4);
1332  break;
1334  SerializeEnum (16, 5);
1335  break;
1337  SerializeEnum (16, 6);
1338  break;
1340  SerializeEnum (16, 7);
1341  break;
1343  SerializeEnum (16, 8);
1344  break;
1346  SerializeEnum (16, 9);
1347  break;
1349  SerializeEnum (16, 10);
1350  break;
1352  SerializeEnum (16, 11);
1353  break;
1355  SerializeEnum (16, 12);
1356  break;
1358  SerializeEnum (16, 13);
1359  break;
1361  SerializeEnum (16, 14);
1362  break;
1364  default:
1365  SerializeEnum (16, 15);
1366  }
1367 
1368  // Serialize reportAmount
1369  switch (it->reportConfigEutra.reportAmount)
1370  {
1371  case 1:
1372  SerializeEnum (8, 0);
1373  break;
1374  case 2:
1375  SerializeEnum (8, 1);
1376  break;
1377  case 4:
1378  SerializeEnum (8, 2);
1379  break;
1380  case 8:
1381  SerializeEnum (8, 3);
1382  break;
1383  case 16:
1384  SerializeEnum (8, 4);
1385  break;
1386  case 32:
1387  SerializeEnum (8, 5);
1388  break;
1389  case 64:
1390  SerializeEnum (8, 6);
1391  break;
1392  default:
1393  SerializeEnum (8, 7);
1394  }
1395  }
1396  }
1397 
1398  if (!measConfig.measIdToRemoveList.empty () )
1399  {
1400  SerializeSequenceOf (measConfig.measIdToRemoveList.size (), MAX_MEAS_ID, 1);
1401  for (std::list<uint8_t>::iterator it = measConfig.measIdToRemoveList.begin (); it != measConfig.measIdToRemoveList.end (); it++)
1402  {
1403  SerializeInteger (*it, 1, MAX_MEAS_ID);
1404  }
1405  }
1406 
1407  if (!measConfig.measIdToAddModList.empty () )
1408  {
1409  SerializeSequenceOf ( measConfig.measIdToAddModList.size (), MAX_MEAS_ID, 1);
1410  for (std::list<LteRrcSap::MeasIdToAddMod>::iterator it = measConfig.measIdToAddModList.begin (); it != measConfig.measIdToAddModList.end (); it++)
1411  {
1412  SerializeInteger (it->measId, 1, MAX_MEAS_ID);
1413  SerializeInteger (it->measObjectId, 1, MAX_OBJECT_ID);
1414  SerializeInteger (it->reportConfigId, 1, MAX_REPORT_CONFIG_ID);
1415  }
1416  }
1417 
1418  if (measConfig.haveQuantityConfig )
1419  {
1420  // QuantityConfig sequence
1421  // 4 optional fields, only first (EUTRA) present. Extension marker yes.
1422  std::bitset<4> quantityConfigOpts (0);
1423  quantityConfigOpts.set (3,1);
1424  SerializeSequence (quantityConfigOpts, true);
1425  SerializeSequence (std::bitset<0> (), false);
1426 
1427  switch (measConfig.quantityConfig.filterCoefficientRSRP)
1428  {
1429  case 0:
1430  SerializeEnum (16, 0);
1431  break;
1432  case 1:
1433  SerializeEnum (16, 1);
1434  break;
1435  case 2:
1436  SerializeEnum (16, 2);
1437  break;
1438  case 3:
1439  SerializeEnum (16, 3);
1440  break;
1441  case 4:
1442  SerializeEnum (16, 4);
1443  break;
1444  case 5:
1445  SerializeEnum (16, 5);
1446  break;
1447  case 6:
1448  SerializeEnum (16, 6);
1449  break;
1450  case 7:
1451  SerializeEnum (16, 7);
1452  break;
1453  case 8:
1454  SerializeEnum (16, 8);
1455  break;
1456  case 9:
1457  SerializeEnum (16, 9);
1458  break;
1459  case 11:
1460  SerializeEnum (16, 10);
1461  break;
1462  case 13:
1463  SerializeEnum (16, 11);
1464  break;
1465  case 15:
1466  SerializeEnum (16, 12);
1467  break;
1468  case 17:
1469  SerializeEnum (16, 13);
1470  break;
1471  case 19:
1472  SerializeEnum (16, 14);
1473  break;
1474  default:
1475  SerializeEnum (16, 4);
1476  }
1477 
1478  switch (measConfig.quantityConfig.filterCoefficientRSRQ)
1479  {
1480  case 0:
1481  SerializeEnum (16, 0);
1482  break;
1483  case 1:
1484  SerializeEnum (16, 1);
1485  break;
1486  case 2:
1487  SerializeEnum (16, 2);
1488  break;
1489  case 3:
1490  SerializeEnum (16, 3);
1491  break;
1492  case 4:
1493  SerializeEnum (16, 4);
1494  break;
1495  case 5:
1496  SerializeEnum (16, 5);
1497  break;
1498  case 6:
1499  SerializeEnum (16, 6);
1500  break;
1501  case 7:
1502  SerializeEnum (16, 7);
1503  break;
1504  case 8:
1505  SerializeEnum (16, 8);
1506  break;
1507  case 9:
1508  SerializeEnum (16, 9);
1509  break;
1510  case 11:
1511  SerializeEnum (16, 10);
1512  break;
1513  case 13:
1514  SerializeEnum (16, 11);
1515  break;
1516  case 15:
1517  SerializeEnum (16, 12);
1518  break;
1519  case 17:
1520  SerializeEnum (16, 13);
1521  break;
1522  case 19:
1523  SerializeEnum (16, 14);
1524  break;
1525  default:
1526  SerializeEnum (16, 4);
1527  }
1528  }
1529 
1530  if (measConfig.haveMeasGapConfig )
1531  {
1532  switch (measConfig.measGapConfig.type)
1533  {
1535  SerializeChoice (2, 0, false);
1536  SerializeNull ();
1537  break;
1539  default:
1540  SerializeChoice (2, 1, false);
1541  SerializeSequence (std::bitset<0> (),false);
1542  switch (measConfig.measGapConfig.gapOffsetChoice)
1543  {
1545  SerializeChoice (2, 0, true);
1546  SerializeInteger (measConfig.measGapConfig.gapOffsetValue, 0, 39);
1547  break;
1549  default:
1550  SerializeChoice (2, 1, true);
1551  SerializeInteger (measConfig.measGapConfig.gapOffsetValue, 0, 79);
1552  }
1553  }
1554  }
1555 
1556  if (measConfig.haveSmeasure )
1557  {
1558  SerializeInteger (measConfig.sMeasure, 0, 97);
1559  }
1560 
1561  // ...Here preRegistrationInfoHRPD would be serialized
1562 
1563  if (measConfig.haveSpeedStatePars )
1564  {
1565  switch (measConfig.speedStatePars.type)
1566  {
1568  SerializeChoice (2, 0, false);
1569  SerializeNull ();
1570  break;
1572  default:
1573  SerializeChoice (2, 1, false);
1574  SerializeSequence (std::bitset<0> (), false);
1576  {
1577  case 30:
1578  SerializeEnum (8, 0);
1579  break;
1580  case 60:
1581  SerializeEnum (8, 1);
1582  break;
1583  case 120:
1584  SerializeEnum (8, 2);
1585  break;
1586  case 180:
1587  SerializeEnum (8, 3);
1588  break;
1589  case 240:
1590  SerializeEnum (8, 4);
1591  break;
1592  default:
1593  SerializeEnum (8, 5);
1594  break;
1595  }
1596 
1598  {
1599  case 30:
1600  SerializeEnum (8, 0);
1601  break;
1602  case 60:
1603  SerializeEnum (8, 1);
1604  break;
1605  case 120:
1606  SerializeEnum (8, 2);
1607  break;
1608  case 180:
1609  SerializeEnum (8, 3);
1610  break;
1611  case 240:
1612  SerializeEnum (8, 4);
1613  break;
1614  default:
1615  SerializeEnum (8, 5);
1616  break;
1617  }
1618 
1621 
1622  SerializeSequence (std::bitset<0> (), false);
1623  switch (measConfig.speedStatePars.timeToTriggerSf.sfMedium)
1624  {
1625  case 25:
1626  SerializeEnum (4, 0);
1627  break;
1628  case 50:
1629  SerializeEnum (4, 1);
1630  break;
1631  case 75:
1632  SerializeEnum (4, 2);
1633  break;
1634  case 100:
1635  default:
1636  SerializeEnum (4, 3);
1637  }
1638 
1639  switch (measConfig.speedStatePars.timeToTriggerSf.sfHigh)
1640  {
1641  case 25:
1642  SerializeEnum (4, 0);
1643  break;
1644  case 50:
1645  SerializeEnum (4, 1);
1646  break;
1647  case 75:
1648  SerializeEnum (4, 2);
1649  break;
1650  case 100:
1651  default:
1652  SerializeEnum (4, 3);
1653  }
1654  }
1655  }
1656 }
1657 
1660 {
1661  int thresholdEutraChoice, range;
1662  bIterator = DeserializeChoice (2, false, &thresholdEutraChoice, bIterator);
1663 
1664  switch (thresholdEutraChoice)
1665  {
1666  case 0:
1668  bIterator = DeserializeInteger (&range, 0, 97, bIterator);
1669  thresholdEutra->range = range;
1670  break;
1671  case 1:
1672  default:
1674  bIterator = DeserializeInteger (&range, 0, 34, bIterator);
1675  thresholdEutra->range = range;
1676  }
1677 
1678  return bIterator;
1679 }
1680 
1683 {
1684  int n;
1685  bIterator = DeserializeEnum (31, &n, bIterator);
1686  switch (n)
1687  {
1688  case 0:
1689  *qOffsetRange = -24;
1690  break;
1691  case 1:
1692  *qOffsetRange = -22;
1693  break;
1694  case 2:
1695  *qOffsetRange = -20;
1696  break;
1697  case 3:
1698  *qOffsetRange = -18;
1699  break;
1700  case 4:
1701  *qOffsetRange = -16;
1702  break;
1703  case 5:
1704  *qOffsetRange = -14;
1705  break;
1706  case 6:
1707  *qOffsetRange = -12;
1708  break;
1709  case 7:
1710  *qOffsetRange = -10;
1711  break;
1712  case 8:
1713  *qOffsetRange = -8;
1714  break;
1715  case 9:
1716  *qOffsetRange = -6;
1717  break;
1718  case 10:
1719  *qOffsetRange = -5;
1720  break;
1721  case 11:
1722  *qOffsetRange = -4;
1723  break;
1724  case 12:
1725  *qOffsetRange = -3;
1726  break;
1727  case 13:
1728  *qOffsetRange = -2;
1729  break;
1730  case 14:
1731  *qOffsetRange = -1;
1732  break;
1733  case 15:
1734  *qOffsetRange = 0;
1735  break;
1736  case 16:
1737  *qOffsetRange = 1;
1738  break;
1739  case 17:
1740  *qOffsetRange = 2;
1741  break;
1742  case 18:
1743  *qOffsetRange = 3;
1744  break;
1745  case 19:
1746  *qOffsetRange = 4;
1747  break;
1748  case 20:
1749  *qOffsetRange = 5;
1750  break;
1751  case 21:
1752  *qOffsetRange = 6;
1753  break;
1754  case 22:
1755  *qOffsetRange = 8;
1756  break;
1757  case 23:
1758  *qOffsetRange = 10;
1759  break;
1760  case 24:
1761  *qOffsetRange = 12;
1762  break;
1763  case 25:
1764  *qOffsetRange = 14;
1765  break;
1766  case 26:
1767  *qOffsetRange = 16;
1768  break;
1769  case 27:
1770  *qOffsetRange = 18;
1771  break;
1772  case 28:
1773  *qOffsetRange = 20;
1774  break;
1775  case 29:
1776  *qOffsetRange = 22;
1777  break;
1778  case 30:
1779  default:
1780  *qOffsetRange = 24;
1781  }
1782  return bIterator;
1783 }
1784 
1787 {
1788  // Deserialize RadioResourceConfigDedicated sequence
1789  std::bitset<6> optionalFieldsPresent = std::bitset<6> ();
1790  bIterator = DeserializeSequence (&optionalFieldsPresent,true,bIterator);
1791 
1792  if (optionalFieldsPresent[5])
1793  {
1794  // Deserialize srb-ToAddModList
1795  bIterator = DeserializeSrbToAddModList (&(radioResourceConfigDedicated->srbToAddModList),bIterator);
1796  }
1797 
1798  if (optionalFieldsPresent[4])
1799  {
1800  // Deserialize drb-ToAddModList
1801  bIterator = DeserializeDrbToAddModList (&(radioResourceConfigDedicated->drbToAddModList),bIterator);
1802  }
1803 
1804  if (optionalFieldsPresent[3])
1805  {
1806  // Deserialize drb-ToReleaseList
1807  int n;
1808  int val;
1809  bIterator = DeserializeSequenceOf (&n,MAX_DRB,1,bIterator);
1810  for (int i = 0; i < n; i++)
1811  {
1812  bIterator = DeserializeInteger (&val,1,32,bIterator);
1813  radioResourceConfigDedicated->drbToReleaseList.push_back (val);
1814  }
1815  }
1816 
1817  if (optionalFieldsPresent[2])
1818  {
1819  // Deserialize mac-MainConfig
1820  // ...
1821  }
1822 
1823  if (optionalFieldsPresent[1])
1824  {
1825  // Deserialize sps-Config
1826  // ...
1827  }
1828 
1829  radioResourceConfigDedicated->havePhysicalConfigDedicated = optionalFieldsPresent[0];
1830  if (optionalFieldsPresent[0])
1831  {
1832  // Deserialize physicalConfigDedicated
1833  bIterator = DeserializePhysicalConfigDedicated (&radioResourceConfigDedicated->physicalConfigDedicated,bIterator);
1834  }
1835 
1836  return bIterator;
1837 }
1838 
1840 RrcAsn1Header::DeserializeSrbToAddModList (std::list<LteRrcSap::SrbToAddMod> *srbToAddModList, Buffer::Iterator bIterator)
1841 {
1842  int numElems;
1843  bIterator = DeserializeSequenceOf (&numElems,2,1,bIterator);
1844 
1845  srbToAddModList->clear ();
1846 
1847  // Deserialize SRB-ToAddMod elements
1848  for (int i = 0; i < numElems; i++)
1849  {
1850  LteRrcSap::SrbToAddMod srbToAddMod;
1851  // Deserialize SRB-ToAddMod sequence
1852  // 2 optional fields, extension marker present
1853  std::bitset<2> optionalFields;
1854  bIterator = DeserializeSequence (&optionalFields,true,bIterator);
1855 
1856  // Deserialize srbIdentity
1857  int n;
1858  bIterator = DeserializeInteger (&n,1,2,bIterator);
1859  srbToAddMod.srbIdentity = n;
1860 
1861  if (optionalFields[1])
1862  {
1863  // Deserialize rlcConfig choice
1864  // ...
1865  }
1866 
1867  if (optionalFields[0])
1868  {
1869  // Deserialize logicalChannelConfig choice
1870  int sel;
1871  bIterator = DeserializeChoice (2,false,&sel,bIterator);
1872 
1873  // Deserialize logicalChannelConfig defaultValue
1874  if (sel == 1)
1875  {
1876  bIterator = DeserializeNull (bIterator);
1877  }
1878 
1879  // Deserialize logicalChannelConfig explicitValue
1880  else if (sel == 0)
1881  {
1882  bIterator = DeserializeLogicalChannelConfig (&srbToAddMod.logicalChannelConfig,bIterator);
1883  }
1884  }
1885  srbToAddModList->insert (srbToAddModList->end (),srbToAddMod);
1886  }
1887 
1888  return bIterator;
1889 }
1890 
1892 RrcAsn1Header::DeserializeDrbToAddModList (std::list<LteRrcSap::DrbToAddMod> *drbToAddModList, Buffer::Iterator bIterator)
1893 {
1894  int n;
1895  int val;
1896  bIterator = DeserializeSequenceOf (&n,MAX_DRB,1,bIterator);
1897 
1898  drbToAddModList->clear ();
1899 
1900  for (int i = 0; i < n; i++)
1901  {
1902  LteRrcSap::DrbToAddMod drbToAddMod;
1903 
1904  std::bitset<5> optionalFields;
1905  bIterator = DeserializeSequence (&optionalFields,true,bIterator);
1906 
1907  if (optionalFields[4])
1908  {
1909  // Deserialize epsBearerIdentity
1910  bIterator = DeserializeInteger (&val,0,15,bIterator);
1911  drbToAddMod.epsBearerIdentity = val;
1912  }
1913 
1914  bIterator = DeserializeInteger (&val,1,32,bIterator);
1915  drbToAddMod.drbIdentity = val;
1916 
1917  if (optionalFields[3])
1918  {
1919  // Deserialize pdcp-Config
1920  // ...
1921  }
1922 
1923  if (optionalFields[2])
1924  {
1925  // Deserialize RLC-Config
1926  int chosen;
1927  bIterator = DeserializeChoice (4,true,&chosen,bIterator);
1928 
1929  int sel;
1930  std::bitset<0> bitset0;
1931  switch (chosen)
1932  {
1933  case 0:
1935 
1936  // Deserialize UL-AM-RLC
1937  bIterator = DeserializeSequence (&bitset0,false, bIterator);
1938  bIterator = DeserializeEnum (64,&sel, bIterator); // t-PollRetransmit
1939  bIterator = DeserializeEnum (8,&sel, bIterator); // pollPDU
1940  bIterator = DeserializeEnum (16,&sel, bIterator); // pollByte
1941  bIterator = DeserializeEnum (8,&sel, bIterator); // maxRetxThreshold
1942 
1943  // Deserialize DL-AM-RLC
1944  bIterator = DeserializeSequence (&bitset0,false, bIterator);
1945  bIterator = DeserializeEnum (32,&sel, bIterator); // t-Reordering
1946  bIterator = DeserializeEnum (64,&sel, bIterator); // t-StatusProhibit
1947  break;
1948 
1949  case 1:
1951 
1952  // Deserialize UL-UM-RLC
1953  bIterator = DeserializeSequence (&bitset0,false, bIterator);
1954  bIterator = DeserializeEnum (2,&sel, bIterator); // sn-FieldLength
1955 
1956  // Deserialize DL-UM-RLC
1957  bIterator = DeserializeSequence (&bitset0,false, bIterator);
1958  bIterator = DeserializeEnum (2,&sel, bIterator); // sn-FieldLength
1959  bIterator = DeserializeEnum (32,&sel, bIterator); // t-Reordering
1960  break;
1961 
1962  case 2:
1964 
1965  // Deserialize UL-UM-RLC
1966  bIterator = DeserializeSequence (&bitset0,false, bIterator);
1967  bIterator = DeserializeEnum (2,&sel, bIterator); // sn-FieldLength
1968  break;
1969 
1970  case 3:
1972 
1973  // Deserialize DL-UM-RLC
1974  bIterator = DeserializeSequence (&bitset0,false, bIterator);
1975  bIterator = DeserializeEnum (2,&sel, bIterator); // sn-FieldLength
1976  bIterator = DeserializeEnum (32,&sel, bIterator); // t-Reordering
1977  break;
1978  }
1979 
1980  }
1981 
1982  if (optionalFields[1])
1983  {
1984  bIterator = DeserializeInteger (&val,3,10,bIterator);
1985  drbToAddMod.logicalChannelIdentity = val;
1986  }
1987 
1988  if (optionalFields[0])
1989  {
1990  bIterator = DeserializeLogicalChannelConfig (&drbToAddMod.logicalChannelConfig,bIterator);
1991  }
1992 
1993  drbToAddModList->insert (drbToAddModList->end (),drbToAddMod);
1994  }
1995  return bIterator;
1996 }
1997 
2000 {
2001  int n;
2002 
2003  // Deserialize LogicalChannelConfig sequence
2004  // 1 optional field, extension marker is present.
2005  std::bitset<1> bitset1;
2006  bIterator = DeserializeSequence (&bitset1,true,bIterator);
2007 
2008  if (bitset1[0])
2009  {
2010  // Deserialize ul-SpecificParameters sequence
2011  bIterator = DeserializeSequence (&bitset1,false,bIterator);
2012 
2013  // Deserialize priority
2014  bIterator = DeserializeInteger (&n,1,16,bIterator);
2015  logicalChannelConfig->priority = n;
2016 
2017  // Deserialize prioritisedBitRate
2018  bIterator = DeserializeEnum (16,&n,bIterator);
2019  uint16_t prioritizedBitRateKbps;
2020 
2021  switch (n)
2022  {
2023  case 0:
2024  prioritizedBitRateKbps = 0;
2025  break;
2026  case 1:
2027  prioritizedBitRateKbps = 8;
2028  break;
2029  case 2:
2030  prioritizedBitRateKbps = 16;
2031  break;
2032  case 3:
2033  prioritizedBitRateKbps = 32;
2034  break;
2035  case 4:
2036  prioritizedBitRateKbps = 64;
2037  break;
2038  case 5:
2039  prioritizedBitRateKbps = 128;
2040  break;
2041  case 6:
2042  prioritizedBitRateKbps = 256;
2043  break;
2044  case 7:
2045  prioritizedBitRateKbps = 10000;
2046  break;
2047  default:
2048  prioritizedBitRateKbps = 10000;
2049  }
2050  logicalChannelConfig->prioritizedBitRateKbps = prioritizedBitRateKbps;
2051 
2052  // Deserialize bucketSizeDuration
2053  bIterator = DeserializeEnum (8,&n,bIterator);
2054  uint16_t bucketSizeDurationMs;
2055  switch (n)
2056  {
2057  case 0:
2058  bucketSizeDurationMs = 50;
2059  break;
2060  case 1:
2061  bucketSizeDurationMs = 100;
2062  break;
2063  case 2:
2064  bucketSizeDurationMs = 150;
2065  break;
2066  case 3:
2067  bucketSizeDurationMs = 300;
2068  break;
2069  case 4:
2070  bucketSizeDurationMs = 500;
2071  break;
2072  case 5:
2073  bucketSizeDurationMs = 1000;
2074  break;
2075  default:
2076  bucketSizeDurationMs = 1000;
2077  }
2078  logicalChannelConfig->bucketSizeDurationMs = bucketSizeDurationMs;
2079 
2080  if (bitset1[0])
2081  {
2082  // Deserialize logicalChannelGroup
2083  bIterator = DeserializeInteger (&n,0,3,bIterator);
2084  logicalChannelConfig->logicalChannelGroup = n;
2085  }
2086  }
2087  return bIterator;
2088 }
2089 
2092 {
2093  std::bitset<10> optionalFieldPresent;
2094  bIterator = DeserializeSequence (&optionalFieldPresent,true,bIterator);
2095 
2096  if (optionalFieldPresent[9])
2097  {
2098  // Deserialize pdsch-ConfigDedicated
2099  // ...
2100  }
2101  if (optionalFieldPresent[8])
2102  {
2103  // Deserialize pucch-ConfigDedicated
2104  // ...
2105  }
2106  if (optionalFieldPresent[7])
2107  {
2108  // Deserialize pusch-ConfigDedicated
2109  // ...
2110  }
2111  if (optionalFieldPresent[6])
2112  {
2113  // Deserialize uplinkPowerControlDedicated
2114  // ...
2115  }
2116  if (optionalFieldPresent[5])
2117  {
2118  // Deserialize tpc-PDCCH-ConfigPUCCH
2119  // ...
2120  }
2121  if (optionalFieldPresent[4])
2122  {
2123  // Deserialize tpc-PDCCH-ConfigPUSCH
2124  // ...
2125  }
2126  if (optionalFieldPresent[3])
2127  {
2128  // Deserialize cqi-ReportConfig
2129  // ...
2130  }
2131  physicalConfigDedicated->haveSoundingRsUlConfigDedicated = optionalFieldPresent[2];
2132  if (optionalFieldPresent[2])
2133  {
2134  // Deserialize soundingRS-UL-ConfigDedicated
2135  int sel;
2136  bIterator = DeserializeChoice (2,false,&sel,bIterator);
2137 
2138  if (sel == 0)
2139  {
2141 
2142  bIterator = DeserializeNull (bIterator);
2143  }
2144 
2145  else if (sel == 1)
2146  {
2148 
2149  std::bitset<0> bitset0;
2150  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2151 
2152  int slct;
2153 
2154  // Deserialize srs-Bandwidth
2155  bIterator = DeserializeEnum (4,&slct,bIterator);
2156  physicalConfigDedicated->soundingRsUlConfigDedicated.srsBandwidth = slct;
2157 
2158  // Deserialize srs-HoppingBandwidth
2159  bIterator = DeserializeEnum (4,&slct,bIterator);
2160 
2161  // Deserialize freqDomainPosition
2162  bIterator = DeserializeInteger (&slct,0,23,bIterator);
2163 
2164  // Deserialize duration
2165  bool duration;
2166  bIterator = DeserializeBoolean (&duration,bIterator);
2167 
2168  // Deserialize srs-ConfigIndex
2169  bIterator = DeserializeInteger (&slct,0,1023,bIterator);
2170  physicalConfigDedicated->soundingRsUlConfigDedicated.srsConfigIndex = slct;
2171 
2172  // Deserialize transmissionComb
2173  bIterator = DeserializeInteger (&slct,0,1,bIterator);
2174 
2175  // Deserialize cyclicShift
2176  bIterator = DeserializeEnum (8,&slct,bIterator);
2177  }
2178  }
2179  physicalConfigDedicated->haveAntennaInfoDedicated = optionalFieldPresent[1];
2180  if (optionalFieldPresent[1])
2181  {
2182  // Deserialize antennaInfo
2183  int sel;
2184  bIterator = DeserializeChoice (2,false,&sel,bIterator);
2185  if (sel == 1)
2186  {
2187  bIterator = DeserializeNull (bIterator);
2188  }
2189  else if (sel == 0)
2190  {
2191  std::bitset<1> codebookSubsetRestrictionPresent;
2192  bIterator = DeserializeSequence (&codebookSubsetRestrictionPresent,false,bIterator);
2193 
2194  int txmode;
2195  bIterator = DeserializeEnum (8,&txmode,bIterator);
2196  physicalConfigDedicated->antennaInfo.transmissionMode = txmode;
2197 
2198  if (codebookSubsetRestrictionPresent[0])
2199  {
2200  // Deserialize codebookSubsetRestriction
2201  // ...
2202  }
2203 
2204  int txantennaselchosen;
2205  bIterator = DeserializeChoice (2,false,&txantennaselchosen,bIterator);
2206  if (txantennaselchosen == 0)
2207  {
2208  // Deserialize ue-TransmitAntennaSelection release
2209  bIterator = DeserializeNull (bIterator);
2210  }
2211  else if (txantennaselchosen == 1)
2212  {
2213  // Deserialize ue-TransmitAntennaSelection setup
2214  // ...
2215  }
2216  }
2217  }
2218  if (optionalFieldPresent[0])
2219  {
2220  // Deserialize schedulingRequestConfig
2221  // ...
2222  }
2223  return bIterator;
2224 }
2225 
2226 void
2227 RrcAsn1Header::Print (std::ostream &os, LteRrcSap::RadioResourceConfigDedicated radioResourceConfigDedicated) const
2228 {
2229  os << " srbToAddModList: " << std::endl;
2230  std::list<LteRrcSap::SrbToAddMod>::iterator it = radioResourceConfigDedicated.srbToAddModList.begin ();
2231  for (; it != radioResourceConfigDedicated.srbToAddModList.end (); it++)
2232  {
2233  os << " srbIdentity: " << (int)it->srbIdentity << std::endl;
2234  os << " logicalChannelConfig: " << std::endl;
2235  os << " priority: " << (int)it->logicalChannelConfig.priority << std::endl;
2236  os << " prioritizedBitRateKbps: " << (int)it->logicalChannelConfig.prioritizedBitRateKbps << std::endl;
2237  os << " bucketSizeDurationMs: " << (int)it->logicalChannelConfig.bucketSizeDurationMs << std::endl;
2238  os << " logicalChannelGroup: " << (int)it->logicalChannelConfig.logicalChannelGroup << std::endl;
2239  }
2240  os << std::endl;
2241 
2242  os << " drbToAddModList: " << std::endl;
2243  std::list<LteRrcSap::DrbToAddMod>::iterator it2 = radioResourceConfigDedicated.drbToAddModList.begin ();
2244  for (; it2 != radioResourceConfigDedicated.drbToAddModList.end (); it2++)
2245  {
2246  os << " epsBearerIdentity: " << (int)it2->epsBearerIdentity << std::endl;
2247  os << " drbIdentity: " << (int)it2->drbIdentity << std::endl;
2248  os << " rlcConfig: " << it2->rlcConfig.choice << std::endl;
2249  os << " logicalChannelIdentity: " << (int)it2->logicalChannelIdentity << std::endl;
2250  os << " logicalChannelConfig: " << std::endl;
2251  os << " priority: " << (int)it2->logicalChannelConfig.priority << std::endl;
2252  os << " prioritizedBitRateKbps: " << (int)it2->logicalChannelConfig.prioritizedBitRateKbps << std::endl;
2253  os << " bucketSizeDurationMs: " << (int)it2->logicalChannelConfig.bucketSizeDurationMs << std::endl;
2254  os << " logicalChannelGroup: " << (int)it2->logicalChannelConfig.logicalChannelGroup << std::endl;
2255  }
2256  os << std::endl;
2257 
2258  os << " drbToReleaseList: ";
2259  std::list<uint8_t>::iterator it3 = radioResourceConfigDedicated.drbToReleaseList.begin ();
2260  for (; it3 != radioResourceConfigDedicated.drbToReleaseList.end (); it3++)
2261  {
2262  os << (int)*it3 << ", ";
2263  }
2264  os << std::endl;
2265 
2266  os << " havePhysicalConfigDedicated: " << radioResourceConfigDedicated.havePhysicalConfigDedicated << std::endl;
2267 
2268  if (radioResourceConfigDedicated.havePhysicalConfigDedicated)
2269  {
2270  os << " physicalConfigDedicated: " << std::endl;
2271 
2272  os << " haveSoundingRsUlConfigDedicated: " << radioResourceConfigDedicated.physicalConfigDedicated.haveSoundingRsUlConfigDedicated << std::endl;
2273  if (radioResourceConfigDedicated.physicalConfigDedicated.haveSoundingRsUlConfigDedicated)
2274  {
2275  os << " soundingRsUlConfigDedicated: " << std::endl;
2276  os << " type: " << radioResourceConfigDedicated.physicalConfigDedicated.soundingRsUlConfigDedicated.type << std::endl;
2277  os << " srsBandwidth: " << (int)radioResourceConfigDedicated.physicalConfigDedicated.soundingRsUlConfigDedicated.srsBandwidth << std::endl;
2278  os << " srsConfigIndex: " << (int)radioResourceConfigDedicated.physicalConfigDedicated.soundingRsUlConfigDedicated.srsConfigIndex << std::endl;
2279  }
2280 
2281  os << " haveAntennaInfoDedicated: " << radioResourceConfigDedicated.physicalConfigDedicated.haveAntennaInfoDedicated << std::endl;
2282  if (radioResourceConfigDedicated.physicalConfigDedicated.haveAntennaInfoDedicated)
2283  {
2284  os << " antennaInfo Tx mode: " << (int)radioResourceConfigDedicated.physicalConfigDedicated.antennaInfo.transmissionMode << std::endl;
2285  }
2286  }
2287 }
2288 
2291 {
2292  std::bitset<0> bitset0;
2293  int n;
2294 
2295  std::bitset<3> sysInfoBlkT1Opts;
2296  bIterator = DeserializeSequence (&sysInfoBlkT1Opts,false,bIterator);
2297 
2298  // Deserialize cellAccessRelatedInfo
2299  std::bitset<1> cellAccessRelatedInfoOpts;
2300  bIterator = DeserializeSequence (&cellAccessRelatedInfoOpts,false,bIterator);
2301 
2302  // Deserialize plmn-IdentityList
2303  int numPlmnIdentityInfoElements;
2304  bIterator = DeserializeSequenceOf (&numPlmnIdentityInfoElements,6,1,bIterator);
2305  for (int i = 0; i < numPlmnIdentityInfoElements; i++)
2306  {
2307  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2308 
2309  // plmn-Identity
2310  bIterator = DeserializePlmnIdentity (&systemInformationBlockType1->cellAccessRelatedInfo.plmnIdentityInfo.plmnIdentity,bIterator);
2311  }
2312 
2313  // Deserialize trackingAreaCode
2314  std::bitset<16> trackingAreaCode;
2315  bIterator = DeserializeBitstring (&trackingAreaCode,bIterator);
2316 
2317  // Deserialize cellIdentity
2318  std::bitset<28> cellIdentity;
2319  bIterator = DeserializeBitstring (&cellIdentity,bIterator);
2320  systemInformationBlockType1->cellAccessRelatedInfo.cellIdentity = cellIdentity.to_ulong ();
2321 
2322  // Deserialize cellBarred
2323  bIterator = DeserializeEnum (2,&n,bIterator);
2324 
2325  // Deserialize intraFreqReselection
2326  bIterator = DeserializeEnum (2,&n,bIterator);
2327 
2328  // Deserialize csg-Indication
2329  bIterator = DeserializeBoolean (&systemInformationBlockType1->cellAccessRelatedInfo.csgIndication,bIterator);
2330 
2331  if (cellAccessRelatedInfoOpts[0])
2332  {
2333  // Deserialize csg-Identity
2334  std::bitset<27> csgIdentity;
2335  bIterator = DeserializeBitstring (&csgIdentity,bIterator);
2336  systemInformationBlockType1->cellAccessRelatedInfo.csgIdentity = csgIdentity.to_ulong ();
2337  }
2338 
2339  // Deserialize cellSelectionInfo
2340  std::bitset<1> qRxLevMinOffsetPresent;
2341  bIterator = DeserializeSequence (&qRxLevMinOffsetPresent,false,bIterator);
2342  bIterator = DeserializeInteger (&n,-70,-22,bIterator); //q-RxLevMin
2343  if (qRxLevMinOffsetPresent[0])
2344  {
2345  // Deserialize qRxLevMinOffset
2346  // ...
2347  }
2348 
2349  if (sysInfoBlkT1Opts[2])
2350  {
2351  // Deserialize p-Max
2352  // ...
2353  }
2354 
2355  // freqBandIndicator
2356  bIterator = DeserializeInteger (&n,1,64,bIterator);
2357 
2358  // schedulingInfoList
2359  int numSchedulingInfo;
2360  bIterator = DeserializeSequenceOf (&numSchedulingInfo,MAX_SI_MESSAGE,1,bIterator);
2361  for (int i = 0; i < numSchedulingInfo; i++)
2362  {
2363  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2364  bIterator = DeserializeEnum (7,&n,bIterator); // si-Periodicity
2365  int numSibType;
2366  bIterator = DeserializeSequenceOf (&numSibType,MAX_SIB - 1,0, bIterator); // sib-MappingInfo
2367  for (int j = 0; j < numSibType; j++)
2368  {
2369  bIterator = DeserializeEnum (16,&n,bIterator); // SIB-Type
2370  }
2371  }
2372 
2373  if (sysInfoBlkT1Opts[1])
2374  {
2375  // tdd-Config
2376  // ...
2377  }
2378 
2379  // si-WindowLength
2380  bIterator = DeserializeEnum (7,&n,bIterator);
2381 
2382  // systemInfoValueTag
2383  bIterator = DeserializeInteger (&n,0,31,bIterator);
2384 
2385  if (sysInfoBlkT1Opts[0])
2386  {
2387  // Deserialize nonCriticalExtension
2388  // ...
2389  }
2390  return bIterator;
2391 }
2392 
2395 {
2396  std::bitset<0> bitset0;
2397  int n;
2398 
2399  std::bitset<2> sysInfoBlkT2Opts;
2400  bIterator = DeserializeSequence (&sysInfoBlkT2Opts,true,bIterator);
2401  if (sysInfoBlkT2Opts[1])
2402  {
2403  // Deserialize ac-BarringInfo
2404  // ...
2405  }
2406 
2407  // Deserialize radioResourceConfigCommon
2408  bIterator = DeserializeRadioResourceConfigCommonSib (&systemInformationBlockType2->radioResourceConfigCommon, bIterator);
2409 
2410  // Deserialize ue-TimersAndConstants
2411  bIterator = DeserializeSequence (&bitset0,true,bIterator);
2412  bIterator = DeserializeEnum (8,&n,bIterator); // t300
2413  bIterator = DeserializeEnum (8,&n,bIterator); // t301
2414  bIterator = DeserializeEnum (7,&n,bIterator); // t310
2415  bIterator = DeserializeEnum (8,&n,bIterator); // n310
2416  bIterator = DeserializeEnum (7,&n,bIterator); // t311
2417  bIterator = DeserializeEnum (8,&n,bIterator); // n311
2418 
2419  // Deserialize freqInfo
2420  std::bitset<2> freqInfoOpts;
2421  bIterator = DeserializeSequence (&freqInfoOpts,false,bIterator);
2422  if (freqInfoOpts[1])
2423  {
2424  // Deserialize ul-CarrierFreq
2425  bIterator = DeserializeInteger (&n, 0, MAX_EARFCN, bIterator);
2426  systemInformationBlockType2->freqInfo.ulCarrierFreq = n;
2427  }
2428  if (freqInfoOpts[0])
2429  {
2430  // Deserialize ul-Bandwidth
2431  bIterator = DeserializeEnum (6, &n, bIterator);
2432  switch (n)
2433  {
2434  case 0:
2435  systemInformationBlockType2->freqInfo.ulBandwidth = 6;
2436  break;
2437  case 1:
2438  systemInformationBlockType2->freqInfo.ulBandwidth = 15;
2439  break;
2440  case 2:
2441  systemInformationBlockType2->freqInfo.ulBandwidth = 25;
2442  break;
2443  case 3:
2444  systemInformationBlockType2->freqInfo.ulBandwidth = 50;
2445  break;
2446  case 4:
2447  systemInformationBlockType2->freqInfo.ulBandwidth = 75;
2448  break;
2449  case 5:
2450  systemInformationBlockType2->freqInfo.ulBandwidth = 100;
2451  break;
2452  default:
2453  systemInformationBlockType2->freqInfo.ulBandwidth = 6;
2454  }
2455  }
2456 
2457  // additionalSpectrumEmission
2458  bIterator = DeserializeInteger (&n,1,32,bIterator);
2459 
2460  if (sysInfoBlkT2Opts[0])
2461  {
2462  // Deserialize mbsfn-SubframeConfigList
2463  // ...
2464  }
2465 
2466  // Deserialize timeAlignmentTimerCommon
2467  bIterator = DeserializeEnum (8,&n,bIterator);
2468 
2469  return bIterator;
2470 }
2471 
2472 
2475 {
2476  std::bitset<0> bitset0;
2477  int n;
2478 
2479  std::bitset<9> rrCfgCommOptions;
2480  bIterator = DeserializeSequence (&rrCfgCommOptions,true,bIterator);
2481 
2482  // rach-ConfigCommon
2483  if (rrCfgCommOptions[8])
2484  {
2485  bIterator = DeserializeRachConfigCommon (&radioResourceConfigCommon->rachConfigCommon, bIterator);
2486  }
2487 
2488  // prach-Config
2489  std::bitset<1> prachConfigInfoPresent;
2490  bIterator = DeserializeSequence (&prachConfigInfoPresent,false,bIterator);
2491 
2492  // prach-Config -> rootSequenceIndex
2493  bIterator = DeserializeInteger (&n,0,1023,bIterator);
2494 
2495  // prach-Config -> prach-ConfigInfo
2496  if (prachConfigInfoPresent[0])
2497  {
2498  // ...
2499  }
2500 
2501  // pdsch-ConfigCommon
2502  if (rrCfgCommOptions[7])
2503  {
2504  // ...
2505  }
2506 
2507  // pusch-ConfigCommon
2508  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2509 
2510  // pusch-ConfigCommon -> pusch-ConfigBasic
2511  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2512 
2513  // pusch-ConfigCommon -> pusch-ConfigBasic -> n-SB
2514  bIterator = DeserializeInteger (&n,1,4,bIterator);
2515 
2516  // pusch-ConfigCommon -> pusch-ConfigBasic -> hoppingMode
2517  bIterator = DeserializeEnum (2,&n,bIterator);
2518 
2519  // pusch-ConfigCommon -> pusch-ConfigBasic -> pusch-HoppingOffset
2520  bIterator = DeserializeInteger (&n,0,98,bIterator);
2521 
2522  // pusch-ConfigCommon -> pusch-ConfigBasic -> enable64QAM
2523  bool enable64QAM;
2524  bIterator = DeserializeBoolean (&enable64QAM,bIterator);
2525 
2526  // ul-ReferenceSignalsPUSCH
2527  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2528 
2529  // groupHoppingEnabled
2530  bool dummyBool;
2531  bIterator = DeserializeBoolean (&dummyBool,bIterator);
2532 
2533  // groupAssignmentPUSCH
2534  bIterator = DeserializeInteger (&n,0,29,bIterator);
2535 
2536  // sequenceHoppingEnabled
2537  bIterator = DeserializeBoolean (&dummyBool,bIterator);
2538 
2539  // cyclicShift
2540  bIterator = DeserializeInteger (&n,0,7,bIterator);
2541 
2542  // phich-Config
2543  if (rrCfgCommOptions[6])
2544  {
2545  // ...
2546  }
2547 
2548  // pucch-ConfigCommon
2549  if (rrCfgCommOptions[5])
2550  {
2551  // ...
2552  }
2553 
2554  // soundingRS-UL-ConfigCommon
2555  if (rrCfgCommOptions[4])
2556  {
2557  // ...
2558  }
2559 
2560  // uplinkPowerControlCommon
2561  if (rrCfgCommOptions[3])
2562  {
2563  // ...
2564  }
2565 
2566  // antennaInfoCommon
2567  if (rrCfgCommOptions[2])
2568  {
2569  // ...
2570  }
2571 
2572  // p-Max
2573  if (rrCfgCommOptions[1])
2574  {
2575  // ...
2576  }
2577 
2578  // tdd-Config
2579  if (rrCfgCommOptions[0])
2580  {
2581  // ...
2582  }
2583 
2584  // ul-CyclicPrefixLength
2585  bIterator = DeserializeEnum (2,&n,bIterator);
2586 
2587  return bIterator;
2588 }
2589 
2592 {
2593  std::bitset<0> bitset0;
2594  int n;
2595 
2596  bIterator = DeserializeSequence (&bitset0,true,bIterator);
2597 
2598  // preambleInfo
2599  std::bitset<1> preamblesGroupAConfigPresent;
2600  bIterator = DeserializeSequence (&preamblesGroupAConfigPresent,false,bIterator);
2601 
2602  // numberOfRA-Preambles
2603  bIterator = DeserializeEnum (16,&n,bIterator);
2604  switch (n)
2605  {
2606  case 0:
2607  rachConfigCommon->preambleInfo.numberOfRaPreambles = 4;
2608  break;
2609  case 1:
2610  rachConfigCommon->preambleInfo.numberOfRaPreambles = 8;
2611  break;
2612  case 2:
2613  rachConfigCommon->preambleInfo.numberOfRaPreambles = 12;
2614  break;
2615  case 3:
2616  rachConfigCommon->preambleInfo.numberOfRaPreambles = 16;
2617  break;
2618  case 4:
2619  rachConfigCommon->preambleInfo.numberOfRaPreambles = 20;
2620  break;
2621  case 5:
2622  rachConfigCommon->preambleInfo.numberOfRaPreambles = 24;
2623  break;
2624  case 6:
2625  rachConfigCommon->preambleInfo.numberOfRaPreambles = 28;
2626  break;
2627  case 7:
2628  rachConfigCommon->preambleInfo.numberOfRaPreambles = 32;
2629  break;
2630  case 8:
2631  rachConfigCommon->preambleInfo.numberOfRaPreambles = 36;
2632  break;
2633  case 9:
2634  rachConfigCommon->preambleInfo.numberOfRaPreambles = 40;
2635  break;
2636  case 10:
2637  rachConfigCommon->preambleInfo.numberOfRaPreambles = 44;
2638  break;
2639  case 11:
2640  rachConfigCommon->preambleInfo.numberOfRaPreambles = 48;
2641  break;
2642  case 12:
2643  rachConfigCommon->preambleInfo.numberOfRaPreambles = 52;
2644  break;
2645  case 13:
2646  rachConfigCommon->preambleInfo.numberOfRaPreambles = 56;
2647  break;
2648  case 14:
2649  rachConfigCommon->preambleInfo.numberOfRaPreambles = 60;
2650  break;
2651  case 15:
2652  rachConfigCommon->preambleInfo.numberOfRaPreambles = 64;
2653  break;
2654  default:
2655  rachConfigCommon->preambleInfo.numberOfRaPreambles = 0;
2656  }
2657 
2658  rachConfigCommon->preambleInfo.numberOfRaPreambles = n;
2659 
2660  if (preamblesGroupAConfigPresent[0])
2661  {
2662  // Deserialize preamblesGroupAConfig
2663  // ...
2664  }
2665 
2666  // powerRampingParameters
2667  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2668  bIterator = DeserializeEnum (4,&n,bIterator); // powerRampingStep
2669  bIterator = DeserializeEnum (16,&n,bIterator); // preambleInitialReceivedTargetPower
2670 
2671  // ra-SupervisionInfo
2672  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2673  bIterator = DeserializeEnum (11,&n,bIterator); // preambleTransMax
2674  switch (n)
2675  {
2676  case 0:
2677  rachConfigCommon->raSupervisionInfo.preambleTransMax = 3;
2678  break;
2679  case 1:
2680  rachConfigCommon->raSupervisionInfo.preambleTransMax = 4;
2681  break;
2682  case 2:
2683  rachConfigCommon->raSupervisionInfo.preambleTransMax = 5;
2684  break;
2685  case 3:
2686  rachConfigCommon->raSupervisionInfo.preambleTransMax = 6;
2687  break;
2688  case 4:
2689  rachConfigCommon->raSupervisionInfo.preambleTransMax = 7;
2690  break;
2691  case 5:
2692  rachConfigCommon->raSupervisionInfo.preambleTransMax = 8;
2693  break;
2694  case 6:
2695  rachConfigCommon->raSupervisionInfo.preambleTransMax = 10;
2696  break;
2697  case 7:
2698  rachConfigCommon->raSupervisionInfo.preambleTransMax = 20;
2699  break;
2700  case 8:
2701  rachConfigCommon->raSupervisionInfo.preambleTransMax = 50;
2702  break;
2703  case 9:
2704  rachConfigCommon->raSupervisionInfo.preambleTransMax = 100;
2705  break;
2706  case 10:
2707  rachConfigCommon->raSupervisionInfo.preambleTransMax = 200;
2708  break;
2709  default:
2710  rachConfigCommon->raSupervisionInfo.preambleTransMax = 0;
2711  }
2712 
2713  // ra-ResponseWindowSize
2714  bIterator = DeserializeEnum (8,&n,bIterator);
2715  switch (n)
2716  {
2717  case 0:
2718  rachConfigCommon->raSupervisionInfo.raResponseWindowSize = 2;
2719  break;
2720  case 1:
2721  rachConfigCommon->raSupervisionInfo.raResponseWindowSize = 3;
2722  break;
2723  case 2:
2724  rachConfigCommon->raSupervisionInfo.raResponseWindowSize = 4;
2725  break;
2726  case 3:
2727  rachConfigCommon->raSupervisionInfo.raResponseWindowSize = 5;
2728  break;
2729  case 4:
2730  rachConfigCommon->raSupervisionInfo.raResponseWindowSize = 6;
2731  break;
2732  case 5:
2733  rachConfigCommon->raSupervisionInfo.raResponseWindowSize = 7;
2734  break;
2735  case 6:
2736  rachConfigCommon->raSupervisionInfo.raResponseWindowSize = 8;
2737  break;
2738  case 7:
2739  rachConfigCommon->raSupervisionInfo.raResponseWindowSize = 10;
2740  break;
2741  default:
2742  rachConfigCommon->raSupervisionInfo.raResponseWindowSize = 0;
2743  }
2744 
2745  bIterator = DeserializeEnum (8,&n,bIterator); // mac-ContentionResolutionTimer
2746  bIterator = DeserializeInteger (&n,1,8,bIterator); //maxHARQ-Msg3Tx
2747  return bIterator;
2748 }
2749 
2752 {
2753  std::bitset<0> bitset0;
2754  int n;
2755 
2756  bIterator = DeserializeSequence (&bitset0,true,bIterator);
2757 
2758  // rach-ConfigCommon
2759  bIterator = DeserializeRachConfigCommon (&radioResourceConfigCommonSib->rachConfigCommon, bIterator);
2760 
2761  // bcch-Config
2762  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2763  bIterator = DeserializeEnum (4,&n,bIterator); // modificationPeriodCoeff
2764 
2765  // pcch-Config
2766  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2767  bIterator = DeserializeEnum (4,&n,bIterator); // defaultPagingCycle
2768  bIterator = DeserializeEnum (8,&n,bIterator); // nB
2769 
2770  // prach-Config
2771  std::bitset<1> prachConfigInfoPresent;
2772  bIterator = DeserializeSequence (&prachConfigInfoPresent,false,bIterator);
2773  // prach-Config -> rootSequenceIndex
2774  bIterator = DeserializeInteger (&n,0,1023,bIterator);
2775  // prach-Config -> prach-ConfigInfo
2776  if (prachConfigInfoPresent[0])
2777  {
2778  // ...
2779  }
2780 
2781  // pdsch-ConfigCommon
2782  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2783  bIterator = DeserializeInteger (&n,-60,50,bIterator); // referenceSignalPower
2784  bIterator = DeserializeInteger (&n,0,3,bIterator); // p-b
2785 
2786  // pusch-ConfigCommon
2787  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2788 
2789  // pusch-ConfigCommon -> pusch-ConfigBasic
2790  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2791 
2792  // pusch-ConfigCommon -> pusch-ConfigBasic -> n-SB
2793  bIterator = DeserializeInteger (&n,1,4,bIterator);
2794 
2795  // pusch-ConfigCommon -> pusch-ConfigBasic -> hoppingMode
2796  bIterator = DeserializeEnum (2,&n,bIterator);
2797 
2798  // pusch-ConfigCommon -> pusch-ConfigBasic -> pusch-HoppingOffset
2799  bIterator = DeserializeInteger (&n,0,98,bIterator);
2800 
2801  // pusch-ConfigCommon -> pusch-ConfigBasic -> enable64QAM
2802  bool dummyBoolean;
2803  bIterator = DeserializeBoolean (&dummyBoolean,bIterator);
2804 
2805  // ul-ReferenceSignalsPUSCH
2806  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2807 
2808  // groupHoppingEnabled
2809  bIterator = DeserializeBoolean (&dummyBoolean,bIterator);
2810 
2811  // groupAssignmentPUSCH
2812  bIterator = DeserializeInteger (&n,0,29,bIterator);
2813 
2814  // sequenceHoppingEnabled
2815  bIterator = DeserializeBoolean (&dummyBoolean,bIterator);
2816 
2817  // cyclicShift
2818  bIterator = DeserializeInteger (&n,0,7,bIterator);
2819 
2820  // pucch-ConfigCommon
2821  bIterator = DeserializeEnum (3,&n,bIterator); // deltaPUCCH-Shift
2822  bIterator = DeserializeInteger (&n,0,98,bIterator); // nRB-CQI
2823  bIterator = DeserializeInteger (&n,0,7,bIterator); // nCS-AN
2824  bIterator = DeserializeInteger (&n,0,2047,bIterator); // n1PUCCH-AN
2825 
2826  // soundingRS-UL-ConfigCommon
2827  int choice;
2828  bIterator = DeserializeChoice (2,false,&choice,bIterator);
2829  if (choice == 0)
2830  {
2831  bIterator = DeserializeNull (bIterator); // release
2832  }
2833  if (choice == 1)
2834  {
2835  // setup
2836  // ...
2837  }
2838 
2839  // uplinkPowerControlCommon
2840  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2841  bIterator = DeserializeInteger (&n,-126,24,bIterator); // p0-NominalPUSCH
2842  bIterator = DeserializeEnum (8,&n,bIterator); // alpha
2843  bIterator = DeserializeInteger (&n,-127,-96,bIterator); // p0-NominalPUCCH
2844  //deltaFList-PUCCH
2845  bIterator = DeserializeSequence (&bitset0,false,bIterator);
2846  bIterator = DeserializeEnum (3,&n,bIterator); // deltaF-PUCCH-Format1
2847  bIterator = DeserializeEnum (3,&n,bIterator); // deltaF-PUCCH-Format1b
2848  bIterator = DeserializeEnum (4,&n,bIterator); // deltaF-PUCCH-Format2
2849  bIterator = DeserializeEnum (3,&n,bIterator); // deltaF-PUCCH-Format2a
2850  bIterator = DeserializeEnum (3,&n,bIterator); // deltaF-PUCCH-Format2b
2851  bIterator = DeserializeInteger (&n,-1,6,bIterator); // deltaPreambleMsg3
2852 
2853  // ul-CyclicPrefixLength
2854  bIterator = DeserializeEnum (2,&n,bIterator);
2855 
2856  return bIterator;
2857 }
2858 
2861 {
2862  int n;
2863  std::bitset<0> b0;
2864  std::bitset<1> measResultNeighCellsPresent;
2865  bIterator = DeserializeSequence (&measResultNeighCellsPresent,true,bIterator);
2866 
2867  // Deserialize measId
2868  bIterator = DeserializeInteger (&n, 1, MAX_MEAS_ID, bIterator);
2869  measResults->measId = n;
2870 
2871  // Deserialize measResultServCell
2872  bIterator = DeserializeSequence (&b0,false,bIterator);
2873 
2874  // Deserialize rsrpResult
2875  bIterator = DeserializeInteger (&n, 0, 97, bIterator);
2876  measResults->rsrpResult = n;
2877 
2878  // Deserialize rsrqResult
2879  bIterator = DeserializeInteger (&n, 0, 34, bIterator);
2880  measResults->rsrqResult = n;
2881 
2882  measResults->haveMeasResultNeighCells = measResultNeighCellsPresent[0];
2883  if ( measResults->haveMeasResultNeighCells)
2884  {
2885  int measResultNeighCellsChoice;
2886 
2887  // Deserialize measResultNeighCells
2888  bIterator = DeserializeChoice (4,false,&measResultNeighCellsChoice,bIterator);
2889 
2890  if (measResultNeighCellsChoice == 0)
2891  {
2892  // Deserialize measResultListEUTRA
2893  int numElems;
2894  bIterator = DeserializeSequenceOf (&numElems,MAX_CELL_REPORT,1,bIterator);
2895 
2896  for (int i = 0; i < numElems; i++)
2897  {
2898  LteRrcSap::MeasResultEutra measResultEutra;
2899 
2900  std::bitset<1> isCgiInfoPresent;
2901  bIterator = DeserializeSequence (&isCgiInfoPresent,false,bIterator);
2902 
2903  // PhysCellId
2904  bIterator = DeserializeInteger (&n,0,503,bIterator);
2905  measResultEutra.physCellId = n;
2906 
2907  measResultEutra.haveCgiInfo = isCgiInfoPresent[0];
2908  if (isCgiInfoPresent[0])
2909  {
2910  std::bitset<1> havePlmnIdentityList;
2911  bIterator = DeserializeSequence (&havePlmnIdentityList,false,bIterator);
2912 
2913  // Deserialize cellGlobalId
2914  bIterator = DeserializeSequence (&b0,false,bIterator);
2915 
2916  // Deserialize plmn-Identity
2917  bIterator = DeserializePlmnIdentity (&measResultEutra.cgiInfo.plmnIdentity,bIterator);
2918 
2919  // Deserialize CellIdentity
2920  std::bitset<28> cellId;
2921  bIterator = DeserializeBitstring (&cellId,bIterator);
2922  measResultEutra.cgiInfo.cellIdentity = cellId.to_ulong ();
2923 
2924  // Deserialize trackingAreaCode
2925  std::bitset<16> trArCo;
2926  bIterator = DeserializeBitstring (&trArCo,bIterator);
2927  measResultEutra.cgiInfo.trackingAreaCode = trArCo.to_ulong ();
2928 
2929  // Deserialize plmn-IdentityList
2930  if (havePlmnIdentityList[0])
2931  {
2932  int numPlmnElems;
2933  bIterator = DeserializeSequenceOf (&numPlmnElems, 5, 1, bIterator);
2934 
2935  for ( int j = 0; j < numPlmnElems; j++)
2936  {
2937  uint32_t plmnId;
2938  bIterator = DeserializePlmnIdentity (&plmnId,bIterator);
2939  measResultEutra.cgiInfo.plmnIdentityList.push_back (plmnId);
2940  }
2941  }
2942  }
2943 
2944  // Deserialize measResult
2945  std::bitset<2> measResultOpts;
2946  bIterator = DeserializeSequence (&measResultOpts, true, bIterator);
2947 
2948  measResultEutra.haveRsrpResult = measResultOpts[1];
2949  if (measResultOpts[1])
2950  {
2951  // Deserialize rsrpResult
2952  bIterator = DeserializeInteger (&n,0,97,bIterator);
2953  measResultEutra.rsrpResult = n;
2954  }
2955 
2956  measResultEutra.haveRsrqResult = measResultOpts[0];
2957  if (measResultOpts[0])
2958  {
2959  // Deserialize rsrqResult
2960  bIterator = DeserializeInteger (&n,0,34,bIterator);
2961  measResultEutra.rsrqResult = n;
2962  }
2963 
2964  measResults->measResultListEutra.push_back (measResultEutra);
2965  }
2966  }
2967 
2968  if (measResultNeighCellsChoice == 1)
2969  {
2970  // Deserialize measResultListUTRA
2971  // ...
2972  }
2973 
2974  if (measResultNeighCellsChoice == 2)
2975  {
2976  // Deserialize measResultListGERAN
2977  // ...
2978  }
2979  if (measResultNeighCellsChoice == 3)
2980  {
2981  // Deserialize measResultsCDMA2000
2982  // ...
2983  }
2984  }
2985 
2986  return bIterator;
2987 }
2988 
2991 {
2992  int n;
2993  std::bitset<1> isMccPresent;
2994  bIterator = DeserializeSequence (&isMccPresent,false,bIterator);
2995 
2996  if (isMccPresent[0])
2997  {
2998  // Deserialize mcc
2999  // ...
3000  }
3001 
3002  // Deserialize mnc
3003  int mncDigits;
3004  int mnc = 0;
3005  bIterator = DeserializeSequenceOf (&mncDigits,3,2,bIterator);
3006 
3007  for (int j = mncDigits - 1; j >= 0; j--)
3008  {
3009  bIterator = DeserializeInteger (&n,0,9,bIterator);
3010  mnc += n * pow (10,j);
3011  }
3012 
3013  *plmnId = mnc;
3014 
3015  // cellReservedForOperatorUse
3016  bIterator = DeserializeEnum (2,&n,bIterator);
3017  return bIterator;
3018 }
3019 
3022 {
3023  std::bitset<0> bitset0;
3024  std::bitset<2> bitset2;
3025  std::bitset<11> bitset11;
3026  int n;
3027 
3028  // measConfig
3029  bIterator = DeserializeSequence (&bitset11,true,bIterator);
3030 
3031  if (bitset11[10])
3032  {
3033  // measObjectToRemoveList
3034  int measObjectToRemoveListElems;
3035  bIterator = DeserializeSequenceOf (&measObjectToRemoveListElems, MAX_OBJECT_ID, 1, bIterator);
3036 
3037  for (int i = 0; i < measObjectToRemoveListElems; i++)
3038  {
3039  bIterator = DeserializeInteger (&n, 1, MAX_OBJECT_ID, bIterator);
3040  measConfig->measObjectToRemoveList.push_back (n);
3041  }
3042  }
3043 
3044  if (bitset11[9])
3045  {
3046  // measObjectToAddModList
3047  int measObjectToAddModListElems;
3048  bIterator = DeserializeSequenceOf (&measObjectToAddModListElems, MAX_OBJECT_ID, 1, bIterator);
3049 
3050  for (int i = 0; i < measObjectToAddModListElems; i++)
3051  {
3053 
3054  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3055 
3056  bIterator = DeserializeInteger (&n, 1, MAX_OBJECT_ID, bIterator);
3057  elem.measObjectId = n;
3058 
3059  int measObjectChoice;
3060  bIterator = DeserializeChoice (4, true, &measObjectChoice, bIterator);
3061 
3062  switch (measObjectChoice)
3063  {
3064  case 1:
3065  // Deserialize measObjectUTRA
3066  // ...
3067  break;
3068 
3069  case 2:
3070  // Deserialize measObjectGERAN
3071  // ...
3072  break;
3073 
3074  case 3:
3075  // Deserialize measObjectCDMA2000
3076  // ...
3077  break;
3078 
3079  case 0:
3080  default:
3081  // Deserialize measObjectEUTRA
3082  std::bitset<5> measObjectEutraOpts;
3083  bIterator = DeserializeSequence (&measObjectEutraOpts, true, bIterator);
3084 
3085  // carrierFreq
3086  bIterator = DeserializeInteger (&n, 0, MAX_EARFCN, bIterator);
3087  elem.measObjectEutra.carrierFreq = n;
3088 
3089  // allowedMeasBandwidth
3090  bIterator = DeserializeEnum (6, &n, bIterator);
3091  switch (n)
3092  {
3093  case 0:
3095  break;
3096  case 1:
3098  break;
3099  case 2:
3101  break;
3102  case 3:
3104  break;
3105  case 4:
3107  break;
3108  case 5:
3109  default:
3111  break;
3112  }
3113 
3114  // presenceAntennaPort1
3115  bIterator = DeserializeBoolean (&elem.measObjectEutra.presenceAntennaPort1, bIterator);
3116 
3117  // neighCellConfig
3118  bIterator = DeserializeBitstring (&bitset2, bIterator);
3119  elem.measObjectEutra.neighCellConfig = bitset2.to_ulong ();
3120 
3121  // offsetFreq
3122  bIterator = DeserializeQoffsetRange (&elem.measObjectEutra.offsetFreq, bIterator);
3123 
3124  if (measObjectEutraOpts[4])
3125  {
3126  // cellsToRemoveList
3127  int numElems;
3128  bIterator = DeserializeSequenceOf (&numElems, MAX_CELL_MEAS, 1, bIterator);
3129 
3130  for (int i = 0; i < numElems; i++)
3131  {
3132  bIterator = DeserializeInteger (&n, 1, MAX_CELL_MEAS, bIterator);
3133  elem.measObjectEutra.cellsToRemoveList.push_back (n);
3134  }
3135  }
3136 
3137  if (measObjectEutraOpts[3])
3138  {
3139  // cellsToAddModList
3140  int numElems;
3141  bIterator = DeserializeSequenceOf (&numElems, MAX_CELL_MEAS, 1, bIterator);
3142 
3143  for (int i = 0; i < numElems; i++)
3144  {
3145  LteRrcSap::CellsToAddMod cellsToAddMod;
3146 
3147  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3148 
3149  // cellIndex
3150  bIterator = DeserializeInteger (&n, 1, MAX_CELL_MEAS, bIterator);
3151  cellsToAddMod.cellIndex = n;
3152 
3153  // PhysCellId
3154  bIterator = DeserializeInteger (&n, 0, 503, bIterator);
3155  cellsToAddMod.physCellId = n;
3156 
3157  // cellIndividualOffset
3158  bIterator = DeserializeQoffsetRange ( &cellsToAddMod.cellIndividualOffset, bIterator);
3159 
3160  elem.measObjectEutra.cellsToAddModList.push_back (cellsToAddMod);
3161  }
3162  }
3163 
3164  if (measObjectEutraOpts[2])
3165  {
3166  // blackCellsToRemoveList
3167  int numElems;
3168  bIterator = DeserializeSequenceOf (&numElems, MAX_CELL_MEAS, 1, bIterator);
3169 
3170  for (int i = 0; i < numElems; i++)
3171  {
3172  bIterator = DeserializeInteger (&n, 1, MAX_CELL_MEAS, bIterator);
3173  elem.measObjectEutra.blackCellsToRemoveList.push_back (n);
3174  }
3175  }
3176 
3177 
3178  if (measObjectEutraOpts[1])
3179  {
3180  // blackCellsToAddModList
3181  int numElems;
3182  bIterator = DeserializeSequenceOf (&numElems, MAX_CELL_MEAS, 1, bIterator);
3183 
3184  for (int i = 0; i < numElems; i++)
3185  {
3186  LteRrcSap::BlackCellsToAddMod blackCellsToAddMod;
3187  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3188 
3189  bIterator = DeserializeInteger (&n, 1, MAX_CELL_MEAS, bIterator);
3190  blackCellsToAddMod.cellIndex = n;
3191 
3192  // PhysCellIdRange
3193  std::bitset<1> isRangePresent;
3194  bIterator = DeserializeSequence (&isRangePresent, false, bIterator);
3195 
3196  // start
3197  bIterator = DeserializeInteger (&n, 0, 503, bIterator);
3198  blackCellsToAddMod.physCellIdRange.start = n;
3199 
3200  blackCellsToAddMod.physCellIdRange.haveRange = isRangePresent[0];
3201  // initialize range to silence compiler warning
3202  blackCellsToAddMod.physCellIdRange.range = 0;
3203  if (blackCellsToAddMod.physCellIdRange.haveRange)
3204  {
3205  // range
3206  bIterator = DeserializeEnum (16, &n, bIterator);
3207  switch (n)
3208  {
3209  case 0:
3210  blackCellsToAddMod.physCellIdRange.range = 4;
3211  break;
3212  case 1:
3213  blackCellsToAddMod.physCellIdRange.range = 8;
3214  break;
3215  case 2:
3216  blackCellsToAddMod.physCellIdRange.range = 12;
3217  break;
3218  case 3:
3219  blackCellsToAddMod.physCellIdRange.range = 16;
3220  break;
3221  case 4:
3222  blackCellsToAddMod.physCellIdRange.range = 24;
3223  break;
3224  case 5:
3225  blackCellsToAddMod.physCellIdRange.range = 32;
3226  break;
3227  case 6:
3228  blackCellsToAddMod.physCellIdRange.range = 48;
3229  break;
3230  case 7:
3231  blackCellsToAddMod.physCellIdRange.range = 64;
3232  break;
3233  case 8:
3234  blackCellsToAddMod.physCellIdRange.range = 84;
3235  break;
3236  case 9:
3237  blackCellsToAddMod.physCellIdRange.range = 96;
3238  break;
3239  case 10:
3240  blackCellsToAddMod.physCellIdRange.range = 128;
3241  break;
3242  case 11:
3243  blackCellsToAddMod.physCellIdRange.range = 168;
3244  break;
3245  case 12:
3246  blackCellsToAddMod.physCellIdRange.range = 252;
3247  break;
3248  case 13:
3249  blackCellsToAddMod.physCellIdRange.range = 504;
3250  break;
3251  default:
3252  blackCellsToAddMod.physCellIdRange.range = 0;
3253  }
3254  }
3255 
3256  elem.measObjectEutra.blackCellsToAddModList.push_back (blackCellsToAddMod);
3257  }
3258  }
3259 
3260  elem.measObjectEutra.haveCellForWhichToReportCGI = measObjectEutraOpts[0];
3261  if (measObjectEutraOpts[0])
3262  {
3263  // cellForWhichToReportCGI
3264  bIterator = DeserializeInteger (&n, 0, 503, bIterator);
3266  }
3267  }
3268  measConfig->measObjectToAddModList.push_back (elem);
3269  }
3270  }
3271 
3272  if (bitset11[8])
3273  {
3274  // reportConfigToRemoveList
3275  int reportConfigToRemoveListElems;
3276  bIterator = DeserializeSequenceOf (&reportConfigToRemoveListElems, MAX_REPORT_CONFIG_ID, 1, bIterator);
3277 
3278  for (int i = 0; i < reportConfigToRemoveListElems; i++)
3279  {
3280  bIterator = DeserializeInteger (&n, 1, MAX_REPORT_CONFIG_ID, bIterator);
3281  measConfig->reportConfigToRemoveList.push_back (n);
3282  }
3283  }
3284 
3285  if (bitset11[7])
3286  {
3287  // reportConfigToAddModList
3288  int reportConfigToAddModListElems;
3289  bIterator = DeserializeSequenceOf (&reportConfigToAddModListElems, MAX_REPORT_CONFIG_ID, 1, bIterator);
3290 
3291  for (int i = 0; i < reportConfigToAddModListElems; i++)
3292  {
3294 
3295  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3296  bIterator = DeserializeInteger (&n, 1, MAX_REPORT_CONFIG_ID, bIterator);
3297  elem.reportConfigId = n;
3298 
3299  // Deserialize reportConfig
3300  int reportConfigChoice;
3301  bIterator = DeserializeChoice (2, false, &reportConfigChoice, bIterator);
3302 
3303  if (reportConfigChoice == 0)
3304  {
3305  // reportConfigEUTRA
3306  bIterator = DeserializeSequence (&bitset0, true, bIterator);
3307 
3308  // triggerType
3309  int triggerTypeChoice;
3310  bIterator = DeserializeChoice (2, false, &triggerTypeChoice, bIterator);
3311 
3312  if (triggerTypeChoice == 0)
3313  {
3314  // event
3316  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3317 
3318  // eventId
3319  int eventIdChoice;
3320  bIterator = DeserializeChoice (5, true, &eventIdChoice, bIterator);
3321 
3322  switch (eventIdChoice)
3323  {
3324  case 0:
3326  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3327  bIterator = DeserializeThresholdEutra (&elem.reportConfigEutra.threshold1, bIterator);
3328  break;
3329 
3330  case 1:
3332  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3333  bIterator = DeserializeThresholdEutra (&elem.reportConfigEutra.threshold1, bIterator);
3334  break;
3335 
3336  case 2:
3338  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3339  bIterator = DeserializeInteger (&n, -30, 30, bIterator);
3340  elem.reportConfigEutra.a3Offset = n;
3341  bIterator = DeserializeBoolean (&elem.reportConfigEutra.reportOnLeave, bIterator);
3342  break;
3343 
3344  case 3:
3346  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3347  bIterator = DeserializeThresholdEutra (&elem.reportConfigEutra.threshold1, bIterator);
3348  break;
3349 
3350  case 4:
3351  default:
3353  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3354  bIterator = DeserializeThresholdEutra (&elem.reportConfigEutra.threshold1, bIterator);
3355  bIterator = DeserializeThresholdEutra (&elem.reportConfigEutra.threshold2, bIterator);
3356  }
3357 
3358  bIterator = DeserializeInteger (&n, 0, 30, bIterator);
3359  elem.reportConfigEutra.hysteresis = n;
3360 
3361  bIterator = DeserializeEnum (16, &n, bIterator);
3362  switch (n)
3363  {
3364  case 0:
3366  break;
3367  case 1:
3368  elem.reportConfigEutra.timeToTrigger = 40;
3369  break;
3370  case 2:
3371  elem.reportConfigEutra.timeToTrigger = 64;
3372  break;
3373  case 3:
3374  elem.reportConfigEutra.timeToTrigger = 80;
3375  break;
3376  case 4:
3377  elem.reportConfigEutra.timeToTrigger = 100;
3378  break;
3379  case 5:
3380  elem.reportConfigEutra.timeToTrigger = 128;
3381  break;
3382  case 6:
3383  elem.reportConfigEutra.timeToTrigger = 160;
3384  break;
3385  case 7:
3386  elem.reportConfigEutra.timeToTrigger = 256;
3387  break;
3388  case 8:
3389  elem.reportConfigEutra.timeToTrigger = 320;
3390  break;
3391  case 9:
3392  elem.reportConfigEutra.timeToTrigger = 480;
3393  break;
3394  case 10:
3395  elem.reportConfigEutra.timeToTrigger = 512;
3396  break;
3397  case 11:
3398  elem.reportConfigEutra.timeToTrigger = 640;
3399  break;
3400  case 12:
3401  elem.reportConfigEutra.timeToTrigger = 1024;
3402  break;
3403  case 13:
3404  elem.reportConfigEutra.timeToTrigger = 1280;
3405  break;
3406  case 14:
3407  elem.reportConfigEutra.timeToTrigger = 2560;
3408  break;
3409  case 15:
3410  default:
3411  elem.reportConfigEutra.timeToTrigger = 5120;
3412  break;
3413  }
3414  }
3415 
3416  if (triggerTypeChoice == 1)
3417  {
3418  // periodical
3420 
3421  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3422  bIterator = DeserializeEnum (2, &n, bIterator);
3423  if (n == 0)
3424  {
3426  }
3427  else
3428  {
3430  }
3431  }
3432 
3433  // triggerQuantity
3434  bIterator = DeserializeEnum (2, &n, bIterator);
3435  if (n == 0)
3436  {
3438  }
3439  else
3440  {
3442  }
3443 
3444  // reportQuantity
3445  bIterator = DeserializeEnum (2, &n, bIterator);
3446  if (n == 0)
3447  {
3449  }
3450  else
3451  {
3453  }
3454 
3455  // maxReportCells
3456  bIterator = DeserializeInteger (&n, 1, MAX_CELL_REPORT, bIterator);
3458 
3459  // reportInterval
3460  bIterator = DeserializeEnum (16, &n, bIterator);
3461  switch (n)
3462  {
3463  case 0:
3465  break;
3466  case 1:
3468  break;
3469  case 2:
3471  break;
3472  case 3:
3474  break;
3475  case 4:
3477  break;
3478  case 5:
3480  break;
3481  case 6:
3483  break;
3484  case 7:
3486  break;
3487  case 8:
3489  break;
3490  case 9:
3492  break;
3493  case 10:
3495  break;
3496  case 11:
3498  break;
3499  case 12:
3501  break;
3502  case 13:
3504  break;
3505  case 14:
3507  break;
3508  case 15:
3509  default:
3511  }
3512 
3513  // reportAmount
3514  bIterator = DeserializeEnum (8, &n, bIterator);
3515  switch (n)
3516  {
3517  case 0:
3519  break;
3520  case 1:
3522  break;
3523  case 2:
3525  break;
3526  case 3:
3528  break;
3529  case 4:
3530  elem.reportConfigEutra.reportAmount = 16;
3531  break;
3532  case 5:
3533  elem.reportConfigEutra.reportAmount = 32;
3534  break;
3535  case 6:
3536  elem.reportConfigEutra.reportAmount = 64;
3537  break;
3538  default:
3540  }
3541  }
3542 
3543  if (reportConfigChoice == 1)
3544  {
3545  // ReportConfigInterRAT
3546  // ...
3547  }
3548 
3549  measConfig->reportConfigToAddModList.push_back (elem);
3550  }
3551  }
3552 
3553  if (bitset11[6])
3554  {
3555  // measIdToRemoveList
3556  int measIdToRemoveListElems;
3557  bIterator = DeserializeSequenceOf (&measIdToRemoveListElems, MAX_MEAS_ID, 1, bIterator);
3558 
3559  for (int i = 0; i < measIdToRemoveListElems; i++)
3560  {
3561  bIterator = DeserializeInteger (&n, 1, MAX_MEAS_ID, bIterator);
3562  measConfig->measIdToRemoveList.push_back (n);
3563  }
3564  }
3565 
3566  if (bitset11[5])
3567  {
3568  // measIdToAddModList
3569  int measIdToAddModListElems;
3570  bIterator = DeserializeSequenceOf (&measIdToAddModListElems, MAX_MEAS_ID, 1, bIterator);
3571 
3572  for (int i = 0; i < measIdToAddModListElems; i++)
3573  {
3575 
3576  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3577 
3578  bIterator = DeserializeInteger (&n, 1, MAX_MEAS_ID, bIterator);
3579  elem.measId = n;
3580 
3581  bIterator = DeserializeInteger (&n, 1, MAX_OBJECT_ID, bIterator);
3582  elem.measObjectId = n;
3583 
3584  bIterator = DeserializeInteger (&n, 1, MAX_REPORT_CONFIG_ID, bIterator);
3585  elem.reportConfigId = n;
3586 
3587  measConfig->measIdToAddModList.push_back (elem);
3588  }
3589  }
3590 
3591  measConfig->haveQuantityConfig = bitset11[4];
3592  if (measConfig->haveQuantityConfig)
3593  {
3594  // quantityConfig
3595  std::bitset<4> quantityConfigOpts;
3596  bIterator = DeserializeSequence (&quantityConfigOpts, true, bIterator);
3597 
3598  if (quantityConfigOpts[3])
3599  {
3600  // quantityConfigEUTRA
3601  bIterator = DeserializeSequence (&bitset0,false,bIterator);
3602  bIterator = DeserializeEnum (16, &n, bIterator);
3603  switch (n)
3604  {
3605  case 0:
3606  measConfig->quantityConfig.filterCoefficientRSRP = 0;
3607  break;
3608  case 1:
3609  measConfig->quantityConfig.filterCoefficientRSRP = 1;
3610  break;
3611  case 2:
3612  measConfig->quantityConfig.filterCoefficientRSRP = 2;
3613  break;
3614  case 3:
3615  measConfig->quantityConfig.filterCoefficientRSRP = 3;
3616  break;
3617  case 4:
3618  measConfig->quantityConfig.filterCoefficientRSRP = 4;
3619  break;
3620  case 5:
3621  measConfig->quantityConfig.filterCoefficientRSRP = 5;
3622  break;
3623  case 6:
3624  measConfig->quantityConfig.filterCoefficientRSRP = 6;
3625  break;
3626  case 7:
3627  measConfig->quantityConfig.filterCoefficientRSRP = 7;
3628  break;
3629  case 8:
3630  measConfig->quantityConfig.filterCoefficientRSRP = 8;
3631  break;
3632  case 9:
3633  measConfig->quantityConfig.filterCoefficientRSRP = 9;
3634  break;
3635  case 10:
3636  measConfig->quantityConfig.filterCoefficientRSRP = 11;
3637  break;
3638  case 11:
3639  measConfig->quantityConfig.filterCoefficientRSRP = 13;
3640  break;
3641  case 12:
3642  measConfig->quantityConfig.filterCoefficientRSRP = 15;
3643  break;
3644  case 13:
3645  measConfig->quantityConfig.filterCoefficientRSRP = 17;
3646  break;
3647  case 14:
3648  measConfig->quantityConfig.filterCoefficientRSRP = 19;
3649  break;
3650  case 15:
3651  measConfig->quantityConfig.filterCoefficientRSRP = 0;
3652  break;
3653  default:
3654  measConfig->quantityConfig.filterCoefficientRSRP = 4;
3655  }
3656  bIterator = DeserializeEnum (16, &n, bIterator);
3657  switch (n)
3658  {
3659  case 0:
3660  measConfig->quantityConfig.filterCoefficientRSRQ = 0;
3661  break;
3662  case 1:
3663  measConfig->quantityConfig.filterCoefficientRSRQ = 1;
3664  break;
3665  case 2:
3666  measConfig->quantityConfig.filterCoefficientRSRQ = 2;
3667  break;
3668  case 3:
3669  measConfig->quantityConfig.filterCoefficientRSRQ = 3;
3670  break;
3671  case 4:
3672  measConfig->quantityConfig.filterCoefficientRSRQ = 4;
3673  break;
3674  case 5:
3675  measConfig->quantityConfig.filterCoefficientRSRQ = 5;
3676  break;
3677  case 6:
3678  measConfig->quantityConfig.filterCoefficientRSRQ = 6;
3679  break;
3680  case 7:
3681  measConfig->quantityConfig.filterCoefficientRSRQ = 7;
3682  break;
3683  case 8:
3684  measConfig->quantityConfig.filterCoefficientRSRQ = 8;
3685  break;
3686  case 9:
3687  measConfig->quantityConfig.filterCoefficientRSRQ = 9;
3688  break;
3689  case 10:
3690  measConfig->quantityConfig.filterCoefficientRSRQ = 11;
3691  break;
3692  case 11:
3693  measConfig->quantityConfig.filterCoefficientRSRQ = 13;
3694  break;
3695  case 12:
3696  measConfig->quantityConfig.filterCoefficientRSRQ = 15;
3697  break;
3698  case 13:
3699  measConfig->quantityConfig.filterCoefficientRSRQ = 17;
3700  break;
3701  case 14:
3702  measConfig->quantityConfig.filterCoefficientRSRQ = 19;
3703  break;
3704  case 15:
3705  measConfig->quantityConfig.filterCoefficientRSRQ = 0;
3706  break;
3707  default:
3708  measConfig->quantityConfig.filterCoefficientRSRQ = 4;
3709  }
3710  }
3711  if (quantityConfigOpts[2])
3712  {
3713  // quantityConfigUTRA
3714  // ...
3715  }
3716  if (quantityConfigOpts[1])
3717  {
3718  // quantityConfigGERAN
3719  // ...
3720  }
3721  if (quantityConfigOpts[0])
3722  {
3723  // quantityConfigCDMA2000
3724  // ...
3725  }
3726  }
3727 
3728  measConfig->haveMeasGapConfig = bitset11[3];
3729  if (measConfig->haveMeasGapConfig)
3730  {
3731  // measGapConfig
3732  int measGapConfigChoice;
3733  bIterator = DeserializeChoice (2, false, &measGapConfigChoice, bIterator);
3734  switch (measGapConfigChoice)
3735  {
3736  case 0:
3738  bIterator = DeserializeNull (bIterator);
3739  break;
3740  case 1:
3741  default:
3743  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3744 
3745  int gapOffsetChoice;
3746  bIterator = DeserializeChoice (2, true, &gapOffsetChoice, bIterator);
3747  switch (gapOffsetChoice)
3748  {
3749  case 0:
3751  bIterator = DeserializeInteger (&n, 0, 39, bIterator);
3752  measConfig->measGapConfig.gapOffsetValue = n;
3753  break;
3754  case 1:
3755  default:
3757  bIterator = DeserializeInteger (&n, 0, 79, bIterator);
3758  measConfig->measGapConfig.gapOffsetValue = n;
3759  }
3760  }
3761  }
3762 
3763  measConfig->haveSmeasure = bitset11[2];
3764  if (measConfig->haveSmeasure)
3765  {
3766  // s-Measure
3767  bIterator = DeserializeInteger (&n, 0, 97, bIterator);
3768  measConfig->sMeasure = n;
3769  }
3770 
3771  if (bitset11[1])
3772  {
3773  // preRegistrationInfoHRPD
3774  // ...
3775  }
3776 
3777  measConfig->haveSpeedStatePars = bitset11[0];
3778  if (measConfig->haveSpeedStatePars)
3779  {
3780  // speedStatePars
3781  int speedStateParsChoice;
3782  bIterator = DeserializeChoice (2, false, &speedStateParsChoice, bIterator);
3783  switch (speedStateParsChoice)
3784  {
3785  case 0:
3787  bIterator = DeserializeNull (bIterator);
3788  break;
3789  case 1:
3790  default:
3792  bIterator = DeserializeSequence (&bitset0, false, bIterator);
3793 
3794  // Deserialize mobilityStateParameters
3795  // Deserialize t-Evaluation
3796  bIterator = DeserializeEnum (8, &n, bIterator);
3797  switch (n)
3798  {
3799  case 0:
3801  break;
3802  case 1:
3804  break;
3805  case 2:
3807  break;
3808  case 3:
3810  break;
3811  case 4:
3813  break;
3814  default:
3816  }
3817  // Deserialize t-HystNormal
3818  bIterator = DeserializeEnum (8, &n, bIterator);
3819  switch (n)
3820  {
3821  case 0:
3823  break;
3824  case 1:
3826  break;
3827  case 2:
3829  break;
3830  case 3:
3832  break;
3833  case 4:
3835  break;
3836  default:
3838  }
3839 
3840  bIterator = DeserializeInteger (&n, 1, 16, bIterator);
3842 
3843  bIterator = DeserializeInteger (&n, 1, 16, bIterator);
3845 
3846  // Deserialize timeToTriggerSf
3847  bIterator = DeserializeEnum (4, &n, bIterator);
3848  measConfig->speedStatePars.timeToTriggerSf.sfMedium = (n + 1) * 25;
3849  bIterator = DeserializeEnum (4, &n, bIterator);
3850  measConfig->speedStatePars.timeToTriggerSf.sfHigh = (n + 1) * 25;
3851  }
3852  }
3853  return bIterator;
3854 }
3856 
3857 // Constructor
3859 {
3860  m_mmec = std::bitset<8> (0ul);
3861  m_mTmsi = std::bitset<32> (0ul);
3863  m_spare = std::bitset<1> (0ul);
3864 }
3865 
3866 // Destructor
3868 {
3869 }
3870 
3871 TypeId
3873 {
3874  static TypeId tid = TypeId ("ns3::RrcConnectionRequestHeader")
3875  .SetParent<Header> ()
3876  ;
3877  return tid;
3878 }
3879 
3880 void
3881 RrcConnectionRequestHeader::Print (std::ostream &os) const
3882 {
3883  os << "MMEC:" << m_mmec << std::endl;
3884  os << "MTMSI:" << m_mTmsi << std::endl;
3885  os << "EstablishmentCause:" << m_establishmentCause << std::endl;
3886  os << "Spare: " << m_spare << std::endl;
3887 }
3888 
3889 void
3891 {
3893 
3895 
3896  // Serialize RRCConnectionRequest sequence:
3897  // no default or optional fields. Extension marker not present.
3898  SerializeSequence (std::bitset<0> (),false);
3899 
3900  // Serialize criticalExtensions choice:
3901  // 2 options, selected: 0 (option: rrcConnectionRequest-r8)
3902  SerializeChoice (2,0,false);
3903 
3904  // Serialize RRCConnectionRequest-r8-IEs sequence:
3905  // no default or optional fields. Extension marker not present.
3906  SerializeSequence (std::bitset<0> (),false);
3907 
3908  // Serialize InitialUE-Identity choice:
3909  // 2 options, selected: 0 (option: s-TMSI)
3910  SerializeChoice (2,0,false);
3911 
3912  // Serialize S-TMSI sequence:
3913  // no default or optional fields. Extension marker not present.
3914  SerializeSequence (std::bitset<0> (),false);
3915 
3916  // Serialize mmec : MMEC ::= BIT STRING (SIZE (8))
3918 
3919  // Serialize m-TMSI ::= BIT STRING (SIZE (32))
3921 
3922  // Serialize establishmentCause : EstablishmentCause ::= ENUMERATED
3924 
3925  // Serialize spare : BIT STRING (SIZE (1))
3926  SerializeBitstring (std::bitset<1> ());
3927 
3928  // Finish serialization
3930 }
3931 
3932 uint32_t
3934 {
3935  std::bitset<1> dummy;
3936  std::bitset<0> optionalOrDefaultMask;
3937  int selectedOption;
3938 
3939  bIterator = DeserializeUlCcchMessage (bIterator);
3940 
3941  // Deserialize RCConnectionRequest sequence
3942  bIterator = DeserializeSequence (&optionalOrDefaultMask,false,bIterator);
3943 
3944  // Deserialize criticalExtensions choice:
3945  bIterator = DeserializeChoice (2,false,&selectedOption,bIterator);
3946 
3947  // Deserialize RRCConnectionRequest-r8-IEs sequence
3948  bIterator = DeserializeSequence (&optionalOrDefaultMask,false,bIterator);
3949 
3950  // Deserialize InitialUE-Identity choice
3951  bIterator = DeserializeChoice (2,false,&selectedOption,bIterator);
3952 
3953  // Deserialize S-TMSI sequence
3954  bIterator = DeserializeSequence (&optionalOrDefaultMask,false,bIterator);
3955 
3956  // Deserialize mmec
3957  bIterator = DeserializeBitstring (&m_mmec,bIterator);
3958 
3959  // Deserialize m-TMSI
3960  bIterator = DeserializeBitstring (&m_mTmsi,bIterator);
3961 
3962  // Deserialize establishmentCause
3963  bIterator = DeserializeEnum (8,&selectedOption,bIterator);
3964 
3965  // Deserialize spare
3966  bIterator = DeserializeBitstring (&dummy,bIterator);
3967 
3968  return GetSerializedSize ();
3969 }
3970 
3971 void
3973 {
3974  m_mTmsi = std::bitset<32> ((uint32_t)msg.ueIdentity);
3975  m_mmec = std::bitset<8> ((uint32_t)(msg.ueIdentity >> 32));
3976  m_isDataSerialized = false;
3977 }
3978 
3981 {
3983  msg.ueIdentity = (((uint64_t) m_mmec.to_ulong ()) << 32) | (m_mTmsi.to_ulong ());
3984 
3985  return msg;
3986 }
3987 
3988 std::bitset<8>
3990 {
3991  return m_mmec;
3992 }
3993 
3994 std::bitset<32>
3996 {
3997  return m_mTmsi;
3998 }
3999 
4000 
4003 {
4004 }
4005 
4007 {
4008 }
4009 
4010 void
4011 RrcConnectionSetupHeader::Print (std::ostream &os) const
4012 {
4013  os << "rrcTransactionIdentifier: " << (int)m_rrcTransactionIdentifier << std::endl;
4014  os << "radioResourceConfigDedicated:" << std::endl;
4016 }
4017 
4018 void
4020 {
4022 
4024 
4025  SerializeInteger (15,0,15);
4026 
4027  // Serialize RRCConnectionSetup sequence:
4028  // no default or optional fields. Extension marker not present.
4029  SerializeSequence (std::bitset<0> (),false);
4030 
4031  // Serialize rrc-TransactionIdentifier ::=INTEGER (0..3)
4033 
4034  // Serialize criticalExtensions choice:
4035  // 2 options, selected: 0 (option: c1)
4036  SerializeChoice (2,0,false);
4037 
4038  // Serialize c1 choice:
4039  // 8 options, selected: 0 (option: rrcConnectionSetup-r8)
4040  SerializeChoice (8,0,false);
4041 
4042  // Serialize rrcConnectionSetup-r8 sequence
4043  // 1 optional fields (not present). Extension marker not present.
4044  SerializeSequence (std::bitset<1> (0),false);
4045 
4046  // Serialize RadioResourceConfigDedicated sequence
4048 
4049  // Serialize nonCriticalExtension sequence
4050  // 2 optional fields, none present. No extension marker.
4051  SerializeSequence (std::bitset<2> (0),false);
4052 
4053  // Finish serialization
4055 }
4056 
4057 
4058 uint32_t
4060 {
4061  int n;
4062 
4063  std::bitset<0> bitset0;
4064  std::bitset<1> bitset1;
4065  std::bitset<2> bitset2;
4066 
4067  bIterator = DeserializeDlCcchMessage (bIterator);
4068 
4069  bIterator = DeserializeInteger (&n,0,15,bIterator);
4070 
4071  // Deserialize RRCConnectionSetup sequence
4072  bIterator = DeserializeSequence (&bitset0,false,bIterator);
4073 
4074  // Deserialize rrc-TransactionIdentifier ::=INTEGER (0..3)
4075  bIterator = DeserializeInteger (&n,0,3,bIterator);
4077 
4078  // Deserialize criticalExtensions choice
4079  int criticalExtensionChoice;
4080  bIterator = DeserializeChoice (2,false,&criticalExtensionChoice,bIterator);
4081  if (criticalExtensionChoice == 1)
4082  {
4083  // Deserialize criticalExtensionsFuture
4084  bIterator = DeserializeSequence (&bitset0,false,bIterator);
4085  }
4086  else if (criticalExtensionChoice == 0)
4087  {
4088  // Deserialize c1
4089  int c1;
4090  bIterator = DeserializeChoice (8,false,&c1,bIterator);
4091 
4092  if (c1 > 0)
4093  {
4094  // Deserialize spareX , X:=7..1
4095  bIterator = DeserializeNull (bIterator);
4096  }
4097  else if (c1 == 0)
4098  {
4099  // Deserialize rrcConnectionSetup-r8
4100  // 1 optional fields, no extension marker.
4101  bIterator = DeserializeSequence (&bitset1,false,bIterator);
4102 
4103  // Deserialize radioResourceConfigDedicated
4105 
4106  if (bitset1[0])
4107  {
4108  // Deserialize nonCriticalExtension
4109  // 2 optional fields, no extension marker.
4110  bIterator = DeserializeSequence (&bitset2,false,bIterator);
4111 
4112  // Deserialization of lateR8NonCriticalExtension and nonCriticalExtension
4113  // ...
4114  }
4115  }
4116  }
4117  return GetSerializedSize ();
4118 }
4119 
4120 void
4122 {
4125  m_isDataSerialized = false;
4126 }
4127 
4130 {
4134  return msg;
4135 }
4136 
4137 uint8_t
4139 {
4141 }
4142 
4143 bool
4145 {
4147 }
4148 
4149 std::list<LteRrcSap::SrbToAddMod>
4151 {
4153 }
4154 
4155 std::list<LteRrcSap::DrbToAddMod>
4157 {
4159 }
4160 
4161 std::list<uint8_t>
4163 {
4165 }
4166 
4169 {
4171 }
4172 
4175 {
4177 }
4178 
4180 
4182 {
4183 }
4184 
4186 {
4187 }
4188 
4189 void
4191 {
4193 
4194  // Serialize DCCH message
4196 
4197  // Serialize RRCConnectionSetupComplete sequence:
4198  // no default or optional fields. Extension marker not present.
4199  SerializeSequence (std::bitset<0> (),false);
4200 
4201  // Serialize rrc-TransactionIdentifier
4203 
4204  // Serialize criticalExtensions choice
4205  // 2 options, selected 0 (c1)
4206  SerializeChoice (2,0,false);
4207 
4208  // Choose spare3 NULL
4209  SerializeChoice (4,1,false);
4210 
4211  // Serialize spare3 NULL
4212  SerializeNull ();
4213 
4214  // Finish serialization
4216 }
4217 
4218 uint32_t
4220 {
4221  std::bitset<0> bitset0;
4222 
4223  bIterator = DeserializeUlDcchMessage (bIterator);
4224 
4225  bIterator = DeserializeSequence (&bitset0,false,bIterator);
4226 
4227  int n;
4228  bIterator = DeserializeInteger (&n,0,3,bIterator);
4230 
4231  bIterator = DeserializeChoice (2,false,&n,bIterator);
4232 
4233  if (n == 1)
4234  {
4235  // Deserialize criticalExtensionsFuture
4236  bIterator = DeserializeSequence (&bitset0,false,bIterator);
4237  }
4238  else if (n == 0)
4239  {
4240  // Deserialize c1
4241  int c1Chosen;
4242  bIterator = DeserializeChoice (4,false,&c1Chosen,bIterator);
4243 
4244  if (c1Chosen == 0)
4245  {
4246  // Deserialize rrcConnectionSetupComplete-r8
4247  // ...
4248  }
4249  else
4250  {
4251  bIterator = DeserializeNull (bIterator);
4252  }
4253  }
4254 
4255  return GetSerializedSize ();
4256 }
4257 
4258 void
4260 {
4261  os << "rrcTransactionIdentifier: " << (int) m_rrcTransactionIdentifier << std::endl;
4262 }
4263 
4264 void
4266 {
4268  m_isDataSerialized = false;
4269 }
4270 
4271 uint8_t
4273 {
4275 }
4276 
4279 {
4282  return msg;
4283 }
4284 
4286 
4288 {
4289 }
4290 
4292 {
4293 }
4294 
4295 void
4297 {
4299 
4300  // Serialize DCCH message
4302 
4303  // Serialize RRCConnectionSetupComplete sequence:
4304  // no default or optional fields. Extension marker not present.
4305  SerializeSequence (std::bitset<0> (),false);
4306 
4307  // Serialize rrc-TransactionIdentifier
4309 
4310  // Serialize criticalExtensions choice
4311  // 2 options, selected 1 (criticalExtensionsFuture)
4312  SerializeChoice (2,1,false);
4313 
4314  // Choose criticalExtensionsFuture
4315  SerializeSequence (std::bitset<0> (),false);
4316 
4317  // Finish serialization
4319 }
4320 
4321 uint32_t
4323 {
4324  std::bitset<0> bitset0;
4325  int n;
4326 
4327  bIterator = DeserializeUlDcchMessage (bIterator);
4328  bIterator = DeserializeSequence (&bitset0,false,bIterator);
4329 
4330  bIterator = DeserializeInteger (&n,0,3,bIterator);
4332 
4333  bIterator = DeserializeChoice (2,false,&n,bIterator);
4334 
4335  if (n == 1)
4336  {
4337  // Deserialize criticalExtensionsFuture
4338  bIterator = DeserializeSequence (&bitset0,false,bIterator);
4339  }
4340  else if (n == 0)
4341  {
4342  // Deserialize rrcConnectionReconfigurationComplete-r8
4343  // ...
4344  }
4345 
4346  return GetSerializedSize ();
4347 }
4348 
4349 void
4351 {
4352  os << "rrcTransactionIdentifier: " << (int) m_rrcTransactionIdentifier << std::endl;
4353 }
4354 
4355 void
4357 {
4359  m_isDataSerialized = false;
4360 }
4361 
4364 {
4367  return msg;
4368 }
4369 
4370 uint8_t
4372 {
4374 }
4375 
4377 
4379 {
4380 }
4381 
4383 {
4384 }
4385 
4386 void
4388 {
4390 
4392 
4393  // Serialize RRCConnectionSetupComplete sequence:
4394  // no default or optional fields. Extension marker not present.
4395  SerializeSequence (std::bitset<0> (),false);
4396 
4397  // Serialize rrc-TransactionIdentifier
4399 
4400  // Serialize criticalExtensions choice
4401  // 2 options, selected 0 (c1)
4402  SerializeChoice (2,0,false);
4403 
4404  // Serialize c1 choice
4405  // 8 options, selected 0 (rrcConnectionReconfiguration-r8)
4406  SerializeChoice (8,0,false);
4407 
4408  // Serialize RRCConnectionReconfiguration-r8-IEs sequence:
4409  // 6 optional fields. Extension marker not present.
4410  std::bitset<6> options;
4411  options.set (5,m_haveMeasConfig);
4412  options.set (4,m_haveMobilityControlInfo);
4413  options.set (3,0); // No dedicatedInfoNASList
4414  options.set (2,m_haveRadioResourceConfigDedicated);
4415  options.set (1,0); // No securityConfigHO
4416  options.set (0,0); // No nonCriticalExtension
4417  SerializeSequence (options,false);
4418 
4419  if (m_haveMeasConfig)
4420  {
4422  }
4423 
4425  {
4426  // Serialize MobilityControlInfo
4427 
4428  // 4 optional fields, extension marker present.
4429  std::bitset<4> mobCtrlIntoOptional;
4430  mobCtrlIntoOptional.set (3,m_mobilityControlInfo.haveCarrierFreq);
4431  mobCtrlIntoOptional.set (2,m_mobilityControlInfo.haveCarrierBandwidth);
4432  mobCtrlIntoOptional.set (1,0); // No additionalSpectrumEmission
4433  mobCtrlIntoOptional.set (0,m_mobilityControlInfo.haveRachConfigDedicated);
4434  SerializeSequence (mobCtrlIntoOptional,true);
4435 
4436  // Serialize targetPhysCellId
4438 
4440  {
4441  SerializeSequence (std::bitset<1> (1),false);
4444  }
4445 
4447  {
4448  SerializeSequence (std::bitset<1> (1),false);
4449 
4450  // Serialize dl-Bandwidth
4452  {
4453  case 6:
4454  SerializeEnum (16,0);
4455  break;
4456  case 15:
4457  SerializeEnum (16,1);
4458  break;
4459  case 25:
4460  SerializeEnum (16,2);
4461  break;
4462  case 50:
4463  SerializeEnum (16,3);
4464  break;
4465  case 75:
4466  SerializeEnum (16,4);
4467  break;
4468  case 100:
4469  SerializeEnum (16,5);
4470  break;
4471  default:
4472  SerializeEnum (16,6);
4473  }
4474 
4475  // Serialize ul-Bandwidth
4477  {
4478  case 6:
4479  SerializeEnum (16,0);
4480  break;
4481  case 15:
4482  SerializeEnum (16,1);
4483  break;
4484  case 25:
4485  SerializeEnum (16,2);
4486  break;
4487  case 50:
4488  SerializeEnum (16,3);
4489  break;
4490  case 75:
4491  SerializeEnum (16,4);
4492  break;
4493  case 100:
4494  SerializeEnum (16,5);
4495  break;
4496  default:
4497  SerializeEnum (16,6);
4498  }
4499  }
4500 
4501  // Serialize t304
4502  SerializeEnum (8,0);
4503 
4504  // Serialize newUE-Identitiy
4506 
4507  // Serialize radioResourceConfigCommon
4509 
4511  {
4512  SerializeSequence (std::bitset<0> (),false);
4515  }
4516  }
4517 
4519  {
4520  // Serialize RadioResourceConfigDedicated
4522  }
4523 
4524  // Finish serialization
4526 }
4527 
4528 uint32_t
4530 {
4531  std::bitset<0> bitset0;
4532 
4533  bIterator = DeserializeDlDcchMessage (bIterator);
4534 
4535  // RRCConnectionReconfiguration sequence
4536  bIterator = DeserializeSequence (&bitset0,false,bIterator);
4537 
4538  // rrc-TransactionIdentifier
4539  int n;
4540  bIterator = DeserializeInteger (&n,0,3,bIterator);
4542 
4543  // criticalExtensions
4544  int sel;
4545  bIterator = DeserializeChoice (2,false,&sel,bIterator);
4546  if (sel == 1)
4547  {
4548  // criticalExtensionsFuture
4549  bIterator = DeserializeSequence (&bitset0,false,bIterator);
4550  }
4551  else if (sel == 0)
4552  {
4553  // c1
4554  int c1Chosen;
4555  bIterator = DeserializeChoice (8,false,&c1Chosen,bIterator);
4556  if (c1Chosen > 0)
4557  {
4558  bIterator = DeserializeNull (bIterator);
4559  }
4560  else if (c1Chosen == 0)
4561  {
4562  // rrcConnectionReconfiguration-r8
4563  std::bitset<6> rrcConnRecOpts;
4564  bIterator = DeserializeSequence (&rrcConnRecOpts,false,bIterator);
4565 
4566  m_haveMeasConfig = rrcConnRecOpts[5];
4567  if (m_haveMeasConfig)
4568  {
4569  bIterator = DeserializeMeasConfig (&m_measConfig, bIterator);
4570  }
4571 
4572  m_haveMobilityControlInfo = rrcConnRecOpts[4];
4574  {
4575  // mobilityControlInfo
4576  std::bitset<4> mobCtrlOpts;
4577  bIterator = DeserializeSequence (&mobCtrlOpts,true,bIterator);
4578 
4579  // PhysCellId
4580  bIterator = DeserializeInteger (&n,0,503,bIterator);
4582 
4583  // carrierFreq
4584  m_mobilityControlInfo.haveCarrierFreq = mobCtrlOpts[3];
4586  {
4587  std::bitset<1> ulCarrierFreqPresent;
4588  bIterator = DeserializeSequence (&ulCarrierFreqPresent,false,bIterator);
4589 
4590  bIterator = DeserializeInteger (&n,0,MAX_EARFCN,bIterator);
4592 
4593  if (ulCarrierFreqPresent[0])
4594  {
4595  bIterator = DeserializeInteger (&n,0,MAX_EARFCN,bIterator);
4597  }
4598  }
4599 
4600  // carrierBandwidth
4603  {
4604  std::bitset<1> ulBandwidthPresent;
4605  bIterator = DeserializeSequence (&ulBandwidthPresent,false,bIterator);
4606 
4607  bIterator = DeserializeEnum (16,&n,bIterator);
4608  switch (n)
4609  {
4610  case 0:
4612  break;
4613  case 1:
4615  break;
4616  case 2:
4618  break;
4619  case 3:
4621  break;
4622  case 4:
4624  break;
4625  case 5:
4627  break;
4628  case 6:
4630  break;
4631  }
4632 
4633  if (ulBandwidthPresent[0])
4634  {
4635  bIterator = DeserializeEnum (16,&n,bIterator);
4636  switch (n)
4637  {
4638  case 0:
4640  break;
4641  case 1:
4643  break;
4644  case 2:
4646  break;
4647  case 3:
4649  break;
4650  case 4:
4652  break;
4653  case 5:
4655  break;
4656  case 6:
4658  break;
4659  }
4660  }
4661  }
4662 
4663  // additionalSpectrumEmission
4664  if (mobCtrlOpts[1])
4665  {
4666  // ...
4667  }
4668 
4669  // t304
4670  bIterator = DeserializeEnum (8,&n,bIterator);
4671 
4672  // newUE-Identity
4673  std::bitset<16> cRnti;
4674  bIterator = DeserializeBitstring (&cRnti, bIterator);
4675  m_mobilityControlInfo.newUeIdentity = cRnti.to_ulong ();
4676 
4677  // radioResourceConfigCommon
4679 
4682  {
4683  bIterator = DeserializeSequence (&bitset0, false, bIterator);
4684  bIterator = DeserializeInteger (&n,0,63, bIterator);
4686  bIterator = DeserializeInteger (&n,0,15, bIterator);
4688  }
4689  }
4690 
4691  // dedicatedInfoNASList
4692  if (rrcConnRecOpts[3])
4693  {
4694  // ...
4695  }
4696 
4697  // radioResourceConfigDedicated
4698  m_haveRadioResourceConfigDedicated = rrcConnRecOpts[2];
4700  {
4702  }
4703 
4704  // securityConfigHO
4705  if (rrcConnRecOpts[1])
4706  {
4707  // ...
4708  }
4709 
4710  // nonCriticalExtension
4711  if (rrcConnRecOpts[0])
4712  {
4713  // ...
4714  }
4715  }
4716  }
4717 
4718  return GetSerializedSize ();
4719 }
4720 
4721 void
4723 {
4724  os << "rrcTransactionIdentifier: " << (int) m_rrcTransactionIdentifier << std::endl;
4725  os << "haveMeasConfig: " << m_haveMeasConfig << std::endl;
4726  if (m_haveMeasConfig)
4727  {
4728  if (!m_measConfig.measObjectToRemoveList.empty ())
4729  {
4730  os << " measObjectToRemoveList: ";
4731  std::list<uint8_t> auxList = m_measConfig.measObjectToRemoveList;
4732  std::list<uint8_t>::iterator it = auxList.begin ();
4733  for (; it != auxList.end (); it++)
4734  {
4735  os << (int) *it << ", ";
4736  }
4737  os << std::endl;
4738  }
4739  if (!m_measConfig.reportConfigToRemoveList.empty ())
4740  {
4741  os << " reportConfigToRemoveList: ";
4742  std::list<uint8_t> auxList = m_measConfig.reportConfigToRemoveList;
4743  std::list<uint8_t>::iterator it = auxList.begin ();
4744  for (; it != auxList.end (); it++)
4745  {
4746  os << (int) *it << ", ";
4747  }
4748  os << std::endl;
4749  }
4750  if (!m_measConfig.measIdToRemoveList.empty ())
4751  {
4752  os << " measIdToRemoveList: ";
4753  std::list<uint8_t> auxList = m_measConfig.measIdToRemoveList;
4754  std::list<uint8_t>::iterator it = auxList.begin ();
4755  for (; it != auxList.end (); it++)
4756  {
4757  os << (int) *it << ", ";
4758  }
4759  os << std::endl;
4760  }
4761 
4762  if (!m_measConfig.measObjectToAddModList.empty ())
4763  {
4764  os << " measObjectToAddMod: " << std::endl;
4765  std::list<LteRrcSap::MeasObjectToAddMod> auxList = m_measConfig.measObjectToAddModList;
4766  std::list<LteRrcSap::MeasObjectToAddMod>::iterator it = auxList.begin ();
4767  for (; it != auxList.end (); it++)
4768  {
4769  os << " measObjectId: " << (int)it->measObjectId << std::endl;
4770  os << " carrierFreq: " << (int)it->measObjectEutra.carrierFreq << std::endl;
4771  os << " allowedMeasBandwidth: " << (int)it->measObjectEutra.allowedMeasBandwidth << std::endl;
4772  os << " presenceAntennaPort1: " << it->measObjectEutra.presenceAntennaPort1 << std::endl;
4773  os << " neighCellConfig: " << (int) it->measObjectEutra.neighCellConfig << std::endl;
4774  os << " offsetFreq: " << (int)it->measObjectEutra.offsetFreq << std::endl;
4775 
4776 
4777  if (!it->measObjectEutra.cellsToRemoveList.empty ())
4778  {
4779  os << " cellsToRemoveList: ";
4780  std::list<uint8_t> auxList = it->measObjectEutra.cellsToRemoveList;
4781  std::list<uint8_t>::iterator it = auxList.begin ();
4782  for (; it != auxList.end (); it++)
4783  {
4784  os << (int) *it << ", ";
4785  }
4786  os << std::endl;
4787  }
4788 
4789  if (!it->measObjectEutra.blackCellsToRemoveList.empty ())
4790  {
4791  os << " blackCellsToRemoveList: ";
4792  std::list<uint8_t> auxList = it->measObjectEutra.blackCellsToRemoveList;
4793  std::list<uint8_t>::iterator it = auxList.begin ();
4794  for (; it != auxList.end (); it++)
4795  {
4796  os << (int) *it << ", ";
4797  }
4798  os << std::endl;
4799  }
4800 
4801  if (!it->measObjectEutra.cellsToAddModList.empty ())
4802  {
4803  os << " cellsToAddModList: " << std::endl;
4804  std::list<LteRrcSap::CellsToAddMod> auxList = it->measObjectEutra.cellsToAddModList;
4805  std::list<LteRrcSap::CellsToAddMod>::iterator it = auxList.begin ();
4806  for (; it != auxList.end (); it++)
4807  {
4808  os << " cellIndex: " << (int)it->cellIndex << std::endl;
4809  os << " physCellId: " << (int)it->physCellId << std::endl;
4810  os << " cellIndividualOffset: " << (int)it->cellIndividualOffset << std::endl;
4811  os << " ------ " << std::endl;
4812  }
4813  }
4814 
4815  if (!it->measObjectEutra.blackCellsToAddModList.empty ())
4816  {
4817  os << " blackCellsToAddModList: " << std::endl;
4818  std::list<LteRrcSap::BlackCellsToAddMod> auxList = it->measObjectEutra.blackCellsToAddModList;
4819  std::list<LteRrcSap::BlackCellsToAddMod>::iterator it = auxList.begin ();
4820  for (; it != auxList.end (); it++)
4821  {
4822  os << " cellIndex: " << (int)it->cellIndex << std::endl;
4823  os << " physCellIdRange.start: " << (int)it->physCellIdRange.start << std::endl;
4824  os << " physCellIdRange.haveRange: " << it->physCellIdRange.haveRange << std::endl;
4825  os << " physCellIdRange.range: " << (int)it->physCellIdRange.range << std::endl;
4826  os << " ------ " << std::endl;
4827  }
4828  }
4829 
4830  os << " haveCellForWhichToReportCGI: " << it->measObjectEutra.haveCellForWhichToReportCGI << std::endl;
4831  os << " cellForWhichToReportCGI: " << (int)it->measObjectEutra.cellForWhichToReportCGI << std::endl;
4832  os << " ------------- " << std::endl;
4833  }
4834 
4835  }
4836 
4837  if (!m_measConfig.reportConfigToAddModList.empty ())
4838  {
4839  os << " reportConfigToAddModList: " << std::endl;
4840  std::list<LteRrcSap::ReportConfigToAddMod> auxList = m_measConfig.reportConfigToAddModList;
4841  std::list<LteRrcSap::ReportConfigToAddMod>::iterator it = auxList.begin ();
4842  for (; it != auxList.end (); it++)
4843  {
4844  os << " reportConfigId: " << (int)it->reportConfigId << std::endl;
4845  os << " reportConfigEutra.triggerType " << (int)it->reportConfigEutra.triggerType << std::endl;
4846  if (it->reportConfigEutra.triggerType == LteRrcSap::ReportConfigEutra::EVENT)
4847  {
4848  os << " reportConfigEutra.eventId " << (int)it->reportConfigEutra.eventId << std::endl;
4849  if (it->reportConfigEutra.eventId == LteRrcSap::ReportConfigEutra::EVENT_A3)
4850  {
4851  os << " reportConfigEutra.reportOnLeave " << (int)it->reportConfigEutra.reportOnLeave << std::endl;
4852  os << " reportConfigEutra.a3Offset " << (int)it->reportConfigEutra.a3Offset << std::endl;
4853  }
4854  else
4855  {
4856  os << " reportConfigEutra.threshold1.choice " << (int)it->reportConfigEutra.threshold1.choice << std::endl;
4857  os << " reportConfigEutra.threshold1.range " << (int)it->reportConfigEutra.threshold1.range << std::endl;
4858  if (it->reportConfigEutra.eventId == LteRrcSap::ReportConfigEutra::EVENT_A5)
4859  {
4860  os << " reportConfigEutra.threshold2.choice " << (int)it->reportConfigEutra.threshold2.choice << std::endl;
4861  os << " reportConfigEutra.threshold2.range " << (int)it->reportConfigEutra.threshold2.range << std::endl;
4862  }
4863  }
4864  os << " reportConfigEutra.hysteresis " << (int)it->reportConfigEutra.hysteresis << std::endl;
4865  os << " reportConfigEutra.timeToTrigger " << (int)it->reportConfigEutra.timeToTrigger << std::endl;
4866  }
4867  else
4868  {
4869  os << " reportConfigEutra.purpose " << (int)it->reportConfigEutra.purpose << std::endl;
4870  }
4871  os << " reportConfigEutra.triggerQuantity " << (int)it->reportConfigEutra.triggerQuantity << std::endl;
4872  os << " reportConfigEutra.reportQuantity " << (int)it->reportConfigEutra.reportQuantity << std::endl;
4873  os << " reportConfigEutra.maxReportCells " << (int)it->reportConfigEutra.maxReportCells << std::endl;
4874  os << " reportConfigEutra.reportInterval " << (int)it->reportConfigEutra.reportInterval << std::endl;
4875  os << " reportConfigEutra.reportAmount " << (int)it->reportConfigEutra.reportAmount << std::endl;
4876  }
4877  }
4878 
4879  if (!m_measConfig.measIdToAddModList.empty ())
4880  {
4881  os << " measIdToAddModList: " << std::endl;
4882  std::list<LteRrcSap::MeasIdToAddMod> auxList = m_measConfig.measIdToAddModList;
4883  std::list<LteRrcSap::MeasIdToAddMod>::iterator it = auxList.begin ();
4884  for (; it != auxList.end (); it++)
4885  {
4886  os << " measId: " << (int)it->measId << std::endl;
4887  os << " measObjectId: " << (int)it->measObjectId << std::endl;
4888  os << " reportConfigId: " << (int)it->reportConfigId << std::endl;
4889  os << " ------ " << std::endl;
4890  }
4891  }
4892 
4893  os << " haveQuantityConfig: " << m_measConfig.haveQuantityConfig << std::endl;
4895  {
4896  os << " filterCoefficientRSRP: " << (int)m_measConfig.quantityConfig.filterCoefficientRSRP << std::endl;
4897  os << " filterCoefficientRSRQ:" << (int)m_measConfig.quantityConfig.filterCoefficientRSRQ << std::endl;
4898  }
4899 
4900  os << " haveMeasGapConfig: " << m_measConfig.haveMeasGapConfig << std::endl;
4902  {
4903  os << " measGapConfig.type: " << m_measConfig.measGapConfig.type << std::endl;
4904  os << " measGapConfig.gap (gap0/1,value): (" << m_measConfig.measGapConfig.gapOffsetChoice
4905  << "," << (int) m_measConfig.measGapConfig.gapOffsetValue << ")" << std::endl;
4906  }
4907 
4908  os << " haveSmeasure: " << m_measConfig.haveSmeasure << std::endl;
4910  {
4911  os << " sMeasure: " << (int) m_measConfig.sMeasure << std::endl;
4912  }
4913 
4914  os << " haveSpeedStatePars: " << m_measConfig.haveSpeedStatePars << std::endl;
4916  {
4917  os << " speedStatePars.type: " << m_measConfig.speedStatePars.type << std::endl;
4918  os << " speedStatePars.mobilityStateParameters.tEvaluation: " << (int)m_measConfig.speedStatePars.mobilityStateParameters.tEvaluation << std::endl;
4919  os << " speedStatePars.mobilityStateParameters.tHystNormal: " << (int)m_measConfig.speedStatePars.mobilityStateParameters.tHystNormal << std::endl;
4920  os << " speedStatePars.mobilityStateParameters.nCellChangeMedium: " << (int)m_measConfig.speedStatePars.mobilityStateParameters.nCellChangeMedium << std::endl;
4921  os << " speedStatePars.mobilityStateParameters.nCellChangeHigh: " << (int)m_measConfig.speedStatePars.mobilityStateParameters.nCellChangeHigh << std::endl;
4922  os << " speedStatePars.timeToTriggerSf.sfMedium: " << (int)m_measConfig.speedStatePars.timeToTriggerSf.sfMedium << std::endl;
4923  os << " speedStatePars.timeToTriggerSf.sfHigh: " << (int)m_measConfig.speedStatePars.timeToTriggerSf.sfHigh << std::endl;
4924  }
4925  }
4926 
4927  os << "haveMobilityControlInfo: " << m_haveMobilityControlInfo << std::endl;
4929  {
4930  os << "targetPhysCellId: " << (int)m_mobilityControlInfo.targetPhysCellId << std::endl;
4931  os << "haveCarrierFreq: " << m_mobilityControlInfo.haveCarrierFreq << std::endl;
4933  {
4934  os << " carrierFreq.dlCarrierFreq: " << (int) m_mobilityControlInfo.carrierFreq.dlCarrierFreq << std::endl;
4935  os << " carrierFreq.dlCarrierFreq: " << (int) m_mobilityControlInfo.carrierFreq.ulCarrierFreq << std::endl;
4936  }
4937  os << "haveCarrierBandwidth: " << m_mobilityControlInfo.haveCarrierBandwidth << std::endl;
4939  {
4940  os << " carrierBandwidth.dlBandwidth: " << (int) m_mobilityControlInfo.carrierBandwidth.dlBandwidth << std::endl;
4941  os << " carrierBandwidth.ulBandwidth: " << (int) m_mobilityControlInfo.carrierBandwidth.ulBandwidth << std::endl;
4942  }
4943  os << "newUeIdentity: " << (int) m_mobilityControlInfo.newUeIdentity << std::endl;
4944  os << "haveRachConfigDedicated: " << m_mobilityControlInfo.haveRachConfigDedicated << std::endl;
4946  {
4947  os << "raPreambleIndex: " << (int) m_mobilityControlInfo.rachConfigDedicated.raPreambleIndex << std::endl;
4948  os << "raPrachMaskIndex: " << (int) m_mobilityControlInfo.rachConfigDedicated.raPrachMaskIndex << std::endl;
4949  }
4950  }
4951  os << "haveRadioResourceConfigDedicated: " << m_haveRadioResourceConfigDedicated << std::endl;
4953  {
4955  }
4956 }
4957 
4958 void
4960 {
4963  m_measConfig = msg.measConfig;
4968 
4969  m_isDataSerialized = false;
4970 }
4971 
4974 {
4976 
4979  msg.measConfig = m_measConfig;
4984 
4985  return msg;
4986 }
4987 
4988 uint8_t
4990 {
4992 }
4993 
4994 bool
4996 {
4997  return m_haveMeasConfig;
4998 }
4999 
5002 {
5003  return m_measConfig;
5004 }
5005 
5006 bool
5008 {
5010 }
5011 
5014 {
5015  return m_mobilityControlInfo;
5016 }
5017 
5018 bool
5020 {
5022 }
5023 
5026 {
5028 }
5029 
5030 bool
5032 {
5034 }
5035 
5036 std::list<LteRrcSap::SrbToAddMod>
5038 {
5040 }
5041 
5042 std::list<LteRrcSap::DrbToAddMod>
5044 {
5046 }
5047 
5048 std::list<uint8_t>
5050 {
5052 }
5053 
5056 {
5058 }
5059 
5060 
5062 
5064 {
5065 }
5066 
5067 void
5069 {
5071 
5072  // Serialize HandoverPreparationInformation sequence:
5073  // no default or optional fields. Extension marker not present.
5074  SerializeSequence (std::bitset<0> (),false);
5075 
5076  // Serialize criticalExtensions choice
5077  // 2 options, selected 0 (c1)
5078  SerializeChoice (2,0,false);
5079 
5080  // Serialize c1 choice
5081  // 8 options, selected 0 (handoverPreparationInformation-r8)
5082  SerializeChoice (8,0,false);
5083 
5084  // Serialize HandoverPreparationInformation-r8-IEs sequence
5085  // 4 optional fields, no extension marker.
5086  std::bitset<4> handoverPrepInfoOpts;
5087  handoverPrepInfoOpts.set (3,1); // as-Config present
5088  handoverPrepInfoOpts.set (2,0); // rrm-Config not present
5089  handoverPrepInfoOpts.set (1,0); // as-Context not present
5090  handoverPrepInfoOpts.set (0,0); // nonCriticalExtension not present
5091  SerializeSequence (handoverPrepInfoOpts,false);
5092 
5093  // Serialize ue-RadioAccessCapabilityInfo
5095 
5096  // Serialize as-Config
5097  SerializeSequence (std::bitset<0> (),true);
5098 
5099  // Serialize sourceMeasConfig
5101 
5102  // Serialize sourceRadioResourceConfig
5104 
5105  // Serialize sourceSecurityAlgorithmConfig
5106  SerializeSequence (std::bitset<0> (),false);
5107  // cipheringAlgorithm
5108  SerializeEnum (8,0);
5109  // integrityProtAlgorithm
5110  SerializeEnum (8,0);
5111 
5112  // Serialize sourceUE-Identity
5113  SerializeBitstring (std::bitset<16> (m_asConfig.sourceUeIdentity));
5114 
5115  // Serialize sourceMasterInformationBlock
5116  SerializeSequence (std::bitset<0> (),false);
5118  SerializeSequence (std::bitset<0> (),false); // phich-Config sequence
5119  SerializeEnum (2,0); // phich-Duration
5120  SerializeEnum (4,0); // phich-Resource
5121  SerializeBitstring (std::bitset<8> (m_asConfig.sourceMasterInformationBlock.systemFrameNumber)); // systemFrameNumber
5122  SerializeBitstring (std::bitset<10> (321)); // spare
5123 
5124  // Serialize sourceSystemInformationBlockType1 sequence
5126 
5127  // Serialize sourceSystemInformationBlockType2
5129 
5130  // Serialize AntennaInfoCommon
5131  SerializeSequence (std::bitset<0> (0),false);
5132  SerializeEnum (4,0); // antennaPortsCount
5133 
5134  // Serialize sourceDlCarrierFreq
5136 
5137  // Finish serialization
5139 }
5140 
5141 uint32_t
5143 {
5144  std::bitset<0> bitset0;
5145  int n;
5146 
5147  // Deserialize HandoverPreparationInformation sequence
5148  // 0 optional fields, no extension marker
5149  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5150 
5151  // Deserialize criticalExtensions choice
5152  int criticalExtensionsChosen;
5153  bIterator = DeserializeChoice (2,false,&criticalExtensionsChosen,bIterator);
5154 
5155  if (criticalExtensionsChosen == 1)
5156  {
5157  // Deserialize criticalExtensionsFuture
5158  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5159  }
5160  else if (criticalExtensionsChosen == 0)
5161  {
5162  // Deserialize c1 choice
5163  int c1Chosen;
5164  bIterator = DeserializeChoice (8,false,&c1Chosen,bIterator);
5165  if (c1Chosen > 0)
5166  {
5167  bIterator = DeserializeNull (bIterator);
5168  }
5169  else if (c1Chosen == 0)
5170  {
5171  // Deserialize handoverPreparationInformation-r8
5172  std::bitset<4> handoverPrepInfoOpts;
5173  bIterator = DeserializeSequence (&handoverPrepInfoOpts,false,bIterator);
5174 
5175  // Deserialize ue-RadioAccessCapabilityInfo
5176  bIterator = DeserializeSequenceOf (&n,MAX_RAT_CAPABILITIES,0,bIterator);
5177  for (int i = 0; i < n; i++)
5178  {
5179  // Deserialize UE-CapabilityRAT-Container
5180  // ...
5181  }
5182 
5183  if (handoverPrepInfoOpts[3])
5184  {
5185  // Deserialize as-Config sequence
5186  bIterator = DeserializeSequence (&bitset0,true,bIterator);
5187 
5188  // Deserialize sourceMeasConfig
5189  bIterator = DeserializeMeasConfig (&m_asConfig.sourceMeasConfig, bIterator);
5190 
5191  // Deserialize sourceRadioResourceConfig
5193 
5194  // Deserialize sourceSecurityAlgorithmConfig
5195  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5196  bIterator = DeserializeEnum (8,&n,bIterator); // cipheringAlgorithm
5197  bIterator = DeserializeEnum (8,&n,bIterator); // integrityProtAlgorithm
5198 
5199  // Deserialize sourceUE-Identity
5200  std::bitset<16> cRnti;
5201  bIterator = DeserializeBitstring (&cRnti,bIterator);
5202  m_asConfig.sourceUeIdentity = cRnti.to_ulong ();
5203 
5204  // Deserialize sourceMasterInformationBlock
5205  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5206  bIterator = DeserializeEnum (6,&n,bIterator); // dl-Bandwidth
5208 
5209  // phich-Config
5210  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5211  bIterator = DeserializeEnum (2,&n,bIterator); // phich-Duration
5212  bIterator = DeserializeEnum (4,&n,bIterator); // phich-Resource
5213 
5214  // systemFrameNumber
5215  std::bitset<8> systemFrameNumber;
5216  bIterator = DeserializeBitstring (&systemFrameNumber,bIterator);
5217  m_asConfig.sourceMasterInformationBlock.systemFrameNumber = systemFrameNumber.to_ulong ();
5218  // spare
5219  std::bitset<10> spare;
5220  bIterator = DeserializeBitstring (&spare,bIterator);
5221 
5222  // Deserialize sourceSystemInformationBlockType1
5224 
5225  // Deserialize sourceSystemInformationBlockType2
5227 
5228  // Deserialize antennaInfoCommon
5229  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5230  bIterator = DeserializeEnum (4,&n,bIterator); // antennaPortsCount
5231 
5232  // Deserialize sourceDl-CarrierFreq
5233  bIterator = DeserializeInteger (&n,0,MAX_EARFCN,bIterator);
5235  }
5236  if (handoverPrepInfoOpts[2])
5237  {
5238  // Deserialize rrm-Config
5239  // ...
5240  }
5241  if (handoverPrepInfoOpts[1])
5242  {
5243  // Deserialize as-Context
5244  // ...
5245  }
5246  if (handoverPrepInfoOpts[0])
5247  {
5248  // Deserialize nonCriticalExtension
5249  // ...
5250  }
5251  }
5252  }
5253 
5254  return GetSerializedSize ();
5255 }
5256 
5257 void
5259 {
5261  os << "sourceUeIdentity: " << m_asConfig.sourceUeIdentity << std::endl;
5262  os << "dlBandwidth: " << (int)m_asConfig.sourceMasterInformationBlock.dlBandwidth << std::endl;
5263  os << "systemFrameNumber: " << (int)m_asConfig.sourceMasterInformationBlock.systemFrameNumber << std::endl;
5264  os << "plmnIdentityInfo.plmnIdentity: " << (int) m_asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.plmnIdentityInfo.plmnIdentity << std::endl;
5265  os << "cellAccessRelatedInfo.cellIdentity " << (int)m_asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.cellIdentity << std::endl;
5266  os << "cellAccessRelatedInfo.csgIndication: " << m_asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.csgIndication << std::endl;
5267  os << "cellAccessRelatedInfo.csgIdentity: " << (int)m_asConfig.sourceSystemInformationBlockType1.cellAccessRelatedInfo.csgIdentity << std::endl;
5268  os << "sourceDlCarrierFreq: " << m_asConfig.sourceDlCarrierFreq << std::endl;
5269 }
5270 
5271 void
5273 {
5274  m_asConfig = msg.asConfig;
5275  m_isDataSerialized = false;
5276 }
5277 
5280 {
5282  msg.asConfig = m_asConfig;
5283 
5284  return msg;
5285 }
5286 
5289 {
5290  return m_asConfig;
5291 }
5292 
5294 
5296 {
5297 }
5298 
5300 {
5301 }
5302 
5303 void
5305 {
5307 
5309 
5310  // Serialize RrcConnectionReestablishmentReques sequence:
5311  // no default or optional fields. Extension marker not present.
5312  SerializeSequence (std::bitset<0> (),false);
5313 
5314  // Serialize criticalExtensions choice
5315  // chosen: rrcConnectionReestablishmentRequest-r8
5316  SerializeChoice (2,0,false);
5317 
5318  // Serialize RRCConnectionReestablishmentRequest-r8-IEs sequence
5319  // no default or optional fields. Extension marker not present.
5320  SerializeSequence (std::bitset<0> (),false);
5321 
5322  // Serialize ue-Identity
5323  SerializeSequence (std::bitset<0> (),false);
5324  // Serialize c-RNTI
5325  SerializeBitstring (std::bitset<16> (m_ueIdentity.cRnti));
5326  // Serialize physCellId
5328  // Serialize shortMAC-I
5329  SerializeBitstring (std::bitset<16> (0));
5330 
5331  // Serialize ReestablishmentCause
5332  switch (m_reestablishmentCause)
5333  {
5335  SerializeEnum (4,0);
5336  break;
5338  SerializeEnum (4,1);
5339  break;
5341  SerializeEnum (4,2);
5342  break;
5343  default:
5344  SerializeEnum (4,3);
5345  }
5346 
5347  // Serialize spare
5348  SerializeBitstring (std::bitset<2> (0));
5349 
5350  // Finish serialization
5352 }
5353 
5354 uint32_t
5356 {
5357  std::bitset<0> bitset0;
5358  int n;
5359 
5360  bIterator = DeserializeUlCcchMessage (bIterator);
5361 
5362  // Deserialize RrcConnectionReestablishmentRequest sequence
5363  // 0 optional fields, no extension marker
5364  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5365 
5366  // Deserialize criticalExtensions choice
5367  bIterator = DeserializeChoice (2,false,&n,bIterator);
5368  if ( n == 1)
5369  {
5370  // Deserialize criticalExtensionsFuture
5371  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5372  }
5373  else if ( n == 0)
5374  {
5375  // Deserialize RRCConnectionReestablishmentRequest-r8-IEs
5376  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5377 
5378  // Deserialize ReestabUE-Identity sequence
5379  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5380 
5381  // Deserialize c-RNTI
5382  std::bitset<16> cRnti;
5383  bIterator = DeserializeBitstring (&cRnti,bIterator);
5384  m_ueIdentity.cRnti = cRnti.to_ulong ();
5385 
5386  // Deserialize physCellId
5387  int physCellId;
5388  bIterator = DeserializeInteger (&physCellId,0,503,bIterator);
5389  m_ueIdentity.physCellId = physCellId;
5390 
5391  // Deserialize shortMAC-I
5392  std::bitset<16> shortMacI;
5393  bIterator = DeserializeBitstring (&shortMacI,bIterator);
5394 
5395  // Deserialize ReestablishmentCause
5396  int reestCs;
5397  bIterator = DeserializeEnum (4,&reestCs,bIterator);
5398  switch (reestCs)
5399  {
5400  case 0:
5402  break;
5403  case 1:
5405  break;
5406  case 2:
5408  break;
5409  case 3:
5410  break;
5411  }
5412 
5413  // Deserialize spare
5414  std::bitset<2> spare;
5415  bIterator = DeserializeBitstring (&spare,bIterator);
5416  }
5417 
5418  return GetSerializedSize ();
5419 }
5420 
5421 void
5423 {
5424  os << "ueIdentity.cRnti: " << (int)m_ueIdentity.cRnti << std::endl;
5425  os << "ueIdentity.physCellId: " << (int)m_ueIdentity.physCellId << std::endl;
5426  os << "m_reestablishmentCause: " << m_reestablishmentCause << std::endl;
5427 }
5428 
5429 void
5431 {
5432  m_ueIdentity = msg.ueIdentity;
5434  m_isDataSerialized = false;
5435 }
5436 
5439 {
5441  msg.ueIdentity = m_ueIdentity;
5443 
5444  return msg;
5445 }
5446 
5449 {
5450  return m_ueIdentity;
5451 }
5452 
5455 {
5456  return m_reestablishmentCause;
5457 }
5458 
5460 
5462 {
5463 }
5464 
5466 {
5467 }
5468 
5469 void
5471 {
5473 
5475 
5476  // Serialize RrcConnectionReestablishment sequence:
5477  // no default or optional fields. Extension marker not present.
5478  SerializeSequence (std::bitset<0> (),false);
5479 
5480  // Serialize rrc-TransactionIdentifier
5482 
5483  // Serialize criticalExtensions choice
5484  SerializeChoice (2,0,false);
5485 
5486  // Serialize c1 choice
5487  SerializeChoice (8,0,false);
5488 
5489  // Serialize RRCConnectionReestablishment-r8-IEs sequence
5490  // 1 optional field, no extension marker
5491  SerializeSequence (std::bitset<1> (0),false);
5492 
5493  // Serialize radioResourceConfigDedicated
5495 
5496  // Serialize nextHopChainingCount
5497  SerializeInteger (0,0,7);
5498 
5499  // Finish serialization
5501 }
5502 
5503 uint32_t
5505 {
5506  std::bitset<0> bitset0;
5507  int n;
5508 
5509  bIterator = DeserializeDlCcchMessage (bIterator);
5510 
5511  // Deserialize RrcConnectionReestablishment sequence
5512  // 0 optional fields, no extension marker
5513  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5514 
5515  // Deserialize rrc-TransactionIdentifier
5516  bIterator = DeserializeInteger (&n,0,3,bIterator);
5518 
5519  // Deserialize criticalExtensions choice
5520  int criticalExtensionsChoice;
5521  bIterator = DeserializeChoice (2,false,&criticalExtensionsChoice,bIterator);
5522  if (criticalExtensionsChoice == 1)
5523  {
5524  // Deserialize criticalExtensionsFuture
5525  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5526  }
5527  else if (criticalExtensionsChoice == 0)
5528  {
5529  // Deserialize c1
5530  int c1;
5531  bIterator = DeserializeChoice (8,false,&c1,bIterator);
5532  if (c1 > 0)
5533  {
5534  bIterator = DeserializeNull (bIterator);
5535  }
5536  else if (c1 == 0)
5537  {
5538  // Deserialize rrcConnectionReestablishment-r8
5539  // 1 optional field
5540  std::bitset<1> nonCriticalExtensionPresent;
5541  bIterator = DeserializeSequence (&nonCriticalExtensionPresent,false,bIterator);
5542 
5543  // Deserialize RadioResourceConfigDedicated
5545 
5546  // Deserialize nextHopChainingCount
5547  bIterator = DeserializeInteger (&n,0,7,bIterator);
5548  }
5549  }
5550 
5551  return GetSerializedSize ();
5552 }
5553 
5554 void
5556 {
5557  os << "rrcTransactionIdentifier: " << (int)m_rrcTransactionIdentifier << std::endl;
5558  os << "RadioResourceConfigDedicated: " << std::endl;
5560 }
5561 
5562 void
5564 {
5567  m_isDataSerialized = false;
5568 }
5569 
5572 {
5576  return msg;
5577 }
5578 
5579 uint8_t
5581 {
5583 }
5584 
5587 {
5589 }
5590 
5592 
5594 {
5595 }
5596 
5597 void
5599 {
5601 
5602  // Serialize DCCH message
5604 
5605  // Serialize RrcConnectionReestablishmentComplete sequence:
5606  // no default or optional fields. Extension marker not present.
5607  SerializeSequence (std::bitset<0> (),false);
5608 
5609  // Serialize rrc-TransactionIdentifier
5611 
5612  // Serialize criticalExtensions choice
5613  SerializeChoice (2,0,false);
5614 
5615  // Serialize rrcConnectionReestablishmentComplete-r8 sequence
5616  // 1 optional field (not present), no extension marker.
5617  SerializeSequence (std::bitset<1> (0),false);
5618 
5619  // Finish serialization
5621 }
5622 
5623 uint32_t
5625 {
5626  std::bitset<0> bitset0;
5627  int n;
5628 
5629  bIterator = DeserializeUlDcchMessage (bIterator);
5630 
5631  // Deserialize RrcConnectionReestablishmentComplete sequence
5632  // 0 optional fields, no extension marker
5633  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5634 
5635  // Deserialize rrc-TransactionIdentifier
5636  bIterator = DeserializeInteger (&n,0,3,bIterator);
5638 
5639  // Deserialize criticalExtensions choice
5640  int criticalExtensionsChoice;
5641  bIterator = DeserializeChoice (2,false,&criticalExtensionsChoice,bIterator);
5642  if (criticalExtensionsChoice == 1)
5643  {
5644  // Deserialize criticalExtensionsFuture
5645  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5646  }
5647  else if (criticalExtensionsChoice == 0)
5648  {
5649  // Deserialize rrcConnectionReestablishmentComplete-r8
5650  std::bitset<1> opts;
5651  bIterator = DeserializeSequence (&opts,false,bIterator);
5652  if (opts[0])
5653  {
5654  // Deserialize RRCConnectionReestablishmentComplete-v920-IEs
5655  // ...
5656  }
5657  }
5658 
5659  return GetSerializedSize ();
5660 }
5661 
5662 void
5664 {
5665  os << "rrcTransactionIdentifier: " << (int)m_rrcTransactionIdentifier << std::endl;
5666 }
5667 
5668 void
5670 {
5672  m_isDataSerialized = false;
5673 }
5674 
5677 {
5680  return msg;
5681 }
5682 
5683 uint8_t
5685 {
5687 }
5688 
5690 
5692 {
5693 }
5694 
5696 {
5697 }
5698 
5699 void
5701 {
5703 
5704  // Serialize CCCH message
5706 
5707  // Serialize RrcConnectionReestablishmentReject sequence:
5708  // no default or optional fields. Extension marker not present.
5709  SerializeSequence (std::bitset<0> (),false);
5710 
5711  // Serialize criticalExtensions choice
5712  SerializeChoice (2,0,false);
5713 
5714  // Serialize RRCConnectionReestablishmentReject-r8-IEs sequence
5715  // 1 optional field (not present), no extension marker.
5716  SerializeSequence (std::bitset<1> (0),false);
5717 
5718  // Finish serialization
5720 }
5721 
5722 uint32_t
5724 {
5725  std::bitset<0> bitset0;
5726 
5727  bIterator = DeserializeDlCcchMessage (bIterator);
5728 
5729  // Deserialize RrcConnectionReestablishmentReject sequence
5730  // 0 optional fields, no extension marker
5731  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5732 
5733  // Deserialize criticalExtensions choice
5734  int criticalExtensionsChoice;
5735  bIterator = DeserializeChoice (2,false,&criticalExtensionsChoice,bIterator);
5736  if (criticalExtensionsChoice == 1)
5737  {
5738  // Deserialize criticalExtensionsFuture
5739  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5740  }
5741  else if (criticalExtensionsChoice == 0)
5742  {
5743  // Deserialize rrcConnectionReestablishmentReject-r8
5744  std::bitset<1> opts;
5745  bIterator = DeserializeSequence (&opts,false,bIterator);
5746  if (opts[0])
5747  {
5748  // Deserialize RRCConnectionReestablishmentReject-v8a0-IEs
5749  // ...
5750  }
5751  }
5752 
5753  return GetSerializedSize ();
5754 }
5755 
5756 void
5758 {
5759 }
5760 
5761 void
5763 {
5765  m_isDataSerialized = false;
5766 }
5767 
5770 {
5772 }
5773 
5775 
5777 {
5778 }
5779 
5781 {
5782 }
5783 
5784 void
5786 {
5788 
5789  // Serialize DCCH message
5791 
5792  // Serialize RrcConnectionRelease sequence:
5793  // no default or optional fields. Extension marker not present.
5794  SerializeSequence (std::bitset<0> (),false);
5795 
5796  // Serialize rrc-TransactionIdentifier
5798 
5799  // Serialize criticalExtensions choice
5800  SerializeChoice (2,0,false);
5801 
5802  // Serialize c1 choice
5803  SerializeChoice (4,0,false);
5804 
5805  // Serialize RRCConnectionRelease-r8-IEs sequence
5806  // 3 optional field (not present), no extension marker.
5807  SerializeSequence (std::bitset<3> (0),false);
5808 
5809  // Serialize ReleaseCause
5810  SerializeEnum (4,1);
5811 
5812  // Finish serialization
5814 }
5815 
5816 uint32_t
5818 {
5819  std::bitset<0> bitset0;
5820  int n;
5821 
5822  bIterator = DeserializeDlDcchMessage (bIterator);
5823 
5824  // Deserialize RrcConnectionRelease sequence
5825  // 0 optional fields, no extension marker
5826  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5827 
5828  // Deserialize rrc-TransactionIdentifier
5829  bIterator = DeserializeInteger (&n,0,3,bIterator);
5831 
5832  // Deserialize criticalExtensions choice
5833  int criticalExtensionsChoice;
5834  bIterator = DeserializeChoice (2,false,&criticalExtensionsChoice,bIterator);
5835  if (criticalExtensionsChoice == 1)
5836  {
5837  // Deserialize criticalExtensionsFuture
5838  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5839  }
5840  else if (criticalExtensionsChoice == 0)
5841  {
5842  // Deserialize c1
5843  int c1Choice;
5844  bIterator = DeserializeChoice (4,false,&c1Choice,bIterator);
5845 
5846  if (c1Choice == 0)
5847  {
5848  // Deserialize RRCConnectionRelease-r8-IEs
5849  std::bitset<3> opts;
5850  bIterator = DeserializeSequence (&opts,false,bIterator);
5851 
5852  // Deserialize releaseCause
5853  bIterator = DeserializeEnum (4,&n,bIterator);
5854 
5855  if (opts[2])
5856  {
5857  // Deserialize redirectedCarrierInfo
5858  // ...
5859  }
5860  if (opts[1])
5861  {
5862  // Deserialize idleModeMobilityControlInfo
5863  // ...
5864  }
5865  if (opts[0])
5866  {
5867  // Deserialize nonCriticalExtension
5868  // ...
5869  }
5870  }
5871 
5872  else
5873  {
5874  bIterator = DeserializeNull (bIterator);
5875  }
5876  }
5877 
5878  return GetSerializedSize ();
5879 }
5880 
5881 void
5882 RrcConnectionReleaseHeader::Print (std::ostream &os) const
5883 {
5884 }
5885 
5886 void
5888 {
5889  m_rrcConnectionRelease = msg;
5890  m_isDataSerialized = false;
5891 }
5892 
5895 {
5896  return m_rrcConnectionRelease;
5897 }
5898 
5900 
5902 {
5903 }
5904 
5906 {
5907 }
5908 
5909 void
5911 {
5913 
5914  // Serialize CCCH message
5916 
5917  // Serialize RrcConnectionReject sequence:
5918  // no default or optional fields. Extension marker not present.
5919  SerializeSequence (std::bitset<0> (),false);
5920 
5921  // Serialize criticalExtensions choice
5922  SerializeChoice (2,0,false);
5923 
5924  // Serialize c1 choice
5925  SerializeChoice (4,0,false);
5926 
5927  // Serialize rrcConnectionReject-r8 sequence
5928  // 1 optional field (not present), no extension marker.
5929  SerializeSequence (std::bitset<1> (0),false);
5930 
5931  // Serialize waitTime
5933 
5934  // Finish serialization
5936 }
5937 
5938 uint32_t
5940 {
5941  std::bitset<0> bitset0;
5942  int n;
5943 
5944  bIterator = DeserializeDlCcchMessage (bIterator);
5945 
5946  // Deserialize RrcConnectionReject sequence
5947  // 0 optional fields, no extension marker
5948  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5949 
5950  // Deserialize criticalExtensions choice
5951  int criticalExtensionsChoice;
5952  bIterator = DeserializeChoice (2,false,&criticalExtensionsChoice,bIterator);
5953  if (criticalExtensionsChoice == 1)
5954  {
5955  // Deserialize criticalExtensionsFuture
5956  bIterator = DeserializeSequence (&bitset0,false,bIterator);
5957  }
5958  else if (criticalExtensionsChoice == 0)
5959  {
5960  // Deserialize c1 choice
5961  int c1Choice;
5962  bIterator = DeserializeChoice (4,false,&c1Choice,bIterator);
5963 
5964  if (c1Choice > 0)
5965  {
5966  bIterator = DeserializeNull (bIterator);
5967  }
5968  else if (c1Choice == 0)
5969  {
5970  // Deserialize rrcConnectionReject-r8
5971  std::bitset<1> opts;
5972  bIterator = DeserializeSequence (&opts,false,bIterator);
5973 
5974  bIterator = DeserializeInteger (&n,1,16,bIterator);
5976 
5977  if (opts[0])
5978  {
5979  // Deserialize RRCConnectionReject-v8a0-IEs
5980  // ...
5981  }
5982  }
5983  }
5984 
5985  return GetSerializedSize ();
5986 }
5987 
5988 void
5989 RrcConnectionRejectHeader::Print (std::ostream &os) const
5990 {
5991  os << "wait time: " << (int)m_rrcConnectionReject.waitTime << std::endl;
5992 }
5993 
5994 void
5996 {
5997  m_rrcConnectionReject = msg;
5998  m_isDataSerialized = false;
5999 }
6000 
6003 {
6004  return m_rrcConnectionReject;
6005 }
6006 
6008 
6010 {
6011 }
6012 
6014 {
6015 }
6016 
6017 void
6019 {
6021 
6022  // Serialize DCCH message
6024 
6025  // Serialize MeasurementReport sequence:
6026  // no default or optional fields. Extension marker not present.
6027  SerializeSequence (std::bitset<0> (),false);
6028 
6029  // Serialize criticalExtensions choice:
6030  // c1 chosen
6031  SerializeChoice (2,0,false);
6032 
6033  // Serialize c1 choice
6034  // measurementReport-r8 chosen
6035  SerializeChoice (8,0,false);
6036 
6037  // Serialize MeasurementReport-r8-IEs sequence:
6038  // 1 optional fields, not present. Extension marker not present.
6039  SerializeSequence (std::bitset<1> (0),false);
6040 
6041  // Serialize measResults
6043 
6044  // Finish serialization
6046 }
6047 
6048 uint32_t
6050 {
6051  std::bitset<0> bitset0;
6052 
6053  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6054 
6055  bIterator = DeserializeUlDcchMessage (bIterator);
6056 
6057  int criticalExtensionsChoice;
6058  bIterator = DeserializeChoice (2,false,&criticalExtensionsChoice,bIterator);
6059 
6060  if (criticalExtensionsChoice == 1)
6061  {
6062  // Deserialize criticalExtensionsFuture
6063  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6064  }
6065  else if (criticalExtensionsChoice == 0)
6066  {
6067  // Deserialize c1
6068  int c1Choice;
6069  bIterator = DeserializeChoice (8,false,&c1Choice,bIterator);
6070 
6071  if (c1Choice > 0)
6072  {
6073  bIterator = DeserializeNull (bIterator);
6074  }
6075  else
6076  {
6077  // Deserialize measurementReport-r8
6078  std::bitset<1> isNonCriticalExtensionPresent;
6079  bIterator = DeserializeSequence (&isNonCriticalExtensionPresent,false,bIterator);
6080 
6081  // Deserialize measResults
6082  bIterator = DeserializeMeasResults (&m_measurementReport.measResults, bIterator);
6083 
6084  if (isNonCriticalExtensionPresent[0])
6085  {
6086  // Deserialize nonCriticalExtension MeasurementReport-v8a0-IEs
6087  // ...
6088  }
6089 
6090  }
6091  }
6092 
6093  return GetSerializedSize ();
6094 }
6095 
6096 void
6097 MeasurementReportHeader::Print (std::ostream &os) const
6098 {
6099  os << "measId = " << (int)m_measurementReport.measResults.measId << std::endl;
6100  os << "rsrpResult = " << (int)m_measurementReport.measResults.rsrpResult << std::endl;
6101  os << "rsrqResult = " << (int)m_measurementReport.measResults.rsrqResult << std::endl;
6102  os << "haveMeasResultNeighCells = " << (int)m_measurementReport.measResults.haveMeasResultNeighCells << std::endl;
6103 
6105  {
6106  std::list<LteRrcSap::MeasResultEutra> measResultListEutra = m_measurementReport.measResults.measResultListEutra;
6107  std::list<LteRrcSap::MeasResultEutra>::iterator it = measResultListEutra.begin ();
6108  for (; it != measResultListEutra.end (); it++)
6109  {
6110  os << " physCellId =" << (int) it->physCellId << std::endl;
6111  os << " haveCgiInfo =" << it->haveCgiInfo << std::endl;
6112  if (it->haveCgiInfo)
6113  {
6114  os << " plmnIdentity = " << (int) it->cgiInfo.plmnIdentity << std::endl;
6115  os << " cellIdentity = " << (int) it->cgiInfo.cellIdentity << std::endl;
6116  os << " trackingAreaCode = " << (int) it->cgiInfo.trackingAreaCode << std::endl;
6117  os << " havePlmnIdentityList = " << !it->cgiInfo.plmnIdentityList.empty () << std::endl;
6118  if (!it->cgiInfo.plmnIdentityList.empty ())
6119  {
6120  for (std::list<uint32_t>::iterator it2 = it->cgiInfo.plmnIdentityList.begin (); it2 != it->cgiInfo.plmnIdentityList.begin (); it2++)
6121  {
6122  os << " plmnId : " << *it2 << std::endl;
6123  }
6124  }
6125  }
6126 
6127  os << " haveRsrpResult =" << it->haveRsrpResult << std::endl;
6128  if (it->haveRsrpResult)
6129  {
6130  os << " rsrpResult =" << (int) it->rsrpResult << std::endl;
6131  }
6132 
6133  os << " haveRsrqResult =" << it->haveRsrqResult << std::endl;
6134  if (it->haveRsrqResult)
6135  {
6136  os << " rsrqResult =" << (int) it->rsrqResult << std::endl;
6137  }
6138 
6139  }
6140  }
6141 }
6142 
6143 void
6145 {
6146  m_measurementReport = msg;
6147  m_isDataSerialized = false;
6148 }
6149 
6152 {
6154  msg = m_measurementReport;
6155  return msg;
6156 }
6157 
6160 {
6161 }
6162 
6164 {
6165 }
6166 
6167 uint32_t
6169 {
6170  DeserializeUlDcchMessage (bIterator);
6171  return 1;
6172 }
6173 
6174 void
6175 RrcUlDcchMessage::Print (std::ostream &os) const
6176 {
6177  std::cout << "UL DCCH MSG TYPE: " << m_messageType << std::endl;
6178 }
6179 
6180 void
6182 {
6184 }
6185 
6188 {
6189  std::bitset<0> bitset0;
6190  int n;
6191 
6192  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6193  bIterator = DeserializeChoice (2,false,&n,bIterator);
6194  if (n == 1)
6195  {
6196  // Deserialize messageClassExtension
6197  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6198  m_messageType = -1;
6199  }
6200  else if (n == 0)
6201  {
6202  // Deserialize c1
6203  bIterator = DeserializeChoice (16,false,&m_messageType,bIterator);
6204  }
6205 
6206  return bIterator;
6207 }
6208 
6209 void
6211 {
6212  SerializeSequence (std::bitset<0> (),false);
6213  // Choose c1
6214  SerializeChoice (2,0,false);
6215  // Choose message type
6216  SerializeChoice (16,messageType,false);
6217 }
6218 
6221 {
6222 }
6223 
6225 {
6226 }
6227 
6228 uint32_t
6230 {
6231  DeserializeDlDcchMessage (bIterator);
6232  return 1;
6233 }
6234 
6235 void
6236 RrcDlDcchMessage::Print (std::ostream &os) const
6237 {
6238  std::cout << "DL DCCH MSG TYPE: " << m_messageType << std::endl;
6239 }
6240 
6241 void
6243 {
6245 }
6246 
6249 {
6250  std::bitset<0> bitset0;
6251  int n;
6252 
6253  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6254  bIterator = DeserializeChoice (2,false,&n,bIterator);
6255  if (n == 1)
6256  {
6257  // Deserialize messageClassExtension
6258  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6259  m_messageType = -1;
6260  }
6261  else if (n == 0)
6262  {
6263  // Deserialize c1
6264  bIterator = DeserializeChoice (16,false,&m_messageType,bIterator);
6265  }
6266 
6267  return bIterator;
6268 }
6269 
6270 void
6272 {
6273  SerializeSequence (std::bitset<0> (),false);
6274  // Choose c1
6275  SerializeChoice (2,0,false);
6276  // Choose message type
6277  SerializeChoice (16,messageType,false);
6278 }
6279 
6282 {
6283 }
6284 
6286 {
6287 }
6288 
6289 uint32_t
6291 {
6292  DeserializeUlCcchMessage (bIterator);
6293  return 1;
6294 }
6295 
6296 void
6297 RrcUlCcchMessage::Print (std::ostream &os) const
6298 {
6299  std::cout << "UL CCCH MSG TYPE: " << m_messageType << std::endl;
6300 }
6301 
6302 void
6304 {
6306 }
6307 
6310 {
6311  std::bitset<0> bitset0;
6312  int n;
6313 
6314  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6315  bIterator = DeserializeChoice (2,false,&n,bIterator);
6316  if (n == 1)
6317  {
6318  // Deserialize messageClassExtension
6319  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6320  m_messageType = -1;
6321  }
6322  else if (n == 0)
6323  {
6324  // Deserialize c1
6325  bIterator = DeserializeChoice (2,false,&m_messageType,bIterator);
6326  }
6327 
6328  return bIterator;
6329 }
6330 
6331 void
6333 {
6334  SerializeSequence (std::bitset<0> (),false);
6335  // Choose c1
6336  SerializeChoice (2,0,false);
6337  // Choose message type
6338  SerializeChoice (2,messageType,false);
6339 }
6340 
6343 {
6344 }
6345 
6347 {
6348 }
6349 
6350 uint32_t
6352 {
6353  DeserializeDlCcchMessage (bIterator);
6354  return 1;
6355 }
6356 
6357 void
6358 RrcDlCcchMessage::Print (std::ostream &os) const
6359 {
6360  std::cout << "DL CCCH MSG TYPE: " << m_messageType << std::endl;
6361 }
6362 
6363 void
6365 {
6367 }
6368 
6371 {
6372  std::bitset<0> bitset0;
6373  int n;
6374 
6375  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6376  bIterator = DeserializeChoice (2,false,&n,bIterator);
6377  if (n == 1)
6378  {
6379  // Deserialize messageClassExtension
6380  bIterator = DeserializeSequence (&bitset0,false,bIterator);
6381  m_messageType = -1;
6382  }
6383  else if (n == 0)
6384  {
6385  // Deserialize c1
6386  bIterator = DeserializeChoice (4,false,&m_messageType,bIterator);
6387  }
6388 
6389  return bIterator;
6390 }
6391 
6392 void
6394 {
6395  SerializeSequence (std::bitset<0> (),false);
6396  // Choose c1
6397  SerializeChoice (2,0,false);
6398  // Choose message type
6399  SerializeChoice (4,messageType,false);
6400 }
6401 
6402 } // namespace ns3
6403