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;
enum ns3::LteRrcSap::ReportConfigEutra::@73 reportQuantity
The quantities to be included in the measurement report, always assumed to be BOTH.
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
RSRP is used for the threshold.
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
enum ns3::LteRrcSap::ReportConfigEutra::@70 eventId
Choice of E-UTRA event triggered reporting criteria.
std::list< uint8_t > reportConfigToRemoveList
std::list< MeasResultEutra > measResultListEutra
HandoverPreparationInfoHeader()
enum ns3::LteRrcSap::ReportConfigEutra::@69 triggerType
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)
Report a fatal error with a message and terminate.
RachConfigDedicated rachConfigDedicated
uint8_t rrcTransactionIdentifier
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
enum ns3::LteRrcSap::ReportConfigEutra::@71 purpose
uint8_t epsBearerIdentity
LogicalChannelConfig logicalChannelConfig
RachConfigCommon rachConfigCommon
enum ns3::LteRrcSap::MeasGapConfig::@75 type
ReportConfigEutra reportConfigEutra
uint8_t logicalChannelGroup
std::list< uint32_t > plmnIdentityList
uint8_t rrcTransactionIdentifier
void SerializeUlDcchMessage(int msgType) const
enum ns3::LteRrcSap::SpeedStatePars::@77 type
Both the RSRP and RSRQ quantities are to be included in the measurement report.
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 A2: Serving becomes worse than absolute threshold.
RadioResourceConfigDedicated sourceRadioResourceConfig
bool reportOnLeave
Indicates whether or not the UE shall initiate the measurement reporting procedure when the leaving c...
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
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
Reference Signal Received Quality.
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
Event A5: PCell becomes worse than absolute threshold1 AND Neighbour becomes better than another abso...
enum ns3::LteRrcSap::ReportConfigEutra::@72 triggerQuantity
The quantities used to evaluate the triggering condition for the event, see 3GPP TS 36...
LteRrcSap::AsConfig GetAsConfig() const
Getter for m_asConfig.
CarrierBandwidthEutra carrierBandwidth
enum ns3::LteRrcSap::SoundingRsUlConfigDedicated::@66 type
int8_t a3Offset
Offset value for Event A3. An integer between -30 and 30. The actual value is (value * 0...
LogicalChannelConfig logicalChannelConfig
RachConfigCommon rachConfigCommon
SpeedStatePars speedStatePars
uint8_t raResponseWindowSize
bool haveCarrierBandwidth
bool haveAntennaInfoDedicated
Event A3: Neighbour becomes amount of offset better than PCell.
uint32_t Deserialize(Buffer::Iterator bIterator)
std::list< uint8_t > blackCellsToRemoveList
void Print(std::ostream &os) const
enum ns3::LteRrcSap::ThresholdEutra::@68 choice
enum ns3::LteRrcSap::RlcConfig::@64 choice
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
enum ns3::LteRrcSap::ReportConfigEutra::@74 reportInterval
Indicates the interval between periodical reports.
Event A4: Neighbour becomes better than absolute threshold.
MobilityControlInfo mobilityControlInfo
enum ns3::LteRrcSap::MeasGapConfig::@76 gapOffsetChoice
Reference Signal Received Power.
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...
std::list< uint8_t > measIdToRemoveList
a unique identifier for an interface.
std::list< ReportConfigToAddMod > reportConfigToAddModList
ReestabUeIdentity ueIdentity
TypeId SetParent(TypeId tid)
Set the parent TypeId.
std::list< uint8_t > drbToReleaseList
Buffer::Iterator DeserializeUlDcchMessage(Buffer::Iterator bIterator)
SpeedStateScaleFactors timeToTriggerSf
RaSupervisionInfo raSupervisionInfo
uint8_t nCellChangeMedium
MasterInformationBlock sourceMasterInformationBlock
RSRQ is used for the threshold.
Event A1: Serving becomes better than absolute threshold.
bool haveCellForWhichToReportCGI
ThresholdEutra threshold2
Threshold for event A5.