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-09-28 02:13:17 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     1560249 : Address::Family BgpAf::AfiSafiToFamily(uint16_t afi, uint8_t safi) {
      72     1560249 :     switch (afi) {
      73         256 :     case UnknownSafi:
      74         256 :         return Address::UNSPEC;
      75      987464 :     case IPv4:
      76      987464 :         switch (safi) {
      77       42860 :         case Unicast:
      78       42860 :             return Address::INET;
      79          97 :         case Mpls:
      80          97 :             return Address::INETMPLS;
      81        1679 :         case MVpn:
      82        1679 :             return Address::MVPN;
      83      478129 :         case Vpn:
      84      478129 :             return Address::INETVPN;
      85       44022 :         case RTarget:
      86       44022 :             return Address::RTARGET;
      87      420434 :         case ErmVpn:
      88      420434 :             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       71145 :         switch (safi) {
      97       12138 :         case Unicast:
      98       12138 :             return Address::INET6;
      99       58514 :         case Vpn:
     100       58514 :             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      437615 :         switch (safi) {
     113      436875 :         case EVpn:
     114      436875 :             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     1150506 : pair<uint16_t, uint8_t> BgpAf::FamilyToAfiSafi(Address::Family family) {
     131     1150506 :     switch (family) {
     132       13313 :     case Address::INET:
     133       13313 :         return make_pair(BgpAf::IPv4, BgpAf::Unicast);
     134          54 :     case Address::INETMPLS:
     135          54 :         return make_pair(BgpAf::IPv4, BgpAf::Mpls);
     136      274519 :     case Address::INETVPN:
     137      274519 :         return make_pair(BgpAf::IPv4, BgpAf::Vpn);
     138      354149 :     case Address::RTARGET:
     139      354149 :         return make_pair(BgpAf::IPv4, BgpAf::RTarget);
     140      217283 :     case Address::ERMVPN:
     141      217283 :         return make_pair(BgpAf::IPv4, BgpAf::ErmVpn);
     142        1738 :     case Address::MVPN:
     143        1738 :         return make_pair(BgpAf::IPv4, BgpAf::MVpn);
     144        8031 :     case Address::INET6:
     145        8031 :         return make_pair(BgpAf::IPv6, BgpAf::Unicast);
     146       55267 :     case Address::INET6VPN:
     147       55267 :         return make_pair(BgpAf::IPv6, BgpAf::Vpn);
     148      226197 :     case Address::EVPN:
     149      226197 :         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     1548601 : BgpAf::Afi BgpAf::FamilyToAfi(Address::Family family) {
     160     1548601 :     switch (family) {
     161      597932 :     case Address::INET:
     162      597932 :         return BgpAf::IPv4;
     163          78 :     case Address::INETMPLS:
     164          78 :         return BgpAf::IPv4;
     165      117665 :     case Address::INETVPN:
     166      117665 :         return BgpAf::IPv4;
     167       52928 :     case Address::RTARGET:
     168       52928 :         return BgpAf::IPv4;
     169       11950 :     case Address::ERMVPN:
     170       11950 :         return BgpAf::IPv4;
     171      206159 :     case Address::MVPN:
     172      206159 :         return BgpAf::IPv4;
     173      411166 :     case Address::INET6:
     174      411166 :         return BgpAf::IPv6;
     175       87084 :     case Address::INET6VPN:
     176       87084 :         return BgpAf::IPv6;
     177       63733 :     case Address::EVPN:
     178       63733 :         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     1476765 : BgpAf::Safi BgpAf::FamilyToSafi(Address::Family family) {
     189     1476765 :     switch (family) {
     190      597923 :     case Address::INET:
     191      597923 :         return BgpAf::Unicast;
     192          78 :     case Address::INETMPLS:
     193          78 :         return BgpAf::Mpls;
     194      117670 :     case Address::INETVPN:
     195      117670 :         return BgpAf::Vpn;
     196       52928 :     case Address::RTARGET:
     197       52928 :         return BgpAf::RTarget;
     198        6880 :     case Address::ERMVPN:
     199        6880 :         return BgpAf::ErmVpn;
     200      206159 :     case Address::MVPN:
     201      206159 :         return BgpAf::MVpn;
     202      408599 :     case Address::INET6:
     203      408599 :         return BgpAf::Unicast;
     204       56745 :     case Address::INET6VPN:
     205       56745 :         return BgpAf::Vpn;
     206       29810 :     case Address::EVPN:
     207       29810 :         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     1218075 : uint8_t BgpAf::FamilyToXmppSafi(Address::Family family) {
     218     1218075 :     switch (family) {
     219        5071 :     case Address::ERMVPN:
     220        5071 :         return BgpAf::Mcast;
     221       20973 :     case Address::EVPN:
     222       20973 :         return BgpAf::Enet;
     223     1192031 :     default:
     224     1192031 :         return static_cast<uint8_t>(BgpAf::FamilyToSafi(family));
     225             :     }
     226             : }

Generated by: LCOV version 1.14