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-08-03 02:19:58 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     1563854 : Address::Family BgpAf::AfiSafiToFamily(uint16_t afi, uint8_t safi) {
      72     1563854 :     switch (afi) {
      73         256 :     case UnknownSafi:
      74         256 :         return Address::UNSPEC;
      75      988796 :     case IPv4:
      76      988796 :         switch (safi) {
      77       43097 :         case Unicast:
      78       43097 :             return Address::INET;
      79          92 :         case Mpls:
      80          92 :             return Address::INETMPLS;
      81        1703 :         case MVpn:
      82        1703 :             return Address::MVPN;
      83      478488 :         case Vpn:
      84      478488 :             return Address::INETVPN;
      85       44518 :         case RTarget:
      86       44518 :             return Address::RTARGET;
      87      420650 :         case ErmVpn:
      88      420650 :             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       71230 :         switch (safi) {
      97       12094 :         case Unicast:
      98       12094 :             return Address::INET6;
      99       58638 :         case Vpn:
     100       58638 :             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      439801 :         switch (safi) {
     113      439057 :         case EVpn:
     114      439057 :             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     1151837 : pair<uint16_t, uint8_t> BgpAf::FamilyToAfiSafi(Address::Family family) {
     131     1151837 :     switch (family) {
     132       13599 :     case Address::INET:
     133       13599 :         return make_pair(BgpAf::IPv4, BgpAf::Unicast);
     134          54 :     case Address::INETMPLS:
     135          54 :         return make_pair(BgpAf::IPv4, BgpAf::Mpls);
     136      274787 :     case Address::INETVPN:
     137      274787 :         return make_pair(BgpAf::IPv4, BgpAf::Vpn);
     138      353481 :     case Address::RTARGET:
     139      353481 :         return make_pair(BgpAf::IPv4, BgpAf::RTarget);
     140      217418 :     case Address::ERMVPN:
     141      217418 :         return make_pair(BgpAf::IPv4, BgpAf::ErmVpn);
     142        1744 :     case Address::MVPN:
     143        1744 :         return make_pair(BgpAf::IPv4, BgpAf::MVpn);
     144        7964 :     case Address::INET6:
     145        7964 :         return make_pair(BgpAf::IPv6, BgpAf::Unicast);
     146       55359 :     case Address::INET6VPN:
     147       55359 :         return make_pair(BgpAf::IPv6, BgpAf::Vpn);
     148      227446 :     case Address::EVPN:
     149      227446 :         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     1550272 : BgpAf::Afi BgpAf::FamilyToAfi(Address::Family family) {
     160     1550272 :     switch (family) {
     161      600917 :     case Address::INET:
     162      600917 :         return BgpAf::IPv4;
     163          78 :     case Address::INETMPLS:
     164          78 :         return BgpAf::IPv4;
     165      117745 :     case Address::INETVPN:
     166      117745 :         return BgpAf::IPv4;
     167       53560 :     case Address::RTARGET:
     168       53560 :         return BgpAf::IPv4;
     169       12124 :     case Address::ERMVPN:
     170       12124 :         return BgpAf::IPv4;
     171      206155 :     case Address::MVPN:
     172      206155 :         return BgpAf::IPv4;
     173      407915 :     case Address::INET6:
     174      407915 :         return BgpAf::IPv6;
     175       87261 :     case Address::INET6VPN:
     176       87261 :         return BgpAf::IPv6;
     177       64658 :     case Address::EVPN:
     178       64658 :         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     1478557 : BgpAf::Safi BgpAf::FamilyToSafi(Address::Family family) {
     189     1478557 :     switch (family) {
     190      600918 :     case Address::INET:
     191      600918 :         return BgpAf::Unicast;
     192          78 :     case Address::INETMPLS:
     193          78 :         return BgpAf::Mpls;
     194      117751 :     case Address::INETVPN:
     195      117751 :         return BgpAf::Vpn;
     196       53560 :     case Address::RTARGET:
     197       53560 :         return BgpAf::RTarget;
     198        7025 :     case Address::ERMVPN:
     199        7025 :         return BgpAf::ErmVpn;
     200      206155 :     case Address::MVPN:
     201      206155 :         return BgpAf::MVpn;
     202      405479 :     case Address::INET6:
     203      405479 :         return BgpAf::Unicast;
     204       57054 :     case Address::INET6VPN:
     205       57054 :         return BgpAf::Vpn;
     206       30596 :     case Address::EVPN:
     207       30596 :         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     1217775 : uint8_t BgpAf::FamilyToXmppSafi(Address::Family family) {
     218     1217775 :     switch (family) {
     219        5100 :     case Address::ERMVPN:
     220        5100 :         return BgpAf::Mcast;
     221       20766 :     case Address::EVPN:
     222       20766 :         return BgpAf::Enet;
     223     1191909 :     default:
     224     1191909 :         return static_cast<uint8_t>(BgpAf::FamilyToSafi(family));
     225             :     }
     226             : }

Generated by: LCOV version 1.14