Skip to content

Commit

Permalink
lte: Refactor GetRequirementsRel*()
Browse files Browse the repository at this point in the history
Simplify code as support for GCC 4.9 is no longer needed.
  • Loading branch information
a-andre authored and Gabrielcarvfer committed Nov 19, 2024
1 parent d8089b5 commit 427b7d7
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 94 deletions.
135 changes: 61 additions & 74 deletions src/lte/model/eps-bearer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -138,97 +138,84 @@ 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;
}

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;
}

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;
}
Expand Down
21 changes: 1 addition & 20 deletions src/lte/model/eps-bearer.h
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand All @@ -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)
};
Expand Down

0 comments on commit 427b7d7

Please sign in to comment.