Line data Source code
1 : /* 2 : * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved. 3 : * Copyright Contributors to the OpenSDN project 4 : */ 5 : 6 : #include "net/bgp_af.h" 7 : 8 : #include <sstream> 9 : 10 : using std::make_pair; 11 : using std::pair; 12 : using std::ostringstream; 13 : using std::string; 14 : 15 65536 : string BgpAf::ToString(uint16_t afi, uint8_t safi) { 16 65536 : ostringstream out; 17 65536 : switch (static_cast<Afi>(afi)) { 18 256 : case IPv4: 19 256 : out << "IPv4:"; 20 256 : break; 21 256 : case IPv6: 22 256 : out << "IPv6:"; 23 256 : break; 24 256 : case L2Vpn: 25 256 : out << "L2Vpn:"; 26 256 : break; 27 256 : case UnknownAfi: 28 256 : out << "Afi=" << afi << ":"; 29 256 : break; 30 : } 31 : 32 65536 : if (out.str().empty()) 33 64512 : out << "Afi=" << afi << ":"; 34 : 35 65536 : switch (static_cast<Safi>(safi)) { 36 256 : case Unicast: 37 256 : out << "Unicast"; 38 256 : return out.str(); 39 256 : case EVpn: 40 256 : out << "EVpn"; 41 256 : return out.str(); 42 256 : case Vpn: 43 256 : out << "Vpn"; 44 256 : return out.str(); 45 256 : case Enet: 46 256 : out << "Enet"; 47 256 : return out.str(); 48 256 : case ErmVpn: 49 256 : out << "ErmVpn"; 50 256 : return out.str(); 51 256 : case MVpn: 52 256 : out << "MVpn"; 53 256 : return out.str(); 54 256 : case Mcast: 55 256 : out << "Mcast"; 56 256 : return out.str(); 57 256 : case RTarget: 58 256 : out << "RTarget"; 59 256 : return out.str(); 60 256 : case Mpls: 61 256 : out << "Mpls"; 62 256 : return out.str(); 63 256 : case UnknownSafi: 64 256 : out << "Safi=" << int(safi); 65 256 : return out.str(); 66 : } 67 : 68 62976 : out << "Safi=" << int(safi); 69 62976 : return out.str(); 70 65536 : } 71 : 72 1547076 : Address::Family BgpAf::AfiSafiToFamily(uint16_t afi, uint8_t safi) { 73 1547076 : switch (afi) { 74 256 : case UnknownSafi: 75 256 : return Address::UNSPEC; 76 978365 : case IPv4: 77 978365 : switch (safi) { 78 42844 : case Unicast: 79 42844 : return Address::INET; 80 98 : case Mpls: 81 98 : return Address::INETMPLS; 82 1702 : case MVpn: 83 1702 : return Address::MVPN; 84 475857 : case Vpn: 85 475857 : return Address::INETVPN; 86 39395 : case RTarget: 87 39395 : return Address::RTARGET; 88 418221 : case ErmVpn: 89 418221 : return Address::ERMVPN; 90 4 : case UnknownSafi: 91 : case EVpn: 92 : case Mcast: 93 : case Enet: 94 4 : return Address::UNSPEC; 95 : } 96 : case IPv6: 97 68652 : switch (safi) { 98 11849 : case Unicast: 99 11849 : return Address::INET6; 100 56305 : case Vpn: 101 56305 : return Address::INET6VPN; 102 8 : case UnknownSafi: 103 : case Mpls: 104 : case MVpn: 105 : case RTarget: 106 : case ErmVpn: 107 : case EVpn: 108 : case Mcast: 109 : case Enet: 110 8 : return Address::UNSPEC; 111 : } 112 : case L2Vpn: 113 436040 : switch (safi) { 114 435295 : case EVpn: 115 435295 : return Address::EVPN; 116 9 : case Unicast: 117 : case Vpn: 118 : case UnknownSafi: 119 : case Mpls: 120 : case MVpn: 121 : case RTarget: 122 : case ErmVpn: 123 : case Mcast: 124 : case Enet: 125 9 : return Address::UNSPEC; 126 : } 127 : } 128 65250 : return Address::UNSPEC; 129 : } 130 : 131 1143078 : pair<uint16_t, uint8_t> BgpAf::FamilyToAfiSafi(Address::Family family) { 132 1143078 : switch (family) { 133 13394 : case Address::INET: 134 13394 : return make_pair(BgpAf::IPv4, BgpAf::Unicast); 135 56 : case Address::INETMPLS: 136 56 : return make_pair(BgpAf::IPv4, BgpAf::Mpls); 137 272946 : case Address::INETVPN: 138 272946 : return make_pair(BgpAf::IPv4, BgpAf::Vpn); 139 352545 : case Address::RTARGET: 140 352545 : return make_pair(BgpAf::IPv4, BgpAf::RTarget); 141 215773 : case Address::ERMVPN: 142 215773 : return make_pair(BgpAf::IPv4, BgpAf::ErmVpn); 143 1741 : case Address::MVPN: 144 1741 : return make_pair(BgpAf::IPv4, BgpAf::MVpn); 145 7811 : case Address::INET6: 146 7811 : return make_pair(BgpAf::IPv6, BgpAf::Unicast); 147 53810 : case Address::INET6VPN: 148 53810 : return make_pair(BgpAf::IPv6, BgpAf::Vpn); 149 225018 : case Address::EVPN: 150 225018 : return make_pair(BgpAf::L2Vpn, BgpAf::EVpn); 151 0 : case Address::NUM_FAMILIES: 152 : case Address::UNSPEC: 153 0 : return make_pair(BgpAf::UnknownAfi, BgpAf::UnknownSafi); 154 : } 155 : 156 0 : assert(false); 157 : return make_pair(BgpAf::UnknownAfi, BgpAf::UnknownSafi); 158 : } 159 : 160 1537802 : BgpAf::Afi BgpAf::FamilyToAfi(Address::Family family) { 161 1537802 : switch (family) { 162 593841 : case Address::INET: 163 593841 : return BgpAf::IPv4; 164 86 : case Address::INETMPLS: 165 86 : return BgpAf::IPv4; 166 117808 : case Address::INETVPN: 167 117808 : return BgpAf::IPv4; 168 52517 : case Address::RTARGET: 169 52517 : return BgpAf::IPv4; 170 11939 : case Address::ERMVPN: 171 11939 : return BgpAf::IPv4; 172 206131 : case Address::MVPN: 173 206131 : return BgpAf::IPv4; 174 404319 : case Address::INET6: 175 404319 : return BgpAf::IPv6; 176 87504 : case Address::INET6VPN: 177 87504 : return BgpAf::IPv6; 178 63814 : case Address::EVPN: 179 63814 : return BgpAf::L2Vpn; 180 0 : case Address::NUM_FAMILIES: 181 : case Address::UNSPEC: 182 0 : return BgpAf::UnknownAfi; 183 : } 184 : 185 0 : assert(false); 186 : return BgpAf::UnknownAfi; 187 : } 188 : 189 1466218 : BgpAf::Safi BgpAf::FamilyToSafi(Address::Family family) { 190 1466218 : switch (family) { 191 593849 : case Address::INET: 192 593849 : return BgpAf::Unicast; 193 86 : case Address::INETMPLS: 194 86 : return BgpAf::Mpls; 195 117816 : case Address::INETVPN: 196 117816 : return BgpAf::Vpn; 197 52517 : case Address::RTARGET: 198 52517 : return BgpAf::RTarget; 199 6910 : case Address::ERMVPN: 200 6910 : return BgpAf::ErmVpn; 201 206131 : case Address::MVPN: 202 206131 : return BgpAf::MVpn; 203 401844 : case Address::INET6: 204 401844 : return BgpAf::Unicast; 205 57252 : case Address::INET6VPN: 206 57252 : return BgpAf::Vpn; 207 29883 : case Address::EVPN: 208 29883 : return BgpAf::EVpn; 209 0 : case Address::NUM_FAMILIES: 210 : case Address::UNSPEC: 211 0 : return BgpAf::UnknownSafi; 212 : } 213 : 214 0 : assert(false); 215 : return BgpAf::UnknownSafi; 216 : } 217 : 218 1207220 : uint8_t BgpAf::FamilyToXmppSafi(Address::Family family) { 219 1207220 : switch (family) { 220 5030 : case Address::ERMVPN: 221 5030 : return BgpAf::Mcast; 222 20916 : case Address::EVPN: 223 20916 : return BgpAf::Enet; 224 1181274 : default: 225 1181274 : return static_cast<uint8_t>(BgpAf::FamilyToSafi(family)); 226 : } 227 : }