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-18 01:51:13 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     1545361 : Address::Family BgpAf::AfiSafiToFamily(uint16_t afi, uint8_t safi) {
      72     1545361 :     switch (afi) {
      73         256 :     case UnknownSafi:
      74         256 :         return Address::UNSPEC;
      75      978747 :     case IPv4:
      76      978747 :         switch (safi) {
      77       42999 :         case Unicast:
      78       42999 :             return Address::INET;
      79          85 :         case Mpls:
      80          85 :             return Address::INETMPLS;
      81        1690 :         case MVpn:
      82        1690 :             return Address::MVPN;
      83      475663 :         case Vpn:
      84      475663 :             return Address::INETVPN;
      85       40110 :         case RTarget:
      86       40110 :             return Address::RTARGET;
      87      417955 :         case ErmVpn:
      88      417955 :             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       68417 :         switch (safi) {
      97       12155 :         case Unicast:
      98       12155 :             return Address::INET6;
      99       55767 :         case Vpn:
     100       55767 :             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      434165 :         switch (safi) {
     113      433423 :         case EVpn:
     114      433423 :             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     1140160 : pair<uint16_t, uint8_t> BgpAf::FamilyToAfiSafi(Address::Family family) {
     131     1140160 :     switch (family) {
     132       13630 :     case Address::INET:
     133       13630 :         return make_pair(BgpAf::IPv4, BgpAf::Unicast);
     134          54 :     case Address::INETMPLS:
     135          54 :         return make_pair(BgpAf::IPv4, BgpAf::Mpls);
     136      272934 :     case Address::INETVPN:
     137      272934 :         return make_pair(BgpAf::IPv4, BgpAf::Vpn);
     138      350883 :     case Address::RTARGET:
     139      350883 :         return make_pair(BgpAf::IPv4, BgpAf::RTarget);
     140      215634 :     case Address::ERMVPN:
     141      215634 :         return make_pair(BgpAf::IPv4, BgpAf::ErmVpn);
     142        1726 :     case Address::MVPN:
     143        1726 :         return make_pair(BgpAf::IPv4, BgpAf::MVpn);
     144        8172 :     case Address::INET6:
     145        8172 :         return make_pair(BgpAf::IPv6, BgpAf::Unicast);
     146       53363 :     case Address::INET6VPN:
     147       53363 :         return make_pair(BgpAf::IPv6, BgpAf::Vpn);
     148      223785 :     case Address::EVPN:
     149      223785 :         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     1538045 : BgpAf::Afi BgpAf::FamilyToAfi(Address::Family family) {
     160     1538045 :     switch (family) {
     161      594893 :     case Address::INET:
     162      594893 :         return BgpAf::IPv4;
     163          78 :     case Address::INETMPLS:
     164          78 :         return BgpAf::IPv4;
     165      117410 :     case Address::INETVPN:
     166      117410 :         return BgpAf::IPv4;
     167       52436 :     case Address::RTARGET:
     168       52436 :         return BgpAf::IPv4;
     169       12072 :     case Address::ERMVPN:
     170       12072 :         return BgpAf::IPv4;
     171      206157 :     case Address::MVPN:
     172      206157 :         return BgpAf::IPv4;
     173      405655 :     case Address::INET6:
     174      405655 :         return BgpAf::IPv6;
     175       86654 :     case Address::INET6VPN:
     176       86654 :         return BgpAf::IPv6;
     177       62786 :     case Address::EVPN:
     178       62786 :         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     1467039 : BgpAf::Safi BgpAf::FamilyToSafi(Address::Family family) {
     189     1467039 :     switch (family) {
     190      594903 :     case Address::INET:
     191      594903 :         return BgpAf::Unicast;
     192          78 :     case Address::INETMPLS:
     193          78 :         return BgpAf::Mpls;
     194      117417 :     case Address::INETVPN:
     195      117417 :         return BgpAf::Vpn;
     196       52436 :     case Address::RTARGET:
     197       52436 :         return BgpAf::RTarget;
     198        6942 :     case Address::ERMVPN:
     199        6942 :         return BgpAf::ErmVpn;
     200      206157 :     case Address::MVPN:
     201      206157 :         return BgpAf::MVpn;
     202      403030 :     case Address::INET6:
     203      403030 :         return BgpAf::Unicast;
     204       56633 :     case Address::INET6VPN:
     205       56633 :         return BgpAf::Vpn;
     206       29542 :     case Address::EVPN:
     207       29542 :         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     1209263 : uint8_t BgpAf::FamilyToXmppSafi(Address::Family family) {
     218     1209263 :     switch (family) {
     219        5131 :     case Address::ERMVPN:
     220        5131 :         return BgpAf::Mcast;
     221       20791 :     case Address::EVPN:
     222       20791 :         return BgpAf::Enet;
     223     1183341 :     default:
     224     1183341 :         return static_cast<uint8_t>(BgpAf::FamilyToSafi(family));
     225             :     }
     226             : }

Generated by: LCOV version 1.14