25 #include "ns3/lte-rrc-header.h"
30 #define MAX_DRB 11 // According to section 6.4 3GPP TS 36.331
31 #define MAX_EARFCN 262143
32 #define MAX_RAT_CAPABILITIES 8
33 #define MAX_SI_MESSAGE 32
36 #define MAX_REPORT_CONFIG_ID 32
37 #define MAX_OBJECT_ID 32
38 #define MAX_MEAS_ID 32
39 #define MAX_CELL_MEAS 32
40 #define MAX_CELL_REPORT 8
42 #define MAX_SCELL_REPORT 5
43 #define MAX_SCELL_CONF 5
83 case 15:
n = 1;
break;
84 case 25:
n = 2;
break;
85 case 50:
n = 3;
break;
86 case 75:
n = 4;
break;
87 case 100:
n = 5;
break;
100 case 0: bw = 6;
break;
101 case 1: bw = 15;
break;
102 case 2: bw = 25;
break;
103 case 3: bw = 50;
break;
104 case 4: bw = 75;
break;
105 case 5: bw = 100;
break;
119 std::list<LteRrcSap::DrbToAddMod>::iterator it = drbToAddModList.begin ();
120 for (; it != drbToAddModList.end (); it++)
124 std::bitset<5> drbToAddModListOptionalFieldsPresent = std::bitset<5> ();
125 drbToAddModListOptionalFieldsPresent.set (4,1);
126 drbToAddModListOptionalFieldsPresent.set (3,0);
127 drbToAddModListOptionalFieldsPresent.set (2,1);
128 drbToAddModListOptionalFieldsPresent.set (1,1);
129 drbToAddModListOptionalFieldsPresent.set (0,1);
138 switch (it->rlcConfig.choice)
207 std::list<LteRrcSap::SrbToAddMod>::iterator it = srbToAddModList.begin ();
208 for (; it != srbToAddModList.end (); it++)
212 std::bitset<2> srbToAddModListOptionalFieldsPresent = std::bitset<2> ();
213 srbToAddModListOptionalFieldsPresent.set (1,0);
214 srbToAddModListOptionalFieldsPresent.set (0,1);
244 int prioritizedBitRate;
248 prioritizedBitRate = 0;
251 prioritizedBitRate = 1;
254 prioritizedBitRate = 2;
257 prioritizedBitRate = 3;
260 prioritizedBitRate = 4;
263 prioritizedBitRate = 5;
266 prioritizedBitRate = 6;
269 prioritizedBitRate = 7;
274 int bucketSizeDuration;
278 bucketSizeDuration = 0;
281 bucketSizeDuration = 1;
284 bucketSizeDuration = 2;
287 bucketSizeDuration = 3;
290 bucketSizeDuration = 4;
293 bucketSizeDuration = 5;
296 bucketSizeDuration = 5;
308 std::bitset<10> optionalFieldsPhysicalConfigDedicated;
310 optionalFieldsPhysicalConfigDedicated.set (8,0);
311 optionalFieldsPhysicalConfigDedicated.set (7,0);
312 optionalFieldsPhysicalConfigDedicated.set (6,0);
313 optionalFieldsPhysicalConfigDedicated.set (5,0);
314 optionalFieldsPhysicalConfigDedicated.set (4,0);
315 optionalFieldsPhysicalConfigDedicated.set (3,0);
318 optionalFieldsPhysicalConfigDedicated.set (0,0);
404 bool isSrbToAddModListPresent = !radioResourceConfigDedicated.
srbToAddModList.empty ();
405 bool isDrbToAddModListPresent = !radioResourceConfigDedicated.
drbToAddModList.empty ();
406 bool isDrbToReleaseListPresent = !radioResourceConfigDedicated.
drbToReleaseList.empty ();
409 std::bitset<6> optionalFieldsPresent = std::bitset<6> ();
410 optionalFieldsPresent.set (5,isSrbToAddModListPresent);
411 optionalFieldsPresent.set (4,isDrbToAddModListPresent);
412 optionalFieldsPresent.set (3,isDrbToReleaseListPresent);
413 optionalFieldsPresent.set (2,0);
414 optionalFieldsPresent.set (1,0);
419 if (isSrbToAddModListPresent)
425 if (isDrbToAddModListPresent)
431 if (isDrbToReleaseListPresent)
434 std::list<uint8_t>::iterator it = radioResourceConfigDedicated.
drbToReleaseList.begin ();
452 std::bitset<3> sysInfoBlk1Opts;
453 sysInfoBlk1Opts.set (2,0);
454 sysInfoBlk1Opts.set (1,0);
455 sysInfoBlk1Opts.set (0,0);
511 std::bitset<9> rrCfgCmmOpts;
512 rrCfgCmmOpts.set (8,1);
513 rrCfgCmmOpts.set (7,0);
514 rrCfgCmmOpts.set (6,0);
515 rrCfgCmmOpts.set (5,0);
516 rrCfgCmmOpts.set (4,0);
517 rrCfgCmmOpts.set (3,0);
518 rrCfgCmmOpts.set (2,0);
519 rrCfgCmmOpts.set (1,0);
520 rrCfgCmmOpts.set (0,0);
653 std::bitset<4> measResultOptional;
655 measResultOptional.set (2,
false);
656 measResultOptional.set (1,
false);
681 std::list<LteRrcSap::MeasResultEutra>::iterator it;
703 if (!it->cgiInfo.plmnIdentityList.empty ())
706 std::list<uint32_t>::iterator it2;
707 for (it2 = it->cgiInfo.plmnIdentityList.begin (); it2 != it->cgiInfo.plmnIdentityList.end (); it2++)
715 std::bitset<2> measResultFieldsPresent;
716 measResultFieldsPresent[1] = it->haveRsrpResult;
717 measResultFieldsPresent[0] = it->haveRsrqResult;
720 if (it->haveRsrpResult)
725 if (it->haveRsrqResult)
736 std::list<LteRrcSap::MeasResultScell>::iterator it;
742 std::bitset<2> measResultScellPresent;
748 std::bitset<2> measResultScellFieldsPresent;
749 measResultScellFieldsPresent[1] = it->haveRsrpResult;
750 measResultScellFieldsPresent[0] = it->haveRsrqResult;
753 if (it->haveRsrpResult)
758 if (it->haveRsrqResult)
774 int nDig = (plmnId > 99) ? 3 : 2;
777 for (
int i = nDig - 1; i >= 0; i--)
779 int n = floor (plmnId / pow (10,i));
781 plmnId -=
n * pow (10,i);
954 switch (qOffsetRange)
1057 switch (thresholdEutra.
choice)
1075 std::bitset<11> measConfigOptional;
1085 measConfigOptional.set (1,
false );
1108 std::bitset<5> measObjOpts;
1109 measObjOpts.set (4,!it->measObjectEutra.cellsToRemoveList.empty () );
1110 measObjOpts.set (3,!it->measObjectEutra.cellsToAddModList.empty () );
1111 measObjOpts.set (2,!it->measObjectEutra.blackCellsToRemoveList.empty () );
1112 measObjOpts.set (1,!it->measObjectEutra.blackCellsToAddModList.empty () );
1113 measObjOpts.set (0,it->measObjectEutra.haveCellForWhichToReportCGI);
1126 if (!it->measObjectEutra.cellsToRemoveList.empty ())
1129 for (std::list<uint8_t>::iterator it2 = it->measObjectEutra.cellsToRemoveList.begin (); it2 != it->measObjectEutra.cellsToRemoveList.end (); it2++)
1135 if (!it->measObjectEutra.cellsToAddModList.empty ())
1138 for (std::list<LteRrcSap::CellsToAddMod>::iterator it2 = it->measObjectEutra.cellsToAddModList.begin (); it2 != it->measObjectEutra.cellsToAddModList.end (); it2++)
1153 if (!it->measObjectEutra.blackCellsToRemoveList.empty () )
1156 for (std::list<uint8_t>::iterator it2 = it->measObjectEutra.blackCellsToRemoveList.begin (); it2 != it->measObjectEutra.blackCellsToRemoveList.end (); it2++)
1162 if (!it->measObjectEutra.blackCellsToAddModList.empty () )
1165 for (std::list<LteRrcSap::BlackCellsToAddMod>::iterator it2 = it->measObjectEutra.blackCellsToAddModList.begin (); it2 != it->measObjectEutra.blackCellsToAddModList.end (); it2++)
1172 std::bitset<1> rangePresent = std::bitset<1> (it2->physCellIdRange.haveRange);
1175 if (it2->physCellIdRange.haveRange)
1177 switch (it2->physCellIdRange.range)
1229 if (it->measObjectEutra.haveCellForWhichToReportCGI)
1257 switch (it->reportConfigEutra.triggerType)
1262 switch (it->reportConfigEutra.purpose)
1276 switch (it->reportConfigEutra.eventId)
1309 switch (it->reportConfigEutra.timeToTrigger)
1386 switch (it->reportConfigEutra.reportInterval)
1439 switch (it->reportConfigEutra.reportAmount)
1492 std::bitset<4> quantityConfigOpts (0);
1493 quantityConfigOpts.set (3,1);
1731 std::bitset<3> noncriticalExtension_v1020;
1732 noncriticalExtension_v1020.set (2,0);
1733 noncriticalExtension_v1020.set (1,1);
1734 noncriticalExtension_v1020.set (0,0);
1741 std::bitset<4> sCellToAddMod_r10;
1742 sCellToAddMod_r10.set (3,1);
1743 sCellToAddMod_r10.set (2,1);
1744 sCellToAddMod_r10.set (1,1);
1745 sCellToAddMod_r10.set (0,it->haveRadioResourceConfigDedicatedSCell);
1750 std::bitset<2> cellIdentification_r10;
1751 cellIdentification_r10.set(1,1);
1752 cellIdentification_r10.set(0,1);
1761 if (it->haveRadioResourceConfigDedicatedSCell)
1779 std::bitset<2> radioResourceConfigCommonSCell_r10;
1787 std::bitset<5> nonUlConfiguration_r10;
1788 nonUlConfiguration_r10.set (4,1);
1789 nonUlConfiguration_r10.set (3,1);
1790 nonUlConfiguration_r10.set (2,0);
1791 nonUlConfiguration_r10.set (1,1);
1792 nonUlConfiguration_r10.set (0,0);
1797 std::bitset<1> antennaInfoCommon_r10;
1798 antennaInfoCommon_r10.set (0,1);
1802 std::bitset<2> pdschConfigCommon_r10;
1803 pdschConfigCommon_r10.set (1,1);
1804 pdschConfigCommon_r10.set (0,1);
1815 std::bitset<7> UlConfiguration_r10;
1816 UlConfiguration_r10.set (6,1);
1817 UlConfiguration_r10.set (5,0);
1818 UlConfiguration_r10.set (4,1);
1819 UlConfiguration_r10.set (3,0);
1820 UlConfiguration_r10.set (2,0);
1821 UlConfiguration_r10.set (1,1);
1822 UlConfiguration_r10.set (0,0);
1826 std::bitset<3> FreqInfo_r10;
1827 FreqInfo_r10.set (2,1);
1828 FreqInfo_r10.set (1,1);
1829 FreqInfo_r10.set (0,0);
1836 std::bitset<2> UlPowerControlCommonSCell_r10;
1837 UlPowerControlCommonSCell_r10.set (1,0);
1838 UlPowerControlCommonSCell_r10.set (0,1);
1847 std::bitset<1> prachConfigSCell_r10;
1848 prachConfigSCell_r10.set(0,1);
1859 std::bitset<1> RadioResourceConfigDedicatedSCell_r10;
1860 RadioResourceConfigDedicatedSCell_r10.set (0,1);
1870 std::bitset<2> pcdscOpt;
1878 std::bitset<4> nulOpt;
1924 std::bitset<7> ulOpt;
2006 int thresholdEutraChoice, range;
2009 switch (thresholdEutraChoice)
2014 thresholdEutra->
range = range;
2020 thresholdEutra->
range = range;
2034 *qOffsetRange = -24;
2037 *qOffsetRange = -22;
2040 *qOffsetRange = -20;
2043 *qOffsetRange = -18;
2046 *qOffsetRange = -16;
2049 *qOffsetRange = -14;
2052 *qOffsetRange = -12;
2055 *qOffsetRange = -10;
2134 std::bitset<6> optionalFieldsPresent = std::bitset<6> ();
2137 if (optionalFieldsPresent[5])
2143 if (optionalFieldsPresent[4])
2149 if (optionalFieldsPresent[3])
2155 for (
int i = 0; i <
n; i++)
2162 if (optionalFieldsPresent[2])
2168 if (optionalFieldsPresent[1])
2175 if (optionalFieldsPresent[0])
2190 srbToAddModList->clear ();
2193 for (
int i = 0; i < numElems; i++)
2198 std::bitset<2> optionalFields;
2206 if (optionalFields[1])
2212 if (optionalFields[0])
2230 srbToAddModList->insert (srbToAddModList->end (),srbToAddMod);
2243 drbToAddModList->clear ();
2245 for (
int i = 0; i <
n; i++)
2249 std::bitset<5> optionalFields;
2252 if (optionalFields[4])
2262 if (optionalFields[3])
2268 if (optionalFields[2])
2275 std::bitset<0> bitset0;
2327 if (optionalFields[1])
2333 if (optionalFields[0])
2338 drbToAddModList->insert (drbToAddModList->end (),drbToAddMod);
2350 std::bitset<1> bitset1;
2364 uint16_t prioritizedBitRateKbps;
2369 prioritizedBitRateKbps = 0;
2372 prioritizedBitRateKbps = 8;
2375 prioritizedBitRateKbps = 16;
2378 prioritizedBitRateKbps = 32;
2381 prioritizedBitRateKbps = 64;
2384 prioritizedBitRateKbps = 128;
2387 prioritizedBitRateKbps = 256;
2390 prioritizedBitRateKbps = 10000;
2393 prioritizedBitRateKbps = 10000;
2399 uint16_t bucketSizeDurationMs;
2403 bucketSizeDurationMs = 50;
2406 bucketSizeDurationMs = 100;
2409 bucketSizeDurationMs = 150;
2412 bucketSizeDurationMs = 300;
2415 bucketSizeDurationMs = 500;
2418 bucketSizeDurationMs = 1000;
2421 bucketSizeDurationMs = 1000;
2438 std::bitset<10> optionalFieldPresent;
2442 if (optionalFieldPresent[9])
2445 std::bitset<0> bitset0;
2457 if (optionalFieldPresent[8])
2462 if (optionalFieldPresent[7])
2467 if (optionalFieldPresent[6])
2472 if (optionalFieldPresent[5])
2477 if (optionalFieldPresent[4])
2482 if (optionalFieldPresent[3])
2488 if (optionalFieldPresent[2])
2505 std::bitset<0> bitset0;
2536 if (optionalFieldPresent[1])
2547 std::bitset<1> codebookSubsetRestrictionPresent;
2554 if (codebookSubsetRestrictionPresent[0])
2560 int txantennaselchosen;
2562 if (txantennaselchosen == 0)
2567 else if (txantennaselchosen == 1)
2574 if (optionalFieldPresent[0])
2586 NS_FATAL_ERROR (
"RrcAsn1Header Print() function must also specify LteRrcSap::RadioResourceConfigDedicated as a second argument");
2593 std::bitset<2> nonCriticalExtension_v890;
2596 if (nonCriticalExtension_v890[0])
2599 std::bitset<3> nonCriticalExtension_v920;
2601 if (nonCriticalExtension_v920[0])
2604 std::bitset<3> nonCriticalExtension_v1020;
2606 NS_ASSERT (!nonCriticalExtension_v1020[2]);
2607 NS_ASSERT (nonCriticalExtension_v1020[1]);
2608 NS_ASSERT (!nonCriticalExtension_v1020[0]);
2614 for (
int i = 0; i < numElems; i++)
2616 std::bitset<4> sCellToAddMod_r10;
2633 if (sCellToAddMod_r10[0])
2651 std::bitset<2> cellIdentification_r10;
2669 std::bitset<2> radioResourceConfigCommonSCell_r10;
2675 std::bitset<5> nonUlConfiguration_r10;
2681 std::bitset<1> antennaInfoCommon_r10;
2686 std::bitset<2> pdschConfigCommon_r10;
2695 std::bitset<7> UlConfiguration_r10;
2698 std::bitset<3> FreqInfo_r10;
2706 std::bitset<2> UlPowerControlCommonSCell_r10;
2711 std::bitset<1> prachConfigSCell_r10;
2724 std::bitset<1> RadioResourceConfigDedicatedSCell_r10;
2735 std::bitset<2> pcdscOpt;
2741 std::bitset<4> nulOpt;
2759 std::bitset<1> codebookSubsetRestrictionPresent;
2766 if (codebookSubsetRestrictionPresent[0])
2773 int txantennaselchosen;
2775 if (txantennaselchosen == 0)
2780 else if (txantennaselchosen == 1)
2791 std::bitset<0> bitset0;
2806 std::bitset<7> ulOpt;
2827 std::bitset<1> codebookSubsetRestrictionPresent;
2834 if (codebookSubsetRestrictionPresent[0])
2841 int txantennaselchosen;
2843 if (txantennaselchosen == 0)
2848 else if (txantennaselchosen == 1)
2873 std::bitset<0> bitset0;
2912 os <<
" srbToAddModList: " << std::endl;
2913 std::list<LteRrcSap::SrbToAddMod>::iterator it = radioResourceConfigDedicated.
srbToAddModList.begin ();
2914 for (; it != radioResourceConfigDedicated.
srbToAddModList.end (); it++)
2916 os <<
" srbIdentity: " << (int)it->srbIdentity << std::endl;
2917 os <<
" logicalChannelConfig: " << std::endl;
2918 os <<
" priority: " << (
int)it->logicalChannelConfig.priority << std::endl;
2919 os <<
" prioritizedBitRateKbps: " << (int)it->logicalChannelConfig.prioritizedBitRateKbps << std::endl;
2920 os <<
" bucketSizeDurationMs: " << (
int)it->logicalChannelConfig.bucketSizeDurationMs << std::endl;
2921 os <<
" logicalChannelGroup: " << (int)it->logicalChannelConfig.logicalChannelGroup << std::endl;
2925 os <<
" drbToAddModList: " << std::endl;
2926 std::list<LteRrcSap::DrbToAddMod>::iterator it2 = radioResourceConfigDedicated.
drbToAddModList.begin ();
2927 for (; it2 != radioResourceConfigDedicated.
drbToAddModList.end (); it2++)
2929 os <<
" epsBearerIdentity: " << (int)it2->epsBearerIdentity << std::endl;
2930 os <<
" drbIdentity: " << (
int)it2->drbIdentity << std::endl;
2931 os <<
" rlcConfig: " << it2->rlcConfig.choice << std::endl;
2932 os <<
" logicalChannelIdentity: " << (int)it2->logicalChannelIdentity << std::endl;
2933 os <<
" logicalChannelConfig: " << std::endl;
2934 os <<
" priority: " << (
int)it2->logicalChannelConfig.priority << std::endl;
2935 os <<
" prioritizedBitRateKbps: " << (int)it2->logicalChannelConfig.prioritizedBitRateKbps << std::endl;
2936 os <<
" bucketSizeDurationMs: " << (
int)it2->logicalChannelConfig.bucketSizeDurationMs << std::endl;
2937 os <<
" logicalChannelGroup: " << (int)it2->logicalChannelConfig.logicalChannelGroup << std::endl;
2941 os <<
" drbToReleaseList: ";
2942 std::list<uint8_t>::iterator it3 = radioResourceConfigDedicated.
drbToReleaseList.begin ();
2945 os << (int)*it3 <<
", ";
2953 os <<
" physicalConfigDedicated: " << std::endl;
2958 os <<
" soundingRsUlConfigDedicated: " << std::endl;
2975 std::bitset<0> bitset0;
2978 std::bitset<3> sysInfoBlkT1Opts;
2982 std::bitset<1> cellAccessRelatedInfoOpts;
2986 int numPlmnIdentityInfoElements;
2988 for (
int i = 0; i < numPlmnIdentityInfoElements; i++)
2997 std::bitset<16> trackingAreaCode;
3001 std::bitset<28> cellIdentity;
3014 if (cellAccessRelatedInfoOpts[0])
3017 std::bitset<27> csgIdentity;
3023 std::bitset<1> qRxLevMinOffsetPresent;
3026 if (qRxLevMinOffsetPresent[0])
3032 if (sysInfoBlkT1Opts[2])
3042 int numSchedulingInfo;
3044 for (
int i = 0; i < numSchedulingInfo; i++)
3050 for (
int j = 0; j < numSibType; j++)
3056 if (sysInfoBlkT1Opts[1])
3068 if (sysInfoBlkT1Opts[0])
3079 std::bitset<0> bitset0;
3082 std::bitset<2> sysInfoBlkT2Opts;
3084 if (sysInfoBlkT2Opts[1])
3103 std::bitset<2> freqInfoOpts;
3105 if (freqInfoOpts[1])
3111 if (freqInfoOpts[0])
3121 if (sysInfoBlkT2Opts[0])
3137 std::bitset<0> bitset0;
3140 std::bitset<9> rrCfgCommOptions;
3144 if (rrCfgCommOptions[8])
3150 std::bitset<1> prachConfigInfoPresent;
3157 if (prachConfigInfoPresent[0])
3163 if (rrCfgCommOptions[7])
3204 if (rrCfgCommOptions[6])
3210 if (rrCfgCommOptions[5])
3216 if (rrCfgCommOptions[4])
3222 if (rrCfgCommOptions[3])
3228 if (rrCfgCommOptions[2])
3234 if (rrCfgCommOptions[1])
3240 if (rrCfgCommOptions[0])
3254 std::bitset<0> bitset0;
3260 std::bitset<1> preamblesGroupAConfigPresent;
3319 if (preamblesGroupAConfigPresent[0])
3432 std::bitset<0> bitset0;
3450 std::bitset<1> prachConfigInfoPresent;
3455 if (prachConfigInfoPresent[0])
3543 std::bitset<4> measResultOptionalPresent;
3566 int measResultNeighCellsChoice;
3571 if (measResultNeighCellsChoice == 0)
3577 for (
int i = 0; i < numElems; i++)
3581 std::bitset<1> isCgiInfoPresent;
3588 measResultEutra.
haveCgiInfo = isCgiInfoPresent[0];
3589 if (isCgiInfoPresent[0])
3591 std::bitset<1> havePlmnIdentityList;
3601 std::bitset<28> cellId;
3606 std::bitset<16> trArCo;
3611 if (havePlmnIdentityList[0])
3616 for (
int j = 0; j < numPlmnElems; j++)
3626 std::bitset<2> measResultOpts;
3630 if (measResultOpts[1])
3638 if (measResultOpts[0])
3649 if (measResultNeighCellsChoice == 1)
3655 if (measResultNeighCellsChoice == 2)
3660 if (measResultNeighCellsChoice == 3)
3671 for (
int i = 0; i < numElems; i++)
3678 std::bitset<2> measResultScellPresent;
3685 std::bitset<2> measResultOpts;
3689 if (measResultOpts[1])
3697 if (measResultOpts[0])
3719 std::bitset<1> isMccPresent;
3722 if (isMccPresent[0])
3733 for (
int j = mncDigits - 1; j >= 0; j--)
3736 mnc +=
n * pow (10,j);
3749 std::bitset<0> bitset0;
3750 std::bitset<2> bitset2;
3751 std::bitset<11> bitset11;
3760 int measObjectToRemoveListElems;
3763 for (
int i = 0; i < measObjectToRemoveListElems; i++)
3773 int measObjectToAddModListElems;
3776 for (
int i = 0; i < measObjectToAddModListElems; i++)
3785 int measObjectChoice;
3788 switch (measObjectChoice)
3808 std::bitset<5> measObjectEutraOpts;
3829 if (measObjectEutraOpts[4])
3835 for (
int i = 0; i < numElems; i++)
3842 if (measObjectEutraOpts[3])
3848 for (
int i = 0; i < numElems; i++)
3869 if (measObjectEutraOpts[2])
3875 for (
int i = 0; i < numElems; i++)
3883 if (measObjectEutraOpts[1])
3889 for (
int i = 0; i < numElems; i++)
3898 std::bitset<1> isRangePresent;
3966 if (measObjectEutraOpts[0])
3980 int reportConfigToRemoveListElems;
3983 for (
int i = 0; i < reportConfigToRemoveListElems; i++)
3993 int reportConfigToAddModListElems;
3996 for (
int i = 0; i < reportConfigToAddModListElems; i++)
4005 int reportConfigChoice;
4008 if (reportConfigChoice == 0)
4014 int triggerTypeChoice;
4017 if (triggerTypeChoice == 0)
4027 switch (eventIdChoice)
4121 if (triggerTypeChoice == 1)
4248 if (reportConfigChoice == 1)
4261 int measIdToRemoveListElems;
4264 for (
int i = 0; i < measIdToRemoveListElems; i++)
4274 int measIdToAddModListElems;
4277 for (
int i = 0; i < measIdToAddModListElems; i++)
4300 std::bitset<4> quantityConfigOpts;
4303 if (quantityConfigOpts[3])
4416 if (quantityConfigOpts[2])
4421 if (quantityConfigOpts[1])
4426 if (quantityConfigOpts[0])
4437 int measGapConfigChoice;
4439 switch (measGapConfigChoice)
4450 int gapOffsetChoice;
4452 switch (gapOffsetChoice)
4486 int speedStateParsChoice;
4488 switch (speedStateParsChoice)
4566 m_mmec = std::bitset<8> (0ul);
4567 m_mTmsi = std::bitset<32> (0ul);
4569 m_spare = std::bitset<1> (0ul);
4580 static TypeId tid =
TypeId (
"ns3::RrcConnectionRequestHeader")
4582 .SetGroupName(
"Lte")
4590 os <<
"MMEC:" <<
m_mmec << std::endl;
4591 os <<
"MTMSI:" <<
m_mTmsi << std::endl;
4593 os <<
"Spare: " <<
m_spare << std::endl;
4642 std::bitset<1> dummy;
4643 std::bitset<0> optionalOrDefaultMask;
4721 os <<
"radioResourceConfigDedicated:" << std::endl;
4770 std::bitset<0> bitset0;
4771 std::bitset<1> bitset1;
4772 std::bitset<2> bitset2;
4786 int criticalExtensionChoice;
4788 if (criticalExtensionChoice == 1)
4793 else if (criticalExtensionChoice == 0)
4856 std::list<LteRrcSap::SrbToAddMod>
4862 std::list<LteRrcSap::DrbToAddMod>
4928 std::bitset<0> bitset0;
5031 std::bitset<0> bitset0;
5117 std::bitset<6> options;
5136 std::bitset<4> mobCtrlIntoOptional;
5139 mobCtrlIntoOptional.set (1,0);
5191 std::bitset<2> noncriticalExtension_v890;
5192 noncriticalExtension_v890.set (1,0);
5199 std::bitset<3> noncriticalExtension_v920;
5200 noncriticalExtension_v920.set (1,0);
5201 noncriticalExtension_v920.set (1,0);
5216 std::bitset<0> bitset0;
5245 else if (c1Chosen == 0)
5248 std::bitset<6> rrcConnRecOpts;
5261 std::bitset<4> mobCtrlOpts;
5272 std::bitset<1> ulCarrierFreqPresent;
5278 if (ulCarrierFreqPresent[0])
5289 std::bitset<1> ulBandwidthPresent;
5295 if (ulBandwidthPresent[0])
5312 std::bitset<16> cRnti;
5331 if (rrcConnRecOpts[3])
5344 if (rrcConnRecOpts[1])
5371 os <<
" measObjectToRemoveList: ";
5373 std::list<uint8_t>::iterator it = auxList.begin ();
5374 for (; it != auxList.end (); it++)
5376 os << (int) *it <<
", ";
5382 os <<
" reportConfigToRemoveList: ";
5384 std::list<uint8_t>::iterator it = auxList.begin ();
5385 for (; it != auxList.end (); it++)
5387 os << (int) *it <<
", ";
5393 os <<
" measIdToRemoveList: ";
5395 std::list<uint8_t>::iterator it = auxList.begin ();
5396 for (; it != auxList.end (); it++)
5398 os << (int) *it <<
", ";
5405 os <<
" measObjectToAddMod: " << std::endl;
5407 std::list<LteRrcSap::MeasObjectToAddMod>::iterator it = auxList.begin ();
5408 for (; it != auxList.end (); it++)
5410 os <<
" measObjectId: " << (int)it->measObjectId << std::endl;
5411 os <<
" carrierFreq: " << (
int)it->measObjectEutra.carrierFreq << std::endl;
5412 os <<
" allowedMeasBandwidth: " << (int)it->measObjectEutra.allowedMeasBandwidth << std::endl;
5413 os <<
" presenceAntennaPort1: " << it->measObjectEutra.presenceAntennaPort1 << std::endl;
5414 os <<
" neighCellConfig: " << (
int) it->measObjectEutra.neighCellConfig << std::endl;
5415 os <<
" offsetFreq: " << (int)it->measObjectEutra.offsetFreq << std::endl;
5418 if (!it->measObjectEutra.cellsToRemoveList.empty ())
5420 os <<
" cellsToRemoveList: ";
5421 std::list<uint8_t> auxList = it->measObjectEutra.cellsToRemoveList;
5422 std::list<uint8_t>::iterator it = auxList.begin ();
5423 for (; it != auxList.end (); it++)
5425 os << (int) *it <<
", ";
5430 if (!it->measObjectEutra.blackCellsToRemoveList.empty ())
5432 os <<
" blackCellsToRemoveList: ";
5433 std::list<uint8_t> auxList = it->measObjectEutra.blackCellsToRemoveList;
5434 std::list<uint8_t>::iterator it = auxList.begin ();
5435 for (; it != auxList.end (); it++)
5437 os << (int) *it <<
", ";
5442 if (!it->measObjectEutra.cellsToAddModList.empty ())
5444 os <<
" cellsToAddModList: " << std::endl;
5445 std::list<LteRrcSap::CellsToAddMod> auxList = it->measObjectEutra.cellsToAddModList;
5446 std::list<LteRrcSap::CellsToAddMod>::iterator it = auxList.begin ();
5447 for (; it != auxList.end (); it++)
5449 os <<
" cellIndex: " << (int)it->cellIndex << std::endl;
5450 os <<
" physCellId: " << (
int)it->physCellId << std::endl;
5451 os <<
" cellIndividualOffset: " << (int)it->cellIndividualOffset << std::endl;
5452 os <<
" ------ " << std::endl;
5456 if (!it->measObjectEutra.blackCellsToAddModList.empty ())
5458 os <<
" blackCellsToAddModList: " << std::endl;
5459 std::list<LteRrcSap::BlackCellsToAddMod> auxList = it->measObjectEutra.blackCellsToAddModList;
5460 std::list<LteRrcSap::BlackCellsToAddMod>::iterator it = auxList.begin ();
5461 for (; it != auxList.end (); it++)
5463 os <<
" cellIndex: " << (int)it->cellIndex << std::endl;
5464 os <<
" physCellIdRange.start: " << (
int)it->physCellIdRange.start << std::endl;
5465 os <<
" physCellIdRange.haveRange: " << it->physCellIdRange.haveRange << std::endl;
5466 os <<
" physCellIdRange.range: " << (int)it->physCellIdRange.range << std::endl;
5467 os <<
" ------ " << std::endl;
5471 os <<
" haveCellForWhichToReportCGI: " << it->measObjectEutra.haveCellForWhichToReportCGI << std::endl;
5472 os <<
" cellForWhichToReportCGI: " << (int)it->measObjectEutra.cellForWhichToReportCGI << std::endl;
5473 os <<
" ------------- " << std::endl;
5480 os <<
" reportConfigToAddModList: " << std::endl;
5482 std::list<LteRrcSap::ReportConfigToAddMod>::iterator it = auxList.begin ();
5483 for (; it != auxList.end (); it++)
5485 os <<
" reportConfigId: " << (int)it->reportConfigId << std::endl;
5486 os <<
" reportConfigEutra.triggerType " << (
int)it->reportConfigEutra.triggerType << std::endl;
5489 os <<
" reportConfigEutra.eventId " << (int)it->reportConfigEutra.eventId << std::endl;
5492 os <<
" reportConfigEutra.reportOnLeave " << (int)it->reportConfigEutra.reportOnLeave << std::endl;
5493 os <<
" reportConfigEutra.a3Offset " << (
int)it->reportConfigEutra.a3Offset << std::endl;
5497 os <<
" reportConfigEutra.threshold1.choice " << (int)it->reportConfigEutra.threshold1.choice << std::endl;
5498 os <<
" reportConfigEutra.threshold1.range " << (
int)it->reportConfigEutra.threshold1.range << std::endl;
5501 os <<
" reportConfigEutra.threshold2.choice " << (int)it->reportConfigEutra.threshold2.choice << std::endl;
5502 os <<
" reportConfigEutra.threshold2.range " << (
int)it->reportConfigEutra.threshold2.range << std::endl;
5505 os <<
" reportConfigEutra.hysteresis " << (int)it->reportConfigEutra.hysteresis << std::endl;
5506 os <<
" reportConfigEutra.timeToTrigger " << (
int)it->reportConfigEutra.timeToTrigger << std::endl;
5510 os <<
" reportConfigEutra.purpose " << (int)it->reportConfigEutra.purpose << std::endl;
5512 os <<
" reportConfigEutra.triggerQuantity " << (int)it->reportConfigEutra.triggerQuantity << std::endl;
5513 os <<
" reportConfigEutra.reportQuantity " << (
int)it->reportConfigEutra.reportQuantity << std::endl;
5514 os <<
" reportConfigEutra.maxReportCells " << (int)it->reportConfigEutra.maxReportCells << std::endl;
5515 os <<
" reportConfigEutra.reportInterval " << (
int)it->reportConfigEutra.reportInterval << std::endl;
5516 os <<
" reportConfigEutra.reportAmount " << (int)it->reportConfigEutra.reportAmount << std::endl;
5522 os <<
" measIdToAddModList: " << std::endl;
5524 std::list<LteRrcSap::MeasIdToAddMod>::iterator it = auxList.begin ();
5525 for (; it != auxList.end (); it++)
5527 os <<
" measId: " << (int)it->measId << std::endl;
5528 os <<
" measObjectId: " << (
int)it->measObjectId << std::endl;
5529 os <<
" reportConfigId: " << (int)it->reportConfigId << std::endl;
5530 os <<
" ------ " << std::endl;
5693 std::list<LteRrcSap::SrbToAddMod>
5699 std::list<LteRrcSap::DrbToAddMod>
5743 std::bitset<4> handoverPrepInfoOpts;
5744 handoverPrepInfoOpts.set (3,1);
5745 handoverPrepInfoOpts.set (2,0);
5746 handoverPrepInfoOpts.set (1,0);
5747 handoverPrepInfoOpts.set (0,0);
5801 std::bitset<0> bitset0;
5809 int criticalExtensionsChosen;
5812 if (criticalExtensionsChosen == 1)
5817 else if (criticalExtensionsChosen == 0)
5826 else if (c1Chosen == 0)
5829 std::bitset<4> handoverPrepInfoOpts;
5834 for (
int i = 0; i <
n; i++)
5840 if (handoverPrepInfoOpts[3])
5857 std::bitset<16> cRnti;
5872 std::bitset<8> systemFrameNumber;
5876 std::bitset<10> spare;
5893 if (handoverPrepInfoOpts[2])
5898 if (handoverPrepInfoOpts[1])
5903 if (handoverPrepInfoOpts[0])
6014 std::bitset<0> bitset0;
6039 std::bitset<16> cRnti;
6049 std::bitset<16> shortMacI;
6071 std::bitset<2> spare;
6163 std::bitset<0> bitset0;
6177 int criticalExtensionsChoice;
6179 if (criticalExtensionsChoice == 1)
6184 else if (criticalExtensionsChoice == 0)
6197 std::bitset<1> nonCriticalExtensionPresent;
6215 os <<
"RadioResourceConfigDedicated: " << std::endl;
6283 std::bitset<0> bitset0;
6297 int criticalExtensionsChoice;
6299 if (criticalExtensionsChoice == 1)
6304 else if (criticalExtensionsChoice == 0)
6307 std::bitset<1> opts;
6382 std::bitset<0> bitset0;
6391 int criticalExtensionsChoice;
6393 if (criticalExtensionsChoice == 1)
6398 else if (criticalExtensionsChoice == 0)
6401 std::bitset<1> opts;
6476 std::bitset<0> bitset0;
6490 int criticalExtensionsChoice;
6492 if (criticalExtensionsChoice == 1)
6497 else if (criticalExtensionsChoice == 0)
6506 std::bitset<3> opts;
6598 std::bitset<0> bitset0;
6608 int criticalExtensionsChoice;
6610 if (criticalExtensionsChoice == 1)
6615 else if (criticalExtensionsChoice == 0)
6625 else if (c1Choice == 0)
6628 std::bitset<1> opts;
6708 std::bitset<0> bitset0;
6714 int criticalExtensionsChoice;
6717 if (criticalExtensionsChoice == 1)
6722 else if (criticalExtensionsChoice == 0)
6735 std::bitset<1> isNonCriticalExtensionPresent;
6741 if (isNonCriticalExtensionPresent[0])
6764 std::list<LteRrcSap::MeasResultEutra>::iterator it = measResultListEutra.begin ();
6765 for (; it != measResultListEutra.end (); it++)
6767 os <<
" physCellId =" << (int) it->physCellId << std::endl;
6768 os <<
" haveCgiInfo =" << it->haveCgiInfo << std::endl;
6769 if (it->haveCgiInfo)
6771 os <<
" plmnIdentity = " << (int) it->cgiInfo.plmnIdentity << std::endl;
6772 os <<
" cellIdentity = " << (
int) it->cgiInfo.cellIdentity << std::endl;
6773 os <<
" trackingAreaCode = " << (int) it->cgiInfo.trackingAreaCode << std::endl;
6774 os <<
" havePlmnIdentityList = " << !it->cgiInfo.plmnIdentityList.empty () << std::endl;
6775 if (!it->cgiInfo.plmnIdentityList.empty ())
6777 for (std::list<uint32_t>::iterator it2 = it->cgiInfo.plmnIdentityList.begin (); it2 != it->cgiInfo.plmnIdentityList.end (); it2++)
6779 os <<
" plmnId : " << *it2 << std::endl;
6784 os <<
" haveRsrpResult =" << it->haveRsrpResult << std::endl;
6785 if (it->haveRsrpResult)
6787 os <<
" rsrpResult =" << (int) it->rsrpResult << std::endl;
6790 os <<
" haveRsrqResult =" << it->haveRsrqResult << std::endl;
6791 if (it->haveRsrqResult)
6793 os <<
" rsrqResult =" << (int) it->rsrqResult << std::endl;
6834 std::cout <<
"UL DCCH MSG TYPE: " <<
m_messageType << std::endl;
6846 std::bitset<0> bitset0;
6895 std::cout <<
"DL DCCH MSG TYPE: " <<
m_messageType << std::endl;
6907 std::bitset<0> bitset0;
6956 std::cout <<
"UL CCCH MSG TYPE: " <<
m_messageType << std::endl;
6968 std::bitset<0> bitset0;
7017 std::cout <<
"DL CCCH MSG TYPE: " <<
m_messageType << std::endl;
7029 std::bitset<0> bitset0;