lte: Add Release 18 QCIs
This commit is contained in:
@@ -52,7 +52,7 @@ EpsBearer::GetTypeId()
|
||||
.AddConstructor<EpsBearer>()
|
||||
.AddAttribute(
|
||||
"Release",
|
||||
"Change from 11 to 15 if you need bearer definition as per Release 15."
|
||||
"Change from 11 to 18 if you need bearer definition as per newer Releases."
|
||||
" Reference document: TS 23.203. The change does not impact other LTE code than "
|
||||
" bearers definition.",
|
||||
UintegerValue(11),
|
||||
@@ -111,9 +111,13 @@ EpsBearer::SetRelease(uint8_t release)
|
||||
case 15:
|
||||
m_requirements = GetRequirementsRel15();
|
||||
break;
|
||||
case 18:
|
||||
m_requirements = GetRequirementsRel18();
|
||||
break;
|
||||
default:
|
||||
NS_FATAL_ERROR("Not recognized release " << static_cast<uint32_t>(release)
|
||||
<< " please use a value between 8 and 11, or 15");
|
||||
<< " please choose a value between"
|
||||
" 8 and 11, or 15 or 18");
|
||||
}
|
||||
m_release = release;
|
||||
}
|
||||
@@ -121,28 +125,28 @@ EpsBearer::SetRelease(uint8_t release)
|
||||
uint8_t
|
||||
EpsBearer::GetResourceType() const
|
||||
{
|
||||
return GetResourceType(*m_requirements, qci);
|
||||
return GetResourceType(m_requirements, qci);
|
||||
}
|
||||
|
||||
uint8_t
|
||||
EpsBearer::GetPriority() const
|
||||
{
|
||||
return GetPriority(*m_requirements, qci);
|
||||
return GetPriority(m_requirements, qci);
|
||||
}
|
||||
|
||||
uint16_t
|
||||
EpsBearer::GetPacketDelayBudgetMs() const
|
||||
{
|
||||
return GetPacketDelayBudgetMs(*m_requirements, qci);
|
||||
return GetPacketDelayBudgetMs(m_requirements, qci);
|
||||
}
|
||||
|
||||
double
|
||||
EpsBearer::GetPacketErrorLossRate() const
|
||||
{
|
||||
return GetPacketErrorLossRate(*m_requirements, qci);
|
||||
return GetPacketErrorLossRate(m_requirements, qci);
|
||||
}
|
||||
|
||||
EpsBearer::BearerRequirementsMap*
|
||||
const EpsBearer::BearerRequirementsMap&
|
||||
EpsBearer::GetRequirementsRel11()
|
||||
{
|
||||
/* Needed to support GCC 4.9. Otherwise, use list constructors, for example:
|
||||
@@ -156,66 +160,88 @@ EpsBearer::GetRequirementsRel11()
|
||||
* };
|
||||
* }
|
||||
*/
|
||||
static EpsBearer::BearerRequirementsMap ret;
|
||||
|
||||
if (ret.empty())
|
||||
{
|
||||
ret.insert(std::make_pair(GBR_CONV_VOICE, std::make_tuple(1, 2, 100, 1.0e-2, 0, 0)));
|
||||
ret.insert(std::make_pair(GBR_CONV_VIDEO, std::make_tuple(1, 4, 150, 1.0e-3, 0, 0)));
|
||||
ret.insert(std::make_pair(GBR_GAMING, std::make_tuple(1, 3, 50, 1.0e-3, 0, 0)));
|
||||
ret.insert(std::make_pair(GBR_NON_CONV_VIDEO, std::make_tuple(1, 5, 300, 1.0e-6, 0, 0)));
|
||||
ret.insert(std::make_pair(NGBR_IMS, std::make_tuple(0, 1, 100, 1.0e-6, 0, 0)));
|
||||
ret.insert(
|
||||
std::make_pair(NGBR_VIDEO_TCP_OPERATOR, std::make_tuple(0, 6, 300, 1.0e-6, 0, 0)));
|
||||
ret.insert(
|
||||
std::make_pair(NGBR_VOICE_VIDEO_GAMING, std::make_tuple(0, 7, 100, 1.0e-3, 0, 0)));
|
||||
ret.insert(
|
||||
std::make_pair(NGBR_VIDEO_TCP_PREMIUM, std::make_tuple(0, 8, 300, 1.0e-6, 0, 0)));
|
||||
ret.insert(
|
||||
std::make_pair(NGBR_VIDEO_TCP_DEFAULT, std::make_tuple(0, 9, 300, 1.0e-6, 0, 0)));
|
||||
}
|
||||
return &ret;
|
||||
static EpsBearer::BearerRequirementsMap ret{
|
||||
{GBR_CONV_VOICE, std::make_tuple(1, 2, 100, 1.0e-2, 0, 0)},
|
||||
{GBR_CONV_VIDEO, std::make_tuple(1, 4, 150, 1.0e-3, 0, 0)},
|
||||
{GBR_GAMING, std::make_tuple(1, 3, 50, 1.0e-3, 0, 0)},
|
||||
{GBR_NON_CONV_VIDEO, std::make_tuple(1, 5, 300, 1.0e-6, 0, 0)},
|
||||
{NGBR_IMS, std::make_tuple(0, 1, 100, 1.0e-6, 0, 0)},
|
||||
{NGBR_VIDEO_TCP_OPERATOR, std::make_tuple(0, 6, 300, 1.0e-6, 0, 0)},
|
||||
{NGBR_VOICE_VIDEO_GAMING, std::make_tuple(0, 7, 100, 1.0e-3, 0, 0)},
|
||||
{NGBR_VIDEO_TCP_PREMIUM, std::make_tuple(0, 8, 300, 1.0e-6, 0, 0)},
|
||||
{NGBR_VIDEO_TCP_DEFAULT, std::make_tuple(0, 9, 300, 1.0e-6, 0, 0)},
|
||||
};
|
||||
return ret;
|
||||
}
|
||||
|
||||
EpsBearer::BearerRequirementsMap*
|
||||
const EpsBearer::BearerRequirementsMap&
|
||||
EpsBearer::GetRequirementsRel15()
|
||||
{
|
||||
// Needed to support GCC 4.9. Otherwise, use list constructors (see GetRequirementsRel10)
|
||||
static EpsBearer::BearerRequirementsMap ret;
|
||||
static EpsBearer::BearerRequirementsMap ret{
|
||||
{GBR_CONV_VOICE, std::make_tuple(1, 20, 100, 1.0e-2, 0, 2000)},
|
||||
{GBR_CONV_VIDEO, std::make_tuple(1, 40, 150, 1.0e-3, 0, 2000)},
|
||||
{GBR_GAMING, std::make_tuple(1, 30, 50, 1.0e-3, 0, 2000)},
|
||||
{GBR_NON_CONV_VIDEO, std::make_tuple(1, 50, 300, 1.0e-6, 0, 2000)},
|
||||
{GBR_MC_PUSH_TO_TALK, std::make_tuple(1, 7, 75, 1.0e-2, 0, 2000)},
|
||||
{GBR_NMC_PUSH_TO_TALK, std::make_tuple(1, 20, 100, 1.0e-2, 0, 2000)},
|
||||
{GBR_MC_VIDEO, std::make_tuple(1, 15, 100, 1.0e-3, 0, 2000)},
|
||||
{GBR_V2X, std::make_tuple(1, 25, 50, 1.0e-2, 0, 2000)},
|
||||
{NGBR_IMS, std::make_tuple(0, 10, 100, 1.0e-6, 0, 0)},
|
||||
{NGBR_VIDEO_TCP_OPERATOR, std::make_tuple(0, 60, 300, 1.0e-6, 0, 0)},
|
||||
{NGBR_VOICE_VIDEO_GAMING, std::make_tuple(0, 70, 100, 1.0e-3, 0, 0)},
|
||||
{NGBR_VIDEO_TCP_PREMIUM, std::make_tuple(0, 80, 300, 1.0e-6, 0, 0)},
|
||||
{NGBR_VIDEO_TCP_DEFAULT, std::make_tuple(0, 90, 300, 1.0e-6, 0, 0)},
|
||||
{NGBR_MC_DELAY_SIGNAL, std::make_tuple(0, 5, 60, 1.0e-6, 0, 0)},
|
||||
{NGBR_MC_DATA, std::make_tuple(0, 55, 200, 1.0e-6, 0, 0)},
|
||||
{NGBR_V2X, std::make_tuple(0, 65, 5, 1.0e-2, 0, 0)},
|
||||
{NGBR_LOW_LAT_EMBB, std::make_tuple(0, 68, 10, 1.0e-6, 0, 0)},
|
||||
{DGBR_DISCRETE_AUT_SMALL, std::make_tuple(2, 19, 10, 1.0e-4, 255, 2000)},
|
||||
{DGBR_DISCRETE_AUT_LARGE, std::make_tuple(2, 22, 10, 1.0e-4, 1358, 2000)},
|
||||
{DGBR_ITS, std::make_tuple(2, 24, 30, 1.0e-5, 1354, 2000)},
|
||||
{DGBR_ELECTRICITY, std::make_tuple(2, 21, 5, 1.0e-5, 255, 2000)},
|
||||
};
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (ret.empty())
|
||||
{
|
||||
ret.insert(std::make_pair(GBR_CONV_VOICE, std::make_tuple(1, 20, 100, 1.0e-2, 0, 2000)));
|
||||
ret.insert(std::make_pair(GBR_CONV_VIDEO, std::make_tuple(1, 40, 150, 1.0e-3, 0, 2000)));
|
||||
ret.insert(std::make_pair(GBR_GAMING, std::make_tuple(1, 30, 50, 1.0e-3, 0, 2000)));
|
||||
ret.insert(
|
||||
std::make_pair(GBR_NON_CONV_VIDEO, std::make_tuple(1, 50, 300, 1.0e-6, 0, 2000)));
|
||||
ret.insert(std::make_pair(GBR_MC_PUSH_TO_TALK, std::make_tuple(1, 7, 75, 1.0e-2, 0, 2000)));
|
||||
ret.insert(
|
||||
std::make_pair(GBR_NMC_PUSH_TO_TALK, std::make_tuple(1, 20, 100, 1.0e-2, 0, 2000)));
|
||||
ret.insert(std::make_pair(GBR_MC_VIDEO, std::make_tuple(1, 15, 100, 1.0e-3, 0, 2000)));
|
||||
ret.insert(std::make_pair(GBR_V2X, std::make_tuple(1, 25, 50, 1.0e-2, 0, 2000)));
|
||||
ret.insert(std::make_pair(NGBR_IMS, std::make_tuple(0, 10, 100, 1.0e-6, 0, 0)));
|
||||
ret.insert(
|
||||
std::make_pair(NGBR_VIDEO_TCP_OPERATOR, std::make_tuple(0, 60, 300, 1.0e-6, 0, 0)));
|
||||
ret.insert(
|
||||
std::make_pair(NGBR_VOICE_VIDEO_GAMING, std::make_tuple(0, 70, 100, 1.0e-3, 0, 0)));
|
||||
ret.insert(
|
||||
std::make_pair(NGBR_VIDEO_TCP_PREMIUM, std::make_tuple(0, 80, 300, 1.0e-6, 0, 0)));
|
||||
ret.insert(
|
||||
std::make_pair(NGBR_VIDEO_TCP_DEFAULT, std::make_tuple(0, 90, 300, 1.0e-6, 0, 0)));
|
||||
ret.insert(std::make_pair(NGBR_MC_DELAY_SIGNAL, std::make_tuple(0, 5, 60, 1.0e-6, 0, 0)));
|
||||
ret.insert(std::make_pair(NGBR_MC_DATA, std::make_tuple(0, 55, 200, 1.0e-6, 0, 0)));
|
||||
ret.insert(std::make_pair(NGBR_V2X, std::make_tuple(0, 65, 5, 1.0e-2, 0, 0)));
|
||||
ret.insert(std::make_pair(NGBR_LOW_LAT_EMBB, std::make_tuple(0, 68, 10, 1.0e-6, 0, 0)));
|
||||
ret.insert(
|
||||
std::make_pair(DGBR_DISCRETE_AUT_SMALL, std::make_tuple(2, 19, 10, 1.0e-4, 255, 2000)));
|
||||
ret.insert(std::make_pair(DGBR_DISCRETE_AUT_LARGE,
|
||||
std::make_tuple(2, 22, 10, 1.0e-4, 1358, 2000)));
|
||||
ret.insert(std::make_pair(DGBR_ITS, std::make_tuple(2, 24, 30, 1.0e-5, 1354, 2000)));
|
||||
ret.insert(std::make_pair(DGBR_ELECTRICITY, std::make_tuple(2, 21, 5, 1.0e-5, 255, 2000)));
|
||||
}
|
||||
return &ret;
|
||||
const EpsBearer::BearerRequirementsMap&
|
||||
EpsBearer::GetRequirementsRel18()
|
||||
{
|
||||
// Needed to support GCC 4.9. Otherwise, use list constructors (see GetRequirementsRel10)
|
||||
static EpsBearer::BearerRequirementsMap ret{
|
||||
{GBR_CONV_VOICE, std::make_tuple(1, 20, 100, 1.0e-2, 0, 2000)},
|
||||
{GBR_CONV_VIDEO, std::make_tuple(1, 40, 150, 1.0e-3, 0, 2000)},
|
||||
{GBR_GAMING, std::make_tuple(1, 30, 50, 1.0e-3, 0, 2000)},
|
||||
{GBR_NON_CONV_VIDEO, std::make_tuple(1, 50, 300, 1.0e-6, 0, 2000)},
|
||||
{GBR_MC_PUSH_TO_TALK, std::make_tuple(1, 7, 75, 1.0e-2, 0, 2000)},
|
||||
{GBR_NMC_PUSH_TO_TALK, std::make_tuple(1, 20, 100, 1.0e-2, 0, 2000)},
|
||||
{GBR_MC_VIDEO, std::make_tuple(1, 15, 100, 1.0e-3, 0, 2000)},
|
||||
{GBR_V2X, std::make_tuple(1, 25, 50, 1.0e-2, 0, 2000)},
|
||||
{NGBR_IMS, std::make_tuple(0, 10, 100, 1.0e-6, 0, 0)},
|
||||
{NGBR_VIDEO_TCP_OPERATOR, std::make_tuple(0, 60, 300, 1.0e-6, 0, 0)},
|
||||
{NGBR_VOICE_VIDEO_GAMING, std::make_tuple(0, 70, 100, 1.0e-3, 0, 0)},
|
||||
{NGBR_VIDEO_TCP_PREMIUM, std::make_tuple(0, 80, 300, 1.0e-6, 0, 0)},
|
||||
{NGBR_VIDEO_TCP_DEFAULT, std::make_tuple(0, 90, 300, 1.0e-6, 0, 0)},
|
||||
{NGBR_MC_DELAY_SIGNAL, std::make_tuple(0, 5, 60, 1.0e-6, 0, 0)},
|
||||
{NGBR_MC_DATA, std::make_tuple(0, 55, 200, 1.0e-6, 0, 0)},
|
||||
{NGBR_V2X, std::make_tuple(0, 65, 5, 1.0e-2, 0, 0)},
|
||||
{NGBR_LOW_LAT_EMBB, std::make_tuple(0, 68, 10, 1.0e-6, 0, 0)},
|
||||
{GBR_LIVE_UL_71, std::make_tuple(1, 56, 150, 1.0e-6, 0, 0)},
|
||||
{GBR_LIVE_UL_72, std::make_tuple(1, 56, 300, 1.0e-4, 0, 0)},
|
||||
{GBR_LIVE_UL_73, std::make_tuple(1, 56, 300, 1.0e-8, 0, 0)},
|
||||
{GBR_LIVE_UL_74, std::make_tuple(1, 56, 500, 1.0e-8, 0, 0)},
|
||||
{GBR_LIVE_UL_76, std::make_tuple(1, 56, 500, 1.0e-4, 0, 0)},
|
||||
{DGBR_DISCRETE_AUT_SMALL, std::make_tuple(2, 19, 10, 1.0e-4, 255, 2000)},
|
||||
{DGBR_DISCRETE_AUT_LARGE, std::make_tuple(2, 22, 10, 1.0e-4, 1358, 2000)},
|
||||
{DGBR_ITS, std::make_tuple(2, 24, 30, 1.0e-5, 1354, 2000)},
|
||||
{DGBR_ELECTRICITY, std::make_tuple(2, 21, 5, 1.0e-5, 255, 2000)},
|
||||
{DGBR_V2X, std::make_tuple(2, 18, 5, 1.0e-4, 1354, 2000)},
|
||||
{DGBR_INTER_SERV_87, std::make_tuple(2, 25, 5, 1.0e-3, 500, 2000)},
|
||||
{DGBR_INTER_SERV_88, std::make_tuple(2, 25, 10, 1.0e-3, 1125, 2000)},
|
||||
{DGBR_VISUAL_CONTENT_89, std::make_tuple(2, 25, 15, 1.0e-4, 17000, 2000)},
|
||||
{DGBR_VISUAL_CONTENT_90, std::make_tuple(2, 25, 20, 1.0e-4, 63000, 2000)},
|
||||
};
|
||||
return ret;
|
||||
}
|
||||
|
||||
} // namespace ns3
|
||||
|
||||
@@ -79,10 +79,10 @@ struct AllocationRetentionPriority
|
||||
*
|
||||
* Please note that from Release 8 (the latest when the LENA project finished)
|
||||
* to Release 11, the bearers ID and requirements are the same. From Release 12,
|
||||
* they started to change, and the latest version is now Release 15. However,
|
||||
* we do not support intermediate types: in other words, you can select from
|
||||
* Release 8 to Release 11, or Release 15. Any other value will result in a
|
||||
* program crash.
|
||||
* they started to change, and the latest version is now Release 18. However,
|
||||
* we do not support intermediate types between releases 11 and 15: in other words,
|
||||
* you can select from Release 8 to Release 11, or Release 15 or 18.
|
||||
* Any other value will result in a program crash.
|
||||
*
|
||||
* The release version only affect Bearer definitions. Other part of the LTE
|
||||
* module are not affected when changing the Release attribute.
|
||||
@@ -100,7 +100,7 @@ class EpsBearer : public ObjectBase
|
||||
|
||||
/**
|
||||
* QoS Class Indicator. See 3GPP 23.203 Section 6.1.7.2 for standard values.
|
||||
* Updated to Release 15.
|
||||
* Updated to Release 18.
|
||||
*/
|
||||
enum Qci : uint8_t
|
||||
{
|
||||
@@ -112,6 +112,11 @@ class EpsBearer : public ObjectBase
|
||||
GBR_NMC_PUSH_TO_TALK = 66, ///< GBR Non-Mission-Critical User Plane Push To Talk voice
|
||||
GBR_MC_VIDEO = 67, ///< GBR Mission Critical Video User Plane
|
||||
GBR_V2X = 75, ///< GBR V2X Messages
|
||||
GBR_LIVE_UL_71 = 71, ///< GBR Live UL streaming
|
||||
GBR_LIVE_UL_72 = 72, ///< GBR Live UL streaming
|
||||
GBR_LIVE_UL_73 = 73, ///< GBR Live UL streaming
|
||||
GBR_LIVE_UL_74 = 74, ///< GBR Live UL streaming
|
||||
GBR_LIVE_UL_76 = 76, ///< GBR Live UL streaming
|
||||
NGBR_IMS = 5, ///< Non-GBR IMS Signalling
|
||||
NGBR_VIDEO_TCP_OPERATOR =
|
||||
6, ///< Non-GBR TCP-based Video (Buffered Streaming, e.g., www, e-mail...)
|
||||
@@ -131,7 +136,16 @@ class EpsBearer : public ObjectBase
|
||||
83, ///< Delay-Critical GBR Discrete Automation Large Packets (TS 22.261)
|
||||
DGBR_ITS = 84, ///< Delay-Critical GBR Intelligent Transport Systems (TS 22.261)
|
||||
DGBR_ELECTRICITY =
|
||||
85, ///< Delay-Critical GBR Electricity Distribution High Voltage (TS 22.261)
|
||||
85, ///< Delay-Critical GBR Electricity Distribution High Voltage (TS 22.261)
|
||||
DGBR_V2X = 86, ///< Delay-Critical GBR V2X Messages (TS 23.501)
|
||||
DGBR_INTER_SERV_87 =
|
||||
87, ///< Delay-Critical GBR Interactive Service - Motion tracking data (TS 23.501)
|
||||
DGBR_INTER_SERV_88 =
|
||||
88, ///< Delay-Critical GBR Interactive Service - Motion tracking data (TS 23.501)
|
||||
DGBR_VISUAL_CONTENT_89 =
|
||||
89, ///< Delay-Critical GBR Visual Content for cloud/edge/split rendering (TS 23.501)
|
||||
DGBR_VISUAL_CONTENT_90 =
|
||||
90, ///< Delay-Critical GBR Visual Content for cloud/edge/split rendering (TS 23.501)
|
||||
};
|
||||
|
||||
Qci qci; ///< Qos class indicator
|
||||
@@ -335,7 +349,7 @@ class EpsBearer : public ObjectBase
|
||||
*
|
||||
* To be revisited when GCC 4.9 will not be supported anymore.
|
||||
*/
|
||||
static BearerRequirementsMap* GetRequirementsRel11();
|
||||
static const BearerRequirementsMap& GetRequirementsRel11();
|
||||
|
||||
/**
|
||||
* \brief Retrieve requirements for Rel. 15
|
||||
@@ -348,16 +362,22 @@ class EpsBearer : public ObjectBase
|
||||
*
|
||||
* To be revisited when GCC 4.9 will not be supported anymore.
|
||||
*/
|
||||
static BearerRequirementsMap* GetRequirementsRel15();
|
||||
static const BearerRequirementsMap& GetRequirementsRel15();
|
||||
|
||||
/**
|
||||
* \brief Retrieve requirements for Rel. 18
|
||||
* \return the BearerRequirementsMap for Release 18
|
||||
*/
|
||||
static const BearerRequirementsMap& GetRequirementsRel18();
|
||||
|
||||
/**
|
||||
* \brief Requirements pointer per bearer
|
||||
*
|
||||
* It will point to a static map.
|
||||
*/
|
||||
BearerRequirementsMap* m_requirements;
|
||||
BearerRequirementsMap m_requirements;
|
||||
|
||||
uint8_t m_release{30}; //!< Release (10 or 15)
|
||||
uint8_t m_release{30}; //!< Release (10 or 15 or 18)
|
||||
};
|
||||
|
||||
} // namespace ns3
|
||||
|
||||
Reference in New Issue
Block a user