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 1553742 : Address::Family BgpAf::AfiSafiToFamily(uint16_t afi, uint8_t safi) { 72 1553742 : switch (afi) { 73 256 : case UnknownSafi: 74 256 : return Address::UNSPEC; 75 982008 : case IPv4: 76 982008 : switch (safi) { 77 42752 : case Unicast: 78 42752 : return Address::INET; 79 89 : case Mpls: 80 89 : return Address::INETMPLS; 81 1686 : case MVpn: 82 1686 : return Address::MVPN; 83 477102 : case Vpn: 84 477102 : return Address::INETVPN; 85 40692 : case RTarget: 86 40692 : return Address::RTARGET; 87 419438 : case ErmVpn: 88 419438 : 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 69692 : switch (safi) { 97 11788 : case Unicast: 98 11788 : return Address::INET6; 99 57405 : case Vpn: 100 57405 : 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 438018 : switch (safi) { 113 437272 : case EVpn: 114 437272 : 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 1148967 : pair<uint16_t, uint8_t> BgpAf::FamilyToAfiSafi(Address::Family family) { 131 1148967 : switch (family) { 132 13281 : case Address::INET: 133 13281 : return make_pair(BgpAf::IPv4, BgpAf::Unicast); 134 54 : case Address::INETMPLS: 135 54 : return make_pair(BgpAf::IPv4, BgpAf::Mpls); 136 273794 : case Address::INETVPN: 137 273794 : return make_pair(BgpAf::IPv4, BgpAf::Vpn); 138 355009 : case Address::RTARGET: 139 355009 : return make_pair(BgpAf::IPv4, BgpAf::RTarget); 140 216600 : case Address::ERMVPN: 141 216600 : return make_pair(BgpAf::IPv4, BgpAf::ErmVpn); 142 1733 : case Address::MVPN: 143 1733 : return make_pair(BgpAf::IPv4, BgpAf::MVpn); 144 7750 : case Address::INET6: 145 7750 : return make_pair(BgpAf::IPv6, BgpAf::Unicast); 146 54530 : case Address::INET6VPN: 147 54530 : return make_pair(BgpAf::IPv6, BgpAf::Vpn); 148 226257 : case Address::EVPN: 149 226257 : 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 1542814 : BgpAf::Afi BgpAf::FamilyToAfi(Address::Family family) { 160 1542814 : switch (family) { 161 596941 : case Address::INET: 162 596941 : return BgpAf::IPv4; 163 78 : case Address::INETMPLS: 164 78 : return BgpAf::IPv4; 165 116927 : case Address::INETVPN: 166 116927 : return BgpAf::IPv4; 167 52585 : case Address::RTARGET: 168 52585 : return BgpAf::IPv4; 169 11948 : case Address::ERMVPN: 170 11948 : return BgpAf::IPv4; 171 206125 : case Address::MVPN: 172 206125 : return BgpAf::IPv4; 173 407366 : case Address::INET6: 174 407366 : return BgpAf::IPv6; 175 86644 : case Address::INET6VPN: 176 86644 : return BgpAf::IPv6; 177 64319 : case Address::EVPN: 178 64319 : 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 1470907 : BgpAf::Safi BgpAf::FamilyToSafi(Address::Family family) { 189 1470907 : switch (family) { 190 596945 : case Address::INET: 191 596945 : return BgpAf::Unicast; 192 78 : case Address::INETMPLS: 193 78 : return BgpAf::Mpls; 194 116932 : case Address::INETVPN: 195 116932 : return BgpAf::Vpn; 196 52585 : case Address::RTARGET: 197 52585 : return BgpAf::RTarget; 198 6959 : case Address::ERMVPN: 199 6959 : return BgpAf::ErmVpn; 200 206125 : case Address::MVPN: 201 206125 : return BgpAf::MVpn; 202 404966 : case Address::INET6: 203 404966 : return BgpAf::Unicast; 204 56367 : case Address::INET6VPN: 205 56367 : return BgpAf::Vpn; 206 30022 : case Address::EVPN: 207 30022 : 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 1213666 : uint8_t BgpAf::FamilyToXmppSafi(Address::Family family) { 218 1213666 : switch (family) { 219 4990 : case Address::ERMVPN: 220 4990 : return BgpAf::Mcast; 221 21205 : case Address::EVPN: 222 21205 : return BgpAf::Enet; 223 1187471 : default: 224 1187471 : return static_cast<uint8_t>(BgpAf::FamilyToSafi(family)); 225 : } 226 : }