OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
bgp_af.cc
Go to the documentation of this file.
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 string BgpAf::ToString(uint16_t afi, uint8_t safi) {
15  ostringstream out;
16  switch (static_cast<Afi>(afi)) {
17  case IPv4:
18  out << "IPv4:";
19  break;
20  case IPv6:
21  out << "IPv6:";
22  break;
23  case L2Vpn:
24  out << "L2Vpn:";
25  break;
26  case UnknownAfi:
27  out << "Afi=" << afi << ":";
28  break;
29  }
30 
31  if (out.str().empty())
32  out << "Afi=" << afi << ":";
33 
34  switch (static_cast<Safi>(safi)) {
35  case Unicast:
36  out << "Unicast";
37  return out.str();
38  case EVpn:
39  out << "EVpn";
40  return out.str();
41  case Vpn:
42  out << "Vpn";
43  return out.str();
44  case Enet:
45  out << "Enet";
46  return out.str();
47  case ErmVpn:
48  out << "ErmVpn";
49  return out.str();
50  case MVpn:
51  out << "MVpn";
52  return out.str();
53  case Mcast:
54  out << "Mcast";
55  return out.str();
56  case RTarget:
57  out << "RTarget";
58  return out.str();
59  case Mpls:
60  out << "Mpls";
61  return out.str();
62  case UnknownSafi:
63  out << "Safi=" << int(safi);
64  return out.str();
65  }
66 
67  out << "Safi=" << int(safi);
68  return out.str();
69 }
70 
71 Address::Family BgpAf::AfiSafiToFamily(uint16_t afi, uint8_t safi) {
72  switch (afi) {
73  case UnknownSafi:
74  return Address::UNSPEC;
75  case IPv4:
76  switch (safi) {
77  case Unicast:
78  return Address::INET;
79  case Mpls:
80  return Address::INETMPLS;
81  case MVpn:
82  return Address::MVPN;
83  case Vpn:
84  return Address::INETVPN;
85  case RTarget:
86  return Address::RTARGET;
87  case ErmVpn:
88  return Address::ERMVPN;
89  case UnknownSafi:
90  case EVpn:
91  case Mcast:
92  case Enet:
93  return Address::UNSPEC;
94  }
95  case IPv6:
96  switch (safi) {
97  case Unicast:
98  return Address::INET6;
99  case Vpn:
100  return Address::INET6VPN;
101  case UnknownSafi:
102  case Mpls:
103  case MVpn:
104  case RTarget:
105  case ErmVpn:
106  case EVpn:
107  case Mcast:
108  case Enet:
109  return Address::UNSPEC;
110  }
111  case L2Vpn:
112  switch (safi) {
113  case EVpn:
114  return Address::EVPN;
115  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  return Address::UNSPEC;
125  }
126  }
127  return Address::UNSPEC;
128 }
129 
130 pair<uint16_t, uint8_t> BgpAf::FamilyToAfiSafi(Address::Family family) {
131  switch (family) {
132  case Address::INET:
133  return make_pair(BgpAf::IPv4, BgpAf::Unicast);
134  case Address::INETMPLS:
135  return make_pair(BgpAf::IPv4, BgpAf::Mpls);
136  case Address::INETVPN:
137  return make_pair(BgpAf::IPv4, BgpAf::Vpn);
138  case Address::RTARGET:
139  return make_pair(BgpAf::IPv4, BgpAf::RTarget);
140  case Address::ERMVPN:
141  return make_pair(BgpAf::IPv4, BgpAf::ErmVpn);
142  case Address::MVPN:
143  return make_pair(BgpAf::IPv4, BgpAf::MVpn);
144  case Address::INET6:
145  return make_pair(BgpAf::IPv6, BgpAf::Unicast);
146  case Address::INET6VPN:
147  return make_pair(BgpAf::IPv6, BgpAf::Vpn);
148  case Address::EVPN:
149  return make_pair(BgpAf::L2Vpn, BgpAf::EVpn);
151  case Address::UNSPEC:
152  return make_pair(BgpAf::UnknownAfi, BgpAf::UnknownSafi);
153  }
154 
155  assert(false);
156  return make_pair(BgpAf::UnknownAfi, BgpAf::UnknownSafi);
157 }
158 
160  switch (family) {
161  case Address::INET:
162  return BgpAf::IPv4;
163  case Address::INETMPLS:
164  return BgpAf::IPv4;
165  case Address::INETVPN:
166  return BgpAf::IPv4;
167  case Address::RTARGET:
168  return BgpAf::IPv4;
169  case Address::ERMVPN:
170  return BgpAf::IPv4;
171  case Address::MVPN:
172  return BgpAf::IPv4;
173  case Address::INET6:
174  return BgpAf::IPv6;
175  case Address::INET6VPN:
176  return BgpAf::IPv6;
177  case Address::EVPN:
178  return BgpAf::L2Vpn;
180  case Address::UNSPEC:
181  return BgpAf::UnknownAfi;
182  }
183 
184  assert(false);
185  return BgpAf::UnknownAfi;
186 }
187 
189  switch (family) {
190  case Address::INET:
191  return BgpAf::Unicast;
192  case Address::INETMPLS:
193  return BgpAf::Mpls;
194  case Address::INETVPN:
195  return BgpAf::Vpn;
196  case Address::RTARGET:
197  return BgpAf::RTarget;
198  case Address::ERMVPN:
199  return BgpAf::ErmVpn;
200  case Address::MVPN:
201  return BgpAf::MVpn;
202  case Address::INET6:
203  return BgpAf::Unicast;
204  case Address::INET6VPN:
205  return BgpAf::Vpn;
206  case Address::EVPN:
207  return BgpAf::EVpn;
209  case Address::UNSPEC:
210  return BgpAf::UnknownSafi;
211  }
212 
213  assert(false);
214  return BgpAf::UnknownSafi;
215 }
216 
218  switch (family) {
219  case Address::ERMVPN:
220  return BgpAf::Mcast;
221  case Address::EVPN:
222  return BgpAf::Enet;
223  default:
224  return static_cast<uint8_t>(BgpAf::FamilyToSafi(family));
225  }
226 }
Afi
Definition: bgp_af.h:17
Family
Definition: address.h:24
static Address::Family AfiSafiToFamily(uint16_t afi, uint8_t safi)
Definition: bgp_af.cc:71
static Safi FamilyToSafi(Address::Family family)
Definition: bgp_af.cc:188
Safi
Definition: bgp_af.h:23
static std::string ToString(uint16_t afi, uint8_t safi)
Definition: bgp_af.cc:14
static uint8_t FamilyToXmppSafi(Address::Family family)
Definition: bgp_af.cc:217
static std::pair< uint16_t, uint8_t > FamilyToAfiSafi(Address::Family family)
Definition: bgp_af.cc:130
static Afi FamilyToAfi(Address::Family family)
Definition: bgp_af.cc:159