LCOV - code coverage report
Current view: top level - net - bgp_af.cc (source / functions) Hit Total Coverage
Test: OpenSDN C/C++ coverage (all TARGET_SET jobs) Lines: 152 161 94.4 %
Date: 2026-06-11 01:56:02 Functions: 6 6 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
       3             :  */
       4             : 
       5             : #include "net/bgp_af.h"
       6             : 
       7             : #include <sstream>
       8             : 
       9             : using std::make_pair;
      10             : using std::pair;
      11             : using std::ostringstream;
      12             : using std::string;
      13             : 
      14       65536 : string BgpAf::ToString(uint16_t afi, uint8_t safi) {
      15       65536 :     ostringstream out;
      16       65536 :     switch (static_cast<Afi>(afi)) {
      17         256 :         case IPv4:
      18         256 :             out << "IPv4:";
      19         256 :             break;
      20         256 :         case IPv6:
      21         256 :             out << "IPv6:";
      22         256 :             break;
      23         256 :         case L2Vpn:
      24         256 :             out << "L2Vpn:";
      25         256 :             break;
      26         256 :         case UnknownAfi:
      27         256 :             out << "Afi=" << afi << ":";
      28         256 :             break;
      29             :     }
      30             : 
      31       65536 :     if (out.str().empty())
      32       64512 :         out << "Afi=" << afi << ":";
      33             : 
      34       65536 :     switch (static_cast<Safi>(safi)) {
      35         256 :         case Unicast:
      36         256 :             out << "Unicast";
      37         256 :             return out.str();
      38         256 :         case EVpn:
      39         256 :             out << "EVpn";
      40         256 :             return out.str();
      41         256 :         case Vpn:
      42         256 :             out << "Vpn";
      43         256 :             return out.str();
      44         256 :         case Enet:
      45         256 :             out << "Enet";
      46         256 :             return out.str();
      47         256 :         case ErmVpn:
      48         256 :             out << "ErmVpn";
      49         256 :             return out.str();
      50         256 :         case MVpn:
      51         256 :             out << "MVpn";
      52         256 :             return out.str();
      53         256 :         case Mcast:
      54         256 :             out << "Mcast";
      55         256 :             return out.str();
      56         256 :         case RTarget:
      57         256 :             out << "RTarget";
      58         256 :             return out.str();
      59         256 :         case Mpls:
      60         256 :             out << "Mpls";
      61         256 :             return out.str();
      62         256 :         case UnknownSafi:
      63         256 :             out << "Safi=" << int(safi);
      64         256 :             return out.str();
      65             :     }
      66             : 
      67       62976 :     out << "Safi=" << int(safi);
      68       62976 :     return out.str();
      69       65536 : }
      70             : 
      71     1551209 : Address::Family BgpAf::AfiSafiToFamily(uint16_t afi, uint8_t safi) {
      72     1551209 :     switch (afi) {
      73         256 :     case UnknownSafi:
      74         256 :         return Address::UNSPEC;
      75      981250 :     case IPv4:
      76      981250 :         switch (safi) {
      77       42797 :         case Unicast:
      78       42797 :             return Address::INET;
      79          89 :         case Mpls:
      80          89 :             return Address::INETMPLS;
      81        1694 :         case MVpn:
      82        1694 :             return Address::MVPN;
      83      477238 :         case Vpn:
      84      477238 :             return Address::INETVPN;
      85       39910 :         case RTarget:
      86       39910 :             return Address::RTARGET;
      87      419274 :         case ErmVpn:
      88      419274 :             return Address::ERMVPN;
      89           4 :         case UnknownSafi:
      90             :         case EVpn:
      91             :         case Mcast:
      92             :         case Enet:
      93           4 :             return Address::UNSPEC;
      94             :         }
      95             :     case IPv6:
      96       69439 :         switch (safi) {
      97       11993 :         case Unicast:
      98       11993 :             return Address::INET6;
      99       56948 :         case Vpn:
     100       56948 :             return Address::INET6VPN;
     101           8 :         case UnknownSafi:
     102             :         case Mpls:
     103             :         case MVpn:
     104             :         case RTarget:
     105             :         case ErmVpn:
     106             :         case EVpn:
     107             :         case Mcast:
     108             :         case Enet:
     109           8 :             return Address::UNSPEC;
     110             :         }
     111             :     case L2Vpn:
     112      436503 :         switch (safi) {
     113      435758 :         case EVpn:
     114      435758 :             return Address::EVPN;
     115           9 :         case Unicast:
     116             :         case Vpn:
     117             :         case UnknownSafi:
     118             :         case Mpls:
     119             :         case MVpn:
     120             :         case RTarget:
     121             :         case ErmVpn:
     122             :         case Mcast:
     123             :         case Enet:
     124           9 :             return Address::UNSPEC;
     125             :         }
     126             :     }
     127       65250 :     return Address::UNSPEC;
     128             : }
     129             : 
     130     1140263 : pair<uint16_t, uint8_t> BgpAf::FamilyToAfiSafi(Address::Family family) {
     131     1140263 :     switch (family) {
     132       13465 :     case Address::INET:
     133       13465 :         return make_pair(BgpAf::IPv4, BgpAf::Unicast);
     134          52 :     case Address::INETMPLS:
     135          52 :         return make_pair(BgpAf::IPv4, BgpAf::Mpls);
     136      274123 :     case Address::INETVPN:
     137      274123 :         return make_pair(BgpAf::IPv4, BgpAf::Vpn);
     138      346797 :     case Address::RTARGET:
     139      346797 :         return make_pair(BgpAf::IPv4, BgpAf::RTarget);
     140      216577 :     case Address::ERMVPN:
     141      216577 :         return make_pair(BgpAf::IPv4, BgpAf::ErmVpn);
     142        1741 :     case Address::MVPN:
     143        1741 :         return make_pair(BgpAf::IPv4, BgpAf::MVpn);
     144        8048 :     case Address::INET6:
     145        8048 :         return make_pair(BgpAf::IPv6, BgpAf::Unicast);
     146       54174 :     case Address::INET6VPN:
     147       54174 :         return make_pair(BgpAf::IPv6, BgpAf::Vpn);
     148      225314 :     case Address::EVPN:
     149      225314 :         return make_pair(BgpAf::L2Vpn, BgpAf::EVpn);
     150           0 :     case Address::NUM_FAMILIES:
     151             :     case Address::UNSPEC:
     152           0 :         return make_pair(BgpAf::UnknownAfi, BgpAf::UnknownSafi);
     153             :     }
     154             : 
     155           0 :     assert(false);
     156             :     return make_pair(BgpAf::UnknownAfi, BgpAf::UnknownSafi);
     157             : }
     158             : 
     159     1538532 : BgpAf::Afi BgpAf::FamilyToAfi(Address::Family family) {
     160     1538532 :     switch (family) {
     161      594375 :     case Address::INET:
     162      594375 :         return BgpAf::IPv4;
     163          71 :     case Address::INETMPLS:
     164          71 :         return BgpAf::IPv4;
     165      116542 :     case Address::INETVPN:
     166      116542 :         return BgpAf::IPv4;
     167       51903 :     case Address::RTARGET:
     168       51903 :         return BgpAf::IPv4;
     169       12132 :     case Address::ERMVPN:
     170       12132 :         return BgpAf::IPv4;
     171      206141 :     case Address::MVPN:
     172      206141 :         return BgpAf::IPv4;
     173      407746 :     case Address::INET6:
     174      407746 :         return BgpAf::IPv6;
     175       86050 :     case Address::INET6VPN:
     176       86050 :         return BgpAf::IPv6;
     177       63715 :     case Address::EVPN:
     178       63715 :         return BgpAf::L2Vpn;
     179           0 :     case Address::NUM_FAMILIES:
     180             :     case Address::UNSPEC:
     181           0 :         return BgpAf::UnknownAfi;
     182             :     }
     183             : 
     184           0 :     assert(false);
     185             :     return BgpAf::UnknownAfi;
     186             : }
     187             : 
     188     1467142 : BgpAf::Safi BgpAf::FamilyToSafi(Address::Family family) {
     189     1467142 :     switch (family) {
     190      594377 :     case Address::INET:
     191      594377 :         return BgpAf::Unicast;
     192          71 :     case Address::INETMPLS:
     193          71 :         return BgpAf::Mpls;
     194      116547 :     case Address::INETVPN:
     195      116547 :         return BgpAf::Vpn;
     196       51903 :     case Address::RTARGET:
     197       51903 :         return BgpAf::RTarget;
     198        7056 :     case Address::ERMVPN:
     199        7056 :         return BgpAf::ErmVpn;
     200      206141 :     case Address::MVPN:
     201      206141 :         return BgpAf::MVpn;
     202      405104 :     case Address::INET6:
     203      405104 :         return BgpAf::Unicast;
     204       56002 :     case Address::INET6VPN:
     205       56002 :         return BgpAf::Vpn;
     206       30011 :     case Address::EVPN:
     207       30011 :         return BgpAf::EVpn;
     208           0 :     case Address::NUM_FAMILIES:
     209             :     case Address::UNSPEC:
     210           0 :         return BgpAf::UnknownSafi;
     211             :     }
     212             : 
     213           0 :     assert(false);
     214             :     return BgpAf::UnknownSafi;
     215             : }
     216             : 
     217     1210947 : uint8_t BgpAf::FamilyToXmppSafi(Address::Family family) {
     218     1210947 :     switch (family) {
     219        5077 :     case Address::ERMVPN:
     220        5077 :         return BgpAf::Mcast;
     221       21042 :     case Address::EVPN:
     222       21042 :         return BgpAf::Enet;
     223     1184828 :     default:
     224     1184828 :         return static_cast<uint8_t>(BgpAf::FamilyToSafi(family));
     225             :     }
     226             : }

Generated by: LCOV version 1.14