OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
bridge_route.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef vnsw_bridge_route_hpp
6 #define vnsw_bridge_route_hpp
7 
8 class MacVmBindingPath;
9 
11 // BRIDGE
14 public:
15  BridgeAgentRouteTable(DB *db, const std::string &name) :
16  AgentRouteTable(db, name) {
17  }
18  virtual ~BridgeAgentRouteTable() { }
19 
20  virtual std::string GetTableName() const {return "BridgeAgentRouteTable";}
22  return Agent::BRIDGE;
23  }
25  const std::string &context);
26 
27  static DBTableBase *CreateTable(DB *db, const std::string &name);
28 
29  void AddMacVmBindingRoute(const Peer *peer,
30  const std::string &vrf_name,
31  const MacAddress &mac,
32  const VmInterface *vm_intf,
33  bool flood_dhcp);
34  void AddBridgeRoute(const AgentRoute *rt);
35  static AgentRouteData *BuildNonBgpPeerData(const string &vrf_name,
36  const std::string &vn_name,
37  uint32_t label,
38  int vxlan_id,
39  uint32_t tunnel_type,
42  &component_nh_key_list,
43  bool pbb_nh,
44  bool learning_enabled);
45  static AgentRouteData *BuildBgpPeerData(const Peer *peer,
46  const string &vrf_name,
47  const std::string &vn_name,
48  uint32_t label,
49  int vxlan_id,
50  uint32_t ethernet_tag,
51  uint32_t tunnel_type,
54  &component_nh_key_list,
55  bool pbb_nh,
56  bool learning_enabled);
57  static void AddBridgeRoute(const Peer *peer, const string &vrf_name,
58  const MacAddress &mac,
59  uint32_t ethernet_tag,
60  AgentRouteData *data);
61  static void AddBridgeBroadcastRoute(const Peer *peer,
62  const string &vrf_name,
63  uint32_t ethernet_tag,
64  AgentRouteData *data);
65  static void AddBridgeReceiveRoute(const Peer *peer,
66  const std::string &vrf_name,
67  const MacAddress &mac,
68  const std::string &vn_name,
69  const std::string &interface,
70  bool policy);
71  void AddBridgeReceiveRoute(const Peer *peer, const std::string &vrf_name,
72  uint32_t vxlan_id, const MacAddress &mac,
73  const std::string &vn_name);
74  static void Delete(const Peer *peer, const std::string &vrf_name,
75  const MacAddress &mac, uint32_t ethernet_tag);
76  static void DeleteBroadcastReq(const Peer *peer,
77  const std::string &vrf_name,
78  uint32_t ethernet_tag,
80  void DeleteBridgeRoute(const AgentRoute *rt);
81  static void DeleteBridgeRoute(const Peer *peer, const string &vrf_name,
82  const MacAddress &mac,
83  uint32_t ethernet_tag,
85  void DeleteMacVmBindingRoute(const Peer *peer,
86  const std::string &vrf_name,
87  const MacAddress &mac,
88  const VmInterface *vm_intf);
89  const VmInterface *FindVmFromDhcpBinding(const MacAddress &mac);
93 
94 private:
97 };
98 
100  public AgentRoutePrefix<MacAddress> {
101 public:
103  Peer::Type type, bool is_multicast) :
104  AgentRoute(vrf, is_multicast), AgentRoutePrefix(mac,0) {
105  }
106  virtual ~BridgeRouteEntry() { }
107 
108  virtual int CompareTo(const Route &rhs) const;
109  virtual std::string ToString() const;
110  virtual void UpdateDependantRoutes() { }
111  virtual void UpdateNH() { }
112  virtual KeyPtr GetDBRequestKey() const;
113  virtual void SetKey(const DBRequestKey *key);
114  virtual const std::string GetAddressString() const;
115  virtual const std::string GetSourceAddressString() const;
117  return Agent::BRIDGE;
118  }
119  virtual bool DBEntrySandesh(Sandesh *sresp, bool stale) const;
120  virtual uint32_t GetActiveLabel() const;
121  virtual bool ReComputePathDeletion(AgentPath *path);
122  virtual bool ReComputePathAdd(AgentPath *path);
123  virtual AgentPath *FindPathUsingKeyData(const AgentRouteKey *key,
124  const AgentRouteData *data) const;
125  virtual bool ValidateMcastSrc() const {
127  }
130  uint8_t prefix_length() const {return prefix_length_;}
131  const MacVmBindingPath *FindMacVmBindingPath() const;
132 
133 private:
135  const AgentRouteData *data) const;
137  const AgentRouteData *data) const;
138 
140 };
141 
143 public:
144  BridgeRouteKey(const Peer *peer, const std::string &vrf_name,
145  const MacAddress &mac, uint32_t ethernet_tag = 0) :
146  AgentRouteKey(peer, vrf_name), dmac_(mac), ethernet_tag_(ethernet_tag) {
147  }
148 
149  virtual ~BridgeRouteKey() { }
150 
151  virtual AgentRoute *AllocRouteEntry(VrfEntry *vrf, bool is_multicast) const;
153  virtual std::string ToString() const;
154  virtual BridgeRouteKey *Clone() const;
155  const MacAddress &GetMac() const { return dmac_;}
156  uint32_t ethernet_tag() const {return ethernet_tag_;}
157 
158 private:
160  //TODO retained only for multicast route. Once multicast route shift to
161  //evpn table this will go off.
162  uint32_t ethernet_tag_;
164 };
165 
166 #endif // vnsw_bridge_route_hpp
virtual void UpdateNH()
Definition: bridge_route.h:111
const std::string & vrf_name() const
Definition: agent_route.cc:455
Definition: vrf.h:86
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)
Definition: bridge_route.cc:65
BridgeRouteKey(const Peer *peer, const std::string &vrf_name, const MacAddress &mac, uint32_t ethernet_tag=0)
Definition: bridge_route.h:144
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)
DISALLOW_COPY_AND_ASSIGN(BridgeRouteEntry)
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.
Definition: agent_route.h:109
virtual void SetKey(const DBRequestKey *key)
bool is_multicast() const
Definition: agent_route.h:274
Definition: route.h:14
virtual BridgeRouteKey * Clone() const
Definition: bridge_route.cc:49
virtual std::string GetTableName() const
Definition: bridge_route.h:20
AgentPath * FindEvpnPathUsingKeyData(const AgentRouteKey *key, const AgentRouteData *data) const
uint8_t prefix_length_
The prefix length.
Definition: agent_route.h:388
const VmInterface * FindVmFromDhcpBinding(const MacAddress &mac)
virtual Agent::RouteTableType GetRouteTableType()
Definition: bridge_route.h:152
std::unique_ptr< DBRequestKey > KeyPtr
Definition: db_entry.h:25
Base class for all Route entries in agent.
Definition: agent_route.h:224
BridgeRouteEntry * FindRouteNoLock(const MacAddress &mac)
Definition: bridge_route.cc:77
virtual std::string ToString() const
Definition: bridge_route.cc:45
virtual bool ValidateMcastSrc() const
Definition: bridge_route.h:125
std::vector< ComponentNHKeyPtr > ComponentNHKeyList
Definition: nexthop.h:1641
void AddBridgeRoute(const AgentRoute *rt)
virtual AgentPath * FindPathUsingKeyData(const AgentRouteKey *key, const AgentRouteData *data) const
Definition: db.h:24
MacAddress prefix_address_
The prefix address.
Definition: agent_route.h:385
BridgeRouteEntry * FindRoute(const MacAddress &mac)
Definition: bridge_route.cc:72
virtual AgentRoute * AllocRouteEntry(VrfEntry *vrf, bool is_multicast) const
Definition: bridge_route.cc:54
uint8_t type
Definition: load_balance.h:109
BridgeAgentRouteTable(DB *db, const std::string &name)
Definition: bridge_route.h:15
DISALLOW_COPY_AND_ASSIGN(BridgeRouteKey)
virtual bool ReComputePathAdd(AgentPath *path)
DISALLOW_COPY_AND_ASSIGN(BridgeAgentRouteTable)
uint32_t ethernet_tag() const
Definition: bridge_route.h:156
virtual ~BridgeRouteEntry()
Definition: bridge_route.h:106
static const MacAddress & BroadcastMac()
Definition: mac_address.h:152
class boost::shared_ptr< AgentSandesh > AgentSandeshPtr
Definition: agent_db.h:18
const std::string & name() const
Definition: db_table.h:110
virtual void UpdateDependantRoutes()
Definition: bridge_route.h:110
Definition: peer.h:44
MacAddress dmac_
Definition: bridge_route.h:159
virtual Agent::RouteTableType GetTableType() const
Definition: bridge_route.h:116
virtual const std::string GetAddressString() const
static void AddBridgeBroadcastRoute(const Peer *peer, const string &vrf_name, uint32_t ethernet_tag, AgentRouteData *data)
BridgeRouteEntry(VrfEntry *vrf, const MacAddress &mac, Peer::Type type, bool is_multicast)
Definition: bridge_route.h:102
virtual AgentSandeshPtr GetAgentSandesh(const AgentSandeshArguments *args, const std::string &context)
virtual ~BridgeRouteKey()
Definition: bridge_route.h:149
virtual std::string ToString() const
uint8_t prefix_length() const
The length of L3 IP prefix (if present) associated with this L2 address.
Definition: bridge_route.h:130
DBTableWalker::WalkId walkid_
Definition: bridge_route.h:95
void DeleteMacVmBindingRoute(const Peer *peer, const std::string &vrf_name, const MacAddress &mac, const VmInterface *vm_intf)
virtual ~BridgeAgentRouteTable()
Definition: bridge_route.h:18
const Peer * peer() const
Definition: agent_route.h:47
#define COMPOSITETYPE
Definition: nexthop.h:1600
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
Definition: agent_route.h:46
VrfEntry * vrf() const
Definition: agent_route.h:275
virtual bool DBEntrySandesh(Sandesh *sresp, bool stale) const
const MacVmBindingPath * FindMacVmBindingPath() const
uint32_t ethernet_tag_
Definition: bridge_route.h:162
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)
RouteTableType
Definition: agent.h:415
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
virtual Agent::RouteTableType GetTableType() const
Definition: bridge_route.h:21
const MacAddress & GetMac() const
Definition: bridge_route.h:155
Type
Definition: peer.h:48
This class defines interfaces for manipulating the prefix of a route stored in an Agent VRF table...
Definition: agent_route.h:363
virtual uint32_t GetActiveLabel() const