From 427b7d70675a0d172215bb629cb1e254186a25d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Apitzsch?= Date: Fri, 22 Mar 2024 16:56:23 +0100 Subject: [PATCH] lte: Refactor GetRequirementsRel*() Simplify code as support for GCC 4.9 is no longer needed. --- src/lte/model/eps-bearer.cc | 135 ++++++++++++++++-------------------- src/lte/model/eps-bearer.h | 21 +----- 2 files changed, 62 insertions(+), 94 deletions(-) diff --git a/src/lte/model/eps-bearer.cc b/src/lte/model/eps-bearer.cc index ed3a659b48..c6557f701d 100644 --- a/src/lte/model/eps-bearer.cc +++ b/src/lte/model/eps-bearer.cc @@ -138,27 +138,16 @@ EpsBearer::GetPacketErrorLossRate() const const EpsBearer::BearerRequirementsMap& EpsBearer::GetRequirementsRel11() { - /* Needed to support GCC 4.9. Otherwise, use list constructors, for example: - * EpsBearer::BearerRequirementsMap - * EpsBearer::GetRequirementsRel15 () - * { - * return - * { - * { GBR_CONV_VOICE , { 1, 20, 100, 1.0e-2, 0, 2000} }, - * ... - * }; - * } - */ 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)}, + {GBR_CONV_VOICE, {1, 2, 100, 1.0e-2, 0, 0}}, + {GBR_CONV_VIDEO, {1, 4, 150, 1.0e-3, 0, 0}}, + {GBR_GAMING, {1, 3, 50, 1.0e-3, 0, 0}}, + {GBR_NON_CONV_VIDEO, {1, 5, 300, 1.0e-6, 0, 0}}, + {NGBR_IMS, {0, 1, 100, 1.0e-6, 0, 0}}, + {NGBR_VIDEO_TCP_OPERATOR, {0, 6, 300, 1.0e-6, 0, 0}}, + {NGBR_VOICE_VIDEO_GAMING, {0, 7, 100, 1.0e-3, 0, 0}}, + {NGBR_VIDEO_TCP_PREMIUM, {0, 8, 300, 1.0e-6, 0, 0}}, + {NGBR_VIDEO_TCP_DEFAULT, {0, 9, 300, 1.0e-6, 0, 0}}, }; return ret; } @@ -166,29 +155,28 @@ EpsBearer::GetRequirementsRel11() const EpsBearer::BearerRequirementsMap& EpsBearer::GetRequirementsRel15() { - // 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)}, - {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)}, + {GBR_CONV_VOICE, {1, 20, 100, 1.0e-2, 0, 2000}}, + {GBR_CONV_VIDEO, {1, 40, 150, 1.0e-3, 0, 2000}}, + {GBR_GAMING, {1, 30, 50, 1.0e-3, 0, 2000}}, + {GBR_NON_CONV_VIDEO, {1, 50, 300, 1.0e-6, 0, 2000}}, + {GBR_MC_PUSH_TO_TALK, {1, 7, 75, 1.0e-2, 0, 2000}}, + {GBR_NMC_PUSH_TO_TALK, {1, 20, 100, 1.0e-2, 0, 2000}}, + {GBR_MC_VIDEO, {1, 15, 100, 1.0e-3, 0, 2000}}, + {GBR_V2X, {1, 25, 50, 1.0e-2, 0, 2000}}, + {NGBR_IMS, {0, 10, 100, 1.0e-6, 0, 0}}, + {NGBR_VIDEO_TCP_OPERATOR, {0, 60, 300, 1.0e-6, 0, 0}}, + {NGBR_VOICE_VIDEO_GAMING, {0, 70, 100, 1.0e-3, 0, 0}}, + {NGBR_VIDEO_TCP_PREMIUM, {0, 80, 300, 1.0e-6, 0, 0}}, + {NGBR_VIDEO_TCP_DEFAULT, {0, 90, 300, 1.0e-6, 0, 0}}, + {NGBR_MC_DELAY_SIGNAL, {0, 5, 60, 1.0e-6, 0, 0}}, + {NGBR_MC_DATA, {0, 55, 200, 1.0e-6, 0, 0}}, + {NGBR_V2X, {0, 65, 5, 1.0e-2, 0, 0}}, + {NGBR_LOW_LAT_EMBB, {0, 68, 10, 1.0e-6, 0, 0}}, + {DGBR_DISCRETE_AUT_SMALL, {2, 19, 10, 1.0e-4, 255, 2000}}, + {DGBR_DISCRETE_AUT_LARGE, {2, 22, 10, 1.0e-4, 1358, 2000}}, + {DGBR_ITS, {2, 24, 30, 1.0e-5, 1354, 2000}}, + {DGBR_ELECTRICITY, {2, 21, 5, 1.0e-5, 255, 2000}}, }; return ret; } @@ -196,39 +184,38 @@ EpsBearer::GetRequirementsRel15() 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)}, + {GBR_CONV_VOICE, {1, 20, 100, 1.0e-2, 0, 2000}}, + {GBR_CONV_VIDEO, {1, 40, 150, 1.0e-3, 0, 2000}}, + {GBR_GAMING, {1, 30, 50, 1.0e-3, 0, 2000}}, + {GBR_NON_CONV_VIDEO, {1, 50, 300, 1.0e-6, 0, 2000}}, + {GBR_MC_PUSH_TO_TALK, {1, 7, 75, 1.0e-2, 0, 2000}}, + {GBR_NMC_PUSH_TO_TALK, {1, 20, 100, 1.0e-2, 0, 2000}}, + {GBR_MC_VIDEO, {1, 15, 100, 1.0e-3, 0, 2000}}, + {GBR_V2X, {1, 25, 50, 1.0e-2, 0, 2000}}, + {NGBR_IMS, {0, 10, 100, 1.0e-6, 0, 0}}, + {NGBR_VIDEO_TCP_OPERATOR, {0, 60, 300, 1.0e-6, 0, 0}}, + {NGBR_VOICE_VIDEO_GAMING, {0, 70, 100, 1.0e-3, 0, 0}}, + {NGBR_VIDEO_TCP_PREMIUM, {0, 80, 300, 1.0e-6, 0, 0}}, + {NGBR_VIDEO_TCP_DEFAULT, {0, 90, 300, 1.0e-6, 0, 0}}, + {NGBR_MC_DELAY_SIGNAL, {0, 5, 60, 1.0e-6, 0, 0}}, + {NGBR_MC_DATA, {0, 55, 200, 1.0e-6, 0, 0}}, + {NGBR_V2X, {0, 65, 5, 1.0e-2, 0, 0}}, + {NGBR_LOW_LAT_EMBB, {0, 68, 10, 1.0e-6, 0, 0}}, + {GBR_LIVE_UL_71, {1, 56, 150, 1.0e-6, 0, 0}}, + {GBR_LIVE_UL_72, {1, 56, 300, 1.0e-4, 0, 0}}, + {GBR_LIVE_UL_73, {1, 56, 300, 1.0e-8, 0, 0}}, + {GBR_LIVE_UL_74, {1, 56, 500, 1.0e-8, 0, 0}}, + {GBR_LIVE_UL_76, {1, 56, 500, 1.0e-4, 0, 0}}, + {DGBR_DISCRETE_AUT_SMALL, {2, 19, 10, 1.0e-4, 255, 2000}}, + {DGBR_DISCRETE_AUT_LARGE, {2, 22, 10, 1.0e-4, 1358, 2000}}, + {DGBR_ITS, {2, 24, 30, 1.0e-5, 1354, 2000}}, + {DGBR_ELECTRICITY, {2, 21, 5, 1.0e-5, 255, 2000}}, + {DGBR_V2X, {2, 18, 5, 1.0e-4, 1354, 2000}}, + {DGBR_INTER_SERV_87, {2, 25, 5, 1.0e-3, 500, 2000}}, + {DGBR_INTER_SERV_88, {2, 25, 10, 1.0e-3, 1125, 2000}}, + {DGBR_VISUAL_CONTENT_89, {2, 25, 15, 1.0e-4, 17000, 2000}}, + {DGBR_VISUAL_CONTENT_90, {2, 25, 20, 1.0e-4, 63000, 2000}}, }; return ret; } diff --git a/src/lte/model/eps-bearer.h b/src/lte/model/eps-bearer.h index a2675466b8..fa0da3bded 100644 --- a/src/lte/model/eps-bearer.h +++ b/src/lte/model/eps-bearer.h @@ -309,26 +309,12 @@ class EpsBearer : public ObjectBase /** * @brief Retrieve requirements for Rel. 11 * @return the BearerRequirementsMap for Release 11 - * - * It returns a pointer to a non-const static data. That is not thread-safe, - * nor safe to do in general. However, a const-correct version would have - * to initialize two static maps, and then returning either one or the other. - * But that's a huge memory increase, and EpsBearer is used everywhere. - * - * To be revisited when GCC 4.9 will not be supported anymore. */ static const BearerRequirementsMap& GetRequirementsRel11(); /** * @brief Retrieve requirements for Rel. 15 * @return the BearerRequirementsMap for Release 15 - * - * It returns a pointer to a non-const static data. That is not thread-safe, - * nor safe to do in general. However, a const-correct version would have - * to initialize two static maps, and then returning either one or the other. - * But that's a huge memory increase, and EpsBearer is used everywhere. - * - * To be revisited when GCC 4.9 will not be supported anymore. */ static const BearerRequirementsMap& GetRequirementsRel15(); @@ -338,12 +324,7 @@ class EpsBearer : public ObjectBase */ static const BearerRequirementsMap& GetRequirementsRel18(); - /** - * @brief Requirements pointer per bearer - * - * It will point to a static map. - */ - BearerRequirementsMap m_requirements; + BearerRequirementsMap m_requirements; //!< Map of requirements per bearer uint8_t m_release{30}; //!< Release (10 or 15 or 18) };