5 #include <boost/uuid/uuid_io.hpp>
21 using namespace boost::asio;
46 return dmac_.ToString();
66 const std::string &name) {
92 const string &vrf_name,
94 const string &vn_name,
95 const string &interface,
103 req.data.reset(
new HostRoute(intf_key, vn_name));
109 const string &vrf_name,
112 const string &vn_name) {
133 const std::string &vrf_name,
144 const std::string &vrf_name,
166 uint32_t ethernet_tag) {
169 req.
data.reset(NULL);
174 const std::string &vn_name,
177 uint32_t tunnel_type,
180 &component_nh_key_list,
182 bool learning_enabled) {
188 vxlan_id, tunnel_type,
193 const string &vrf_name,
194 const std::string &vn_name,
197 uint32_t ethernet_tag,
198 uint32_t tunnel_type,
201 &component_nh_key_list,
203 bool learning_enabled) {
205 assert(bgp_peer != NULL);
210 return (
new MulticastRoute(vn_name, label, ethernet_tag, tunnel_type,
215 const string &vrf_name,
217 uint32_t ethernet_tag,
222 req.
data.reset(data);
227 const string &vrf_name,
229 uint32_t ethernet_tag,
255 const string &vrf_name,
256 uint32_t ethernet_tag,
262 req.
data.reset(data);
267 const string &vrf_name,
268 uint32_t ethernet_tag,
299 if (dhcp_path == NULL)
310 return "255.255.255.255";
323 return prefix_address_.ToString();
335 vrf()->GetName(), prefix_address_);
342 prefix_address_ = k->
GetMac();
348 if (is_multicast()) {
351 label = GetActivePath()->vxlan_id();
353 label = GetActivePath()->label();
356 label = GetActivePath()->GetActiveLabel();
365 return FindMulticastPathUsingKeyData(key, data);
367 if (evpn_peer != NULL)
368 return FindEvpnPathUsingKeyData(key, data);
370 return FindPath(peer);
375 assert(is_multicast());
377 Route::PathList::const_iterator it;
378 for (it = GetPathList().begin(); it != GetPathList().end();
387 return const_cast<AgentPath *>(path);
391 assert(multicast_data != NULL);
412 assert(evpn_peer != NULL);
414 Route::PathList::const_iterator it;
415 for (it = GetPathList().begin(); it != GetPathList().end(); it++) {
425 assert(evpn_path != NULL);
426 assert(evpn_data != NULL);
442 if (is_multicast()) {
444 return ReComputeMulticastPaths(path,
false);
450 if (is_multicast()) {
452 return ReComputeMulticastPaths(path,
true);
460 void BridgeRouteReq::HandleRequest()
const {
464 ErrorResp *resp =
new ErrorResp();
465 resp->set_context(context());
471 get_stale(), get_mac()));
472 sand->DoSandesh(sand);
482 BridgeRouteResp *resp =
static_cast<BridgeRouteResp *
>(sresp);
483 RouteL2SandeshData data;
485 data.set_src_vrf(vrf()->GetName());
487 for (Route::PathList::const_iterator it = GetPathList().begin();
488 it != GetPathList().end(); it++) {
491 PathSandeshData pdata;
493 if (is_multicast()) {
494 pdata.set_vxlan_id(path->
vxlan_id());
498 pdata.set_info(evpn_path->
parent());
500 data.path_list.push_back(pdata);
503 std::vector<RouteL2SandeshData> &list =
504 const_cast<std::vector<RouteL2SandeshData>&
>(resp->get_route_list());
505 list.push_back(data);
510 void Layer2RouteReq::HandleRequest()
const {
514 ErrorResp *resp =
new ErrorResp();
515 resp->set_context(context());
522 sand->DoSandesh(sand);
uint32_t ethernet_tag() const
BridgeAgentRouteTable * fabric_l2_unicast_table() const
static Agent * GetInstance()
void DeleteBridgeRoute(const AgentRoute *rt)
static void Delete(const Peer *peer, const std::string &vrf_name, const MacAddress &mac, uint32_t ethernet_tag)
static DBTableBase * CreateTable(DB *db, const std::string &name)
const IpAddress & ip_addr() const
std::string GetString(const std::string &key) const
static AgentRouteData * BuildBgpPeerData(const Peer *peer, const string &vrf_name, const std::string &vn_name, uint32_t label, int vxlan_id, uint32_t ethernet_tag, uint32_t tunnel_type, Composite::Type type, ComponentNHKeyList &component_nh_key_list, bool pbb_nh, bool learning_enabled)
static void DeleteBroadcastReq(const Peer *peer, const std::string &vrf_name, uint32_t ethernet_tag, COMPOSITETYPE type)
Agent supports multiple route tables - Inet-unicast (IPv4/IPv6), Inet-multicast, bridge, EVPN (Type2/Type5). This base class contains common code for all types of route tables.
virtual void SetKey(const DBRequestKey *key)
static const MacAddress kZeroMac
std::unique_ptr< DBRequestData > data
virtual BridgeRouteKey * Clone() const
bool Enqueue(DBRequest *req)
AgentPath * FindEvpnPathUsingKeyData(const AgentRouteKey *key, const AgentRouteData *data) const
const string & GetName() const
const VmInterface * FindVmFromDhcpBinding(const MacAddress &mac)
std::unique_ptr< DBRequestKey > KeyPtr
Base class for all Route entries in agent.
BridgeRouteEntry * FindRouteNoLock(const MacAddress &mac)
virtual std::string ToString() const
std::vector< ComponentNHKeyPtr > ComponentNHKeyList
void AddBridgeRoute(const AgentRoute *rt)
virtual AgentPath * FindPathUsingKeyData(const AgentRouteKey *key, const AgentRouteData *data) const
static string ToString(PhysicalDevice::ManagementProtocol proto)
const Type GetType() const
NextHop * nexthop() const
COMPOSITETYPE comp_nh_type() const
PrefixType prefix_address_
The prefix address.
BridgeRouteEntry * FindRoute(const MacAddress &mac)
VrfEntry * FindVrfFromId(size_t index)
const std::string & pkt_interface_name() const
virtual AgentRoute * AllocRouteEntry(VrfEntry *vrf, bool is_multicast) const
virtual bool ReComputePathAdd(AgentPath *path)
std::unique_ptr< DBRequestKey > key
AgentRouteTable * GetBridgeRouteTable(const std::string &vrf_name)
static void BridgeTableEnqueue(Agent *agent, DBRequest *req)
static TypeBmap AllType()
const Peer * peer() const
const VmInterface * vm_interface() const
uint64_t sequence_number() const
static const MacAddress & BroadcastMac()
class boost::shared_ptr< AgentSandesh > AgentSandeshPtr
void SetSandeshData(PathSandeshData &data) const
COMPOSITETYPE composite_nh_type() const
const MacAddress & mac() const
static Type ComputeType(TypeBmap bmap)
virtual const std::string GetAddressString() const
VrfTable * vrf_table() const
static void AddBridgeBroadcastRoute(const Peer *peer, const string &vrf_name, uint32_t ethernet_tag, AgentRouteData *data)
virtual AgentSandeshPtr GetAgentSandesh(const AgentSandeshArguments *args, const std::string &context)
const Peer * mac_vm_binding_peer() const
virtual std::string ToString() const
void DeleteMacVmBindingRoute(const Peer *peer, const std::string &vrf_name, const MacAddress &mac, const VmInterface *vm_intf)
const Peer * peer() const
static void AddBridgeReceiveRoute(const Peer *peer, const std::string &vrf_name, const MacAddress &mac, const std::string &vn_name, const std::string &interface, bool policy)
const std::string & vrf_name() const
virtual bool DBEntrySandesh(Sandesh *sresp, bool stale) const
uint32_t vxlan_id() const
const MacVmBindingPath * FindMacVmBindingPath() const
const std::string & parent() const
void Process(DBRequest &req)
static void BridgeTableProcess(Agent *agent, const string &vrf_name, DBRequest &req)
virtual int CompareTo(const Route &rhs) const
static AgentRouteData * BuildNonBgpPeerData(const string &vrf_name, const std::string &vn_name, uint32_t label, int vxlan_id, uint32_t tunnel_type, Composite::Type type, ComponentNHKeyList &component_nh_key_list, bool pbb_nh, bool learning_enabled)
uint32_t ethernet_tag() const
void AddMacVmBindingRoute(const Peer *peer, const std::string &vrf_name, const MacAddress &mac, const VmInterface *vm_intf, bool flood_dhcp)
virtual bool ReComputePathDeletion(AgentPath *path)
virtual const std::string GetSourceAddressString() const
virtual KeyPtr GetDBRequestKey() const
AgentPath * FindMulticastPathUsingKeyData(const AgentRouteKey *key, const AgentRouteData *data) const
const IpAddress & ip_addr() const
const MacAddress & GetMac() const
uint32_t vxlan_id() const
virtual uint32_t GetActiveLabel() const