10#include "nr-rrc-header.h"
18#define MAX_EARFCN 262143
19#define MAX_RAT_CAPABILITIES 8
20#define MAX_SI_MESSAGE 32
23#define MAX_REPORT_CONFIG_ID 32
24#define MAX_OBJECT_ID 32
26#define MAX_CELL_MEAS 32
27#define MAX_CELL_REPORT 8
29#define MAX_SCELL_REPORT 5
30#define MAX_SCELL_CONF 5
35NS_LOG_COMPONENT_DEFINE(
"NrRrcHeader");
38NrRrcAsn1Header::NrRrcAsn1Header()
45 static TypeId tid = TypeId(
"ns3::NrRrcAsn1Header").SetParent<Header>().SetGroupName(
"Nr");
50NrRrcAsn1Header::GetInstanceTypeId()
const
86 NS_FATAL_ERROR(
"Wrong bandwidth: " << bandwidth);
116 NS_FATAL_ERROR(
"Wrong enum value for bandwidth: " << n);
128 auto it = drbToAddModList.begin();
129 for (; it != drbToAddModList.end(); it++)
133 std::bitset<5> drbToAddModListOptionalFieldsPresent = std::bitset<5>();
134 drbToAddModListOptionalFieldsPresent.set(4,
true);
135 drbToAddModListOptionalFieldsPresent.set(3,
false);
136 drbToAddModListOptionalFieldsPresent.set(2,
true);
137 drbToAddModListOptionalFieldsPresent.set(1,
true);
138 drbToAddModListOptionalFieldsPresent.set(0,
true);
147 switch (it->rlcConfig.choice)
149 case NrRrcSap::RlcConfig::UM_BI_DIRECTIONAL:
163 case NrRrcSap::RlcConfig::UM_UNI_DIRECTIONAL_UL:
172 case NrRrcSap::RlcConfig::UM_UNI_DIRECTIONAL_DL:
182 case NrRrcSap::RlcConfig::AM:
216 auto it = srbToAddModList.begin();
217 for (; it != srbToAddModList.end(); it++)
221 std::bitset<2> srbToAddModListOptionalFieldsPresent = std::bitset<2>();
222 srbToAddModListOptionalFieldsPresent.set(1,
false);
223 srbToAddModListOptionalFieldsPresent.set(0,
true);
254 int prioritizedBitRate;
258 prioritizedBitRate = 0;
261 prioritizedBitRate = 1;
264 prioritizedBitRate = 2;
267 prioritizedBitRate = 3;
270 prioritizedBitRate = 4;
273 prioritizedBitRate = 5;
276 prioritizedBitRate = 6;
279 prioritizedBitRate = 7;
284 int bucketSizeDuration;
288 bucketSizeDuration = 0;
291 bucketSizeDuration = 1;
294 bucketSizeDuration = 2;
297 bucketSizeDuration = 3;
300 bucketSizeDuration = 4;
303 bucketSizeDuration = 5;
306 bucketSizeDuration = 5;
319 std::bitset<10> optionalFieldsPhysicalConfigDedicated;
320 optionalFieldsPhysicalConfigDedicated.set(
323 optionalFieldsPhysicalConfigDedicated.set(8,
false);
324 optionalFieldsPhysicalConfigDedicated.set(7,
false);
325 optionalFieldsPhysicalConfigDedicated.set(6,
false);
326 optionalFieldsPhysicalConfigDedicated.set(5,
false);
327 optionalFieldsPhysicalConfigDedicated.set(4,
false);
328 optionalFieldsPhysicalConfigDedicated.set(3,
false);
329 optionalFieldsPhysicalConfigDedicated.set(
332 optionalFieldsPhysicalConfigDedicated.set(
335 optionalFieldsPhysicalConfigDedicated.set(0,
false);
357 case NrRrcSap::SoundingRsUlConfigDedicated::RESET:
362 case NrRrcSap::SoundingRsUlConfigDedicated::SETUP:
424 bool isSrbToAddModListPresent = !radioResourceConfigDedicated.
srbToAddModList.empty();
425 bool isDrbToAddModListPresent = !radioResourceConfigDedicated.
drbToAddModList.empty();
426 bool isDrbToReleaseListPresent = !radioResourceConfigDedicated.
drbToReleaseList.empty();
429 std::bitset<6> optionalFieldsPresent = std::bitset<6>();
430 optionalFieldsPresent.set(5, isSrbToAddModListPresent);
431 optionalFieldsPresent.set(4, isDrbToAddModListPresent);
432 optionalFieldsPresent.set(3, isDrbToReleaseListPresent);
433 optionalFieldsPresent.set(2,
false);
434 optionalFieldsPresent.set(1,
false);
439 if (isSrbToAddModListPresent)
445 if (isDrbToAddModListPresent)
451 if (isDrbToReleaseListPresent)
473 std::bitset<3> sysInfoBlk1Opts;
474 sysInfoBlk1Opts.set(2,
false);
475 sysInfoBlk1Opts.set(1,
false);
476 sysInfoBlk1Opts.set(0,
false);
536 std::bitset<9> rrCfgCmmOpts;
537 rrCfgCmmOpts.set(8,
true);
538 rrCfgCmmOpts.set(7,
false);
539 rrCfgCmmOpts.set(6,
false);
540 rrCfgCmmOpts.set(5,
false);
541 rrCfgCmmOpts.set(4,
false);
542 rrCfgCmmOpts.set(3,
false);
543 rrCfgCmmOpts.set(2,
false);
544 rrCfgCmmOpts.set(1,
false);
545 rrCfgCmmOpts.set(0,
false);
680 std::bitset<4> measResultOptional;
682 measResultOptional.set(2,
false);
683 measResultOptional.set(1,
false);
731 if (!it->cgiInfo.plmnIdentityList.empty())
734 for (
auto it2 = it->cgiInfo.plmnIdentityList.begin();
735 it2 != it->cgiInfo.plmnIdentityList.end();
744 std::bitset<2> measResultFieldsPresent;
745 measResultFieldsPresent[1] = it->haveRsrpResult;
746 measResultFieldsPresent[0] = it->haveRsrqResult;
749 if (it->haveRsrpResult)
754 if (it->haveRsrqResult)
770 std::bitset<2> measResultServFreqPresent;
771 measResultServFreqPresent[0] = it.haveMeasResultSCell;
772 measResultServFreqPresent[1] = it.haveMeasResultBestNeighCell;
778 if (it.haveMeasResultSCell)
787 if (it.haveMeasResultBestNeighCell)
799 NS_ASSERT(!it.haveMeasResultBestNeighCell);
811 int nDig = (plmnId > 99) ? 3 : 2;
814 for (
int i = nDig - 1; i >= 0; i--)
816 int n = floor(plmnId / pow(10, i));
818 plmnId -= n * pow(10, i);
886 NS_FATAL_ERROR(
"Wrong numberOfRA-Preambles value");
991 switch (qOffsetRange)
1094 switch (thresholdEutra.
choice)
1112 std::bitset<11> measConfigOptional;
1122 measConfigOptional.set(1,
false);
1149 std::bitset<5> measObjOpts;
1150 measObjOpts.set(4, !it->measObjectEutra.cellsToRemoveList.empty());
1151 measObjOpts.set(3, !it->measObjectEutra.cellsToAddModList.empty());
1152 measObjOpts.set(2, !it->measObjectEutra.blackCellsToRemoveList.empty());
1153 measObjOpts.set(1, !it->measObjectEutra.blackCellsToAddModList.empty());
1154 measObjOpts.set(0, it->measObjectEutra.haveCellForWhichToReportCGI);
1167 if (!it->measObjectEutra.cellsToRemoveList.empty())
1170 for (
auto it2 = it->measObjectEutra.cellsToRemoveList.begin();
1171 it2 != it->measObjectEutra.cellsToRemoveList.end();
1178 if (!it->measObjectEutra.cellsToAddModList.empty())
1181 for (
auto it2 = it->measObjectEutra.cellsToAddModList.begin();
1182 it2 != it->measObjectEutra.cellsToAddModList.end();
1198 if (!it->measObjectEutra.blackCellsToRemoveList.empty())
1203 for (
auto it2 = it->measObjectEutra.blackCellsToRemoveList.begin();
1204 it2 != it->measObjectEutra.blackCellsToRemoveList.end();
1211 if (!it->measObjectEutra.blackCellsToAddModList.empty())
1216 for (
auto it2 = it->measObjectEutra.blackCellsToAddModList.begin();
1217 it2 != it->measObjectEutra.blackCellsToAddModList.end();
1225 std::bitset<1> rangePresent(it2->physCellIdRange.haveRange);
1228 if (it2->physCellIdRange.haveRange)
1230 switch (it2->physCellIdRange.range)
1281 if (it->measObjectEutra.haveCellForWhichToReportCGI)
1312 switch (it->reportConfigEutra.triggerType)
1317 switch (it->reportConfigEutra.purpose)
1319 case NrRrcSap::ReportConfigEutra::REPORT_CGI:
1322 case NrRrcSap::ReportConfigEutra::REPORT_STRONGEST_CELLS:
1331 switch (it->reportConfigEutra.eventId)
1364 switch (it->reportConfigEutra.timeToTrigger)
1428 if (it->reportConfigEutra.reportQuantity ==
1429 NrRrcSap::ReportConfigEutra::SAME_AS_TRIGGER_QUANTITY)
1439 SerializeInteger(it->reportConfigEutra.maxReportCells, 1, MAX_CELL_REPORT);
1442 switch (it->reportConfigEutra.reportInterval)
1444 case NrRrcSap::ReportConfigEutra::MS120:
1447 case NrRrcSap::ReportConfigEutra::MS240:
1450 case NrRrcSap::ReportConfigEutra::MS480:
1453 case NrRrcSap::ReportConfigEutra::MS640:
1456 case NrRrcSap::ReportConfigEutra::MS1024:
1459 case NrRrcSap::ReportConfigEutra::MS2048:
1462 case NrRrcSap::ReportConfigEutra::MS5120:
1465 case NrRrcSap::ReportConfigEutra::MS10240:
1468 case NrRrcSap::ReportConfigEutra::MIN1:
1471 case NrRrcSap::ReportConfigEutra::MIN6:
1474 case NrRrcSap::ReportConfigEutra::MIN12:
1477 case NrRrcSap::ReportConfigEutra::MIN30:
1480 case NrRrcSap::ReportConfigEutra::MIN60:
1483 case NrRrcSap::ReportConfigEutra::SPARE3:
1486 case NrRrcSap::ReportConfigEutra::SPARE2:
1489 case NrRrcSap::ReportConfigEutra::SPARE1:
1495 switch (it->reportConfigEutra.reportAmount)
1552 std::bitset<4> quantityConfigOpts(0);
1553 quantityConfigOpts.set(3,
true);
1664 case NrRrcSap::MeasGapConfig::RESET:
1668 case NrRrcSap::MeasGapConfig::SETUP:
1674 case NrRrcSap::MeasGapConfig::GP0:
1678 case NrRrcSap::MeasGapConfig::GP1:
1697 case NrRrcSap::SpeedStatePars::RESET:
1701 case NrRrcSap::SpeedStatePars::SETUP:
1797 std::bitset<3> noncriticalExtension_v1020;
1798 noncriticalExtension_v1020.set(
1801 noncriticalExtension_v1020.set(
1804 noncriticalExtension_v1020.set(
1823 std::bitset<4> sCellToAddMod_r10;
1824 sCellToAddMod_r10.set(3,
true);
1825 sCellToAddMod_r10.set(2,
true);
1826 sCellToAddMod_r10.set(1,
true);
1827 sCellToAddMod_r10.set(
1829 it.haveRadioResourceConfigDedicatedSCell);
1834 std::bitset<2> cellIdentification_r10;
1835 cellIdentification_r10.set(1,
true);
1836 cellIdentification_r10.set(0,
true);
1845 if (it.haveRadioResourceConfigDedicatedSCell)
1859 std::bitset<2> radioResourceConfigCommonSCell_r10;
1867 std::bitset<5> nonUlConfiguration_r10;
1868 nonUlConfiguration_r10.set(4,
true);
1869 nonUlConfiguration_r10.set(3,
true);
1870 nonUlConfiguration_r10.set(2,
false);
1871 nonUlConfiguration_r10.set(1,
true);
1872 nonUlConfiguration_r10.set(0,
false);
1877 std::bitset<1> antennaInfoCommon_r10;
1878 antennaInfoCommon_r10.set(0,
true);
1882 std::bitset<2> pdschConfigCommon_r10;
1883 pdschConfigCommon_r10.set(1,
true);
1884 pdschConfigCommon_r10.set(0,
true);
1894 std::bitset<7> UlConfiguration_r10;
1895 UlConfiguration_r10.set(6,
true);
1896 UlConfiguration_r10.set(5,
false);
1897 UlConfiguration_r10.set(4,
true);
1898 UlConfiguration_r10.set(3,
false);
1899 UlConfiguration_r10.set(2,
false);
1900 UlConfiguration_r10.set(1,
true);
1901 UlConfiguration_r10.set(0,
false);
1905 std::bitset<3> FreqInfo_r10;
1906 FreqInfo_r10.set(2,
true);
1907 FreqInfo_r10.set(1,
true);
1908 FreqInfo_r10.set(0,
false);
1915 std::bitset<2> UlPowerControlCommonSCell_r10;
1916 UlPowerControlCommonSCell_r10.set(1,
false);
1917 UlPowerControlCommonSCell_r10.set(0,
true);
1926 std::bitset<1> prachConfigSCell_r10;
1927 prachConfigSCell_r10.set(0,
true);
1938 std::bitset<1> RadioResourceConfigDedicatedSCell_r10;
1939 RadioResourceConfigDedicatedSCell_r10.set(0,
true);
1950 std::bitset<2> pcdscOpt;
1958 std::bitset<4> nulOpt;
1960 nulOpt.set(2,
false);
1961 nulOpt.set(1,
false);
2002 std::bitset<7> ulOpt;
2004 ulOpt.set(5,
false);
2005 ulOpt.set(4,
false);
2006 ulOpt.set(3,
false);
2008 ulOpt.set(1,
false);
2009 ulOpt.set(0,
false);
2037 case NrRrcSap::SoundingRsUlConfigDedicated::RESET:
2042 case NrRrcSap::SoundingRsUlConfigDedicated::SETUP:
2080 Buffer::Iterator bIterator)
2082 int thresholdEutraChoice;
2086 switch (thresholdEutraChoice)
2091 thresholdEutra->
range = range;
2097 thresholdEutra->
range = range;
2111 *qOffsetRange = -24;
2114 *qOffsetRange = -22;
2117 *qOffsetRange = -20;
2120 *qOffsetRange = -18;
2123 *qOffsetRange = -16;
2126 *qOffsetRange = -14;
2129 *qOffsetRange = -12;
2132 *qOffsetRange = -10;
2210 Buffer::Iterator bIterator)
2213 std::bitset<6> optionalFieldsPresent = std::bitset<6>();
2216 if (optionalFieldsPresent[5])
2223 if (optionalFieldsPresent[4])
2230 if (optionalFieldsPresent[3])
2236 for (
int i = 0; i < n; i++)
2243 if (optionalFieldsPresent[2])
2249 if (optionalFieldsPresent[1])
2256 if (optionalFieldsPresent[0])
2269 Buffer::Iterator bIterator)
2274 srbToAddModList->clear();
2277 for (
int i = 0; i < numElems; i++)
2282 std::bitset<2> optionalFields;
2290 if (optionalFields[1])
2296 if (optionalFields[0])
2315 srbToAddModList->insert(srbToAddModList->end(), srbToAddMod);
2323 Buffer::Iterator bIterator)
2329 drbToAddModList->clear();
2331 for (
int i = 0; i < n; i++)
2335 std::bitset<5> optionalFields;
2338 if (optionalFields[4])
2348 if (optionalFields[3])
2354 if (optionalFields[2])
2361 std::bitset<0> bitset0;
2381 drbToAddMod.
rlcConfig.
choice = NrRrcSap::RlcConfig::UM_BI_DIRECTIONAL;
2394 drbToAddMod.
rlcConfig.
choice = NrRrcSap::RlcConfig::UM_UNI_DIRECTIONAL_UL;
2402 drbToAddMod.
rlcConfig.
choice = NrRrcSap::RlcConfig::UM_UNI_DIRECTIONAL_DL;
2412 if (optionalFields[1])
2418 if (optionalFields[0])
2424 drbToAddModList->insert(drbToAddModList->end(), drbToAddMod);
2432 Buffer::Iterator bIterator)
2438 std::bitset<1> bitset1;
2448 logicalChannelConfig->
priority = n;
2452 uint16_t prioritizedBitRateKbps;
2457 prioritizedBitRateKbps = 0;
2460 prioritizedBitRateKbps = 8;
2463 prioritizedBitRateKbps = 16;
2466 prioritizedBitRateKbps = 32;
2469 prioritizedBitRateKbps = 64;
2472 prioritizedBitRateKbps = 128;
2475 prioritizedBitRateKbps = 256;
2478 prioritizedBitRateKbps = 10000;
2481 prioritizedBitRateKbps = 10000;
2487 uint16_t bucketSizeDurationMs;
2491 bucketSizeDurationMs = 50;
2494 bucketSizeDurationMs = 100;
2497 bucketSizeDurationMs = 150;
2500 bucketSizeDurationMs = 300;
2503 bucketSizeDurationMs = 500;
2506 bucketSizeDurationMs = 1000;
2509 bucketSizeDurationMs = 1000;
2526 Buffer::Iterator bIterator)
2528 std::bitset<10> optionalFieldPresent;
2532 if (optionalFieldPresent[9])
2535 std::bitset<0> bitset0;
2546 if (optionalFieldPresent[8])
2551 if (optionalFieldPresent[7])
2556 if (optionalFieldPresent[6])
2561 if (optionalFieldPresent[5])
2566 if (optionalFieldPresent[4])
2571 if (optionalFieldPresent[3])
2577 if (optionalFieldPresent[2])
2586 NrRrcSap::SoundingRsUlConfigDedicated::RESET;
2594 NrRrcSap::SoundingRsUlConfigDedicated::SETUP;
2596 std::bitset<0> bitset0;
2627 if (optionalFieldPresent[1])
2638 std::bitset<1> codebookSubsetRestrictionPresent;
2645 if (codebookSubsetRestrictionPresent[0])
2651 int txantennaselchosen;
2653 if (txantennaselchosen == 0)
2658 else if (txantennaselchosen == 1)
2665 if (optionalFieldPresent[0])
2676 NS_LOG_FUNCTION(
this << &os);
2677 NS_FATAL_ERROR(
"NrRrcAsn1Header Print() function must also specify "
2678 "NrRrcSap::RadioResourceConfigDedicated as a second argument");
2684 Buffer::Iterator bIterator)
2686 NS_LOG_FUNCTION(
this);
2687 std::bitset<2> nonCriticalExtension_v890;
2690 if (nonCriticalExtension_v890[0])
2693 std::bitset<3> nonCriticalExtension_v920;
2695 if (nonCriticalExtension_v920[0])
2698 std::bitset<3> nonCriticalExtension_v1020;
2701 if (nonCriticalExtension_v1020[2])
2709 for (
int i = 0; i < numElems; i++)
2718 if (nonCriticalExtension_v1020[1])
2726 for (
int i = 0; i < numElems; i++)
2728 std::bitset<4> sCellToAddMod_r10;
2733 NS_ASSERT(sCellToAddMod_r10[3]);
2738 NS_ASSERT(sCellToAddMod_r10[2]);
2742 NS_ASSERT(sCellToAddMod_r10[1]);
2746 if (sCellToAddMod_r10[0])
2763 NS_ASSERT(!nonCriticalExtension_v1020[0]);
2773 Buffer::Iterator bIterator)
2775 NS_LOG_FUNCTION(
this);
2776 std::bitset<2> cellIdentification_r10;
2778 NS_ASSERT(cellIdentification_r10[1]);
2783 NS_ASSERT(cellIdentification_r10[0]);
2793 Buffer::Iterator bIterator)
2795 NS_LOG_FUNCTION(
this);
2796 std::bitset<2> radioResourceConfigCommonSCell_r10;
2802 std::bitset<5> nonUlConfiguration_r10;
2808 std::bitset<1> antennaInfoCommon_r10;
2813 std::bitset<2> pdschConfigCommon_r10;
2822 std::bitset<7> UlConfiguration_r10;
2825 std::bitset<3> FreqInfo_r10;
2833 std::bitset<2> UlPowerControlCommonSCell_r10;
2838 std::bitset<1> prachConfigSCell_r10;
2850 Buffer::Iterator bIterator)
2852 NS_LOG_FUNCTION(
this);
2853 std::bitset<1> RadioResourceConfigDedicatedSCell_r10;
2854 bIterator =
DeserializeSequence(&RadioResourceConfigDedicatedSCell_r10,
false, bIterator);
2864 Buffer::Iterator bIterator)
2866 NS_LOG_FUNCTION(
this);
2867 std::bitset<2> pcdscOpt;
2873 std::bitset<4> nulOpt;
2876 NS_ASSERT(!nulOpt[2]);
2877 NS_ASSERT(!nulOpt[1]);
2891 std::bitset<1> codebookSubsetRestrictionPresent;
2899 if (codebookSubsetRestrictionPresent[0])
2902 NS_FATAL_ERROR(
"Not implemented yet");
2906 int txantennaselchosen;
2908 if (txantennaselchosen == 0)
2913 else if (txantennaselchosen == 1)
2916 NS_FATAL_ERROR(
"Not implemented yet");
2924 std::bitset<0> bitset0;
2938 std::bitset<7> ulOpt;
2941 NS_ASSERT(!ulOpt[5]);
2942 NS_ASSERT(!ulOpt[4]);
2943 NS_ASSERT(!ulOpt[3]);
2945 NS_ASSERT(!ulOpt[1]);
2946 NS_ASSERT(!ulOpt[0]);
2959 std::bitset<1> codebookSubsetRestrictionPresent;
2967 if (codebookSubsetRestrictionPresent[0])
2970 NS_FATAL_ERROR(
"Not implemented yet");
2974 int txantennaselchosen;
2976 if (txantennaselchosen == 0)
2981 else if (txantennaselchosen == 1)
2984 NS_FATAL_ERROR(
"Not implemented yet");
2998 NrRrcSap::SoundingRsUlConfigDedicated::RESET;
3006 NrRrcSap::SoundingRsUlConfigDedicated::SETUP;
3008 std::bitset<0> bitset0;
3047 os <<
" srbToAddModList: " << std::endl;
3049 for (; it != radioResourceConfigDedicated.
srbToAddModList.end(); it++)
3051 os <<
" srbIdentity: " << (int)it->srbIdentity << std::endl;
3052 os <<
" logicalChannelConfig: " << std::endl;
3053 os <<
" priority: " << (int)it->logicalChannelConfig.priority << std::endl;
3054 os <<
" prioritizedBitRateKbps: "
3055 << (int)it->logicalChannelConfig.prioritizedBitRateKbps << std::endl;
3056 os <<
" bucketSizeDurationMs: "
3057 << (int)it->logicalChannelConfig.bucketSizeDurationMs << std::endl;
3058 os <<
" logicalChannelGroup: " << (int)it->logicalChannelConfig.logicalChannelGroup
3063 os <<
" drbToAddModList: " << std::endl;
3065 for (; it2 != radioResourceConfigDedicated.
drbToAddModList.end(); it2++)
3067 os <<
" epsBearerIdentity: " << (int)it2->epsBearerIdentity << std::endl;
3068 os <<
" drbIdentity: " << (int)it2->drbIdentity << std::endl;
3069 os <<
" rlcConfig: " << it2->rlcConfig.choice << std::endl;
3070 os <<
" logicalChannelIdentity: " << (int)it2->logicalChannelIdentity << std::endl;
3071 os <<
" logicalChannelConfig: " << std::endl;
3072 os <<
" priority: " << (int)it2->logicalChannelConfig.priority << std::endl;
3073 os <<
" prioritizedBitRateKbps: "
3074 << (int)it2->logicalChannelConfig.prioritizedBitRateKbps << std::endl;
3075 os <<
" bucketSizeDurationMs: "
3076 << (int)it2->logicalChannelConfig.bucketSizeDurationMs << std::endl;
3077 os <<
" logicalChannelGroup: " << (int)it2->logicalChannelConfig.logicalChannelGroup
3082 os <<
" drbToReleaseList: ";
3086 os << (int)*it3 <<
", ";
3090 os <<
" havePhysicalConfigDedicated: "
3095 os <<
" physicalConfigDedicated: " << std::endl;
3097 os <<
" haveSoundingRsUlConfigDedicated: "
3102 os <<
" soundingRsUlConfigDedicated: " << std::endl;
3107 os <<
" srsBandwidth: "
3111 os <<
" srsConfigIndex: "
3117 os <<
" haveAntennaInfoDedicated: "
3122 os <<
" antennaInfo Tx mode: "
3133 Buffer::Iterator bIterator)
3135 std::bitset<0> bitset0;
3138 std::bitset<3> sysInfoBlkT1Opts;
3142 std::bitset<1> cellAccessRelatedInfoOpts;
3146 int numPlmnIdentityInfoElements;
3148 for (
int i = 0; i < numPlmnIdentityInfoElements; i++)
3159 std::bitset<16> trackingAreaCode;
3163 std::bitset<28> cellIdentity;
3178 if (cellAccessRelatedInfoOpts[0])
3181 std::bitset<27> csgIdentity;
3187 std::bitset<1> qRxLevMinOffsetPresent;
3190 if (qRxLevMinOffsetPresent[0])
3196 if (sysInfoBlkT1Opts[2])
3206 int numSchedulingInfo;
3208 for (
int i = 0; i < numSchedulingInfo; i++)
3215 for (
int j = 0; j < numSibType; j++)
3221 if (sysInfoBlkT1Opts[1])
3233 if (sysInfoBlkT1Opts[0])
3244 Buffer::Iterator bIterator)
3246 std::bitset<0> bitset0;
3249 std::bitset<2> sysInfoBlkT2Opts;
3251 if (sysInfoBlkT2Opts[1])
3272 std::bitset<2> freqInfoOpts;
3274 if (freqInfoOpts[1])
3280 if (freqInfoOpts[0])
3290 if (sysInfoBlkT2Opts[0])
3305 Buffer::Iterator bIterator)
3307 std::bitset<0> bitset0;
3310 std::bitset<9> rrCfgCommOptions;
3314 if (rrCfgCommOptions[8])
3321 std::bitset<1> prachConfigInfoPresent;
3328 if (prachConfigInfoPresent[0])
3334 if (rrCfgCommOptions[7])
3375 if (rrCfgCommOptions[6])
3381 if (rrCfgCommOptions[5])
3387 if (rrCfgCommOptions[4])
3393 if (rrCfgCommOptions[3])
3399 if (rrCfgCommOptions[2])
3405 if (rrCfgCommOptions[1])
3411 if (rrCfgCommOptions[0])
3424 Buffer::Iterator bIterator)
3426 std::bitset<0> bitset0;
3432 std::bitset<1> preamblesGroupAConfigPresent;
3491 if (preamblesGroupAConfigPresent[0])
3604 Buffer::Iterator bIterator)
3606 std::bitset<0> bitset0;
3625 std::bitset<1> prachConfigInfoPresent;
3630 if (prachConfigInfoPresent[0])
3715 Buffer::Iterator bIterator)
3719 std::bitset<4> measResultOptionalPresent;
3742 int measResultNeighCellsChoice;
3745 bIterator =
DeserializeChoice(4,
false, &measResultNeighCellsChoice, bIterator);
3747 if (measResultNeighCellsChoice == 0)
3753 for (
int i = 0; i < numElems; i++)
3757 std::bitset<1> isCgiInfoPresent;
3764 measResultEutra.
haveCgiInfo = isCgiInfoPresent[0];
3765 if (isCgiInfoPresent[0])
3767 std::bitset<1> havePlmnIdentityList;
3778 std::bitset<28> cellId;
3783 std::bitset<16> trArCo;
3788 if (havePlmnIdentityList[0])
3793 for (
int j = 0; j < numPlmnElems; j++)
3803 std::bitset<2> measResultOpts;
3807 if (measResultOpts[1])
3815 if (measResultOpts[0])
3826 if (measResultNeighCellsChoice == 1)
3832 if (measResultNeighCellsChoice == 2)
3837 if (measResultNeighCellsChoice == 3)
3847 for (
int i = 0; i < numElems; i++)
3852 std::bitset<2> measResultScellPresent;
3897 std::bitset<1> isMccPresent;
3900 if (isMccPresent[0])
3911 for (
int j = mncDigits - 1; j >= 0; j--)
3914 mnc += n * pow(10, j);
3927 std::bitset<0> bitset0;
3928 std::bitset<2> bitset2;
3929 std::bitset<11> bitset11;
3938 int measObjectToRemoveListElems;
3942 for (
int i = 0; i < measObjectToRemoveListElems; i++)
3952 int measObjectToAddModListElems;
3956 for (
int i = 0; i < measObjectToAddModListElems; i++)
3965 int measObjectChoice;
3968 switch (measObjectChoice)
3986 std::bitset<5> measObjectEutraOpts;
4008 if (measObjectEutraOpts[4])
4014 for (
int i = 0; i < numElems; i++)
4021 if (measObjectEutraOpts[3])
4027 for (
int i = 0; i < numElems; i++)
4049 if (measObjectEutraOpts[2])
4055 for (
int i = 0; i < numElems; i++)
4062 if (measObjectEutraOpts[1])
4068 for (
int i = 0; i < numElems; i++)
4077 std::bitset<1> isRangePresent;
4145 if (measObjectEutraOpts[0])
4159 int reportConfigToRemoveListElems;
4161 MAX_REPORT_CONFIG_ID,
4165 for (
int i = 0; i < reportConfigToRemoveListElems; i++)
4175 int reportConfigToAddModListElems;
4177 MAX_REPORT_CONFIG_ID,
4181 for (
int i = 0; i < reportConfigToAddModListElems; i++)
4190 int reportConfigChoice;
4193 if (reportConfigChoice == 0)
4199 int triggerTypeChoice;
4202 if (triggerTypeChoice == 0)
4212 switch (eventIdChoice)
4312 if (triggerTypeChoice == 1)
4322 NrRrcSap::ReportConfigEutra::REPORT_STRONGEST_CELLS;
4346 NrRrcSap::ReportConfigEutra::SAME_AS_TRIGGER_QUANTITY;
4441 if (reportConfigChoice == 1)
4454 int measIdToRemoveListElems;
4457 for (
int i = 0; i < measIdToRemoveListElems; i++)
4467 int measIdToAddModListElems;
4470 for (
int i = 0; i < measIdToAddModListElems; i++)
4493 std::bitset<4> quantityConfigOpts;
4496 if (quantityConfigOpts[3])
4609 if (quantityConfigOpts[2])
4614 if (quantityConfigOpts[1])
4619 if (quantityConfigOpts[0])
4630 int measGapConfigChoice;
4632 switch (measGapConfigChoice)
4643 int gapOffsetChoice;
4645 switch (gapOffsetChoice)
4679 int speedStateParsChoice;
4681 switch (speedStateParsChoice)
4757NrRrcConnectionRequestHeader::NrRrcConnectionRequestHeader()
4760 m_mmec = std::bitset<8>(0
UL);
4761 m_mTmsi = std::bitset<32>(0
UL);
4762 m_establishmentCause = MO_SIGNALLING;
4763 m_spare = std::bitset<1>(0
UL);
4767NrRrcConnectionRequestHeader::~NrRrcConnectionRequestHeader()
4775 TypeId(
"ns3::NrRrcConnectionRequestHeader").SetParent<Header>().SetGroupName(
"Nr");
4782 os <<
"MMEC:" << m_mmec << std::endl;
4783 os <<
"MTMSI:" << m_mTmsi << std::endl;
4784 os <<
"EstablishmentCause:" << m_establishmentCause << std::endl;
4785 os <<
"Spare: " << m_spare << std::endl;
4832NrRrcConnectionRequestHeader::Deserialize(Buffer::Iterator bIterator)
4834 std::bitset<1> dummy;
4835 std::bitset<0> optionalOrDefaultMask;
4867 return GetSerializedSize();
4873 m_mTmsi = std::bitset<32>((uint32_t)msg.
ueIdentity);
4874 m_mmec = std::bitset<8>((uint32_t)(msg.
ueIdentity >> 32));
4882 msg.
ueIdentity = (((uint64_t)m_mmec.to_ulong()) << 32) | (m_mTmsi.to_ulong());
4900NrRrcConnectionSetupHeader::NrRrcConnectionSetupHeader()
4904NrRrcConnectionSetupHeader::~NrRrcConnectionSetupHeader()
4911 os <<
"rrcTransactionIdentifier: " << (int)m_rrcTransactionIdentifier << std::endl;
4912 os <<
"radioResourceConfigDedicated:" << std::endl;
4956NrRrcConnectionSetupHeader::Deserialize(Buffer::Iterator bIterator)
4960 std::bitset<0> bitset0;
4961 std::bitset<1> bitset1;
4962 std::bitset<2> bitset2;
4973 m_rrcTransactionIdentifier = n;
4976 int criticalExtensionChoice;
4978 if (criticalExtensionChoice == 1)
4983 else if (criticalExtensionChoice == 0)
5015 return GetSerializedSize();
5038 return m_rrcTransactionIdentifier;
5047std::list<NrRrcSap::SrbToAddMod>
5053std::list<NrRrcSap::DrbToAddMod>
5074 return m_radioResourceConfigDedicated;
5079NrRrcConnectionSetupCompleteHeader::NrRrcConnectionSetupCompleteHeader()
5083NrRrcConnectionSetupCompleteHeader::~NrRrcConnectionSetupCompleteHeader()
5117NrRrcConnectionSetupCompleteHeader::Deserialize(Buffer::Iterator bIterator)
5119 std::bitset<0> bitset0;
5127 m_rrcTransactionIdentifier = n;
5153 return GetSerializedSize();
5159 os <<
"rrcTransactionIdentifier: " << (int)m_rrcTransactionIdentifier << std::endl;
5172 return m_rrcTransactionIdentifier;
5185NrRrcConnectionReconfigurationCompleteHeader::NrRrcConnectionReconfigurationCompleteHeader()
5189NrRrcConnectionReconfigurationCompleteHeader::~NrRrcConnectionReconfigurationCompleteHeader()
5220NrRrcConnectionReconfigurationCompleteHeader::Deserialize(Buffer::Iterator bIterator)
5222 std::bitset<0> bitset0;
5229 m_rrcTransactionIdentifier = n;
5244 return GetSerializedSize();
5250 os <<
"rrcTransactionIdentifier: " << (int)m_rrcTransactionIdentifier << std::endl;
5272 return m_rrcTransactionIdentifier;
5277NrRrcConnectionReconfigurationHeader::NrRrcConnectionReconfigurationHeader()
5281NrRrcConnectionReconfigurationHeader::~NrRrcConnectionReconfigurationHeader()
5309 std::bitset<6> options;
5310 options.set(5, m_haveMeasConfig);
5311 options.set(4, m_haveMobilityControlInfo);
5312 options.set(3,
false);
5313 options.set(2, m_haveRadioResourceConfigDedicated);
5314 options.set(1,
false);
5315 options.set(0, m_haveNonCriticalExtension);
5319 if (m_haveMeasConfig)
5324 if (m_haveMobilityControlInfo)
5329 std::bitset<4> mobCtrlIntoOptional;
5332 mobCtrlIntoOptional.set(1,
false);
5374 if (m_haveRadioResourceConfigDedicated)
5380 if (m_haveNonCriticalExtension)
5384 std::bitset<2> noncriticalExtension_v890;
5385 noncriticalExtension_v890.set(1,
false);
5386 noncriticalExtension_v890.set(
5388 m_haveNonCriticalExtension);
5395 std::bitset<3> noncriticalExtension_v920;
5396 noncriticalExtension_v920.set(1,
false);
5397 noncriticalExtension_v920.set(1,
false);
5399 noncriticalExtension_v920.set(
5401 m_haveNonCriticalExtension);
5406 m_nonCriticalExtension);
5414NrRrcConnectionReconfigurationHeader::Deserialize(Buffer::Iterator bIterator)
5416 std::bitset<0> bitset0;
5426 m_rrcTransactionIdentifier = n;
5445 else if (c1Chosen == 0)
5448 std::bitset<6> rrcConnRecOpts;
5451 m_haveMeasConfig = rrcConnRecOpts[5];
5452 if (m_haveMeasConfig)
5457 m_haveMobilityControlInfo = rrcConnRecOpts[4];
5458 if (m_haveMobilityControlInfo)
5461 std::bitset<4> mobCtrlOpts;
5472 std::bitset<1> ulCarrierFreqPresent;
5478 if (ulCarrierFreqPresent[0])
5489 std::bitset<1> ulBandwidthPresent;
5495 if (ulBandwidthPresent[0])
5512 std::bitset<16> cRnti;
5533 if (rrcConnRecOpts[3])
5539 m_haveRadioResourceConfigDedicated = rrcConnRecOpts[2];
5540 if (m_haveRadioResourceConfigDedicated)
5547 if (rrcConnRecOpts[1])
5553 m_haveNonCriticalExtension = rrcConnRecOpts[0];
5554 if (m_haveNonCriticalExtension)
5563 return GetSerializedSize();
5569 os <<
"rrcTransactionIdentifier: " << (int)m_rrcTransactionIdentifier << std::endl;
5570 os <<
"haveMeasConfig: " << m_haveMeasConfig << std::endl;
5571 if (m_haveMeasConfig)
5575 os <<
" measObjectToRemoveList: ";
5577 auto it = auxList.begin();
5578 for (; it != auxList.end(); it++)
5580 os << (int)*it <<
", ";
5586 os <<
" reportConfigToRemoveList: ";
5588 auto it = auxList.begin();
5589 for (; it != auxList.end(); it++)
5591 os << (int)*it <<
", ";
5597 os <<
" measIdToRemoveList: ";
5599 auto it = auxList.begin();
5600 for (; it != auxList.end(); it++)
5602 os << (int)*it <<
", ";
5609 os <<
" measObjectToAddMod: " << std::endl;
5611 auto it = auxList.begin();
5612 for (; it != auxList.end(); it++)
5614 os <<
" measObjectId: " << (int)it->measObjectId << std::endl;
5615 os <<
" carrierFreq: " << (int)it->measObjectEutra.carrierFreq << std::endl;
5616 os <<
" allowedMeasBandwidth: " << (int)it->measObjectEutra.allowedMeasBandwidth
5618 os <<
" presenceAntennaPort1: " << it->measObjectEutra.presenceAntennaPort1
5620 os <<
" neighCellConfig: " << (int)it->measObjectEutra.neighCellConfig
5622 os <<
" offsetFreq: " << (int)it->measObjectEutra.offsetFreq << std::endl;
5624 if (!it->measObjectEutra.cellsToRemoveList.empty())
5626 os <<
" cellsToRemoveList: ";
5627 std::list<uint8_t> auxList = it->measObjectEutra.cellsToRemoveList;
5628 auto it = auxList.begin();
5629 for (; it != auxList.end(); it++)
5631 os << (int)*it <<
", ";
5636 if (!it->measObjectEutra.blackCellsToRemoveList.empty())
5638 os <<
" blackCellsToRemoveList: ";
5639 std::list<uint8_t> auxList = it->measObjectEutra.blackCellsToRemoveList;
5640 auto it = auxList.begin();
5641 for (; it != auxList.end(); it++)
5643 os << (int)*it <<
", ";
5648 if (!it->measObjectEutra.cellsToAddModList.empty())
5650 os <<
" cellsToAddModList: " << std::endl;
5651 std::list<NrRrcSap::CellsToAddMod> auxList =
5652 it->measObjectEutra.cellsToAddModList;
5653 auto it = auxList.begin();
5654 for (; it != auxList.end(); it++)
5656 os <<
" cellIndex: " << (int)it->cellIndex << std::endl;
5657 os <<
" physCellId: " << (int)it->physCellId << std::endl;
5658 os <<
" cellIndividualOffset: " << (int)it->cellIndividualOffset
5660 os <<
" ------ " << std::endl;
5664 if (!it->measObjectEutra.blackCellsToAddModList.empty())
5666 os <<
" blackCellsToAddModList: " << std::endl;
5667 std::list<NrRrcSap::BlackCellsToAddMod> auxList =
5668 it->measObjectEutra.blackCellsToAddModList;
5669 auto it = auxList.begin();
5670 for (; it != auxList.end(); it++)
5672 os <<
" cellIndex: " << (int)it->cellIndex << std::endl;
5673 os <<
" physCellIdRange.start: " << (int)it->physCellIdRange.start
5675 os <<
" physCellIdRange.haveRange: " << it->physCellIdRange.haveRange
5677 os <<
" physCellIdRange.range: " << (int)it->physCellIdRange.range
5679 os <<
" ------ " << std::endl;
5683 os <<
" haveCellForWhichToReportCGI: "
5684 << it->measObjectEutra.haveCellForWhichToReportCGI << std::endl;
5685 os <<
" cellForWhichToReportCGI: "
5686 << (int)it->measObjectEutra.cellForWhichToReportCGI << std::endl;
5687 os <<
" ------------- " << std::endl;
5693 os <<
" reportConfigToAddModList: " << std::endl;
5694 std::list<NrRrcSap::ReportConfigToAddMod> auxList =
5696 auto it = auxList.begin();
5697 for (; it != auxList.end(); it++)
5699 os <<
" reportConfigId: " << (int)it->reportConfigId << std::endl;
5700 os <<
" reportConfigEutra.triggerType "
5701 << (int)it->reportConfigEutra.triggerType << std::endl;
5704 os <<
" reportConfigEutra.eventId " << (int)it->reportConfigEutra.eventId
5708 os <<
" reportConfigEutra.reportOnLeave "
5709 << (int)it->reportConfigEutra.reportOnLeave << std::endl;
5710 os <<
" reportConfigEutra.a3Offset "
5711 << (int)it->reportConfigEutra.a3Offset << std::endl;
5715 os <<
" reportConfigEutra.threshold1.choice "
5716 << (int)it->reportConfigEutra.threshold1.choice << std::endl;
5717 os <<
" reportConfigEutra.threshold1.range "
5718 << (int)it->reportConfigEutra.threshold1.range << std::endl;
5721 os <<
" reportConfigEutra.threshold2.choice "
5722 << (int)it->reportConfigEutra.threshold2.choice << std::endl;
5723 os <<
" reportConfigEutra.threshold2.range "
5724 << (int)it->reportConfigEutra.threshold2.range << std::endl;
5727 os <<
" reportConfigEutra.hysteresis "
5728 << (int)it->reportConfigEutra.hysteresis << std::endl;
5729 os <<
" reportConfigEutra.timeToTrigger "
5730 << (int)it->reportConfigEutra.timeToTrigger << std::endl;
5734 os <<
" reportConfigEutra.purpose " << (int)it->reportConfigEutra.purpose
5737 os <<
" reportConfigEutra.triggerQuantity "
5738 << (int)it->reportConfigEutra.triggerQuantity << std::endl;
5739 os <<
" reportConfigEutra.reportQuantity "
5740 << (int)it->reportConfigEutra.reportQuantity << std::endl;
5741 os <<
" reportConfigEutra.maxReportCells "
5742 << (int)it->reportConfigEutra.maxReportCells << std::endl;
5743 os <<
" reportConfigEutra.reportInterval "
5744 << (int)it->reportConfigEutra.reportInterval << std::endl;
5745 os <<
" reportConfigEutra.reportAmount "
5746 << (int)it->reportConfigEutra.reportAmount << std::endl;
5752 os <<
" measIdToAddModList: " << std::endl;
5754 auto it = auxList.begin();
5755 for (; it != auxList.end(); it++)
5757 os <<
" measId: " << (int)it->measId << std::endl;
5758 os <<
" measObjectId: " << (int)it->measObjectId << std::endl;
5759 os <<
" reportConfigId: " << (int)it->reportConfigId << std::endl;
5760 os <<
" ------ " << std::endl;
5767 os <<
" filterCoefficientRSRP: "
5769 os <<
" filterCoefficientRSRQ:"
5777 os <<
" measGapConfig.gap (gap0/1,value): ("
5782 os <<
" haveSmeasure: " << m_measConfig.
haveSmeasure << std::endl;
5785 os <<
" sMeasure: " << (int)m_measConfig.
sMeasure << std::endl;
5792 os <<
" speedStatePars.mobilityStateParameters.tEvaluation: "
5794 os <<
" speedStatePars.mobilityStateParameters.tHystNormal: "
5796 os <<
" speedStatePars.mobilityStateParameters.nCellChangeMedium: "
5799 os <<
" speedStatePars.mobilityStateParameters.nCellChangeHigh: "
5802 os <<
" speedStatePars.timeToTriggerSf.sfMedium: "
5804 os <<
" speedStatePars.timeToTriggerSf.sfHigh: "
5809 os <<
"haveMobilityControlInfo: " << m_haveMobilityControlInfo << std::endl;
5810 if (m_haveMobilityControlInfo)
5812 os <<
"targetPhysCellId: " << (int)m_mobilityControlInfo.
targetPhysCellId << std::endl;
5813 os <<
"haveCarrierFreq: " << m_mobilityControlInfo.
haveCarrierFreq << std::endl;
5816 os <<
" carrierFreq.dlCarrierFreq: "
5818 os <<
" carrierFreq.dlCarrierFreq: "
5824 os <<
" carrierBandwidth.dlBandwidth: "
5826 os <<
" carrierBandwidth.ulBandwidth: "
5829 os <<
"newUeIdentity: " << (int)m_mobilityControlInfo.
newUeIdentity << std::endl;
5834 os <<
"raPreambleIndex: "
5836 os <<
"raPrachMaskIndex: "
5840 os <<
"haveRadioResourceConfigDedicated: " << m_haveRadioResourceConfigDedicated << std::endl;
5841 if (m_haveRadioResourceConfigDedicated)
5869 msg.haveMeasConfig = m_haveMeasConfig;
5870 msg.measConfig = m_measConfig;
5871 msg.haveMobilityControlInfo = m_haveMobilityControlInfo;
5872 msg.mobilityControlInfo = m_mobilityControlInfo;
5873 msg.haveRadioResourceConfigDedicated = m_haveRadioResourceConfigDedicated;
5874 msg.radioResourceConfigDedicated = m_radioResourceConfigDedicated;
5875 msg.haveNonCriticalExtension = m_haveNonCriticalExtension;
5876 msg.nonCriticalExtension = m_nonCriticalExtension;
5884 return m_rrcTransactionIdentifier;
5890 return m_haveMeasConfig;
5896 return m_measConfig;
5902 return m_haveMobilityControlInfo;
5908 return m_mobilityControlInfo;
5914 return m_haveRadioResourceConfigDedicated;
5920 return m_radioResourceConfigDedicated;
5926 return m_haveNonCriticalExtension;
5932 return m_nonCriticalExtension;
5941std::list<NrRrcSap::SrbToAddMod>
5947std::list<NrRrcSap::DrbToAddMod>
5967NrHandoverPreparationInfoHeader::NrHandoverPreparationInfoHeader()
5990 std::bitset<4> handoverPrepInfoOpts;
5991 handoverPrepInfoOpts.set(3,
true);
5992 handoverPrepInfoOpts.set(2,
false);
5993 handoverPrepInfoOpts.set(1,
false);
5994 handoverPrepInfoOpts.set(0,
false);
6050NrHandoverPreparationInfoHeader::Deserialize(Buffer::Iterator bIterator)
6052 std::bitset<0> bitset0;
6060 int criticalExtensionsChosen;
6063 if (criticalExtensionsChosen == 1)
6068 else if (criticalExtensionsChosen == 0)
6077 else if (c1Chosen == 0)
6080 std::bitset<4> handoverPrepInfoOpts;
6085 for (
int i = 0; i < n; i++)
6091 if (handoverPrepInfoOpts[3])
6110 std::bitset<16> cRnti;
6129 std::bitset<8> systemFrameNumber;
6132 systemFrameNumber.to_ulong();
6134 std::bitset<10> spare;
6155 if (handoverPrepInfoOpts[2])
6160 if (handoverPrepInfoOpts[1])
6165 if (handoverPrepInfoOpts[0])
6173 return GetSerializedSize();
6177NrHandoverPreparationInfoHeader::Print(std::ostream& os)
const
6184 os <<
"plmnIdentityInfo.plmnIdentity: "
6188 os <<
"cellAccessRelatedInfo.cellIdentity "
6191 os <<
"cellAccessRelatedInfo.csgIndication: "
6194 os <<
"cellAccessRelatedInfo.csgIdentity: "
6224NrRrcConnectionReestablishmentRequestHeader::NrRrcConnectionReestablishmentRequestHeader()
6228NrRrcConnectionReestablishmentRequestHeader::~NrRrcConnectionReestablishmentRequestHeader()
6261 switch (m_reestablishmentCause)
6263 case NrRrcSap::RECONFIGURATION_FAILURE:
6266 case NrRrcSap::HANDOVER_FAILURE:
6269 case NrRrcSap::OTHER_FAILURE:
6284NrRrcConnectionReestablishmentRequestHeader::Deserialize(Buffer::Iterator bIterator)
6286 std::bitset<0> bitset0;
6311 std::bitset<16> cRnti;
6313 m_ueIdentity.
cRnti = cRnti.to_ulong();
6321 std::bitset<16> shortMacI;
6330 m_reestablishmentCause = NrRrcSap::RECONFIGURATION_FAILURE;
6333 m_reestablishmentCause = NrRrcSap::HANDOVER_FAILURE;
6336 m_reestablishmentCause = NrRrcSap::OTHER_FAILURE;
6343 std::bitset<2> spare;
6347 return GetSerializedSize();
6353 os <<
"ueIdentity.cRnti: " << (int)m_ueIdentity.
cRnti << std::endl;
6354 os <<
"ueIdentity.physCellId: " << (int)m_ueIdentity.
physCellId << std::endl;
6355 os <<
"m_reestablishmentCause: " << m_reestablishmentCause << std::endl;
6380 return m_ueIdentity;
6386 return m_reestablishmentCause;
6391NrRrcConnectionReestablishmentHeader::NrRrcConnectionReestablishmentHeader()
6395NrRrcConnectionReestablishmentHeader::~NrRrcConnectionReestablishmentHeader()
6434NrRrcConnectionReestablishmentHeader::Deserialize(Buffer::Iterator bIterator)
6436 std::bitset<0> bitset0;
6447 m_rrcTransactionIdentifier = n;
6450 int criticalExtensionsChoice;
6452 if (criticalExtensionsChoice == 1)
6457 else if (criticalExtensionsChoice == 0)
6470 std::bitset<1> nonCriticalExtensionPresent;
6482 return GetSerializedSize();
6488 os <<
"rrcTransactionIdentifier: " << (int)m_rrcTransactionIdentifier << std::endl;
6489 os <<
"RadioResourceConfigDedicated: " << std::endl;
6513 return m_rrcTransactionIdentifier;
6519 return m_radioResourceConfigDedicated;
6524NrRrcConnectionReestablishmentCompleteHeader::NrRrcConnectionReestablishmentCompleteHeader()
6555NrRrcConnectionReestablishmentCompleteHeader::Deserialize(Buffer::Iterator bIterator)
6557 std::bitset<0> bitset0;
6568 m_rrcTransactionIdentifier = n;
6571 int criticalExtensionsChoice;
6573 if (criticalExtensionsChoice == 1)
6578 else if (criticalExtensionsChoice == 0)
6581 std::bitset<1> opts;
6590 return GetSerializedSize();
6596 os <<
"rrcTransactionIdentifier: " << (int)m_rrcTransactionIdentifier << std::endl;
6618 return m_rrcTransactionIdentifier;
6623NrRrcConnectionReestablishmentRejectHeader::NrRrcConnectionReestablishmentRejectHeader()
6627NrRrcConnectionReestablishmentRejectHeader::~NrRrcConnectionReestablishmentRejectHeader()
6655NrRrcConnectionReestablishmentRejectHeader::Deserialize(Buffer::Iterator bIterator)
6657 std::bitset<0> bitset0;
6666 int criticalExtensionsChoice;
6668 if (criticalExtensionsChoice == 1)
6673 else if (criticalExtensionsChoice == 0)
6676 std::bitset<1> opts;
6685 return GetSerializedSize();
6697 m_rrcConnectionReestablishmentReject = msg;
6704 return m_rrcConnectionReestablishmentReject;
6709NrRrcConnectionReleaseHeader::NrRrcConnectionReleaseHeader()
6713NrRrcConnectionReleaseHeader::~NrRrcConnectionReleaseHeader()
6750NrRrcConnectionReleaseHeader::Deserialize(Buffer::Iterator bIterator)
6752 std::bitset<0> bitset0;
6766 int criticalExtensionsChoice;
6768 if (criticalExtensionsChoice == 1)
6773 else if (criticalExtensionsChoice == 0)
6782 std::bitset<3> opts;
6811 return GetSerializedSize();
6822 m_rrcConnectionRelease = msg;
6829 return m_rrcConnectionRelease;
6834NrRrcConnectionRejectHeader::NrRrcConnectionRejectHeader()
6838NrRrcConnectionRejectHeader::~NrRrcConnectionRejectHeader()
6872NrRrcConnectionRejectHeader::Deserialize(Buffer::Iterator bIterator)
6874 std::bitset<0> bitset0;
6884 int criticalExtensionsChoice;
6886 if (criticalExtensionsChoice == 1)
6891 else if (criticalExtensionsChoice == 0)
6901 else if (c1Choice == 0)
6904 std::bitset<1> opts;
6908 m_rrcConnectionReject.
waitTime = n;
6918 return GetSerializedSize();
6924 os <<
"wait time: " << (int)m_rrcConnectionReject.
waitTime << std::endl;
6930 m_rrcConnectionReject = msg;
6937 return m_rrcConnectionReject;
6942NrMeasurementReportHeader::NrMeasurementReportHeader()
6946NrMeasurementReportHeader::~NrMeasurementReportHeader()
6982NrMeasurementReportHeader::Deserialize(Buffer::Iterator bIterator)
6984 std::bitset<0> bitset0;
6990 int criticalExtensionsChoice;
6993 if (criticalExtensionsChoice == 1)
6998 else if (criticalExtensionsChoice == 0)
7011 std::bitset<1> isNonCriticalExtensionPresent;
7017 if (isNonCriticalExtensionPresent[0])
7025 return GetSerializedSize();
7029NrMeasurementReportHeader::Print(std::ostream& os)
const
7036 os <<
"haveMeasResultNeighCells = "
7041 std::list<NrRrcSap::MeasResultEutra> measResultListEutra =
7043 auto it = measResultListEutra.begin();
7044 for (; it != measResultListEutra.end(); it++)
7046 os <<
" physCellId =" << (int)it->physCellId << std::endl;
7047 os <<
" haveCgiInfo =" << it->haveCgiInfo << std::endl;
7048 if (it->haveCgiInfo)
7050 os <<
" plmnIdentity = " << (int)it->cgiInfo.plmnIdentity << std::endl;
7051 os <<
" cellIdentity = " << (int)it->cgiInfo.cellIdentity << std::endl;
7052 os <<
" trackingAreaCode = " << (int)it->cgiInfo.trackingAreaCode << std::endl;
7053 os <<
" havePlmnIdentityList = " << !it->cgiInfo.plmnIdentityList.empty()
7055 if (!it->cgiInfo.plmnIdentityList.empty())
7057 for (
auto it2 = it->cgiInfo.plmnIdentityList.begin();
7058 it2 != it->cgiInfo.plmnIdentityList.end();
7061 os <<
" plmnId : " << *it2 << std::endl;
7066 os <<
" haveRsrpResult =" << it->haveRsrpResult << std::endl;
7067 if (it->haveRsrpResult)
7069 os <<
" rsrpResult =" << (int)it->rsrpResult << std::endl;
7072 os <<
" haveRsrqResult =" << it->haveRsrqResult << std::endl;
7073 if (it->haveRsrqResult)
7075 os <<
" rsrqResult =" << (int)it->rsrqResult << std::endl;
7084 m_measurementReport = msg;
7092 msg = m_measurementReport;
7097NrRrcUlDcchMessage::NrRrcUlDcchMessage()
7102NrRrcUlDcchMessage::~NrRrcUlDcchMessage()
7107NrRrcUlDcchMessage::Deserialize(Buffer::Iterator bIterator)
7116 std::cout <<
"UL DCCH MSG TYPE: " <<
m_messageType << std::endl;
7128 std::bitset<0> bitset0;
7159NrRrcDlDcchMessage::NrRrcDlDcchMessage()
7164NrRrcDlDcchMessage::~NrRrcDlDcchMessage()
7169NrRrcDlDcchMessage::Deserialize(Buffer::Iterator bIterator)
7178 std::cout <<
"DL DCCH MSG TYPE: " <<
m_messageType << std::endl;
7190 std::bitset<0> bitset0;
7221NrRrcUlCcchMessage::NrRrcUlCcchMessage()
7226NrRrcUlCcchMessage::~NrRrcUlCcchMessage()
7231NrRrcUlCcchMessage::Deserialize(Buffer::Iterator bIterator)
7240 std::cout <<
"UL CCCH MSG TYPE: " <<
m_messageType << std::endl;
7252 std::bitset<0> bitset0;
7283NrRrcDlCcchMessage::NrRrcDlCcchMessage()
7288NrRrcDlCcchMessage::~NrRrcDlCcchMessage()
7293NrRrcDlCcchMessage::Deserialize(Buffer::Iterator bIterator)
7302 std::cout <<
"DL CCCH MSG TYPE: " <<
m_messageType << std::endl;
7314 std::bitset<0> bitset0;
NrRrcSap::HandoverPreparationInfo GetMessage() const
NrRrcSap::AsConfig GetAsConfig() const
void PreSerialize() const override
void SetMessage(NrRrcSap::HandoverPreparationInfo msg)
Buffer::Iterator DeserializeDlCcchMessage(Buffer::Iterator bIterator)
void PreSerialize() const override
void Print(std::ostream &os) const override
void SerializeDlCcchMessage(int msgType) const
void SerializeDlDcchMessage(int msgType) const
void Print(std::ostream &os) const override
Buffer::Iterator DeserializeDlDcchMessage(Buffer::Iterator bIterator)
void PreSerialize() const override
ReestablishmentCause
ReestablishmentCause enumeration.
void SerializeUlCcchMessage(int msgType) const
void Print(std::ostream &os) const override
Buffer::Iterator DeserializeUlCcchMessage(Buffer::Iterator bIterator)
void PreSerialize() const override
void PreSerialize() const override
void SerializeUlDcchMessage(int msgType) const
Buffer::Iterator DeserializeUlDcchMessage(Buffer::Iterator bIterator)
void Print(std::ostream &os) const override
uint16_t antennaPortsCount
antenna ports count
uint8_t transmissionMode
transmission mode
SystemInformationBlockType1 sourceSystemInformationBlockType1
source system information block type 1
RadioResourceConfigDedicated sourceRadioResourceConfig
source radio resource config
MasterInformationBlock sourceMasterInformationBlock
source master information block
MeasConfig sourceMeasConfig
source measure config
uint16_t sourceUeIdentity
source UE identity
SystemInformationBlockType2 sourceSystemInformationBlockType2
source system information block type 2
uint32_t sourceDlCarrierFreq
source DL carrier frequency
BlackCellsToAddMod structure.
uint8_t cellIndex
cell index
PhysCellIdRange physCellIdRange
Phy cell ID range.
uint16_t dlBandwidth
DL bandwidth.
uint16_t ulBandwidth
UL bandwidth.
uint32_t ulCarrierFreq
UL carrier frequency.
uint32_t dlCarrierFreq
DL carrier frequency.
CellIdentification structure.
uint32_t dlCarrierFreq
ARFCN - valueEUTRA.
uint32_t physCellId
physical cell ID
uint16_t physCellId
Phy cell ID.
int8_t cellIndividualOffset
cell individual offset
uint8_t cellIndex
cell index
std::list< uint32_t > plmnIdentityList
PLMN identity list.
uint16_t trackingAreaCode
tracking area code
uint32_t cellIdentity
cell identity
uint32_t plmnIdentity
PLMN identity.
uint8_t epsBearerIdentity
EPS bearer identity.
LogicalChannelConfig logicalChannelConfig
logical channel config
uint8_t drbIdentity
DRB identity.
uint8_t logicalChannelIdentity
logical channel identify
RlcConfig rlcConfig
RLC config.
uint16_t ulBandwidth
UL bandwidth.
uint32_t ulCarrierFreq
UL carrier frequency.
HandoverPreparationInfo structure.
AsConfig asConfig
AS config.
LogicalChannelConfig structure.
uint16_t prioritizedBitRateKbps
prioritized bit rate Kbps
uint16_t bucketSizeDurationMs
bucket size duration ms
uint8_t logicalChannelGroup
logical channel group
std::list< uint8_t > measObjectToRemoveList
measure object to remove list
std::list< ReportConfigToAddMod > reportConfigToAddModList
report config to add mod list
bool haveQuantityConfig
have quantity config?
bool haveSpeedStatePars
have speed state parameters?
uint8_t sMeasure
S measure.
std::list< uint8_t > reportConfigToRemoveList
report config to remove list
std::list< MeasObjectToAddMod > measObjectToAddModList
measure object to add mod list
SpeedStatePars speedStatePars
speed state parameters
bool haveSmeasure
have S measure?
MeasGapConfig measGapConfig
measure gap config
std::list< uint8_t > measIdToRemoveList
measure ID to remove list
QuantityConfig quantityConfig
quantity config
bool haveMeasGapConfig
have measure gap config?
std::list< MeasIdToAddMod > measIdToAddModList
measure ID to add mod list
Gap gapOffsetChoice
gap offset
uint8_t gapOffsetValue
gap offset value
MeasIdToAddMod structure.
uint8_t measObjectId
measure object ID
uint8_t reportConfigId
report config ID
std::list< CellsToAddMod > cellsToAddModList
cells to add mod list
uint32_t carrierFreq
carrier frequency
uint16_t allowedMeasBandwidth
allowed measure bandwidth
uint8_t neighCellConfig
neighbor cell config
bool haveCellForWhichToReportCGI
have cell for which to report CGI?
std::list< uint8_t > cellsToRemoveList
cells to remove list
bool presenceAntennaPort1
antenna port 1 present?
uint16_t cellForWhichToReportCGI
cell for which to report CGI
std::list< uint8_t > blackCellsToRemoveList
black cells to remove list
std::list< BlackCellsToAddMod > blackCellsToAddModList
black cells to add mod list
int8_t offsetFreq
offset frequency
MeasObjectToAddMod structure.
MeasObjectEutra measObjectEutra
measure object eutra
uint8_t measObjectId
measure object ID
uint8_t rsrpResult
the RSRP result
uint16_t physCellId
physical cell ID
uint8_t rsrqResult
the RSRQ result
MeasResultEutra structure.
bool haveCgiInfo
have CGI info?
bool haveRsrpResult
have RSRP result
bool haveRsrqResult
have RSRQ result?
uint8_t rsrqResult
RSRQ result.
uint8_t rsrpResult
RSRP result.
uint16_t physCellId
Phy cell ID.
uint8_t rsrpResult
the RSRP result
uint8_t rsrqResult
the RSRQ result
uint8_t rsrqResult
the RSRQ result
uint8_t rsrpResult
the RSRP result
MeasResultServFreq structure.
MeasResultSCell measResultSCell
SCell measurement results.
bool haveMeasResultBestNeighCell
have measResultBestNeighCell?
bool haveMeasResultSCell
have measResultSCell?
uint16_t servFreqId
serving cell index
MeasResultBestNeighCell measResultBestNeighCell
best neighbor cell measurement results
bool haveMeasResultNeighCells
have measure result neighbor cells
std::list< MeasResultServFreq > measResultServFreqList
MeasResultServFreqList-r10.
MeasResultPCell measResultPCell
measurement result primary cell
std::list< MeasResultEutra > measResultListEutra
measure result list eutra
bool haveMeasResultServFreqList
has measResultServFreqList-r10
MeasurementReport structure.
MeasResults measResults
measure results
MobilityControlInfo structure.
uint16_t newUeIdentity
new UE identity
RachConfigDedicated rachConfigDedicated
RACH config dedicated.
bool haveCarrierFreq
have carrier frequency?
uint16_t targetPhysCellId
target Phy cell ID
bool haveCarrierBandwidth
have carrier bandwidth?
bool haveRachConfigDedicated
Have RACH config dedicated?
CarrierBandwidthEutra carrierBandwidth
carrier bandwidth
CarrierFreqEutra carrierFreq
carrier frequency
RadioResourceConfigCommon radioResourceConfigCommon
radio resource config common
uint8_t tHystNormal
hyst normal
uint8_t nCellChangeHigh
cell change high
uint8_t nCellChangeMedium
cell change medium
uint8_t tEvaluation
evaluation
NonCriticalExtensionConfiguration structure.
std::list< SCellToAddMod > sCellToAddModList
SCell to add mod list.
std::list< uint8_t > sCellToReleaseList
SCell to release list.
uint16_t dlBandwidth
1: Cell characteristics
PdschConfigCommon pdschConfigCommon
4: Physical configuration, physical channels pdsch-ConfigCommon-r10
AntennaInfoCommon antennaInfoCommon
2: Physical configuration, general antennaInfoCommon-r10
int8_t pb
INTEGER (0..3),.
int8_t referenceSignalPower
INTEGER (-60..50),.
bool haveRange
has a range?
uint16_t start
starting cell ID
PhysicalConfigDedicated structure.
bool haveSoundingRsUlConfigDedicated
have sounding RS UL config dedicated?
SoundingRsUlConfigDedicated soundingRsUlConfigDedicated
sounding RS UL config dedicated
PdschConfigDedicated pdschConfigDedicated
PDSCH config dedicated.
AntennaInfoDedicated antennaInfo
antenna info
bool havePdschConfigDedicated
have PDSCH config dedicated?
bool haveAntennaInfoDedicated
have antenna info dedicated?
PhysicalConfigDedicatedSCell structure.
bool haveUlConfiguration
have UL configuration?
bool haveSoundingRsUlConfigDedicated
have sounding RS UL config dedicated?
PdschConfigDedicated pdschConfigDedicated
PDSCH config dedicated.
bool haveAntennaInfoDedicated
have antenna info dedicated?
SoundingRsUlConfigDedicated soundingRsUlConfigDedicated
sounding RS UL config dedicated
bool haveAntennaInfoUlDedicated
have antenna info UL dedicated?
AntennaInfoDedicated antennaInfo
antenna info dedicated
AntennaInfoDedicated antennaInfoUl
antenna info UL
bool haveNonUlConfiguration
have non UL configuration?
bool havePdschConfigDedicated
have PDSCH config dedicated?
uint32_t plmnIdentity
PLMN identity.
uint8_t numberOfRaPreambles
number of RA preambles
uint8_t filterCoefficientRSRP
filter coefficient RSRP
uint8_t filterCoefficientRSRQ
filter coefficient RSRQ
uint8_t raResponseWindowSize
RA response window size.
uint8_t preambleTransMax
preamble transmit maximum
RachConfigCommon structure.
PreambleInfo preambleInfo
preamble info
RaSupervisionInfo raSupervisionInfo
RA supervision info.
TxFailParam txFailParam
txFailParams
uint8_t raPreambleIndex
RA preamble index.
uint8_t raPrachMaskIndex
RA PRACH mask index.
RadioResourceConfigCommon structure.
RachConfigCommon rachConfigCommon
RACH config common.
RadioResourceConfigCommonSCell.
UlConfiguration ulConfiguration
UL configuration.
bool haveUlConfiguration
have UL configuration
NonUlConfiguration nonUlConfiguration
non UL configuration
bool haveNonUlConfiguration
have non UL configuration?
RadioResourceConfigCommonSib structure.
RachConfigCommon rachConfigCommon
RACH config common.
RadioResourceConfigDedicated structure.
std::list< DrbToAddMod > drbToAddModList
DRB to add mod list.
PhysicalConfigDedicated physicalConfigDedicated
physical config dedicated
std::list< uint8_t > drbToReleaseList
DRB to release list.
bool havePhysicalConfigDedicated
have physical config dedicated?
std::list< SrbToAddMod > srbToAddModList
SRB to add mod list.
RadioResourceConfigDedicatedSCell structure.
PhysicalConfigDedicatedSCell physicalConfigDedicatedSCell
physical config dedicated SCell
ReestabUeIdentity structure.
uint16_t physCellId
Phy cell ID.
enum ns3::NrRrcSap::ReportConfigEutra::@5 triggerQuantity
Trigger type enumeration.
enum ns3::NrRrcSap::ReportConfigEutra::@6 reportQuantity
Report type enumeration.
@ RSRP
Reference Signal Received Power.
@ RSRQ
Reference Signal Received Quality.
enum ns3::NrRrcSap::ReportConfigEutra::@7 reportInterval
Report interval enumeration.
@ PERIODICAL
periodical report
@ EVENT_A2
Event A2: Serving becomes worse than absolute threshold.
@ EVENT_A1
Event A1: Serving becomes better than absolute threshold.
@ EVENT_A4
Event A4: Neighbour becomes better than absolute threshold.
@ EVENT_A3
Event A3: Neighbour becomes amount of offset better than PCell.
uint8_t reportAmount
Number of measurement reports applicable, always assumed to be infinite.
ThresholdEutra threshold2
Threshold for event A5.
enum ns3::NrRrcSap::ReportConfigEutra::@4 eventId
Event enumeration.
ThresholdEutra threshold1
Threshold for event A1, A2, A4, and A5.
enum ns3::NrRrcSap::ReportConfigEutra::@3 triggerType
Trigger enumeration.
ReportConfigToAddMod structure.
uint8_t reportConfigId
report config ID
ReportConfigEutra reportConfigEutra
report config eutra
Direction choice
direction choice
RrcConnectionReconfigurationCompleted structure.
uint8_t rrcTransactionIdentifier
RRC transaction identifier.
RrcConnectionReconfiguration structure.
MeasConfig measConfig
measure config
MobilityControlInfo mobilityControlInfo
mobility control info
bool haveRadioResourceConfigDedicated
have radio resource config dedicated
bool haveNonCriticalExtension
RadioResourceConfigDedicated radioResourceConfigDedicated
radio resource config dedicated
bool haveMobilityControlInfo
have mobility control info
NonCriticalExtensionConfiguration nonCriticalExtension
bool haveMeasConfig
have measure config
uint8_t rrcTransactionIdentifier
RRC transaction identifier.
RrcConnectionReestablishmentComplete structure.
uint8_t rrcTransactionIdentifier
RRC transaction identifier.
RrcConnectionReestablishment structure.
RadioResourceConfigDedicated radioResourceConfigDedicated
radio resource config dedicated
uint8_t rrcTransactionIdentifier
RRC transaction identifier.
RrcConnectionReestablishmentReject structure.
RrcConnectionReestablishmentRequest structure.
ReestabUeIdentity ueIdentity
UE identity.
ReestablishmentCause reestablishmentCause
reestablishment cause
RrcConnectionReject structure.
uint8_t waitTime
wait time
RrcConnectionRelease structure.
uint8_t rrcTransactionIdentifier
RRC transaction identifier.
RrcConnectionRequest structure.
uint64_t ueIdentity
UE identity.
RrcConnectionSetupCompleted structure.
uint8_t rrcTransactionIdentifier
RRC transaction identifier.
RrcConnectionSetup structure.
RadioResourceConfigDedicated radioResourceConfigDedicated
radio resource config dedicated
uint8_t rrcTransactionIdentifier
RRC transaction identifier.
bool haveRadioResourceConfigDedicatedSCell
have radio resource config dedicated SCell?
uint32_t sCellIndex
SCell index.
RadioResourceConfigDedicatedSCell radioResourceConfigDedicatedSCell
radio resource config dedicated SCell
CellIdentification cellIdentification
cell identification
RadioResourceConfigCommonSCell radioResourceConfigCommonSCell
radio resource config common SCell
uint16_t srsConfigIndex
SRS config index.
uint16_t srsBandwidth
SRS bandwidth.
SpeedStateScaleFactors timeToTriggerSf
time to trigger scale factors
MobilityStateParameters mobilityStateParameters
mobility state parameters
uint8_t sfHigh
scale factor high
uint8_t sfMedium
scale factor medium
uint8_t srbIdentity
SB identity.
LogicalChannelConfig logicalChannelConfig
logical channel config
Threshold for event evaluation.
enum ns3::NrRrcSap::ThresholdEutra::@2 choice
Threshold enumeration.
uint8_t range
Value range used in RSRP/RSRQ threshold.
@ THRESHOLD_RSRQ
RSRQ is used for the threshold.
@ THRESHOLD_RSRP
RSRP is used for the threshold.
uint8_t connEstFailCount
Number of times that the UE detects T300 expiry on the same cell.
FreqInfo ulFreqInfo
UL frequency info.
PrachConfigSCell prachConfigSCell
PRACH config SCell.
UlPowerControlCommonSCell ulPowerControlCommonSCell
3GPP TS 36.331 v.11.10 R11 pag.223
uint16_t alpha
alpha value