22 #include "ns3/lte-rrc-header.h"
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
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
76 std::list<LteRrcSap::DrbToAddMod>::iterator it = drbToAddModList.begin ();
77 for (; it != drbToAddModList.end (); it++)
81 std::bitset<5> drbToAddModListOptionalFieldsPresent = std::bitset<5> ();
82 drbToAddModListOptionalFieldsPresent.set (4,1);
83 drbToAddModListOptionalFieldsPresent.set (3,0);
84 drbToAddModListOptionalFieldsPresent.set (2,1);
85 drbToAddModListOptionalFieldsPresent.set (1,1);
86 drbToAddModListOptionalFieldsPresent.set (0,1);
95 switch (it->rlcConfig.choice)
164 std::list<LteRrcSap::SrbToAddMod>::iterator it = srbToAddModList.begin ();
165 for (; it != srbToAddModList.end (); it++)
169 std::bitset<2> srbToAddModListOptionalFieldsPresent = std::bitset<2> ();
170 srbToAddModListOptionalFieldsPresent.set (1,0);
171 srbToAddModListOptionalFieldsPresent.set (0,1);
201 int prioritizedBitRate;
205 prioritizedBitRate = 0;
208 prioritizedBitRate = 1;
211 prioritizedBitRate = 2;
214 prioritizedBitRate = 3;
217 prioritizedBitRate = 4;
220 prioritizedBitRate = 5;
223 prioritizedBitRate = 6;
226 prioritizedBitRate = 7;
231 int bucketSizeDuration;
235 bucketSizeDuration = 0;
238 bucketSizeDuration = 1;
241 bucketSizeDuration = 2;
244 bucketSizeDuration = 3;
247 bucketSizeDuration = 4;
250 bucketSizeDuration = 5;
253 bucketSizeDuration = 5;
265 std::bitset<10> optionalFieldsPhysicalConfigDedicated;
267 optionalFieldsPhysicalConfigDedicated.set (8,0);
268 optionalFieldsPhysicalConfigDedicated.set (7,0);
269 optionalFieldsPhysicalConfigDedicated.set (6,0);
270 optionalFieldsPhysicalConfigDedicated.set (5,0);
271 optionalFieldsPhysicalConfigDedicated.set (4,0);
272 optionalFieldsPhysicalConfigDedicated.set (3,0);
275 optionalFieldsPhysicalConfigDedicated.set (0,0);
361 bool isSrbToAddModListPresent = !radioResourceConfigDedicated.
srbToAddModList.empty ();
362 bool isDrbToAddModListPresent = !radioResourceConfigDedicated.
drbToAddModList.empty ();
363 bool isDrbToReleaseListPresent = !radioResourceConfigDedicated.
drbToReleaseList.empty ();
366 std::bitset<6> optionalFieldsPresent = std::bitset<6> ();
367 optionalFieldsPresent.set (5,isSrbToAddModListPresent);
368 optionalFieldsPresent.set (4,isDrbToAddModListPresent);
369 optionalFieldsPresent.set (3,isDrbToReleaseListPresent);
370 optionalFieldsPresent.set (2,0);
371 optionalFieldsPresent.set (1,0);
376 if (isSrbToAddModListPresent)
382 if (isDrbToAddModListPresent)
388 if (isDrbToReleaseListPresent)
391 std::list<uint8_t>::iterator it = radioResourceConfigDedicated.
drbToReleaseList.begin ();
409 std::bitset<3> sysInfoBlk1Opts;
410 sysInfoBlk1Opts.set (2,0);
411 sysInfoBlk1Opts.set (1,0);
412 sysInfoBlk1Opts.set (0,0);
468 std::bitset<9> rrCfgCmmOpts;
469 rrCfgCmmOpts.set (8,1);
470 rrCfgCmmOpts.set (7,0);
471 rrCfgCmmOpts.set (6,0);
472 rrCfgCmmOpts.set (5,0);
473 rrCfgCmmOpts.set (4,0);
474 rrCfgCmmOpts.set (3,0);
475 rrCfgCmmOpts.set (2,0);
476 rrCfgCmmOpts.set (1,0);
477 rrCfgCmmOpts.set (0,0);
656 std::list<LteRrcSap::MeasResultEutra>::iterator it;
678 if (!it->cgiInfo.plmnIdentityList.empty ())
681 std::list<uint32_t>::iterator it2;
682 for (it2 = it->cgiInfo.plmnIdentityList.begin (); it2 != it->cgiInfo.plmnIdentityList.end (); it2++)
690 std::bitset<2> measResultFieldsPresent;
691 measResultFieldsPresent[1] = it->haveRsrpResult;
692 measResultFieldsPresent[0] = it->haveRsrqResult;
695 if (it->haveRsrpResult)
700 if (it->haveRsrqResult)
715 int nDig = (plmnId > 99) ? 3 : 2;
718 for (
int i = nDig - 1; i >= 0; i--)
720 int n = floor (plmnId / pow (10,i));
722 plmnId -= n * pow (10,i);
876 switch (qOffsetRange)
979 switch (thresholdEutra.
choice)
997 std::bitset<11> measConfigOptional;
1007 measConfigOptional.set (1,
false );
1030 std::bitset<5> measObjOpts;
1031 measObjOpts.set (4,!it->measObjectEutra.cellsToRemoveList.empty () );
1032 measObjOpts.set (3,!it->measObjectEutra.cellsToAddModList.empty () );
1033 measObjOpts.set (2,!it->measObjectEutra.blackCellsToRemoveList.empty () );
1034 measObjOpts.set (1,!it->measObjectEutra.blackCellsToAddModList.empty () );
1035 measObjOpts.set (0,it->measObjectEutra.haveCellForWhichToReportCGI);
1042 switch (it->measObjectEutra.allowedMeasBandwidth)
1070 if (!it->measObjectEutra.cellsToRemoveList.empty ())
1073 for (std::list<uint8_t>::iterator it2 = it->measObjectEutra.cellsToRemoveList.begin (); it2 != it->measObjectEutra.cellsToRemoveList.end (); it2++)
1079 if (!it->measObjectEutra.cellsToAddModList.empty ())
1082 for (std::list<LteRrcSap::CellsToAddMod>::iterator it2 = it->measObjectEutra.cellsToAddModList.begin (); it2 != it->measObjectEutra.cellsToAddModList.end (); it2++)
1097 if (!it->measObjectEutra.blackCellsToRemoveList.empty () )
1100 for (std::list<uint8_t>::iterator it2 = it->measObjectEutra.blackCellsToRemoveList.begin (); it2 != it->measObjectEutra.blackCellsToRemoveList.end (); it2++)
1106 if (!it->measObjectEutra.blackCellsToAddModList.empty () )
1109 for (std::list<LteRrcSap::BlackCellsToAddMod>::iterator it2 = it->measObjectEutra.blackCellsToAddModList.begin (); it2 != it->measObjectEutra.blackCellsToAddModList.end (); it2++)
1116 std::bitset<1> rangePresent = std::bitset<1> (it2->physCellIdRange.haveRange);
1119 if (it2->physCellIdRange.haveRange)
1121 switch (it2->physCellIdRange.range)
1173 if (it->measObjectEutra.haveCellForWhichToReportCGI)
1201 switch (it->reportConfigEutra.triggerType)
1206 switch (it->reportConfigEutra.purpose)
1220 switch (it->reportConfigEutra.eventId)
1253 switch (it->reportConfigEutra.timeToTrigger)
1330 switch (it->reportConfigEutra.reportInterval)
1383 switch (it->reportConfigEutra.reportAmount)
1436 std::bitset<4> quantityConfigOpts (0);
1437 quantityConfigOpts.set (3,1);
1675 int thresholdEutraChoice, range;
1678 switch (thresholdEutraChoice)
1683 thresholdEutra->
range = range;
1689 thresholdEutra->
range = range;
1703 *qOffsetRange = -24;
1706 *qOffsetRange = -22;
1709 *qOffsetRange = -20;
1712 *qOffsetRange = -18;
1715 *qOffsetRange = -16;
1718 *qOffsetRange = -14;
1721 *qOffsetRange = -12;
1724 *qOffsetRange = -10;
1803 std::bitset<6> optionalFieldsPresent = std::bitset<6> ();
1806 if (optionalFieldsPresent[5])
1812 if (optionalFieldsPresent[4])
1818 if (optionalFieldsPresent[3])
1824 for (
int i = 0; i < n; i++)
1831 if (optionalFieldsPresent[2])
1837 if (optionalFieldsPresent[1])
1844 if (optionalFieldsPresent[0])
1859 srbToAddModList->clear ();
1862 for (
int i = 0; i < numElems; i++)
1867 std::bitset<2> optionalFields;
1875 if (optionalFields[1])
1881 if (optionalFields[0])
1899 srbToAddModList->insert (srbToAddModList->end (),srbToAddMod);
1912 drbToAddModList->clear ();
1914 for (
int i = 0; i < n; i++)
1918 std::bitset<5> optionalFields;
1921 if (optionalFields[4])
1931 if (optionalFields[3])
1937 if (optionalFields[2])
1944 std::bitset<0> bitset0;
1996 if (optionalFields[1])
2002 if (optionalFields[0])
2007 drbToAddModList->insert (drbToAddModList->end (),drbToAddMod);
2019 std::bitset<1> bitset1;
2029 logicalChannelConfig->
priority = n;
2033 uint16_t prioritizedBitRateKbps;
2038 prioritizedBitRateKbps = 0;
2041 prioritizedBitRateKbps = 8;
2044 prioritizedBitRateKbps = 16;
2047 prioritizedBitRateKbps = 32;
2050 prioritizedBitRateKbps = 64;
2053 prioritizedBitRateKbps = 128;
2056 prioritizedBitRateKbps = 256;
2059 prioritizedBitRateKbps = 10000;
2062 prioritizedBitRateKbps = 10000;
2068 uint16_t bucketSizeDurationMs;
2072 bucketSizeDurationMs = 50;
2075 bucketSizeDurationMs = 100;
2078 bucketSizeDurationMs = 150;
2081 bucketSizeDurationMs = 300;
2084 bucketSizeDurationMs = 500;
2087 bucketSizeDurationMs = 1000;
2090 bucketSizeDurationMs = 1000;
2107 std::bitset<10> optionalFieldPresent;
2111 if (optionalFieldPresent[9])
2114 std::bitset<0> bitset0;
2126 if (optionalFieldPresent[8])
2131 if (optionalFieldPresent[7])
2136 if (optionalFieldPresent[6])
2141 if (optionalFieldPresent[5])
2146 if (optionalFieldPresent[4])
2151 if (optionalFieldPresent[3])
2157 if (optionalFieldPresent[2])
2174 std::bitset<0> bitset0;
2205 if (optionalFieldPresent[1])
2216 std::bitset<1> codebookSubsetRestrictionPresent;
2223 if (codebookSubsetRestrictionPresent[0])
2229 int txantennaselchosen;
2231 if (txantennaselchosen == 0)
2236 else if (txantennaselchosen == 1)
2243 if (optionalFieldPresent[0])
2255 NS_FATAL_ERROR (
"RrcAsn1Header Print() function must also specify LteRrcSap::RadioResourceConfigDedicated as a second argument");
2261 os <<
" srbToAddModList: " << std::endl;
2262 std::list<LteRrcSap::SrbToAddMod>::iterator it = radioResourceConfigDedicated.
srbToAddModList.begin ();
2263 for (; it != radioResourceConfigDedicated.
srbToAddModList.end (); it++)
2265 os <<
" srbIdentity: " << (int)it->srbIdentity << std::endl;
2266 os <<
" logicalChannelConfig: " << std::endl;
2267 os <<
" priority: " << (
int)it->logicalChannelConfig.priority << std::endl;
2268 os <<
" prioritizedBitRateKbps: " << (int)it->logicalChannelConfig.prioritizedBitRateKbps << std::endl;
2269 os <<
" bucketSizeDurationMs: " << (
int)it->logicalChannelConfig.bucketSizeDurationMs << std::endl;
2270 os <<
" logicalChannelGroup: " << (int)it->logicalChannelConfig.logicalChannelGroup << std::endl;
2274 os <<
" drbToAddModList: " << std::endl;
2275 std::list<LteRrcSap::DrbToAddMod>::iterator it2 = radioResourceConfigDedicated.
drbToAddModList.begin ();
2276 for (; it2 != radioResourceConfigDedicated.
drbToAddModList.end (); it2++)
2278 os <<
" epsBearerIdentity: " << (int)it2->epsBearerIdentity << std::endl;
2279 os <<
" drbIdentity: " << (
int)it2->drbIdentity << std::endl;
2280 os <<
" rlcConfig: " << it2->rlcConfig.choice << std::endl;
2281 os <<
" logicalChannelIdentity: " << (int)it2->logicalChannelIdentity << std::endl;
2282 os <<
" logicalChannelConfig: " << std::endl;
2283 os <<
" priority: " << (
int)it2->logicalChannelConfig.priority << std::endl;
2284 os <<
" prioritizedBitRateKbps: " << (int)it2->logicalChannelConfig.prioritizedBitRateKbps << std::endl;
2285 os <<
" bucketSizeDurationMs: " << (
int)it2->logicalChannelConfig.bucketSizeDurationMs << std::endl;
2286 os <<
" logicalChannelGroup: " << (int)it2->logicalChannelConfig.logicalChannelGroup << std::endl;
2290 os <<
" drbToReleaseList: ";
2291 std::list<uint8_t>::iterator it3 = radioResourceConfigDedicated.
drbToReleaseList.begin ();
2294 os << (int)*it3 <<
", ";
2302 os <<
" physicalConfigDedicated: " << std::endl;
2307 os <<
" soundingRsUlConfigDedicated: " << std::endl;
2324 std::bitset<0> bitset0;
2327 std::bitset<3> sysInfoBlkT1Opts;
2331 std::bitset<1> cellAccessRelatedInfoOpts;
2335 int numPlmnIdentityInfoElements;
2337 for (
int i = 0; i < numPlmnIdentityInfoElements; i++)
2346 std::bitset<16> trackingAreaCode;
2350 std::bitset<28> cellIdentity;
2363 if (cellAccessRelatedInfoOpts[0])
2366 std::bitset<27> csgIdentity;
2372 std::bitset<1> qRxLevMinOffsetPresent;
2375 if (qRxLevMinOffsetPresent[0])
2381 if (sysInfoBlkT1Opts[2])
2391 int numSchedulingInfo;
2393 for (
int i = 0; i < numSchedulingInfo; i++)
2399 for (
int j = 0; j < numSibType; j++)
2405 if (sysInfoBlkT1Opts[1])
2417 if (sysInfoBlkT1Opts[0])
2428 std::bitset<0> bitset0;
2431 std::bitset<2> sysInfoBlkT2Opts;
2433 if (sysInfoBlkT2Opts[1])
2452 std::bitset<2> freqInfoOpts;
2454 if (freqInfoOpts[1])
2460 if (freqInfoOpts[0])
2492 if (sysInfoBlkT2Opts[0])
2508 std::bitset<0> bitset0;
2511 std::bitset<9> rrCfgCommOptions;
2515 if (rrCfgCommOptions[8])
2521 std::bitset<1> prachConfigInfoPresent;
2528 if (prachConfigInfoPresent[0])
2534 if (rrCfgCommOptions[7])
2575 if (rrCfgCommOptions[6])
2581 if (rrCfgCommOptions[5])
2587 if (rrCfgCommOptions[4])
2593 if (rrCfgCommOptions[3])
2599 if (rrCfgCommOptions[2])
2605 if (rrCfgCommOptions[1])
2611 if (rrCfgCommOptions[0])
2625 std::bitset<0> bitset0;
2631 std::bitset<1> preamblesGroupAConfigPresent;
2692 if (preamblesGroupAConfigPresent[0])
2785 std::bitset<0> bitset0;
2803 std::bitset<1> prachConfigInfoPresent;
2808 if (prachConfigInfoPresent[0])
2896 std::bitset<1> measResultNeighCellsPresent;
2917 int measResultNeighCellsChoice;
2922 if (measResultNeighCellsChoice == 0)
2928 for (
int i = 0; i < numElems; i++)
2932 std::bitset<1> isCgiInfoPresent;
2939 measResultEutra.
haveCgiInfo = isCgiInfoPresent[0];
2940 if (isCgiInfoPresent[0])
2942 std::bitset<1> havePlmnIdentityList;
2952 std::bitset<28> cellId;
2957 std::bitset<16> trArCo;
2962 if (havePlmnIdentityList[0])
2967 for (
int j = 0; j < numPlmnElems; j++)
2977 std::bitset<2> measResultOpts;
2981 if (measResultOpts[1])
2989 if (measResultOpts[0])
3000 if (measResultNeighCellsChoice == 1)
3006 if (measResultNeighCellsChoice == 2)
3011 if (measResultNeighCellsChoice == 3)
3025 std::bitset<1> isMccPresent;
3028 if (isMccPresent[0])
3039 for (
int j = mncDigits - 1; j >= 0; j--)
3042 mnc += n * pow (10,j);
3055 std::bitset<0> bitset0;
3056 std::bitset<2> bitset2;
3057 std::bitset<11> bitset11;
3066 int measObjectToRemoveListElems;
3069 for (
int i = 0; i < measObjectToRemoveListElems; i++)
3079 int measObjectToAddModListElems;
3082 for (
int i = 0; i < measObjectToAddModListElems; i++)
3091 int measObjectChoice;
3094 switch (measObjectChoice)
3114 std::bitset<5> measObjectEutraOpts;
3156 if (measObjectEutraOpts[4])
3162 for (
int i = 0; i < numElems; i++)
3169 if (measObjectEutraOpts[3])
3175 for (
int i = 0; i < numElems; i++)
3196 if (measObjectEutraOpts[2])
3202 for (
int i = 0; i < numElems; i++)
3210 if (measObjectEutraOpts[1])
3216 for (
int i = 0; i < numElems; i++)
3225 std::bitset<1> isRangePresent;
3293 if (measObjectEutraOpts[0])
3307 int reportConfigToRemoveListElems;
3310 for (
int i = 0; i < reportConfigToRemoveListElems; i++)
3320 int reportConfigToAddModListElems;
3323 for (
int i = 0; i < reportConfigToAddModListElems; i++)
3332 int reportConfigChoice;
3335 if (reportConfigChoice == 0)
3341 int triggerTypeChoice;
3344 if (triggerTypeChoice == 0)
3354 switch (eventIdChoice)
3448 if (triggerTypeChoice == 1)
3575 if (reportConfigChoice == 1)
3588 int measIdToRemoveListElems;
3591 for (
int i = 0; i < measIdToRemoveListElems; i++)
3601 int measIdToAddModListElems;
3604 for (
int i = 0; i < measIdToAddModListElems; i++)
3627 std::bitset<4> quantityConfigOpts;
3630 if (quantityConfigOpts[3])
3743 if (quantityConfigOpts[2])
3748 if (quantityConfigOpts[1])
3753 if (quantityConfigOpts[0])
3764 int measGapConfigChoice;
3766 switch (measGapConfigChoice)
3777 int gapOffsetChoice;
3779 switch (gapOffsetChoice)
3813 int speedStateParsChoice;
3815 switch (speedStateParsChoice)
3892 m_mmec = std::bitset<8> (0ul);
3893 m_mTmsi = std::bitset<32> (0ul);
3895 m_spare = std::bitset<1> (0ul);
3906 static TypeId tid =
TypeId (
"ns3::RrcConnectionRequestHeader")
3915 os <<
"MMEC:" <<
m_mmec << std::endl;
3916 os <<
"MTMSI:" <<
m_mTmsi << std::endl;
3918 os <<
"Spare: " <<
m_spare << std::endl;
3967 std::bitset<1> dummy;
3968 std::bitset<0> optionalOrDefaultMask;
4046 os <<
"radioResourceConfigDedicated:" << std::endl;
4095 std::bitset<0> bitset0;
4096 std::bitset<1> bitset1;
4097 std::bitset<2> bitset2;
4111 int criticalExtensionChoice;
4113 if (criticalExtensionChoice == 1)
4118 else if (criticalExtensionChoice == 0)
4181 std::list<LteRrcSap::SrbToAddMod>
4187 std::list<LteRrcSap::DrbToAddMod>
4253 std::bitset<0> bitset0;
4356 std::bitset<0> bitset0;
4442 std::bitset<6> options;
4461 std::bitset<4> mobCtrlIntoOptional;
4464 mobCtrlIntoOptional.set (1,0);
4563 std::bitset<0> bitset0;
4592 else if (c1Chosen == 0)
4595 std::bitset<6> rrcConnRecOpts;
4608 std::bitset<4> mobCtrlOpts;
4619 std::bitset<1> ulCarrierFreqPresent;
4625 if (ulCarrierFreqPresent[0])
4636 std::bitset<1> ulBandwidthPresent;
4665 if (ulBandwidthPresent[0])
4705 std::bitset<16> cRnti;
4724 if (rrcConnRecOpts[3])
4737 if (rrcConnRecOpts[1])
4743 if (rrcConnRecOpts[0])
4762 os <<
" measObjectToRemoveList: ";
4764 std::list<uint8_t>::iterator it = auxList.begin ();
4765 for (; it != auxList.end (); it++)
4767 os << (int) *it <<
", ";
4773 os <<
" reportConfigToRemoveList: ";
4775 std::list<uint8_t>::iterator it = auxList.begin ();
4776 for (; it != auxList.end (); it++)
4778 os << (int) *it <<
", ";
4784 os <<
" measIdToRemoveList: ";
4786 std::list<uint8_t>::iterator it = auxList.begin ();
4787 for (; it != auxList.end (); it++)
4789 os << (int) *it <<
", ";
4796 os <<
" measObjectToAddMod: " << std::endl;
4798 std::list<LteRrcSap::MeasObjectToAddMod>::iterator it = auxList.begin ();
4799 for (; it != auxList.end (); it++)
4801 os <<
" measObjectId: " << (int)it->measObjectId << std::endl;
4802 os <<
" carrierFreq: " << (
int)it->measObjectEutra.carrierFreq << std::endl;
4803 os <<
" allowedMeasBandwidth: " << (int)it->measObjectEutra.allowedMeasBandwidth << std::endl;
4804 os <<
" presenceAntennaPort1: " << it->measObjectEutra.presenceAntennaPort1 << std::endl;
4805 os <<
" neighCellConfig: " << (
int) it->measObjectEutra.neighCellConfig << std::endl;
4806 os <<
" offsetFreq: " << (int)it->measObjectEutra.offsetFreq << std::endl;
4809 if (!it->measObjectEutra.cellsToRemoveList.empty ())
4811 os <<
" cellsToRemoveList: ";
4812 std::list<uint8_t> auxList = it->measObjectEutra.cellsToRemoveList;
4813 std::list<uint8_t>::iterator it = auxList.begin ();
4814 for (; it != auxList.end (); it++)
4816 os << (int) *it <<
", ";
4821 if (!it->measObjectEutra.blackCellsToRemoveList.empty ())
4823 os <<
" blackCellsToRemoveList: ";
4824 std::list<uint8_t> auxList = it->measObjectEutra.blackCellsToRemoveList;
4825 std::list<uint8_t>::iterator it = auxList.begin ();
4826 for (; it != auxList.end (); it++)
4828 os << (int) *it <<
", ";
4833 if (!it->measObjectEutra.cellsToAddModList.empty ())
4835 os <<
" cellsToAddModList: " << std::endl;
4836 std::list<LteRrcSap::CellsToAddMod> auxList = it->measObjectEutra.cellsToAddModList;
4837 std::list<LteRrcSap::CellsToAddMod>::iterator it = auxList.begin ();
4838 for (; it != auxList.end (); it++)
4840 os <<
" cellIndex: " << (int)it->cellIndex << std::endl;
4841 os <<
" physCellId: " << (
int)it->physCellId << std::endl;
4842 os <<
" cellIndividualOffset: " << (int)it->cellIndividualOffset << std::endl;
4843 os <<
" ------ " << std::endl;
4847 if (!it->measObjectEutra.blackCellsToAddModList.empty ())
4849 os <<
" blackCellsToAddModList: " << std::endl;
4850 std::list<LteRrcSap::BlackCellsToAddMod> auxList = it->measObjectEutra.blackCellsToAddModList;
4851 std::list<LteRrcSap::BlackCellsToAddMod>::iterator it = auxList.begin ();
4852 for (; it != auxList.end (); it++)
4854 os <<
" cellIndex: " << (int)it->cellIndex << std::endl;
4855 os <<
" physCellIdRange.start: " << (
int)it->physCellIdRange.start << std::endl;
4856 os <<
" physCellIdRange.haveRange: " << it->physCellIdRange.haveRange << std::endl;
4857 os <<
" physCellIdRange.range: " << (int)it->physCellIdRange.range << std::endl;
4858 os <<
" ------ " << std::endl;
4862 os <<
" haveCellForWhichToReportCGI: " << it->measObjectEutra.haveCellForWhichToReportCGI << std::endl;
4863 os <<
" cellForWhichToReportCGI: " << (int)it->measObjectEutra.cellForWhichToReportCGI << std::endl;
4864 os <<
" ------------- " << std::endl;
4871 os <<
" reportConfigToAddModList: " << std::endl;
4873 std::list<LteRrcSap::ReportConfigToAddMod>::iterator it = auxList.begin ();
4874 for (; it != auxList.end (); it++)
4876 os <<
" reportConfigId: " << (int)it->reportConfigId << std::endl;
4877 os <<
" reportConfigEutra.triggerType " << (
int)it->reportConfigEutra.triggerType << std::endl;
4880 os <<
" reportConfigEutra.eventId " << (int)it->reportConfigEutra.eventId << std::endl;
4883 os <<
" reportConfigEutra.reportOnLeave " << (int)it->reportConfigEutra.reportOnLeave << std::endl;
4884 os <<
" reportConfigEutra.a3Offset " << (
int)it->reportConfigEutra.a3Offset << std::endl;
4888 os <<
" reportConfigEutra.threshold1.choice " << (int)it->reportConfigEutra.threshold1.choice << std::endl;
4889 os <<
" reportConfigEutra.threshold1.range " << (
int)it->reportConfigEutra.threshold1.range << std::endl;
4892 os <<
" reportConfigEutra.threshold2.choice " << (int)it->reportConfigEutra.threshold2.choice << std::endl;
4893 os <<
" reportConfigEutra.threshold2.range " << (
int)it->reportConfigEutra.threshold2.range << std::endl;
4896 os <<
" reportConfigEutra.hysteresis " << (int)it->reportConfigEutra.hysteresis << std::endl;
4897 os <<
" reportConfigEutra.timeToTrigger " << (
int)it->reportConfigEutra.timeToTrigger << std::endl;
4901 os <<
" reportConfigEutra.purpose " << (int)it->reportConfigEutra.purpose << std::endl;
4903 os <<
" reportConfigEutra.triggerQuantity " << (int)it->reportConfigEutra.triggerQuantity << std::endl;
4904 os <<
" reportConfigEutra.reportQuantity " << (
int)it->reportConfigEutra.reportQuantity << std::endl;
4905 os <<
" reportConfigEutra.maxReportCells " << (int)it->reportConfigEutra.maxReportCells << std::endl;
4906 os <<
" reportConfigEutra.reportInterval " << (
int)it->reportConfigEutra.reportInterval << std::endl;
4907 os <<
" reportConfigEutra.reportAmount " << (int)it->reportConfigEutra.reportAmount << std::endl;
4913 os <<
" measIdToAddModList: " << std::endl;
4915 std::list<LteRrcSap::MeasIdToAddMod>::iterator it = auxList.begin ();
4916 for (; it != auxList.end (); it++)
4918 os <<
" measId: " << (int)it->measId << std::endl;
4919 os <<
" measObjectId: " << (
int)it->measObjectId << std::endl;
4920 os <<
" reportConfigId: " << (int)it->reportConfigId << std::endl;
4921 os <<
" ------ " << std::endl;
5068 std::list<LteRrcSap::SrbToAddMod>
5074 std::list<LteRrcSap::DrbToAddMod>
5118 std::bitset<4> handoverPrepInfoOpts;
5119 handoverPrepInfoOpts.set (3,1);
5120 handoverPrepInfoOpts.set (2,0);
5121 handoverPrepInfoOpts.set (1,0);
5122 handoverPrepInfoOpts.set (0,0);
5176 std::bitset<0> bitset0;
5184 int criticalExtensionsChosen;
5187 if (criticalExtensionsChosen == 1)
5192 else if (criticalExtensionsChosen == 0)
5201 else if (c1Chosen == 0)
5204 std::bitset<4> handoverPrepInfoOpts;
5209 for (
int i = 0; i < n; i++)
5215 if (handoverPrepInfoOpts[3])
5232 std::bitset<16> cRnti;
5247 std::bitset<8> systemFrameNumber;
5251 std::bitset<10> spare;
5268 if (handoverPrepInfoOpts[2])
5273 if (handoverPrepInfoOpts[1])
5278 if (handoverPrepInfoOpts[0])
5389 std::bitset<0> bitset0;
5414 std::bitset<16> cRnti;
5424 std::bitset<16> shortMacI;
5446 std::bitset<2> spare;
5538 std::bitset<0> bitset0;
5552 int criticalExtensionsChoice;
5554 if (criticalExtensionsChoice == 1)
5559 else if (criticalExtensionsChoice == 0)
5572 std::bitset<1> nonCriticalExtensionPresent;
5590 os <<
"RadioResourceConfigDedicated: " << std::endl;
5658 std::bitset<0> bitset0;
5672 int criticalExtensionsChoice;
5674 if (criticalExtensionsChoice == 1)
5679 else if (criticalExtensionsChoice == 0)
5682 std::bitset<1> opts;
5757 std::bitset<0> bitset0;
5766 int criticalExtensionsChoice;
5768 if (criticalExtensionsChoice == 1)
5773 else if (criticalExtensionsChoice == 0)
5776 std::bitset<1> opts;
5851 std::bitset<0> bitset0;
5865 int criticalExtensionsChoice;
5867 if (criticalExtensionsChoice == 1)
5872 else if (criticalExtensionsChoice == 0)
5881 std::bitset<3> opts;
5973 std::bitset<0> bitset0;
5983 int criticalExtensionsChoice;
5985 if (criticalExtensionsChoice == 1)
5990 else if (criticalExtensionsChoice == 0)
6000 else if (c1Choice == 0)
6003 std::bitset<1> opts;
6083 std::bitset<0> bitset0;
6089 int criticalExtensionsChoice;
6092 if (criticalExtensionsChoice == 1)
6097 else if (criticalExtensionsChoice == 0)
6110 std::bitset<1> isNonCriticalExtensionPresent;
6116 if (isNonCriticalExtensionPresent[0])
6139 std::list<LteRrcSap::MeasResultEutra>::iterator it = measResultListEutra.begin ();
6140 for (; it != measResultListEutra.end (); it++)
6142 os <<
" physCellId =" << (int) it->physCellId << std::endl;
6143 os <<
" haveCgiInfo =" << it->haveCgiInfo << std::endl;
6144 if (it->haveCgiInfo)
6146 os <<
" plmnIdentity = " << (int) it->cgiInfo.plmnIdentity << std::endl;
6147 os <<
" cellIdentity = " << (
int) it->cgiInfo.cellIdentity << std::endl;
6148 os <<
" trackingAreaCode = " << (int) it->cgiInfo.trackingAreaCode << std::endl;
6149 os <<
" havePlmnIdentityList = " << !it->cgiInfo.plmnIdentityList.empty () << std::endl;
6150 if (!it->cgiInfo.plmnIdentityList.empty ())
6152 for (std::list<uint32_t>::iterator it2 = it->cgiInfo.plmnIdentityList.begin (); it2 != it->cgiInfo.plmnIdentityList.begin (); it2++)
6154 os <<
" plmnId : " << *it2 << std::endl;
6159 os <<
" haveRsrpResult =" << it->haveRsrpResult << std::endl;
6160 if (it->haveRsrpResult)
6162 os <<
" rsrpResult =" << (int) it->rsrpResult << std::endl;
6165 os <<
" haveRsrqResult =" << it->haveRsrqResult << std::endl;
6166 if (it->haveRsrqResult)
6168 os <<
" rsrqResult =" << (int) it->rsrqResult << std::endl;
6209 std::cout <<
"UL DCCH MSG TYPE: " <<
m_messageType << std::endl;
6221 std::bitset<0> bitset0;
6270 std::cout <<
"DL DCCH MSG TYPE: " <<
m_messageType << std::endl;
6282 std::bitset<0> bitset0;
6331 std::cout <<
"UL CCCH MSG TYPE: " <<
m_messageType << std::endl;
6343 std::bitset<0> bitset0;
6392 std::cout <<
"DL CCCH MSG TYPE: " <<
m_messageType << std::endl;
6404 std::bitset<0> bitset0;
RSRQ is used for the threshold.
SystemInformationBlockType2 sourceSystemInformationBlockType2
CarrierFreqEutra carrierFreq
void SerializeDlDcchMessage(int msgType) const
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
PdschConfigDedicated pdschConfigDedicated
uint32_t Deserialize(Buffer::Iterator bIterator)
PhysCellIdRange physCellIdRange
MeasConfig sourceMeasConfig
Buffer::Iterator DeserializeUlCcchMessage(Buffer::Iterator bIterator)
std::list< MeasObjectToAddMod > measObjectToAddModList
enum ns3::LteRrcSap::ReportConfigEutra::@74 purpose
uint8_t numberOfRaPreambles
SoundingRsUlConfigDedicated soundingRsUlConfigDedicated
bool presenceAntennaPort1
uint8_t hysteresis
Parameter used within the entry and leave condition of an event triggered reporting condition...
std::list< CellsToAddMod > cellsToAddModList
QuantityConfig quantityConfig
std::list< uint8_t > reportConfigToRemoveList
std::list< MeasResultEutra > measResultListEutra
HandoverPreparationInfoHeader()
ThresholdEutra threshold1
Threshold for event A1, A2, A4, and A5.
automatically resized byte buffer
uint32_t Deserialize(Buffer::Iterator bIterator)
std::list< SrbToAddMod > srbToAddModList
RadioResourceConfigDedicated radioResourceConfigDedicated
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
void SerializeDlCcchMessage(int msgType) const
std::list< uint8_t > measObjectToRemoveList
MeasObjectEutra measObjectEutra
uint16_t sourceUeIdentity
#define NS_FATAL_ERROR(msg)
fatal error handling
enum ns3::LteRrcSap::ReportConfigEutra::@76 reportQuantity
The quantities to be included in the measurement report, always assumed to be BOTH.
RachConfigDedicated rachConfigDedicated
uint8_t rrcTransactionIdentifier
Both the RSRP and RSRQ quantities are to be included in the measurement report.
uint32_t Deserialize(Buffer::Iterator bIterator)
LteRrcSap::HandoverPreparationInfo GetMessage() const
Returns a HandoverPreparationInfo IE from the values in the class attributes.
iterator in a Buffer instance
bool haveRadioResourceConfigDedicated
LteRrcSap::AsConfig m_asConfig
Buffer::Iterator DeserializeDlCcchMessage(Buffer::Iterator bIterator)
uint16_t trackingAreaCode
std::list< BlackCellsToAddMod > blackCellsToAddModList
Buffer::Iterator DeserializeDlDcchMessage(Buffer::Iterator bIterator)
SystemInformationBlockType1 sourceSystemInformationBlockType1
uint8_t rrcTransactionIdentifier
Event A4: Neighbour becomes better than absolute threshold.
PreambleInfo preambleInfo
uint8_t epsBearerIdentity
LogicalChannelConfig logicalChannelConfig
RachConfigCommon rachConfigCommon
enum ns3::LteRrcSap::SoundingRsUlConfigDedicated::@69 type
ReportConfigEutra reportConfigEutra
uint8_t logicalChannelGroup
std::list< uint32_t > plmnIdentityList
uint8_t rrcTransactionIdentifier
void SerializeUlDcchMessage(int msgType) const
std::list< MeasIdToAddMod > measIdToAddModList
bool haveRachConfigDedicated
uint8_t rrcTransactionIdentifier
PhysicalConfigDedicated physicalConfigDedicated
uint8_t filterCoefficientRSRP
void Print(std::ostream &os) const
void Print(std::ostream &os) const
uint8_t rrcTransactionIdentifier
MobilityStateParameters mobilityStateParameters
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
RadioResourceConfigDedicated radioResourceConfigDedicated
uint8_t rrcTransactionIdentifier
Event A5: PCell becomes worse than absolute threshold1 AND Neighbour becomes better than another abso...
RadioResourceConfigDedicated sourceRadioResourceConfig
bool reportOnLeave
Indicates whether or not the UE shall initiate the measurement reporting procedure when the leaving c...
Event A1: Serving becomes better than absolute threshold.
uint16_t targetPhysCellId
uint8_t rrcTransactionIdentifier
bool haveMobilityControlInfo
uint16_t prioritizedBitRateKbps
uint32_t Deserialize(Buffer::Iterator bIterator)
uint8_t maxReportCells
Maximum number of cells, excluding the serving cell, to be included in the measurement report...
void Print(std::ostream &os) const
int8_t cellIndividualOffset
RadioResourceConfigDedicated radioResourceConfigDedicated
bool haveMeasResultNeighCells
uint8_t cellForWhichToReportCGI
uint8_t filterCoefficientRSRQ
bool havePdschConfigDedicated
enum ns3::LteRrcSap::ReportConfigEutra::@73 eventId
Choice of E-UTRA event triggered reporting criteria.
enum ns3::LteRrcSap::MeasGapConfig::@78 type
uint8_t logicalChannelIdentity
MeasGapConfig measGapConfig
void SerializeUlCcchMessage(int msgType) const
uint8_t range
Value range used in RSRP/RSRQ threshold.
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
bool havePhysicalConfigDedicated
uint8_t reportAmount
Number of measurement reports applicable, always assumed to be infinite.
bool haveSoundingRsUlConfigDedicated
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
void SetMessage(LteRrcSap::HandoverPreparationInfo msg)
Receives a HandoverPreparationInfo IE and stores the contents into the class attributes.
RadioResourceConfigCommon radioResourceConfigCommon
LteRrcSap::AsConfig GetAsConfig() const
Getter for m_asConfig.
CarrierBandwidthEutra carrierBandwidth
int8_t a3Offset
Offset value for Event A3. An integer between -30 and 30. The actual value is (value * 0...
Event A2: Serving becomes worse than absolute threshold.
LogicalChannelConfig logicalChannelConfig
enum ns3::LteRrcSap::SpeedStatePars::@80 type
RachConfigCommon rachConfigCommon
SpeedStatePars speedStatePars
enum ns3::LteRrcSap::ReportConfigEutra::@77 reportInterval
Indicates the interval between periodical reports.
uint8_t raResponseWindowSize
bool haveCarrierBandwidth
bool haveAntennaInfoDedicated
uint32_t Deserialize(Buffer::Iterator bIterator)
std::list< uint8_t > blackCellsToRemoveList
void Print(std::ostream &os) const
enum ns3::LteRrcSap::ReportConfigEutra::@75 triggerQuantity
The quantities used to evaluate the triggering condition for the event, see 3GPP TS 36...
uint8_t allowedMeasBandwidth
std::list< DrbToAddMod > drbToAddModList
uint16_t sourceDlCarrierFreq
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
void Print(std::ostream &os) const
Reference Signal Received Power.
MobilityControlInfo mobilityControlInfo
AntennaInfoDedicated antennaInfo
Reference Signal Received Quality.
RSRP is used for the threshold.
std::list< uint8_t > cellsToRemoveList
enum ns3::LteRrcSap::ThresholdEutra::@71 choice
ReestablishmentCause reestablishmentCause
Event A3: Neighbour becomes amount of offset better than PCell.
enum ns3::LteRrcSap::ReportConfigEutra::@72 triggerType
enum ns3::LteRrcSap::MeasGapConfig::@79 gapOffsetChoice
uint16_t timeToTrigger
Time during which specific criteria for the event needs to be met in order to trigger a measurement r...
uint16_t bucketSizeDurationMs
enum ns3::LteRrcSap::RlcConfig::@67 choice
Threshold for event evaluation.
This class only serves to discriminate which message type has been received in uplink (ue to eNb) for...
std::list< uint8_t > measIdToRemoveList
a unique identifier for an interface.
std::list< ReportConfigToAddMod > reportConfigToAddModList
ReestabUeIdentity ueIdentity
TypeId SetParent(TypeId tid)
std::list< uint8_t > drbToReleaseList
Buffer::Iterator DeserializeUlDcchMessage(Buffer::Iterator bIterator)
SpeedStateScaleFactors timeToTriggerSf
RaSupervisionInfo raSupervisionInfo
uint8_t nCellChangeMedium
MasterInformationBlock sourceMasterInformationBlock
bool haveCellForWhichToReportCGI
ThresholdEutra threshold2
Threshold for event A5.