LCOV - code coverage report
Current view: top level - root/contrail/src/contrail-common/base - bgp_as_service_utils.cc (source / functions) Hit Total Coverage
Test: OpenSDN C/C++ coverage (all TARGET_SET jobs) Lines: 17 17 100.0 %
Date: 2026-08-03 02:19:58 Functions: 2 2 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2017 Juniper Networks, Inc. All rights reserved.
       3             :  */
       4             : 
       5             : #include <base/bgp_as_service_utils.h>
       6             : /*
       7             :  *  This utils apis will be used by BGP As A Service feature to map
       8             :  *  between the original service port allocated for the given BgpAsAService
       9             :  *  session and the derived service port for each VMI who is sharing the same
      10             :  *  session
      11             :  *  GetDerivedBgpaasServicePortRange - From the given config port range and max
      12             :  *  session, derive the internal port range
      13             :  *  Port range and maximum number of VMIs who is sharing the given BgpAsAService
      14             :  *  session will be given by config
      15             :  *  EncodeBgpaasServicePort - For the given original service port and
      16             :  *  index, derive the service port which will be used by the corresponding
      17             :  *  flow which is associated with the corresponding VMI.
      18             :  *  DecodeBgpaasServicePort - For the given service port, decode the
      19             :  *  original service port and the index for the given port.
      20             :  *  From the given range, the dervied port will be defined as follows,
      21             :  *   Ex : User Configured Range : 50000 - 50512
      22             :  *        Session:1 : config allocates : 50000 for VMI1
      23             :  *        Sharing the session-1 for VMI2: allocates 50513
      24             :  *        Sharing the session-1 for VMI3: allocates 51026
      25             :  *
      26             :  *        Session:2 : config allocates : 50001 for VMI4
      27             :  *        Sharing the session-2 for VMI5: allocates 50514
      28             :  *        Sharing the session-2 for VMI6: allocates 51027
      29             :  */
      30             : using namespace std;
      31         792 : BGPaaSUtils::BgpAsServicePortIndexPair BGPaaSUtils::DecodeBgpaasServicePort(
      32             :                                             const uint32_t sport,
      33             :                                             const uint16_t port_range_start,
      34             :                                             const uint16_t port_range_end) {
      35         792 :     size_t   index = 0;
      36             :     uint32_t original_sport;
      37             : 
      38         792 :     if (!port_range_start || !port_range_end || sport < port_range_start) {
      39         665 :         return std::make_pair(sport, index);
      40             :     }
      41             : 
      42         127 :     if ((sport >= port_range_start) &&
      43         127 :         (sport <= port_range_end)) {
      44          23 :         return std::make_pair(sport, index);
      45             :     }
      46             : 
      47         104 :     uint16_t port_range = port_range_end - port_range_start + 1;
      48             : 
      49             :     /*
      50             :      *  From the given derived port, the original port will be
      51             :      *  calculated based on posisiton in the the given port range in
      52             :      *  addition to the port range start.
      53             :      *  Ex : given port is 51026 and the range is 50000-50512
      54             :      *       original port will be 50000 and index will be 2
      55             :      */
      56         104 :     original_sport = (((sport - port_range_end) % port_range) - 1)
      57         104 :                                         + port_range_start;
      58         104 :     index = ((sport - port_range_end) / port_range) + 1;
      59             : 
      60         104 :     return std::make_pair(original_sport, index);
      61             : }
      62             : 
      63         146 : uint32_t BGPaaSUtils::EncodeBgpaasServicePort(const uint32_t sport,
      64             :                                             const size_t   index,
      65             :                                             const uint16_t port_range_start,
      66             :                                             const uint16_t port_range_end) {
      67         146 :     if (!index || !port_range_start || !port_range_end) {
      68          26 :         return sport;
      69             :     }
      70             : 
      71         120 :     uint16_t port_range = port_range_end - port_range_start + 1;
      72             :     /*
      73             :      *  From the given original port and index, the derived port will be
      74             :      *  calculated based on selection of derived range which is the multiple
      75             :      *  of given port range by the given index in addition to the position of
      76             :      *  the original port with respect to port range start.
      77             :      *  Ex : given port, index : 50000, 2 and the range is 50000-50512
      78             :      *       derived port port will be 51026
      79             :      */
      80             :     return static_cast<uint32_t>(port_range_start + (port_range * index)
      81         120 :         + (sport - port_range_start));
      82             : }

Generated by: LCOV version 1.14