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-11-09 02:10:49 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             :  * Copyright Contributors to the OpenSDN project
       4             :  */
       5             : 
       6             : #include "net/bgp_af.h"
       7             : 
       8             : #include <sstream>
       9             : 
      10             : using std::make_pair;
      11             : using std::pair;
      12             : using std::ostringstream;
      13             : using std::string;
      14             : 
      15       65536 : string BgpAf::ToString(uint16_t afi, uint8_t safi) {
      16       65536 :     ostringstream out;
      17       65536 :     switch (static_cast<Afi>(afi)) {
      18         256 :         case IPv4:
      19         256 :             out << "IPv4:";
      20         256 :             break;
      21         256 :         case IPv6:
      22         256 :             out << "IPv6:";
      23         256 :             break;
      24         256 :         case L2Vpn:
      25         256 :             out << "L2Vpn:";
      26         256 :             break;
      27         256 :         case UnknownAfi:
      28         256 :             out << "Afi=" << afi << ":";
      29         256 :             break;
      30             :     }
      31             : 
      32       65536 :     if (out.str().empty())
      33       64512 :         out << "Afi=" << afi << ":";
      34             : 
      35       65536 :     switch (static_cast<Safi>(safi)) {
      36         256 :         case Unicast:
      37         256 :             out << "Unicast";
      38         256 :             return out.str();
      39         256 :         case EVpn:
      40         256 :             out << "EVpn";
      41         256 :             return out.str();
      42         256 :         case Vpn:
      43         256 :             out << "Vpn";
      44         256 :             return out.str();
      45         256 :         case Enet:
      46         256 :             out << "Enet";
      47         256 :             return out.str();
      48         256 :         case ErmVpn:
      49         256 :             out << "ErmVpn";
      50         256 :             return out.str();
      51         256 :         case MVpn:
      52         256 :             out << "MVpn";
      53         256 :             return out.str();
      54         256 :         case Mcast:
      55         256 :             out << "Mcast";
      56         256 :             return out.str();
      57         256 :         case RTarget:
      58         256 :             out << "RTarget";
      59         256 :             return out.str();
      60         256 :         case Mpls:
      61         256 :             out << "Mpls";
      62         256 :             return out.str();
      63         256 :         case UnknownSafi:
      64         256 :             out << "Safi=" << int(safi);
      65         256 :             return out.str();
      66             :     }
      67             : 
      68       62976 :     out << "Safi=" << int(safi);
      69       62976 :     return out.str();
      70       65536 : }
      71             : 
      72     1547076 : Address::Family BgpAf::AfiSafiToFamily(uint16_t afi, uint8_t safi) {
      73     1547076 :     switch (afi) {
      74         256 :     case UnknownSafi:
      75         256 :         return Address::UNSPEC;
      76      978365 :     case IPv4:
      77      978365 :         switch (safi) {
      78       42844 :         case Unicast:
      79       42844 :             return Address::INET;
      80          98 :         case Mpls:
      81          98 :             return Address::INETMPLS;
      82        1702 :         case MVpn:
      83        1702 :             return Address::MVPN;
      84      475857 :         case Vpn:
      85      475857 :             return Address::INETVPN;
      86       39395 :         case RTarget:
      87       39395 :             return Address::RTARGET;
      88      418221 :         case ErmVpn:
      89      418221 :             return Address::ERMVPN;
      90           4 :         case UnknownSafi:
      91             :         case EVpn:
      92             :         case Mcast:
      93             :         case Enet:
      94           4 :             return Address::UNSPEC;
      95             :         }
      96             :     case IPv6:
      97       68652 :         switch (safi) {
      98       11849 :         case Unicast:
      99       11849 :             return Address::INET6;
     100       56305 :         case Vpn:
     101       56305 :             return Address::INET6VPN;
     102           8 :         case UnknownSafi:
     103             :         case Mpls:
     104             :         case MVpn:
     105             :         case RTarget:
     106             :         case ErmVpn:
     107             :         case EVpn:
     108             :         case Mcast:
     109             :         case Enet:
     110           8 :             return Address::UNSPEC;
     111             :         }
     112             :     case L2Vpn:
     113      436040 :         switch (safi) {
     114      435295 :         case EVpn:
     115      435295 :             return Address::EVPN;
     116           9 :         case Unicast:
     117             :         case Vpn:
     118             :         case UnknownSafi:
     119             :         case Mpls:
     120             :         case MVpn:
     121             :         case RTarget:
     122             :         case ErmVpn:
     123             :         case Mcast:
     124             :         case Enet:
     125           9 :             return Address::UNSPEC;
     126             :         }
     127             :     }
     128       65250 :     return Address::UNSPEC;
     129             : }
     130             : 
     131     1143078 : pair<uint16_t, uint8_t> BgpAf::FamilyToAfiSafi(Address::Family family) {
     132     1143078 :     switch (family) {
     133       13394 :     case Address::INET:
     134       13394 :         return make_pair(BgpAf::IPv4, BgpAf::Unicast);
     135          56 :     case Address::INETMPLS:
     136          56 :         return make_pair(BgpAf::IPv4, BgpAf::Mpls);
     137      272946 :     case Address::INETVPN:
     138      272946 :         return make_pair(BgpAf::IPv4, BgpAf::Vpn);
     139      352545 :     case Address::RTARGET:
     140      352545 :         return make_pair(BgpAf::IPv4, BgpAf::RTarget);
     141      215773 :     case Address::ERMVPN:
     142      215773 :         return make_pair(BgpAf::IPv4, BgpAf::ErmVpn);
     143        1741 :     case Address::MVPN:
     144        1741 :         return make_pair(BgpAf::IPv4, BgpAf::MVpn);
     145        7811 :     case Address::INET6:
     146        7811 :         return make_pair(BgpAf::IPv6, BgpAf::Unicast);
     147       53810 :     case Address::INET6VPN:
     148       53810 :         return make_pair(BgpAf::IPv6, BgpAf::Vpn);
     149      225018 :     case Address::EVPN:
     150      225018 :         return make_pair(BgpAf::L2Vpn, BgpAf::EVpn);
     151           0 :     case Address::NUM_FAMILIES:
     152             :     case Address::UNSPEC:
     153           0 :         return make_pair(BgpAf::UnknownAfi, BgpAf::UnknownSafi);
     154             :     }
     155             : 
     156           0 :     assert(false);
     157             :     return make_pair(BgpAf::UnknownAfi, BgpAf::UnknownSafi);
     158             : }
     159             : 
     160     1537802 : BgpAf::Afi BgpAf::FamilyToAfi(Address::Family family) {
     161     1537802 :     switch (family) {
     162      593841 :     case Address::INET:
     163      593841 :         return BgpAf::IPv4;
     164          86 :     case Address::INETMPLS:
     165          86 :         return BgpAf::IPv4;
     166      117808 :     case Address::INETVPN:
     167      117808 :         return BgpAf::IPv4;
     168       52517 :     case Address::RTARGET:
     169       52517 :         return BgpAf::IPv4;
     170       11939 :     case Address::ERMVPN:
     171       11939 :         return BgpAf::IPv4;
     172      206131 :     case Address::MVPN:
     173      206131 :         return BgpAf::IPv4;
     174      404319 :     case Address::INET6:
     175      404319 :         return BgpAf::IPv6;
     176       87504 :     case Address::INET6VPN:
     177       87504 :         return BgpAf::IPv6;
     178       63814 :     case Address::EVPN:
     179       63814 :         return BgpAf::L2Vpn;
     180           0 :     case Address::NUM_FAMILIES:
     181             :     case Address::UNSPEC:
     182           0 :         return BgpAf::UnknownAfi;
     183             :     }
     184             : 
     185           0 :     assert(false);
     186             :     return BgpAf::UnknownAfi;
     187             : }
     188             : 
     189     1466218 : BgpAf::Safi BgpAf::FamilyToSafi(Address::Family family) {
     190     1466218 :     switch (family) {
     191      593849 :     case Address::INET:
     192      593849 :         return BgpAf::Unicast;
     193          86 :     case Address::INETMPLS:
     194          86 :         return BgpAf::Mpls;
     195      117816 :     case Address::INETVPN:
     196      117816 :         return BgpAf::Vpn;
     197       52517 :     case Address::RTARGET:
     198       52517 :         return BgpAf::RTarget;
     199        6910 :     case Address::ERMVPN:
     200        6910 :         return BgpAf::ErmVpn;
     201      206131 :     case Address::MVPN:
     202      206131 :         return BgpAf::MVpn;
     203      401844 :     case Address::INET6:
     204      401844 :         return BgpAf::Unicast;
     205       57252 :     case Address::INET6VPN:
     206       57252 :         return BgpAf::Vpn;
     207       29883 :     case Address::EVPN:
     208       29883 :         return BgpAf::EVpn;
     209           0 :     case Address::NUM_FAMILIES:
     210             :     case Address::UNSPEC:
     211           0 :         return BgpAf::UnknownSafi;
     212             :     }
     213             : 
     214           0 :     assert(false);
     215             :     return BgpAf::UnknownSafi;
     216             : }
     217             : 
     218     1207220 : uint8_t BgpAf::FamilyToXmppSafi(Address::Family family) {
     219     1207220 :     switch (family) {
     220        5030 :     case Address::ERMVPN:
     221        5030 :         return BgpAf::Mcast;
     222       20916 :     case Address::EVPN:
     223       20916 :         return BgpAf::Enet;
     224     1181274 :     default:
     225     1181274 :         return static_cast<uint8_t>(BgpAf::FamilyToSafi(family));
     226             :     }
     227             : }

Generated by: LCOV version 1.14