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-04 02:06:09 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     1545328 : Address::Family BgpAf::AfiSafiToFamily(uint16_t afi, uint8_t safi) {
      72     1545328 :     switch (afi) {
      73         256 :     case UnknownSafi:
      74         256 :         return Address::UNSPEC;
      75      978467 :     case IPv4:
      76      978467 :         switch (safi) {
      77       42686 :         case Unicast:
      78       42686 :             return Address::INET;
      79          89 :         case Mpls:
      80          89 :             return Address::INETMPLS;
      81        1681 :         case MVpn:
      82        1681 :             return Address::MVPN;
      83      475672 :         case Vpn:
      84      475672 :             return Address::INETVPN;
      85       40001 :         case RTarget:
      86       40001 :             return Address::RTARGET;
      87      418091 :         case ErmVpn:
      88      418091 :             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       68308 :         switch (safi) {
      97       11915 :         case Unicast:
      98       11915 :             return Address::INET6;
      99       55896 :         case Vpn:
     100       55896 :             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      434526 :         switch (safi) {
     113      433782 :         case EVpn:
     114      433782 :             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     1140721 : pair<uint16_t, uint8_t> BgpAf::FamilyToAfiSafi(Address::Family family) {
     131     1140721 :     switch (family) {
     132       13316 :     case Address::INET:
     133       13316 :         return make_pair(BgpAf::IPv4, BgpAf::Unicast);
     134          52 :     case Address::INETMPLS:
     135          52 :         return make_pair(BgpAf::IPv4, BgpAf::Mpls);
     136      272984 :     case Address::INETVPN:
     137      272984 :         return make_pair(BgpAf::IPv4, BgpAf::Vpn);
     138      351306 :     case Address::RTARGET:
     139      351306 :         return make_pair(BgpAf::IPv4, BgpAf::RTarget);
     140      215804 :     case Address::ERMVPN:
     141      215804 :         return make_pair(BgpAf::IPv4, BgpAf::ErmVpn);
     142        1722 :     case Address::MVPN:
     143        1722 :         return make_pair(BgpAf::IPv4, BgpAf::MVpn);
     144        7928 :     case Address::INET6:
     145        7928 :         return make_pair(BgpAf::IPv6, BgpAf::Unicast);
     146       53522 :     case Address::INET6VPN:
     147       53522 :         return make_pair(BgpAf::IPv6, BgpAf::Vpn);
     148      224104 :     case Address::EVPN:
     149      224104 :         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     1543837 : BgpAf::Afi BgpAf::FamilyToAfi(Address::Family family) {
     160     1543837 :     switch (family) {
     161      595135 :     case Address::INET:
     162      595135 :         return BgpAf::IPv4;
     163          71 :     case Address::INETMPLS:
     164          71 :         return BgpAf::IPv4;
     165      117525 :     case Address::INETVPN:
     166      117525 :         return BgpAf::IPv4;
     167       52519 :     case Address::RTARGET:
     168       52519 :         return BgpAf::IPv4;
     169       12279 :     case Address::ERMVPN:
     170       12279 :         return BgpAf::IPv4;
     171      206175 :     case Address::MVPN:
     172      206175 :         return BgpAf::IPv4;
     173      410620 :     case Address::INET6:
     174      410620 :         return BgpAf::IPv6;
     175       86457 :     case Address::INET6VPN:
     176       86457 :         return BgpAf::IPv6;
     177       63193 :     case Address::EVPN:
     178       63193 :         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     1472657 : BgpAf::Safi BgpAf::FamilyToSafi(Address::Family family) {
     189     1472657 :     switch (family) {
     190      595149 :     case Address::INET:
     191      595149 :         return BgpAf::Unicast;
     192          71 :     case Address::INETMPLS:
     193          71 :         return BgpAf::Mpls;
     194      117530 :     case Address::INETVPN:
     195      117530 :         return BgpAf::Vpn;
     196       52519 :     case Address::RTARGET:
     197       52519 :         return BgpAf::RTarget;
     198        7088 :     case Address::ERMVPN:
     199        7088 :         return BgpAf::ErmVpn;
     200      206175 :     case Address::MVPN:
     201      206175 :         return BgpAf::MVpn;
     202      407999 :     case Address::INET6:
     203      407999 :         return BgpAf::Unicast;
     204       56273 :     case Address::INET6VPN:
     205       56273 :         return BgpAf::Vpn;
     206       29933 :     case Address::EVPN:
     207       29933 :         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     1214635 : uint8_t BgpAf::FamilyToXmppSafi(Address::Family family) {
     218     1214635 :     switch (family) {
     219        5192 :     case Address::ERMVPN:
     220        5192 :         return BgpAf::Mcast;
     221       20676 :     case Address::EVPN:
     222       20676 :         return BgpAf::Enet;
     223     1188767 :     default:
     224     1188767 :         return static_cast<uint8_t>(BgpAf::FamilyToSafi(family));
     225             :     }
     226             : }

Generated by: LCOV version 1.14