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
77 std::list<LteRrcSap::DrbToAddMod>::iterator it = drbToAddModList.begin ();
78 for (; it != drbToAddModList.end (); it++)
82 std::bitset<5> drbToAddModListOptionalFieldsPresent = std::bitset<5> ();
83 drbToAddModListOptionalFieldsPresent.set (4,1);
84 drbToAddModListOptionalFieldsPresent.set (3,0);
85 drbToAddModListOptionalFieldsPresent.set (2,1);
86 drbToAddModListOptionalFieldsPresent.set (1,1);
87 drbToAddModListOptionalFieldsPresent.set (0,1);
96 switch (it->rlcConfig.choice)
165 std::list<LteRrcSap::SrbToAddMod>::iterator it = srbToAddModList.begin ();
166 for (; it != srbToAddModList.end (); it++)
170 std::bitset<2> srbToAddModListOptionalFieldsPresent = std::bitset<2> ();
171 srbToAddModListOptionalFieldsPresent.set (1,0);
172 srbToAddModListOptionalFieldsPresent.set (0,1);
202 int prioritizedBitRate;
206 prioritizedBitRate = 0;
209 prioritizedBitRate = 1;
212 prioritizedBitRate = 2;
215 prioritizedBitRate = 3;
218 prioritizedBitRate = 4;
221 prioritizedBitRate = 5;
224 prioritizedBitRate = 6;
227 prioritizedBitRate = 7;
232 int bucketSizeDuration;
236 bucketSizeDuration = 0;
239 bucketSizeDuration = 1;
242 bucketSizeDuration = 2;
245 bucketSizeDuration = 3;
248 bucketSizeDuration = 4;
251 bucketSizeDuration = 5;
254 bucketSizeDuration = 5;
266 std::bitset<10> optionalFieldsPhysicalConfigDedicated;
268 optionalFieldsPhysicalConfigDedicated.set (8,0);
269 optionalFieldsPhysicalConfigDedicated.set (7,0);
270 optionalFieldsPhysicalConfigDedicated.set (6,0);
271 optionalFieldsPhysicalConfigDedicated.set (5,0);
272 optionalFieldsPhysicalConfigDedicated.set (4,0);
273 optionalFieldsPhysicalConfigDedicated.set (3,0);
276 optionalFieldsPhysicalConfigDedicated.set (0,0);
362 bool isSrbToAddModListPresent = !radioResourceConfigDedicated.
srbToAddModList.empty ();
363 bool isDrbToAddModListPresent = !radioResourceConfigDedicated.
drbToAddModList.empty ();
364 bool isDrbToReleaseListPresent = !radioResourceConfigDedicated.
drbToReleaseList.empty ();
367 std::bitset<6> optionalFieldsPresent = std::bitset<6> ();
368 optionalFieldsPresent.set (5,isSrbToAddModListPresent);
369 optionalFieldsPresent.set (4,isDrbToAddModListPresent);
370 optionalFieldsPresent.set (3,isDrbToReleaseListPresent);
371 optionalFieldsPresent.set (2,0);
372 optionalFieldsPresent.set (1,0);
377 if (isSrbToAddModListPresent)
383 if (isDrbToAddModListPresent)
389 if (isDrbToReleaseListPresent)
392 std::list<uint8_t>::iterator it = radioResourceConfigDedicated.
drbToReleaseList.begin ();
410 std::bitset<3> sysInfoBlk1Opts;
411 sysInfoBlk1Opts.set (2,0);
412 sysInfoBlk1Opts.set (1,0);
413 sysInfoBlk1Opts.set (0,0);
469 std::bitset<9> rrCfgCmmOpts;
470 rrCfgCmmOpts.set (8,1);
471 rrCfgCmmOpts.set (7,0);
472 rrCfgCmmOpts.set (6,0);
473 rrCfgCmmOpts.set (5,0);
474 rrCfgCmmOpts.set (4,0);
475 rrCfgCmmOpts.set (3,0);
476 rrCfgCmmOpts.set (2,0);
477 rrCfgCmmOpts.set (1,0);
478 rrCfgCmmOpts.set (0,0);
657 std::list<LteRrcSap::MeasResultEutra>::iterator it;
679 if (!it->cgiInfo.plmnIdentityList.empty ())
682 std::list<uint32_t>::iterator it2;
683 for (it2 = it->cgiInfo.plmnIdentityList.begin (); it2 != it->cgiInfo.plmnIdentityList.end (); it2++)
691 std::bitset<2> measResultFieldsPresent;
692 measResultFieldsPresent[1] = it->haveRsrpResult;
693 measResultFieldsPresent[0] = it->haveRsrqResult;
696 if (it->haveRsrpResult)
701 if (it->haveRsrqResult)
716 int nDig = (plmnId > 99) ? 3 : 2;
719 for (
int i = nDig - 1; i >= 0; i--)
721 int n = floor (plmnId / pow (10,i));
723 plmnId -= n * pow (10,i);
877 switch (qOffsetRange)
980 switch (thresholdEutra.
choice)
998 std::bitset<11> measConfigOptional;
1008 measConfigOptional.set (1,
false );
1031 std::bitset<5> measObjOpts;
1032 measObjOpts.set (4,!it->measObjectEutra.cellsToRemoveList.empty () );
1033 measObjOpts.set (3,!it->measObjectEutra.cellsToAddModList.empty () );
1034 measObjOpts.set (2,!it->measObjectEutra.blackCellsToRemoveList.empty () );
1035 measObjOpts.set (1,!it->measObjectEutra.blackCellsToAddModList.empty () );
1036 measObjOpts.set (0,it->measObjectEutra.haveCellForWhichToReportCGI);
1043 switch (it->measObjectEutra.allowedMeasBandwidth)
1071 if (!it->measObjectEutra.cellsToRemoveList.empty ())
1074 for (std::list<uint8_t>::iterator it2 = it->measObjectEutra.cellsToRemoveList.begin (); it2 != it->measObjectEutra.cellsToRemoveList.end (); it2++)
1080 if (!it->measObjectEutra.cellsToAddModList.empty ())
1083 for (std::list<LteRrcSap::CellsToAddMod>::iterator it2 = it->measObjectEutra.cellsToAddModList.begin (); it2 != it->measObjectEutra.cellsToAddModList.end (); it2++)
1098 if (!it->measObjectEutra.blackCellsToRemoveList.empty () )
1101 for (std::list<uint8_t>::iterator it2 = it->measObjectEutra.blackCellsToRemoveList.begin (); it2 != it->measObjectEutra.blackCellsToRemoveList.end (); it2++)
1107 if (!it->measObjectEutra.blackCellsToAddModList.empty () )
1110 for (std::list<LteRrcSap::BlackCellsToAddMod>::iterator it2 = it->measObjectEutra.blackCellsToAddModList.begin (); it2 != it->measObjectEutra.blackCellsToAddModList.end (); it2++)
1117 std::bitset<1> rangePresent = std::bitset<1> (it2->physCellIdRange.haveRange);
1120 if (it2->physCellIdRange.haveRange)
1122 switch (it2->physCellIdRange.range)
1174 if (it->measObjectEutra.haveCellForWhichToReportCGI)
1202 switch (it->reportConfigEutra.triggerType)
1207 switch (it->reportConfigEutra.purpose)
1221 switch (it->reportConfigEutra.eventId)
1254 switch (it->reportConfigEutra.timeToTrigger)
1331 switch (it->reportConfigEutra.reportInterval)
1384 switch (it->reportConfigEutra.reportAmount)
1437 std::bitset<4> quantityConfigOpts (0);
1438 quantityConfigOpts.set (3,1);
1676 int thresholdEutraChoice, range;
1679 switch (thresholdEutraChoice)
1684 thresholdEutra->
range = range;
1690 thresholdEutra->
range = range;
1704 *qOffsetRange = -24;
1707 *qOffsetRange = -22;
1710 *qOffsetRange = -20;
1713 *qOffsetRange = -18;
1716 *qOffsetRange = -16;
1719 *qOffsetRange = -14;
1722 *qOffsetRange = -12;
1725 *qOffsetRange = -10;
1804 std::bitset<6> optionalFieldsPresent = std::bitset<6> ();
1807 if (optionalFieldsPresent[5])
1813 if (optionalFieldsPresent[4])
1819 if (optionalFieldsPresent[3])
1825 for (
int i = 0; i < n; i++)
1832 if (optionalFieldsPresent[2])
1838 if (optionalFieldsPresent[1])
1845 if (optionalFieldsPresent[0])
1860 srbToAddModList->clear ();
1863 for (
int i = 0; i < numElems; i++)
1868 std::bitset<2> optionalFields;
1876 if (optionalFields[1])
1882 if (optionalFields[0])
1900 srbToAddModList->insert (srbToAddModList->end (),srbToAddMod);
1913 drbToAddModList->clear ();
1915 for (
int i = 0; i < n; i++)
1919 std::bitset<5> optionalFields;
1922 if (optionalFields[4])
1932 if (optionalFields[3])
1938 if (optionalFields[2])
1945 std::bitset<0> bitset0;
1997 if (optionalFields[1])
2003 if (optionalFields[0])
2008 drbToAddModList->insert (drbToAddModList->end (),drbToAddMod);
2020 std::bitset<1> bitset1;
2030 logicalChannelConfig->
priority = n;
2034 uint16_t prioritizedBitRateKbps;
2039 prioritizedBitRateKbps = 0;
2042 prioritizedBitRateKbps = 8;
2045 prioritizedBitRateKbps = 16;
2048 prioritizedBitRateKbps = 32;
2051 prioritizedBitRateKbps = 64;
2054 prioritizedBitRateKbps = 128;
2057 prioritizedBitRateKbps = 256;
2060 prioritizedBitRateKbps = 10000;
2063 prioritizedBitRateKbps = 10000;
2069 uint16_t bucketSizeDurationMs;
2073 bucketSizeDurationMs = 50;
2076 bucketSizeDurationMs = 100;
2079 bucketSizeDurationMs = 150;
2082 bucketSizeDurationMs = 300;
2085 bucketSizeDurationMs = 500;
2088 bucketSizeDurationMs = 1000;
2091 bucketSizeDurationMs = 1000;
2108 std::bitset<10> optionalFieldPresent;
2112 if (optionalFieldPresent[9])
2115 std::bitset<0> bitset0;
2127 if (optionalFieldPresent[8])
2132 if (optionalFieldPresent[7])
2137 if (optionalFieldPresent[6])
2142 if (optionalFieldPresent[5])
2147 if (optionalFieldPresent[4])
2152 if (optionalFieldPresent[3])
2158 if (optionalFieldPresent[2])
2175 std::bitset<0> bitset0;
2206 if (optionalFieldPresent[1])
2217 std::bitset<1> codebookSubsetRestrictionPresent;
2224 if (codebookSubsetRestrictionPresent[0])
2230 int txantennaselchosen;
2232 if (txantennaselchosen == 0)
2237 else if (txantennaselchosen == 1)
2244 if (optionalFieldPresent[0])
2256 NS_FATAL_ERROR (
"RrcAsn1Header Print() function must also specify LteRrcSap::RadioResourceConfigDedicated as a second argument");
2262 os <<
" srbToAddModList: " << std::endl;
2263 std::list<LteRrcSap::SrbToAddMod>::iterator it = radioResourceConfigDedicated.
srbToAddModList.begin ();
2264 for (; it != radioResourceConfigDedicated.
srbToAddModList.end (); it++)
2266 os <<
" srbIdentity: " << (int)it->srbIdentity << std::endl;
2267 os <<
" logicalChannelConfig: " << std::endl;
2268 os <<
" priority: " << (
int)it->logicalChannelConfig.priority << std::endl;
2269 os <<
" prioritizedBitRateKbps: " << (int)it->logicalChannelConfig.prioritizedBitRateKbps << std::endl;
2270 os <<
" bucketSizeDurationMs: " << (
int)it->logicalChannelConfig.bucketSizeDurationMs << std::endl;
2271 os <<
" logicalChannelGroup: " << (int)it->logicalChannelConfig.logicalChannelGroup << std::endl;
2275 os <<
" drbToAddModList: " << std::endl;
2276 std::list<LteRrcSap::DrbToAddMod>::iterator it2 = radioResourceConfigDedicated.
drbToAddModList.begin ();
2277 for (; it2 != radioResourceConfigDedicated.
drbToAddModList.end (); it2++)
2279 os <<
" epsBearerIdentity: " << (int)it2->epsBearerIdentity << std::endl;
2280 os <<
" drbIdentity: " << (
int)it2->drbIdentity << std::endl;
2281 os <<
" rlcConfig: " << it2->rlcConfig.choice << std::endl;
2282 os <<
" logicalChannelIdentity: " << (int)it2->logicalChannelIdentity << std::endl;
2283 os <<
" logicalChannelConfig: " << std::endl;
2284 os <<
" priority: " << (
int)it2->logicalChannelConfig.priority << std::endl;
2285 os <<
" prioritizedBitRateKbps: " << (int)it2->logicalChannelConfig.prioritizedBitRateKbps << std::endl;
2286 os <<
" bucketSizeDurationMs: " << (
int)it2->logicalChannelConfig.bucketSizeDurationMs << std::endl;
2287 os <<
" logicalChannelGroup: " << (int)it2->logicalChannelConfig.logicalChannelGroup << std::endl;
2291 os <<
" drbToReleaseList: ";
2292 std::list<uint8_t>::iterator it3 = radioResourceConfigDedicated.
drbToReleaseList.begin ();
2295 os << (int)*it3 <<
", ";
2303 os <<
" physicalConfigDedicated: " << std::endl;
2308 os <<
" soundingRsUlConfigDedicated: " << std::endl;
2325 std::bitset<0> bitset0;
2328 std::bitset<3> sysInfoBlkT1Opts;
2332 std::bitset<1> cellAccessRelatedInfoOpts;
2336 int numPlmnIdentityInfoElements;
2338 for (
int i = 0; i < numPlmnIdentityInfoElements; i++)
2347 std::bitset<16> trackingAreaCode;
2351 std::bitset<28> cellIdentity;
2364 if (cellAccessRelatedInfoOpts[0])
2367 std::bitset<27> csgIdentity;
2373 std::bitset<1> qRxLevMinOffsetPresent;
2376 if (qRxLevMinOffsetPresent[0])
2382 if (sysInfoBlkT1Opts[2])
2392 int numSchedulingInfo;
2394 for (
int i = 0; i < numSchedulingInfo; i++)
2400 for (
int j = 0; j < numSibType; j++)
2406 if (sysInfoBlkT1Opts[1])
2418 if (sysInfoBlkT1Opts[0])
2429 std::bitset<0> bitset0;
2432 std::bitset<2> sysInfoBlkT2Opts;
2434 if (sysInfoBlkT2Opts[1])
2453 std::bitset<2> freqInfoOpts;
2455 if (freqInfoOpts[1])
2461 if (freqInfoOpts[0])
2493 if (sysInfoBlkT2Opts[0])
2509 std::bitset<0> bitset0;
2512 std::bitset<9> rrCfgCommOptions;
2516 if (rrCfgCommOptions[8])
2522 std::bitset<1> prachConfigInfoPresent;
2529 if (prachConfigInfoPresent[0])
2535 if (rrCfgCommOptions[7])
2576 if (rrCfgCommOptions[6])
2582 if (rrCfgCommOptions[5])
2588 if (rrCfgCommOptions[4])
2594 if (rrCfgCommOptions[3])
2600 if (rrCfgCommOptions[2])
2606 if (rrCfgCommOptions[1])
2612 if (rrCfgCommOptions[0])
2626 std::bitset<0> bitset0;
2632 std::bitset<1> preamblesGroupAConfigPresent;
2693 if (preamblesGroupAConfigPresent[0])
2786 std::bitset<0> bitset0;
2804 std::bitset<1> prachConfigInfoPresent;
2809 if (prachConfigInfoPresent[0])
2897 std::bitset<1> measResultNeighCellsPresent;
2918 int measResultNeighCellsChoice;
2923 if (measResultNeighCellsChoice == 0)
2929 for (
int i = 0; i < numElems; i++)
2933 std::bitset<1> isCgiInfoPresent;
2940 measResultEutra.
haveCgiInfo = isCgiInfoPresent[0];
2941 if (isCgiInfoPresent[0])
2943 std::bitset<1> havePlmnIdentityList;
2953 std::bitset<28> cellId;
2958 std::bitset<16> trArCo;
2963 if (havePlmnIdentityList[0])
2968 for (
int j = 0; j < numPlmnElems; j++)
2978 std::bitset<2> measResultOpts;
2982 if (measResultOpts[1])
2990 if (measResultOpts[0])
3001 if (measResultNeighCellsChoice == 1)
3007 if (measResultNeighCellsChoice == 2)
3012 if (measResultNeighCellsChoice == 3)
3026 std::bitset<1> isMccPresent;
3029 if (isMccPresent[0])
3040 for (
int j = mncDigits - 1; j >= 0; j--)
3043 mnc += n * pow (10,j);
3056 std::bitset<0> bitset0;
3057 std::bitset<2> bitset2;
3058 std::bitset<11> bitset11;
3067 int measObjectToRemoveListElems;
3070 for (
int i = 0; i < measObjectToRemoveListElems; i++)
3080 int measObjectToAddModListElems;
3083 for (
int i = 0; i < measObjectToAddModListElems; i++)
3092 int measObjectChoice;
3095 switch (measObjectChoice)
3115 std::bitset<5> measObjectEutraOpts;
3157 if (measObjectEutraOpts[4])
3163 for (
int i = 0; i < numElems; i++)
3170 if (measObjectEutraOpts[3])
3176 for (
int i = 0; i < numElems; i++)
3197 if (measObjectEutraOpts[2])
3203 for (
int i = 0; i < numElems; i++)
3211 if (measObjectEutraOpts[1])
3217 for (
int i = 0; i < numElems; i++)
3226 std::bitset<1> isRangePresent;
3294 if (measObjectEutraOpts[0])
3308 int reportConfigToRemoveListElems;
3311 for (
int i = 0; i < reportConfigToRemoveListElems; i++)
3321 int reportConfigToAddModListElems;
3324 for (
int i = 0; i < reportConfigToAddModListElems; i++)
3333 int reportConfigChoice;
3336 if (reportConfigChoice == 0)
3342 int triggerTypeChoice;
3345 if (triggerTypeChoice == 0)
3355 switch (eventIdChoice)
3449 if (triggerTypeChoice == 1)
3576 if (reportConfigChoice == 1)
3589 int measIdToRemoveListElems;
3592 for (
int i = 0; i < measIdToRemoveListElems; i++)
3602 int measIdToAddModListElems;
3605 for (
int i = 0; i < measIdToAddModListElems; i++)
3628 std::bitset<4> quantityConfigOpts;
3631 if (quantityConfigOpts[3])
3744 if (quantityConfigOpts[2])
3749 if (quantityConfigOpts[1])
3754 if (quantityConfigOpts[0])
3765 int measGapConfigChoice;
3767 switch (measGapConfigChoice)
3778 int gapOffsetChoice;
3780 switch (gapOffsetChoice)
3814 int speedStateParsChoice;
3816 switch (speedStateParsChoice)
3893 m_mmec = std::bitset<8> (0ul);
3894 m_mTmsi = std::bitset<32> (0ul);
3896 m_spare = std::bitset<1> (0ul);
3907 static TypeId tid =
TypeId (
"ns3::RrcConnectionRequestHeader")
3909 .SetGroupName(
"Lte")
3917 os <<
"MMEC:" <<
m_mmec << std::endl;
3918 os <<
"MTMSI:" <<
m_mTmsi << std::endl;
3920 os <<
"Spare: " <<
m_spare << std::endl;
3969 std::bitset<1> dummy;
3970 std::bitset<0> optionalOrDefaultMask;
4048 os <<
"radioResourceConfigDedicated:" << std::endl;
4097 std::bitset<0> bitset0;
4098 std::bitset<1> bitset1;
4099 std::bitset<2> bitset2;
4113 int criticalExtensionChoice;
4115 if (criticalExtensionChoice == 1)
4120 else if (criticalExtensionChoice == 0)
4183 std::list<LteRrcSap::SrbToAddMod>
4189 std::list<LteRrcSap::DrbToAddMod>
4255 std::bitset<0> bitset0;
4358 std::bitset<0> bitset0;
4444 std::bitset<6> options;
4463 std::bitset<4> mobCtrlIntoOptional;
4466 mobCtrlIntoOptional.set (1,0);
4565 std::bitset<0> bitset0;
4594 else if (c1Chosen == 0)
4597 std::bitset<6> rrcConnRecOpts;
4610 std::bitset<4> mobCtrlOpts;
4621 std::bitset<1> ulCarrierFreqPresent;
4627 if (ulCarrierFreqPresent[0])
4638 std::bitset<1> ulBandwidthPresent;
4667 if (ulBandwidthPresent[0])
4707 std::bitset<16> cRnti;
4726 if (rrcConnRecOpts[3])
4739 if (rrcConnRecOpts[1])
4745 if (rrcConnRecOpts[0])
4764 os <<
" measObjectToRemoveList: ";
4766 std::list<uint8_t>::iterator it = auxList.begin ();
4767 for (; it != auxList.end (); it++)
4769 os << (int) *it <<
", ";
4775 os <<
" reportConfigToRemoveList: ";
4777 std::list<uint8_t>::iterator it = auxList.begin ();
4778 for (; it != auxList.end (); it++)
4780 os << (int) *it <<
", ";
4786 os <<
" measIdToRemoveList: ";
4788 std::list<uint8_t>::iterator it = auxList.begin ();
4789 for (; it != auxList.end (); it++)
4791 os << (int) *it <<
", ";
4798 os <<
" measObjectToAddMod: " << std::endl;
4800 std::list<LteRrcSap::MeasObjectToAddMod>::iterator it = auxList.begin ();
4801 for (; it != auxList.end (); it++)
4803 os <<
" measObjectId: " << (int)it->measObjectId << std::endl;
4804 os <<
" carrierFreq: " << (
int)it->measObjectEutra.carrierFreq << std::endl;
4805 os <<
" allowedMeasBandwidth: " << (int)it->measObjectEutra.allowedMeasBandwidth << std::endl;
4806 os <<
" presenceAntennaPort1: " << it->measObjectEutra.presenceAntennaPort1 << std::endl;
4807 os <<
" neighCellConfig: " << (
int) it->measObjectEutra.neighCellConfig << std::endl;
4808 os <<
" offsetFreq: " << (int)it->measObjectEutra.offsetFreq << std::endl;
4811 if (!it->measObjectEutra.cellsToRemoveList.empty ())
4813 os <<
" cellsToRemoveList: ";
4814 std::list<uint8_t> auxList = it->measObjectEutra.cellsToRemoveList;
4815 std::list<uint8_t>::iterator it = auxList.begin ();
4816 for (; it != auxList.end (); it++)
4818 os << (int) *it <<
", ";
4823 if (!it->measObjectEutra.blackCellsToRemoveList.empty ())
4825 os <<
" blackCellsToRemoveList: ";
4826 std::list<uint8_t> auxList = it->measObjectEutra.blackCellsToRemoveList;
4827 std::list<uint8_t>::iterator it = auxList.begin ();
4828 for (; it != auxList.end (); it++)
4830 os << (int) *it <<
", ";
4835 if (!it->measObjectEutra.cellsToAddModList.empty ())
4837 os <<
" cellsToAddModList: " << std::endl;
4838 std::list<LteRrcSap::CellsToAddMod> auxList = it->measObjectEutra.cellsToAddModList;
4839 std::list<LteRrcSap::CellsToAddMod>::iterator it = auxList.begin ();
4840 for (; it != auxList.end (); it++)
4842 os <<
" cellIndex: " << (int)it->cellIndex << std::endl;
4843 os <<
" physCellId: " << (
int)it->physCellId << std::endl;
4844 os <<
" cellIndividualOffset: " << (int)it->cellIndividualOffset << std::endl;
4845 os <<
" ------ " << std::endl;
4849 if (!it->measObjectEutra.blackCellsToAddModList.empty ())
4851 os <<
" blackCellsToAddModList: " << std::endl;
4852 std::list<LteRrcSap::BlackCellsToAddMod> auxList = it->measObjectEutra.blackCellsToAddModList;
4853 std::list<LteRrcSap::BlackCellsToAddMod>::iterator it = auxList.begin ();
4854 for (; it != auxList.end (); it++)
4856 os <<
" cellIndex: " << (int)it->cellIndex << std::endl;
4857 os <<
" physCellIdRange.start: " << (
int)it->physCellIdRange.start << std::endl;
4858 os <<
" physCellIdRange.haveRange: " << it->physCellIdRange.haveRange << std::endl;
4859 os <<
" physCellIdRange.range: " << (int)it->physCellIdRange.range << std::endl;
4860 os <<
" ------ " << std::endl;
4864 os <<
" haveCellForWhichToReportCGI: " << it->measObjectEutra.haveCellForWhichToReportCGI << std::endl;
4865 os <<
" cellForWhichToReportCGI: " << (int)it->measObjectEutra.cellForWhichToReportCGI << std::endl;
4866 os <<
" ------------- " << std::endl;
4873 os <<
" reportConfigToAddModList: " << std::endl;
4875 std::list<LteRrcSap::ReportConfigToAddMod>::iterator it = auxList.begin ();
4876 for (; it != auxList.end (); it++)
4878 os <<
" reportConfigId: " << (int)it->reportConfigId << std::endl;
4879 os <<
" reportConfigEutra.triggerType " << (
int)it->reportConfigEutra.triggerType << std::endl;
4882 os <<
" reportConfigEutra.eventId " << (int)it->reportConfigEutra.eventId << std::endl;
4885 os <<
" reportConfigEutra.reportOnLeave " << (int)it->reportConfigEutra.reportOnLeave << std::endl;
4886 os <<
" reportConfigEutra.a3Offset " << (
int)it->reportConfigEutra.a3Offset << std::endl;
4890 os <<
" reportConfigEutra.threshold1.choice " << (int)it->reportConfigEutra.threshold1.choice << std::endl;
4891 os <<
" reportConfigEutra.threshold1.range " << (
int)it->reportConfigEutra.threshold1.range << std::endl;
4894 os <<
" reportConfigEutra.threshold2.choice " << (int)it->reportConfigEutra.threshold2.choice << std::endl;
4895 os <<
" reportConfigEutra.threshold2.range " << (
int)it->reportConfigEutra.threshold2.range << std::endl;
4898 os <<
" reportConfigEutra.hysteresis " << (int)it->reportConfigEutra.hysteresis << std::endl;
4899 os <<
" reportConfigEutra.timeToTrigger " << (
int)it->reportConfigEutra.timeToTrigger << std::endl;
4903 os <<
" reportConfigEutra.purpose " << (int)it->reportConfigEutra.purpose << std::endl;
4905 os <<
" reportConfigEutra.triggerQuantity " << (int)it->reportConfigEutra.triggerQuantity << std::endl;
4906 os <<
" reportConfigEutra.reportQuantity " << (
int)it->reportConfigEutra.reportQuantity << std::endl;
4907 os <<
" reportConfigEutra.maxReportCells " << (int)it->reportConfigEutra.maxReportCells << std::endl;
4908 os <<
" reportConfigEutra.reportInterval " << (
int)it->reportConfigEutra.reportInterval << std::endl;
4909 os <<
" reportConfigEutra.reportAmount " << (int)it->reportConfigEutra.reportAmount << std::endl;
4915 os <<
" measIdToAddModList: " << std::endl;
4917 std::list<LteRrcSap::MeasIdToAddMod>::iterator it = auxList.begin ();
4918 for (; it != auxList.end (); it++)
4920 os <<
" measId: " << (int)it->measId << std::endl;
4921 os <<
" measObjectId: " << (
int)it->measObjectId << std::endl;
4922 os <<
" reportConfigId: " << (int)it->reportConfigId << std::endl;
4923 os <<
" ------ " << std::endl;
5070 std::list<LteRrcSap::SrbToAddMod>
5076 std::list<LteRrcSap::DrbToAddMod>
5120 std::bitset<4> handoverPrepInfoOpts;
5121 handoverPrepInfoOpts.set (3,1);
5122 handoverPrepInfoOpts.set (2,0);
5123 handoverPrepInfoOpts.set (1,0);
5124 handoverPrepInfoOpts.set (0,0);
5178 std::bitset<0> bitset0;
5186 int criticalExtensionsChosen;
5189 if (criticalExtensionsChosen == 1)
5194 else if (criticalExtensionsChosen == 0)
5203 else if (c1Chosen == 0)
5206 std::bitset<4> handoverPrepInfoOpts;
5211 for (
int i = 0; i < n; i++)
5217 if (handoverPrepInfoOpts[3])
5234 std::bitset<16> cRnti;
5249 std::bitset<8> systemFrameNumber;
5253 std::bitset<10> spare;
5270 if (handoverPrepInfoOpts[2])
5275 if (handoverPrepInfoOpts[1])
5280 if (handoverPrepInfoOpts[0])
5391 std::bitset<0> bitset0;
5416 std::bitset<16> cRnti;
5426 std::bitset<16> shortMacI;
5448 std::bitset<2> spare;
5540 std::bitset<0> bitset0;
5554 int criticalExtensionsChoice;
5556 if (criticalExtensionsChoice == 1)
5561 else if (criticalExtensionsChoice == 0)
5574 std::bitset<1> nonCriticalExtensionPresent;
5592 os <<
"RadioResourceConfigDedicated: " << std::endl;
5660 std::bitset<0> bitset0;
5674 int criticalExtensionsChoice;
5676 if (criticalExtensionsChoice == 1)
5681 else if (criticalExtensionsChoice == 0)
5684 std::bitset<1> opts;
5759 std::bitset<0> bitset0;
5768 int criticalExtensionsChoice;
5770 if (criticalExtensionsChoice == 1)
5775 else if (criticalExtensionsChoice == 0)
5778 std::bitset<1> opts;
5853 std::bitset<0> bitset0;
5867 int criticalExtensionsChoice;
5869 if (criticalExtensionsChoice == 1)
5874 else if (criticalExtensionsChoice == 0)
5883 std::bitset<3> opts;
5975 std::bitset<0> bitset0;
5985 int criticalExtensionsChoice;
5987 if (criticalExtensionsChoice == 1)
5992 else if (criticalExtensionsChoice == 0)
6002 else if (c1Choice == 0)
6005 std::bitset<1> opts;
6085 std::bitset<0> bitset0;
6091 int criticalExtensionsChoice;
6094 if (criticalExtensionsChoice == 1)
6099 else if (criticalExtensionsChoice == 0)
6112 std::bitset<1> isNonCriticalExtensionPresent;
6118 if (isNonCriticalExtensionPresent[0])
6141 std::list<LteRrcSap::MeasResultEutra>::iterator it = measResultListEutra.begin ();
6142 for (; it != measResultListEutra.end (); it++)
6144 os <<
" physCellId =" << (int) it->physCellId << std::endl;
6145 os <<
" haveCgiInfo =" << it->haveCgiInfo << std::endl;
6146 if (it->haveCgiInfo)
6148 os <<
" plmnIdentity = " << (int) it->cgiInfo.plmnIdentity << std::endl;
6149 os <<
" cellIdentity = " << (
int) it->cgiInfo.cellIdentity << std::endl;
6150 os <<
" trackingAreaCode = " << (int) it->cgiInfo.trackingAreaCode << std::endl;
6151 os <<
" havePlmnIdentityList = " << !it->cgiInfo.plmnIdentityList.empty () << std::endl;
6152 if (!it->cgiInfo.plmnIdentityList.empty ())
6154 for (std::list<uint32_t>::iterator it2 = it->cgiInfo.plmnIdentityList.begin (); it2 != it->cgiInfo.plmnIdentityList.begin (); it2++)
6156 os <<
" plmnId : " << *it2 << std::endl;
6161 os <<
" haveRsrpResult =" << it->haveRsrpResult << std::endl;
6162 if (it->haveRsrpResult)
6164 os <<
" rsrpResult =" << (int) it->rsrpResult << std::endl;
6167 os <<
" haveRsrqResult =" << it->haveRsrqResult << std::endl;
6168 if (it->haveRsrqResult)
6170 os <<
" rsrqResult =" << (int) it->rsrqResult << std::endl;
6211 std::cout <<
"UL DCCH MSG TYPE: " <<
m_messageType << std::endl;
6223 std::bitset<0> bitset0;
6272 std::cout <<
"DL DCCH MSG TYPE: " <<
m_messageType << std::endl;
6284 std::bitset<0> bitset0;
6333 std::cout <<
"UL CCCH MSG TYPE: " <<
m_messageType << std::endl;
6345 std::bitset<0> bitset0;
6394 std::cout <<
"DL CCCH MSG TYPE: " <<
m_messageType << std::endl;
6406 std::bitset<0> bitset0;
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
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
enum ns3::LteRrcSap::ReportConfigEutra::@75 reportQuantity
The quantities to be included in the measurement report, always assumed to be BOTH.
std::list< MeasResultEutra > measResultListEutra
HandoverPreparationInfoHeader()
ThresholdEutra threshold1
Threshold for event A1, A2, A4, and A5.
automatically resized byte buffer
enum ns3::LteRrcSap::SpeedStatePars::@79 type
RSRP is used for the threshold.
enum ns3::LteRrcSap::ReportConfigEutra::@72 eventId
Choice of E-UTRA event triggered reporting criteria.
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 reportInterval
Indicates the interval between periodical reports.
Event A2: Serving becomes worse than absolute threshold.
RachConfigDedicated rachConfigDedicated
uint8_t rrcTransactionIdentifier
RSRQ is used for the threshold.
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
PreambleInfo preambleInfo
Event A5: PCell becomes worse than absolute threshold1 AND Neighbour becomes better than another abso...
Reference Signal Received Quality.
uint8_t epsBearerIdentity
LogicalChannelConfig logicalChannelConfig
RachConfigCommon rachConfigCommon
ReportConfigEutra reportConfigEutra
uint8_t logicalChannelGroup
std::list< uint32_t > plmnIdentityList
uint8_t rrcTransactionIdentifier
void SerializeUlDcchMessage(int msgType) const
enum ns3::LteRrcSap::MeasGapConfig::@78 gapOffsetChoice
std::list< MeasIdToAddMod > measIdToAddModList
bool haveRachConfigDedicated
Event A4: Neighbour becomes better than absolute threshold.
uint8_t rrcTransactionIdentifier
PhysicalConfigDedicated physicalConfigDedicated
uint8_t filterCoefficientRSRP
void Print(std::ostream &os) const
enum ns3::LteRrcSap::ReportConfigEutra::@71 triggerType
void Print(std::ostream &os) const
uint8_t rrcTransactionIdentifier
MobilityStateParameters mobilityStateParameters
enum ns3::LteRrcSap::SoundingRsUlConfigDedicated::@68 type
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
RadioResourceConfigDedicated sourceRadioResourceConfig
bool reportOnLeave
Indicates whether or not the UE shall initiate the measurement reporting procedure when the leaving c...
Every class exported by the ns3 library is enclosed in the ns3 namespace.
enum ns3::LteRrcSap::MeasGapConfig::@77 type
uint16_t targetPhysCellId
enum ns3::LteRrcSap::ThresholdEutra::@70 choice
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
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.
Event A3: Neighbour becomes amount of offset better than PCell.
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...
Reference Signal Received Power.
LogicalChannelConfig logicalChannelConfig
enum ns3::LteRrcSap::ReportConfigEutra::@74 triggerQuantity
The quantities used to evaluate the triggering condition for the event, see 3GPP TS 36...
RachConfigCommon rachConfigCommon
SpeedStatePars speedStatePars
uint8_t raResponseWindowSize
bool haveCarrierBandwidth
bool haveAntennaInfoDedicated
uint32_t Deserialize(Buffer::Iterator bIterator)
std::list< uint8_t > blackCellsToRemoveList
void Print(std::ostream &os) const
uint8_t allowedMeasBandwidth
std::list< DrbToAddMod > drbToAddModList
uint16_t sourceDlCarrierFreq
void PreSerialize() const
This function serializes class attributes to m_serializationResult local Buffer.
enum ns3::LteRrcSap::RlcConfig::@66 choice
void Print(std::ostream &os) const
enum ns3::LteRrcSap::ReportConfigEutra::@73 purpose
Both the RSRP and RSRQ quantities are to be included in the measurement report.
MobilityControlInfo mobilityControlInfo
AntennaInfoDedicated antennaInfo
std::list< uint8_t > cellsToRemoveList
ReestablishmentCause reestablishmentCause
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
Threshold for event evaluation.
This class only serves to discriminate which message type has been received in uplink (ue to eNb) for...
Event A1: Serving becomes better than absolute threshold.
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.