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;
 
  266   optionalFieldsPhysicalConfigDedicated.set (9,0);  
 
  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);  
 
  347   bool isSrbToAddModListPresent = !radioResourceConfigDedicated.
srbToAddModList.empty ();
 
  348   bool isDrbToAddModListPresent = !radioResourceConfigDedicated.
drbToAddModList.empty ();
 
  349   bool isDrbToReleaseListPresent = !radioResourceConfigDedicated.
drbToReleaseList.empty ();
 
  352   std::bitset<6> optionalFieldsPresent = std::bitset<6> ();
 
  353   optionalFieldsPresent.set (5,isSrbToAddModListPresent);  
 
  354   optionalFieldsPresent.set (4,isDrbToAddModListPresent);  
 
  355   optionalFieldsPresent.set (3,isDrbToReleaseListPresent);  
 
  356   optionalFieldsPresent.set (2,0);  
 
  357   optionalFieldsPresent.set (1,0);  
 
  362   if (isSrbToAddModListPresent)
 
  368   if (isDrbToAddModListPresent)
 
  374   if (isDrbToReleaseListPresent)
 
  377       std::list<uint8_t>::iterator it = radioResourceConfigDedicated.
drbToReleaseList.begin ();
 
  395   std::bitset<3> sysInfoBlk1Opts;
 
  396   sysInfoBlk1Opts.set (2,0); 
 
  397   sysInfoBlk1Opts.set (1,0); 
 
  398   sysInfoBlk1Opts.set (0,0); 
 
  454   std::bitset<9> rrCfgCmmOpts;
 
  455   rrCfgCmmOpts.set (8,1); 
 
  456   rrCfgCmmOpts.set (7,0); 
 
  457   rrCfgCmmOpts.set (6,0); 
 
  458   rrCfgCmmOpts.set (5,0); 
 
  459   rrCfgCmmOpts.set (4,0); 
 
  460   rrCfgCmmOpts.set (3,0); 
 
  461   rrCfgCmmOpts.set (2,0); 
 
  462   rrCfgCmmOpts.set (1,0); 
 
  463   rrCfgCmmOpts.set (0,0); 
 
  642       std::list<LteRrcSap::MeasResultEutra>::iterator it;
 
  664               if (!it->cgiInfo.plmnIdentityList.empty ())
 
  667                   std::list<uint32_t>::iterator it2;
 
  668                   for (it2 = it->cgiInfo.plmnIdentityList.begin (); it2 != it->cgiInfo.plmnIdentityList.end (); it2++)
 
  676           std::bitset<2> measResultFieldsPresent;
 
  677           measResultFieldsPresent[1] = it->haveRsrpResult;
 
  678           measResultFieldsPresent[0] = it->haveRsrqResult;
 
  681           if (it->haveRsrpResult)
 
  686           if (it->haveRsrqResult)
 
  701   int nDig = (plmnId > 99) ? 3 : 2;
 
  704   for (
int i = nDig - 1; i >= 0; i--)
 
  706       int n = floor (plmnId / pow (10,i));
 
  708       plmnId -= n * pow (10,i);
 
  862   switch (qOffsetRange)
 
  965   switch (thresholdEutra.
choice)
 
  983   std::bitset<11> measConfigOptional;
 
  993   measConfigOptional.set (1, 
false ); 
 
 1016           std::bitset<5> measObjOpts;
 
 1017           measObjOpts.set (4,!it->measObjectEutra.cellsToRemoveList.empty () );
 
 1018           measObjOpts.set (3,!it->measObjectEutra.cellsToAddModList.empty () );
 
 1019           measObjOpts.set (2,!it->measObjectEutra.blackCellsToRemoveList.empty () );
 
 1020           measObjOpts.set (1,!it->measObjectEutra.blackCellsToAddModList.empty () );
 
 1021           measObjOpts.set (0,it->measObjectEutra.haveCellForWhichToReportCGI);
 
 1028           switch (it->measObjectEutra.allowedMeasBandwidth)
 
 1056           if (!it->measObjectEutra.cellsToRemoveList.empty ())
 
 1059               for (std::list<uint8_t>::iterator it2 = it->measObjectEutra.cellsToRemoveList.begin (); it2 != it->measObjectEutra.cellsToRemoveList.end (); it2++)
 
 1065           if (!it->measObjectEutra.cellsToAddModList.empty ())
 
 1068               for (std::list<LteRrcSap::CellsToAddMod>::iterator it2 = it->measObjectEutra.cellsToAddModList.begin (); it2 != it->measObjectEutra.cellsToAddModList.end (); it2++)
 
 1083           if (!it->measObjectEutra.blackCellsToRemoveList.empty () )
 
 1086               for (std::list<uint8_t>::iterator it2 = it->measObjectEutra.blackCellsToRemoveList.begin (); it2 != it->measObjectEutra.blackCellsToRemoveList.end (); it2++)
 
 1092           if (!it->measObjectEutra.blackCellsToAddModList.empty () )
 
 1095               for (std::list<LteRrcSap::BlackCellsToAddMod>::iterator it2 = it->measObjectEutra.blackCellsToAddModList.begin (); it2 != it->measObjectEutra.blackCellsToAddModList.end (); it2++)
 
 1102                   std::bitset<1> rangePresent = std::bitset<1> (it2->physCellIdRange.haveRange);
 
 1105                   if (it2->physCellIdRange.haveRange)
 
 1107                       switch (it2->physCellIdRange.range)
 
 1159           if (it->measObjectEutra.haveCellForWhichToReportCGI)
 
 1187           switch (it->reportConfigEutra.triggerType)
 
 1192               switch (it->reportConfigEutra.purpose)
 
 1206               switch (it->reportConfigEutra.eventId)
 
 1239               switch (it->reportConfigEutra.timeToTrigger)
 
 1316           switch (it->reportConfigEutra.reportInterval)
 
 1369           switch (it->reportConfigEutra.reportAmount)
 
 1422       std::bitset<4> quantityConfigOpts (0);
 
 1423       quantityConfigOpts.set (3,1);
 
 1661   int thresholdEutraChoice, range;
 
 1664   switch (thresholdEutraChoice)
 
 1669       thresholdEutra->
range = range;
 
 1675       thresholdEutra->
range = range;
 
 1689       *qOffsetRange = -24;
 
 1692       *qOffsetRange = -22;
 
 1695       *qOffsetRange = -20;
 
 1698       *qOffsetRange = -18;
 
 1701       *qOffsetRange = -16;
 
 1704       *qOffsetRange = -14;
 
 1707       *qOffsetRange = -12;
 
 1710       *qOffsetRange = -10;
 
 1789   std::bitset<6> optionalFieldsPresent = std::bitset<6> ();
 
 1792   if (optionalFieldsPresent[5])
 
 1798   if (optionalFieldsPresent[4])
 
 1804   if (optionalFieldsPresent[3])
 
 1810       for (
int i = 0; i < n; i++)
 
 1817   if (optionalFieldsPresent[2])
 
 1823   if (optionalFieldsPresent[1])
 
 1830   if (optionalFieldsPresent[0])
 
 1845   srbToAddModList->clear ();
 
 1848   for (
int i = 0; i < numElems; i++)
 
 1853       std::bitset<2> optionalFields;
 
 1861       if (optionalFields[1])
 
 1867       if (optionalFields[0])
 
 1885       srbToAddModList->insert (srbToAddModList->end (),srbToAddMod);
 
 1898   drbToAddModList->clear ();
 
 1900   for (
int i = 0; i < n; i++)
 
 1904       std::bitset<5> optionalFields;
 
 1907       if (optionalFields[4])
 
 1917       if (optionalFields[3])
 
 1923       if (optionalFields[2])
 
 1930           std::bitset<0> bitset0;
 
 1982       if (optionalFields[1])
 
 1988       if (optionalFields[0])
 
 1993       drbToAddModList->insert (drbToAddModList->end (),drbToAddMod);
 
 2005   std::bitset<1> bitset1;
 
 2015       logicalChannelConfig->
priority = n;
 
 2019       uint16_t prioritizedBitRateKbps;
 
 2024           prioritizedBitRateKbps = 0;
 
 2027           prioritizedBitRateKbps = 8;
 
 2030           prioritizedBitRateKbps = 16;
 
 2033           prioritizedBitRateKbps = 32;
 
 2036           prioritizedBitRateKbps = 64;
 
 2039           prioritizedBitRateKbps = 128;
 
 2042           prioritizedBitRateKbps = 256;
 
 2045           prioritizedBitRateKbps = 10000;
 
 2048           prioritizedBitRateKbps = 10000;
 
 2054       uint16_t bucketSizeDurationMs;
 
 2058           bucketSizeDurationMs = 50;
 
 2061           bucketSizeDurationMs = 100;
 
 2064           bucketSizeDurationMs = 150;
 
 2067           bucketSizeDurationMs = 300;
 
 2070           bucketSizeDurationMs = 500;
 
 2073           bucketSizeDurationMs = 1000;
 
 2076           bucketSizeDurationMs = 1000;
 
 2093   std::bitset<10> optionalFieldPresent;
 
 2096   if (optionalFieldPresent[9])
 
 2101   if (optionalFieldPresent[8])
 
 2106   if (optionalFieldPresent[7])
 
 2111   if (optionalFieldPresent[6])
 
 2116   if (optionalFieldPresent[5])
 
 2121   if (optionalFieldPresent[4])
 
 2126   if (optionalFieldPresent[3])
 
 2132   if (optionalFieldPresent[2])
 
 2149           std::bitset<0> bitset0;
 
 2180   if (optionalFieldPresent[1])
 
 2191           std::bitset<1> codebookSubsetRestrictionPresent;
 
 2198           if (codebookSubsetRestrictionPresent[0])
 
 2204           int txantennaselchosen;
 
 2206           if (txantennaselchosen == 0)
 
 2211           else if (txantennaselchosen == 1)
 
 2218   if (optionalFieldPresent[0])
 
 2230   NS_FATAL_ERROR (
"RrcAsn1Header Print() function must also specify LteRrcSap::RadioResourceConfigDedicated as a second argument");
 
 2236   os << 
"   srbToAddModList: " << std::endl;
 
 2237   std::list<LteRrcSap::SrbToAddMod>::iterator it = radioResourceConfigDedicated.
srbToAddModList.begin ();
 
 2238   for (; it != radioResourceConfigDedicated.
srbToAddModList.end (); it++)
 
 2240       os << 
"      srbIdentity: " << (int)it->srbIdentity << std::endl;
 
 2241       os << 
"      logicalChannelConfig: " << std::endl;
 
 2242       os << 
"         priority: " <<  (
int)it->logicalChannelConfig.priority << std::endl;
 
 2243       os << 
"         prioritizedBitRateKbps: " <<  (int)it->logicalChannelConfig.prioritizedBitRateKbps << std::endl;
 
 2244       os << 
"         bucketSizeDurationMs: " <<  (
int)it->logicalChannelConfig.bucketSizeDurationMs << std::endl;
 
 2245       os << 
"         logicalChannelGroup: " <<  (int)it->logicalChannelConfig.logicalChannelGroup << std::endl;
 
 2249   os << 
"   drbToAddModList: " << std::endl;
 
 2250   std::list<LteRrcSap::DrbToAddMod>::iterator it2 = radioResourceConfigDedicated.
drbToAddModList.begin ();
 
 2251   for (; it2 != radioResourceConfigDedicated.
drbToAddModList.end (); it2++)
 
 2253       os << 
"      epsBearerIdentity: " << (int)it2->epsBearerIdentity << std::endl;
 
 2254       os << 
"      drbIdentity: " << (
int)it2->drbIdentity << std::endl;
 
 2255       os << 
"      rlcConfig: " << it2->rlcConfig.choice << std::endl;
 
 2256       os << 
"      logicalChannelIdentity: " << (int)it2->logicalChannelIdentity << std::endl;
 
 2257       os << 
"      logicalChannelConfig: " << std::endl;
 
 2258       os << 
"         priority: " <<  (
int)it2->logicalChannelConfig.priority << std::endl;
 
 2259       os << 
"         prioritizedBitRateKbps: " <<  (int)it2->logicalChannelConfig.prioritizedBitRateKbps << std::endl;
 
 2260       os << 
"         bucketSizeDurationMs: " <<  (
int)it2->logicalChannelConfig.bucketSizeDurationMs << std::endl;
 
 2261       os << 
"         logicalChannelGroup: " <<  (int)it2->logicalChannelConfig.logicalChannelGroup << std::endl;
 
 2265   os << 
"   drbToReleaseList: ";
 
 2266   std::list<uint8_t>::iterator it3 = radioResourceConfigDedicated.
drbToReleaseList.begin ();
 
 2269       os << (int)*it3 << 
", ";
 
 2277       os << 
"   physicalConfigDedicated: " << std::endl;
 
 2282           os << 
"      soundingRsUlConfigDedicated: " << std::endl;
 
 2299   std::bitset<0> bitset0;
 
 2302   std::bitset<3> sysInfoBlkT1Opts;
 
 2306   std::bitset<1> cellAccessRelatedInfoOpts;
 
 2310   int numPlmnIdentityInfoElements;
 
 2312   for (
int i = 0; i < numPlmnIdentityInfoElements; i++)
 
 2321   std::bitset<16> trackingAreaCode;
 
 2325   std::bitset<28> cellIdentity;
 
 2338   if (cellAccessRelatedInfoOpts[0])
 
 2341       std::bitset<27> csgIdentity;
 
 2347   std::bitset<1> qRxLevMinOffsetPresent;
 
 2350   if (qRxLevMinOffsetPresent[0])
 
 2356   if (sysInfoBlkT1Opts[2])
 
 2366   int numSchedulingInfo;
 
 2368   for (
int i = 0; i < numSchedulingInfo; i++)
 
 2374       for (
int j = 0; j < numSibType; j++)
 
 2380   if (sysInfoBlkT1Opts[1])
 
 2392   if (sysInfoBlkT1Opts[0])
 
 2403   std::bitset<0> bitset0;
 
 2406   std::bitset<2> sysInfoBlkT2Opts;
 
 2408   if (sysInfoBlkT2Opts[1])
 
 2427   std::bitset<2> freqInfoOpts;
 
 2429   if (freqInfoOpts[1])
 
 2435   if (freqInfoOpts[0])
 
 2467   if (sysInfoBlkT2Opts[0])
 
 2483   std::bitset<0> bitset0;
 
 2486   std::bitset<9> rrCfgCommOptions;
 
 2490   if (rrCfgCommOptions[8])
 
 2496   std::bitset<1> prachConfigInfoPresent;
 
 2503   if (prachConfigInfoPresent[0])
 
 2509   if (rrCfgCommOptions[7])
 
 2550   if (rrCfgCommOptions[6])
 
 2556   if (rrCfgCommOptions[5])
 
 2562   if (rrCfgCommOptions[4])
 
 2568   if (rrCfgCommOptions[3])
 
 2574   if (rrCfgCommOptions[2])
 
 2580   if (rrCfgCommOptions[1])
 
 2586   if (rrCfgCommOptions[0])
 
 2600   std::bitset<0> bitset0;
 
 2606   std::bitset<1> preamblesGroupAConfigPresent;
 
 2667   if (preamblesGroupAConfigPresent[0])
 
 2760   std::bitset<0> bitset0;
 
 2778   std::bitset<1> prachConfigInfoPresent;
 
 2783   if (prachConfigInfoPresent[0])
 
 2871   std::bitset<1> measResultNeighCellsPresent;
 
 2892       int measResultNeighCellsChoice;
 
 2897       if (measResultNeighCellsChoice == 0)
 
 2903           for (
int i = 0; i < numElems; i++)
 
 2907               std::bitset<1> isCgiInfoPresent;
 
 2914               measResultEutra.
haveCgiInfo = isCgiInfoPresent[0];
 
 2915               if (isCgiInfoPresent[0])
 
 2917                   std::bitset<1> havePlmnIdentityList;
 
 2927                   std::bitset<28> cellId;
 
 2932                   std::bitset<16> trArCo;
 
 2937                   if (havePlmnIdentityList[0])
 
 2942                       for ( 
int j = 0; j < numPlmnElems; j++)
 
 2952               std::bitset<2> measResultOpts;
 
 2956               if (measResultOpts[1])
 
 2964               if (measResultOpts[0])
 
 2975       if (measResultNeighCellsChoice == 1)
 
 2981       if (measResultNeighCellsChoice == 2)
 
 2986       if (measResultNeighCellsChoice == 3)
 
 3000   std::bitset<1> isMccPresent;
 
 3003   if (isMccPresent[0])
 
 3014   for (
int j = mncDigits - 1; j >= 0; j--)
 
 3017       mnc += n * pow (10,j);
 
 3030   std::bitset<0> bitset0;
 
 3031   std::bitset<2> bitset2;
 
 3032   std::bitset<11> bitset11;
 
 3041       int measObjectToRemoveListElems;
 
 3044       for (
int i = 0; i < measObjectToRemoveListElems; i++)
 
 3054       int measObjectToAddModListElems;
 
 3057       for (
int i = 0; i < measObjectToAddModListElems; i++)
 
 3066           int measObjectChoice;
 
 3069           switch (measObjectChoice)
 
 3089               std::bitset<5> measObjectEutraOpts;
 
 3131               if (measObjectEutraOpts[4])
 
 3137                   for (
int i = 0; i < numElems; i++)
 
 3144               if (measObjectEutraOpts[3])
 
 3150                   for (
int i = 0; i < numElems; i++)
 
 3171               if (measObjectEutraOpts[2])
 
 3177                   for (
int i = 0; i < numElems; i++)
 
 3185               if (measObjectEutraOpts[1])
 
 3191                   for (
int i = 0; i < numElems; i++)
 
 3200                       std::bitset<1> isRangePresent;
 
 3268               if (measObjectEutraOpts[0])
 
 3282       int reportConfigToRemoveListElems;
 
 3285       for (
int i = 0; i < reportConfigToRemoveListElems; i++)
 
 3295       int reportConfigToAddModListElems;
 
 3298       for (
int i = 0; i < reportConfigToAddModListElems; i++)
 
 3307           int reportConfigChoice;
 
 3310           if (reportConfigChoice == 0)
 
 3316               int triggerTypeChoice;
 
 3319               if (triggerTypeChoice == 0)
 
 3329                   switch (eventIdChoice)
 
 3423               if (triggerTypeChoice == 1)
 
 3550           if (reportConfigChoice == 1)
 
 3563       int measIdToRemoveListElems;
 
 3566       for (
int i = 0; i < measIdToRemoveListElems; i++)
 
 3576       int measIdToAddModListElems;
 
 3579       for (
int i = 0; i < measIdToAddModListElems; i++)
 
 3602       std::bitset<4> quantityConfigOpts;
 
 3605       if (quantityConfigOpts[3])
 
 3718       if (quantityConfigOpts[2])
 
 3723       if (quantityConfigOpts[1])
 
 3728       if (quantityConfigOpts[0])
 
 3739       int measGapConfigChoice;
 
 3741       switch (measGapConfigChoice)
 
 3752           int gapOffsetChoice;
 
 3754           switch (gapOffsetChoice)
 
 3788       int speedStateParsChoice;
 
 3790       switch (speedStateParsChoice)
 
 3867   m_mmec = std::bitset<8> (0ul);
 
 3868   m_mTmsi = std::bitset<32> (0ul);
 
 3870   m_spare = std::bitset<1> (0ul);
 
 3881   static TypeId tid = 
TypeId (
"ns3::RrcConnectionRequestHeader")
 
 3890   os << 
"MMEC:" << 
m_mmec << std::endl;
 
 3891   os << 
"MTMSI:" << 
m_mTmsi << std::endl;
 
 3893   os << 
"Spare: " << 
m_spare << std::endl;
 
 3942   std::bitset<1> dummy;
 
 3943   std::bitset<0> optionalOrDefaultMask;
 
 4021   os << 
"radioResourceConfigDedicated:" << std::endl;
 
 4070   std::bitset<0> bitset0;
 
 4071   std::bitset<1> bitset1;
 
 4072   std::bitset<2> bitset2;
 
 4086   int criticalExtensionChoice;
 
 4088   if (criticalExtensionChoice == 1)
 
 4093   else if (criticalExtensionChoice == 0)
 
 4156 std::list<LteRrcSap::SrbToAddMod>
 
 4162 std::list<LteRrcSap::DrbToAddMod>
 
 4228   std::bitset<0> bitset0;
 
 4331   std::bitset<0> bitset0;
 
 4417   std::bitset<6> options;
 
 4436       std::bitset<4> mobCtrlIntoOptional;
 
 4439       mobCtrlIntoOptional.set (1,0); 
 
 4538   std::bitset<0> bitset0;
 
 4567       else if (c1Chosen == 0)
 
 4570           std::bitset<6> rrcConnRecOpts;
 
 4583               std::bitset<4> mobCtrlOpts;
 
 4594                   std::bitset<1> ulCarrierFreqPresent;
 
 4600                   if (ulCarrierFreqPresent[0])
 
 4611                   std::bitset<1> ulBandwidthPresent;
 
 4640                   if (ulBandwidthPresent[0])
 
 4680               std::bitset<16> cRnti;
 
 4699           if (rrcConnRecOpts[3])
 
 4712           if (rrcConnRecOpts[1])
 
 4718           if (rrcConnRecOpts[0])
 
 4737           os << 
"  measObjectToRemoveList: ";
 
 4739           std::list<uint8_t>::iterator it = auxList.begin ();
 
 4740           for (; it != auxList.end (); it++)
 
 4742               os << (int) *it << 
", ";
 
 4748           os << 
"  reportConfigToRemoveList: ";
 
 4750           std::list<uint8_t>::iterator it = auxList.begin ();
 
 4751           for (; it != auxList.end (); it++)
 
 4753               os << (int) *it << 
", ";
 
 4759           os << 
"  measIdToRemoveList: ";
 
 4761           std::list<uint8_t>::iterator it = auxList.begin ();
 
 4762           for (; it != auxList.end (); it++)
 
 4764               os << (int) *it << 
", ";
 
 4771           os << 
"  measObjectToAddMod: " << std::endl;
 
 4773           std::list<LteRrcSap::MeasObjectToAddMod>::iterator it = auxList.begin ();
 
 4774           for (; it != auxList.end (); it++)
 
 4776               os << 
"    measObjectId: " << (int)it->measObjectId << std::endl;
 
 4777               os << 
"    carrierFreq: " << (
int)it->measObjectEutra.carrierFreq << std::endl;
 
 4778               os << 
"    allowedMeasBandwidth: " <<  (int)it->measObjectEutra.allowedMeasBandwidth << std::endl;
 
 4779               os << 
"    presenceAntennaPort1: " <<  it->measObjectEutra.presenceAntennaPort1  << std::endl;
 
 4780               os << 
"    neighCellConfig: " << (
int) it->measObjectEutra.neighCellConfig  << std::endl;
 
 4781               os << 
"    offsetFreq: " <<  (int)it->measObjectEutra.offsetFreq  << std::endl;
 
 4784               if (!it->measObjectEutra.cellsToRemoveList.empty ())
 
 4786                   os << 
"    cellsToRemoveList: ";
 
 4787                   std::list<uint8_t> auxList = it->measObjectEutra.cellsToRemoveList;
 
 4788                   std::list<uint8_t>::iterator it = auxList.begin ();
 
 4789                   for (; it != auxList.end (); it++)
 
 4791                       os << (int) *it << 
", ";
 
 4796               if (!it->measObjectEutra.blackCellsToRemoveList.empty ())
 
 4798                   os << 
"    blackCellsToRemoveList: ";
 
 4799                   std::list<uint8_t> auxList = it->measObjectEutra.blackCellsToRemoveList;
 
 4800                   std::list<uint8_t>::iterator it = auxList.begin ();
 
 4801                   for (; it != auxList.end (); it++)
 
 4803                       os << (int) *it << 
", ";
 
 4808               if (!it->measObjectEutra.cellsToAddModList.empty ())
 
 4810                   os << 
"    cellsToAddModList: " << std::endl;
 
 4811                   std::list<LteRrcSap::CellsToAddMod> auxList = it->measObjectEutra.cellsToAddModList;
 
 4812                   std::list<LteRrcSap::CellsToAddMod>::iterator it = auxList.begin ();
 
 4813                   for (; it != auxList.end (); it++)
 
 4815                       os << 
"      cellIndex: " <<  (int)it->cellIndex << std::endl;
 
 4816                       os << 
"      physCellId: " <<  (
int)it->physCellId  << std::endl;
 
 4817                       os << 
"      cellIndividualOffset: " <<  (int)it->cellIndividualOffset << std::endl;
 
 4818                       os << 
"      ------ " << std::endl;
 
 4822               if (!it->measObjectEutra.blackCellsToAddModList.empty ())
 
 4824                   os << 
"    blackCellsToAddModList: " << std::endl;
 
 4825                   std::list<LteRrcSap::BlackCellsToAddMod> auxList = it->measObjectEutra.blackCellsToAddModList;
 
 4826                   std::list<LteRrcSap::BlackCellsToAddMod>::iterator it = auxList.begin ();
 
 4827                   for (; it != auxList.end (); it++)
 
 4829                       os << 
"      cellIndex: " <<  (int)it->cellIndex << std::endl;
 
 4830                       os << 
"      physCellIdRange.start: " <<  (
int)it->physCellIdRange.start  << std::endl;
 
 4831                       os << 
"      physCellIdRange.haveRange: " <<  it->physCellIdRange.haveRange << std::endl;
 
 4832                       os << 
"      physCellIdRange.range: " <<  (int)it->physCellIdRange.range << std::endl;
 
 4833                       os << 
"      ------ " << std::endl;
 
 4837               os << 
"    haveCellForWhichToReportCGI: " <<  it->measObjectEutra.haveCellForWhichToReportCGI  << std::endl;
 
 4838               os << 
"    cellForWhichToReportCGI: " <<  (int)it->measObjectEutra.cellForWhichToReportCGI  << std::endl;
 
 4839               os << 
"    ------------- " << std::endl;
 
 4846           os << 
"  reportConfigToAddModList: " << std::endl;
 
 4848           std::list<LteRrcSap::ReportConfigToAddMod>::iterator it = auxList.begin ();
 
 4849           for (; it != auxList.end (); it++)
 
 4851               os << 
"    reportConfigId: " << (int)it->reportConfigId << std::endl;
 
 4852               os << 
"    reportConfigEutra.triggerType  " <<  (
int)it->reportConfigEutra.triggerType << std::endl;
 
 4855                   os << 
"    reportConfigEutra.eventId  " <<  (int)it->reportConfigEutra.eventId << std::endl;
 
 4858                       os << 
"    reportConfigEutra.reportOnLeave  " <<  (int)it->reportConfigEutra.reportOnLeave << std::endl;
 
 4859                       os << 
"    reportConfigEutra.a3Offset  " <<  (
int)it->reportConfigEutra.a3Offset << std::endl;
 
 4863                       os << 
"    reportConfigEutra.threshold1.choice  " <<  (int)it->reportConfigEutra.threshold1.choice << std::endl;
 
 4864                       os << 
"    reportConfigEutra.threshold1.range  " <<  (
int)it->reportConfigEutra.threshold1.range << std::endl;
 
 4867                           os << 
"    reportConfigEutra.threshold2.choice  " <<  (int)it->reportConfigEutra.threshold2.choice << std::endl;
 
 4868                           os << 
"    reportConfigEutra.threshold2.range  " <<  (
int)it->reportConfigEutra.threshold2.range << std::endl;
 
 4871                   os << 
"    reportConfigEutra.hysteresis  " <<  (int)it->reportConfigEutra.hysteresis << std::endl;
 
 4872                   os << 
"    reportConfigEutra.timeToTrigger  " <<  (
int)it->reportConfigEutra.timeToTrigger << std::endl;
 
 4876                   os << 
"    reportConfigEutra.purpose  " <<  (int)it->reportConfigEutra.purpose << std::endl;
 
 4878               os << 
"    reportConfigEutra.triggerQuantity  " <<  (int)it->reportConfigEutra.triggerQuantity << std::endl;
 
 4879               os << 
"    reportConfigEutra.reportQuantity  " <<  (
int)it->reportConfigEutra.reportQuantity << std::endl;
 
 4880               os << 
"    reportConfigEutra.maxReportCells  " <<  (int)it->reportConfigEutra.maxReportCells << std::endl;
 
 4881               os << 
"    reportConfigEutra.reportInterval  " <<  (
int)it->reportConfigEutra.reportInterval << std::endl;
 
 4882               os << 
"    reportConfigEutra.reportAmount  " <<  (int)it->reportConfigEutra.reportAmount << std::endl;
 
 4888           os << 
"  measIdToAddModList: " << std::endl;
 
 4890           std::list<LteRrcSap::MeasIdToAddMod>::iterator it = auxList.begin ();
 
 4891           for (; it != auxList.end (); it++)
 
 4893               os << 
"    measId: " << (int)it->measId << std::endl;
 
 4894               os << 
"    measObjectId: " << (
int)it->measObjectId << std::endl;
 
 4895               os << 
"    reportConfigId: " << (int)it->reportConfigId << std::endl;
 
 4896               os << 
"    ------ " << std::endl;
 
 5043 std::list<LteRrcSap::SrbToAddMod> 
 
 5049 std::list<LteRrcSap::DrbToAddMod> 
 
 5093   std::bitset<4> handoverPrepInfoOpts;
 
 5094   handoverPrepInfoOpts.set (3,1); 
 
 5095   handoverPrepInfoOpts.set (2,0); 
 
 5096   handoverPrepInfoOpts.set (1,0); 
 
 5097   handoverPrepInfoOpts.set (0,0); 
 
 5151   std::bitset<0> bitset0;
 
 5159   int criticalExtensionsChosen;
 
 5162   if (criticalExtensionsChosen == 1)
 
 5167   else if (criticalExtensionsChosen == 0)
 
 5176       else if (c1Chosen == 0)
 
 5179           std::bitset<4> handoverPrepInfoOpts;
 
 5184           for (
int i = 0; i < n; i++)
 
 5190           if (handoverPrepInfoOpts[3])
 
 5207               std::bitset<16> cRnti;
 
 5222               std::bitset<8> systemFrameNumber;
 
 5226               std::bitset<10> spare;
 
 5243           if (handoverPrepInfoOpts[2])
 
 5248           if (handoverPrepInfoOpts[1])
 
 5253           if (handoverPrepInfoOpts[0])
 
 5364   std::bitset<0> bitset0;
 
 5389       std::bitset<16> cRnti;
 
 5399       std::bitset<16> shortMacI;
 
 5421       std::bitset<2> spare;
 
 5513   std::bitset<0> bitset0;
 
 5527   int criticalExtensionsChoice;
 
 5529   if (criticalExtensionsChoice == 1)
 
 5534   else if (criticalExtensionsChoice == 0)
 
 5547           std::bitset<1> nonCriticalExtensionPresent;
 
 5565   os << 
"RadioResourceConfigDedicated: " << std::endl;
 
 5633   std::bitset<0> bitset0;
 
 5647   int criticalExtensionsChoice;
 
 5649   if (criticalExtensionsChoice == 1)
 
 5654   else if (criticalExtensionsChoice == 0)
 
 5657       std::bitset<1> opts;
 
 5732   std::bitset<0> bitset0;
 
 5741   int criticalExtensionsChoice;
 
 5743   if (criticalExtensionsChoice == 1)
 
 5748   else if (criticalExtensionsChoice == 0)
 
 5751       std::bitset<1> opts;
 
 5826   std::bitset<0> bitset0;
 
 5840   int criticalExtensionsChoice;
 
 5842   if (criticalExtensionsChoice == 1)
 
 5847   else if (criticalExtensionsChoice == 0)
 
 5856           std::bitset<3> opts;
 
 5948   std::bitset<0> bitset0;
 
 5958   int criticalExtensionsChoice;
 
 5960   if (criticalExtensionsChoice == 1)
 
 5965   else if (criticalExtensionsChoice == 0)
 
 5975       else if (c1Choice == 0)
 
 5978           std::bitset<1> opts;
 
 6058   std::bitset<0> bitset0;
 
 6064   int criticalExtensionsChoice;
 
 6067   if (criticalExtensionsChoice == 1)
 
 6072   else if (criticalExtensionsChoice == 0)
 
 6085           std::bitset<1> isNonCriticalExtensionPresent;
 
 6091           if (isNonCriticalExtensionPresent[0])
 
 6114       std::list<LteRrcSap::MeasResultEutra>::iterator it = measResultListEutra.begin ();
 
 6115       for (; it != measResultListEutra.end (); it++)
 
 6117           os << 
"   physCellId =" << (int) it->physCellId << std::endl;
 
 6118           os << 
"   haveCgiInfo =" << it->haveCgiInfo << std::endl;
 
 6119           if (it->haveCgiInfo)
 
 6121               os << 
"      plmnIdentity = " << (int) it->cgiInfo.plmnIdentity << std::endl;
 
 6122               os << 
"      cellIdentity = " << (
int) it->cgiInfo.cellIdentity << std::endl;
 
 6123               os << 
"      trackingAreaCode = " << (int) it->cgiInfo.trackingAreaCode << std::endl;
 
 6124               os << 
"      havePlmnIdentityList = " << !it->cgiInfo.plmnIdentityList.empty () << std::endl;
 
 6125               if (!it->cgiInfo.plmnIdentityList.empty ())
 
 6127                   for (std::list<uint32_t>::iterator it2 = it->cgiInfo.plmnIdentityList.begin (); it2 != it->cgiInfo.plmnIdentityList.begin (); it2++)
 
 6129                       os << 
"         plmnId : " << *it2 << std::endl;
 
 6134           os << 
"   haveRsrpResult =" << it->haveRsrpResult << std::endl;
 
 6135           if (it->haveRsrpResult)
 
 6137               os << 
"   rsrpResult =" << (int) it->rsrpResult << std::endl;
 
 6140           os << 
"   haveRsrqResult =" << it->haveRsrqResult << std::endl;
 
 6141           if (it->haveRsrqResult)
 
 6143               os << 
"   rsrqResult =" << (int) it->rsrqResult << std::endl;
 
 6184   std::cout << 
"UL DCCH MSG TYPE: " << 
m_messageType << std::endl;
 
 6196   std::bitset<0> bitset0;
 
 6245   std::cout << 
"DL DCCH MSG TYPE: " << 
m_messageType << std::endl;
 
 6257   std::bitset<0> bitset0;
 
 6306   std::cout << 
"UL CCCH MSG TYPE: " << 
m_messageType << std::endl;
 
 6318   std::bitset<0> bitset0;
 
 6367   std::cout << 
"DL CCCH MSG TYPE: " << 
m_messageType << std::endl;
 
 6379   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)
 
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
 
void SerializeDlCcchMessage(int msgType) const 
 
std::list< uint8_t > measObjectToRemoveList
 
MeasObjectEutra measObjectEutra
 
uint16_t sourceUeIdentity
 
RachConfigDedicated rachConfigDedicated
 
uint8_t rrcTransactionIdentifier
 
#define NS_FATAL_ERROR(msg)
fatal error handling 
 
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
 
enum ns3::LteRrcSap::RlcConfig::@65 choice
 
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
 
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
 
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
 
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
 
enum ns3::LteRrcSap::SoundingRsUlConfigDedicated::@67 type
 
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)
 
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.