OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
route_leak.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017 Juniper Networks, Inc. All rights reserved.
3  */
4 #ifndef SRC_VNSW_AGENT_OPER_ROUTE_LEAK_H__
5 #define SRC_VNSW_AGENT_OPER_ROUTE_LEAK_H__
6 
7 struct RouteLeakState : public DBState {
8  RouteLeakState(Agent *agent, VrfEntry *vrf):
9  agent_(agent), dest_vrf_(vrf) {}
10 
11  void AddRoute(const AgentRoute *route);
12  void DeleteRoute(const AgentRoute *route,
13  const std::set<const Peer *> &peer_list);
14 
15  void set_dest_vrf(VrfEntry *vrf) {
16  dest_vrf_ = vrf;
17  }
18 
19  VrfEntry* dest_vrf() const {
20  return dest_vrf_.get();
21  }
22 
23  std::set<const Peer *>& peer_list() {
24  return peer_list_;
25  }
26 
27 private:
28  void AddIndirectRoute(const AgentRoute *route);
29  void AddInterfaceRoute(const AgentRoute *route, const AgentPath *path);
30  void AddReceiveRoute(const AgentRoute *route);
31  void AddCompositeRoute(const AgentRoute *route);
32  bool CanAdd(const InetUnicastRouteEntry *route);
35  std::set<const Peer *> peer_list_;
36 };
37 
38 class RouteLeakVrfState : public DBState {
39 public:
42  //Route Notify handler
43  bool Notify(DBTablePartBase *partition, DBEntryBase *e);
44  void Delete();
45  void SetDestVrf(VrfEntry *dest_vrf);
46 
48  return dest_vrf_.get();
49  }
50  bool deleted() const { return deleted_; }
51 
52 private:
53  void WalkDoneInternal(DBTableBase *part);
54  bool WalkCallBack(DBTablePartBase *partition, DBEntryBase *entry);
55  void AddDefaultRoute();
56  void DeleteDefaultRoute();
57  //VRF from which routes have to be sourced
59  //VRF to which routes have to be mirrored
63  bool deleted_;
64 };
65 
66 //Base class registering to VRF table.
67 //If route have to be leaked from one VRF to another takes case of it.
69 public:
72 
73  Agent *agent() {
74  return agent_;
75  }
76 
77  //VRF notify handler
78  void Notify(DBTablePartBase *partition, DBEntryBase *e);
80 
81 private:
82  bool VrfWalkNotify(DBTablePartBase *partition, DBEntryBase *e);
83  void VrfWalkDone(DBTableBase *part);
84  void StartRouteWalk(VrfEntry *vrf, RouteLeakVrfState *state);
85  void RouteWalkDone(DBTableBase *part);
86 
90 };
91 #endif
void StartRouteWalk(VrfEntry *vrf, RouteLeakVrfState *state)
Definition: route_leak.cc:484
void AddDefaultRoute()
Definition: route_leak.cc:333
Agent * agent_
Definition: route_leak.h:33
void AddInterfaceRoute(const AgentRoute *route, const AgentPath *path)
Definition: route_leak.cc:62
VrfEntryRef dest_vrf_
Definition: route_leak.h:60
Definition: vrf.h:86
void Notify(DBTablePartBase *partition, DBEntryBase *e)
Definition: route_leak.cc:421
void AddReceiveRoute(const AgentRoute *route)
Definition: route_leak.cc:165
void WalkDoneInternal(DBTableBase *part)
Definition: route_leak.cc:322
int ListenerId
Definition: db_table.h:62
bool WalkCallBack(DBTablePartBase *partition, DBEntryBase *entry)
Definition: route_leak.cc:328
bool CanAdd(const InetUnicastRouteEntry *route)
Definition: route_leak.cc:197
std::set< const Peer * > & peer_list()
Definition: route_leak.h:23
void VrfWalkDone(DBTableBase *part)
Definition: route_leak.cc:481
void RouteWalkDone(DBTableBase *part)
Definition: route_leak.cc:495
void SetDestVrf(VrfEntry *dest_vrf)
Definition: route_leak.cc:399
DBTableBase::ListenerId route_listener_id_
Definition: route_leak.h:61
bool deleted() const
Definition: route_leak.h:50
RouteLeakVrfState(VrfEntry *source_vrf, VrfEntry *dest_vrf)
Definition: route_leak.cc:299
DBTable::DBTableWalkRef walk_ref_
Definition: route_leak.h:62
void DeleteDefaultRoute()
Definition: route_leak.cc:346
Base class for all Route entries in agent.
Definition: agent_route.h:224
RouteLeakManager(Agent *agent)
Definition: route_leak.cc:412
VrfEntry * dest_vrf()
Definition: route_leak.h:47
void AddCompositeRoute(const AgentRoute *route)
Definition: route_leak.cc:155
bool Notify(DBTablePartBase *partition, DBEntryBase *e)
Definition: route_leak.cc:358
Definition: agent.h:358
void ReEvaluateRouteExports()
Definition: route_leak.cc:451
void DeleteRoute(const AgentRoute *route, const std::set< const Peer * > &peer_list)
Definition: route_leak.cc:282
Agent * agent_
Definition: route_leak.h:87
VrfEntry * dest_vrf() const
Definition: route_leak.h:19
Agent * agent()
Definition: route_leak.h:73
RouteLeakState(Agent *agent, VrfEntry *vrf)
Definition: route_leak.h:8
void AddIndirectRoute(const AgentRoute *route)
Definition: route_leak.cc:10
boost::intrusive_ptr< DBTableWalk > DBTableWalkRef
Definition: db_table.h:169
std::set< const Peer * > peer_list_
Definition: route_leak.h:35
VrfEntryRef dest_vrf_
Definition: route_leak.h:34
VrfEntryRef source_vrf_
Definition: route_leak.h:58
bool VrfWalkNotify(DBTablePartBase *partition, DBEntryBase *e)
Definition: route_leak.cc:460
DBTable::DBTableWalkRef vrf_walk_ref_
Definition: route_leak.h:88
DBTableBase::ListenerId vrf_listener_id_
Definition: route_leak.h:89
void AddRoute(const AgentRoute *route)
Definition: route_leak.cc:234
void set_dest_vrf(VrfEntry *vrf)
Definition: route_leak.h:15