OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
static_route.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef SRC_BGP_ROUTING_INSTANCE_STATIC_ROUTE_H_
6 #define SRC_BGP_ROUTING_INSTANCE_STATIC_ROUTE_H_
7 
8 #include <map>
9 #include <set>
10 
12 
13 #include "base/queue_task.h"
15 #include "bgp/bgp_config.h"
16 #include "bgp/inet/inet_route.h"
17 #include "bgp/inet6/inet6_route.h"
18 
19 class InetVpnRoute;
20 class Inet6VpnRoute;
21 class StaticRouteConfig;
22 
23 template <typename T> class StaticRoute;
24 
25 template <typename T1, typename T2, typename T3, typename T4>
27  typedef T1 RouteT;
28  typedef T2 VpnRouteT;
29  typedef T3 PrefixT;
30  typedef T4 AddressT;
31 };
32 
34  InetRoute, InetVpnRoute, Ip4Prefix, Ip4Address> {
35 };
36 
38  Inet6Route, Inet6VpnRoute, Inet6Prefix, Ip6Address> {
39 };
40 
42 
44  enum RequestType {
47  };
48 
50  StaticRoutePtr info)
51  : type_(type), table_(table), rt_(route), info_(info) {
52  }
53 
58 
59 private:
61 };
62 
63 template <typename T>
65 public:
66  typedef typename T::RouteT RouteT;
67  typedef typename T::VpnRouteT VpnRouteT;
68  typedef typename T::PrefixT PrefixT;
69  typedef typename T::AddressT AddressT;
71 
72  struct RouteKey {
74  prefix(prefix), nexthop(nexthop) {
75  }
76 
77  bool operator<(const RouteKey &rhs) const {
80  return false;
81  }
82 
85  };
86 
87  // Map of Static Route prefix to the StaticRoute match object
88  typedef std::map<RouteKey, StaticRoutePtr> StaticRouteMap;
89 
90  explicit StaticRouteMgr(RoutingInstance *instance);
92 
93  // Config
94  virtual void ProcessStaticRouteConfig();
95  virtual void UpdateStaticRouteConfig();
96  virtual void FlushStaticRouteConfig();
97 
100 
101  virtual void NotifyAllRoutes();
102  virtual void UpdateAllRoutes();
103  virtual uint32_t GetRouteCount() const;
104  virtual uint32_t GetDownRouteCount() const;
105  virtual bool FillStaticRouteInfo(RoutingInstance *rtinstance,
106  StaticRouteEntriesInfo *info) const;
107 
108  Address::Family GetFamily() const;
109  AddressT GetAddress(IpAddress addr) const;
110 
111 private:
112  template <typename U> friend class StaticRouteTest;
113  typedef std::set<StaticRoutePtr> StaticRouteProcessList;
115 
116  // All static route related actions are performed in the context
117  // of this task. This task has exclusion with db::DBTable task.
119 
120  int CompareStaticRoute(typename StaticRouteMap::iterator loc,
121  StaticRouteConfigList::iterator it);
122  void AddStaticRoute(StaticRouteConfigList::iterator it);
123  void DelStaticRoute(typename StaticRouteMap::iterator loc);
124  void UpdateStaticRoute(typename StaticRouteMap::iterator loc,
125  StaticRouteConfigList::iterator it);
126 
127  void LocateStaticRoutePrefix(const StaticRouteConfig &config);
128  void RemoveStaticRoutePrefix(const RouteKey &static_route);
129  void StopStaticRouteDone(BgpTable *table, ConditionMatch *info);
132 
133  bool ProcessUnregisterList();
134 
135  virtual void DisableUnregisterTrigger();
136  virtual void EnableUnregisterTrigger();
137 
138  virtual void DisableQueue() { static_route_queue_->set_disable(true); }
139  virtual void EnableQueue() { static_route_queue_->set_disable(false); }
140  virtual bool IsQueueEmpty() { return static_route_queue_->IsQueueEmpty(); }
142 
147  tbb::mutex mutex_;
149  boost::scoped_ptr<TaskTrigger> unregister_list_trigger_;
150 
152 };
153 
156 
157 #endif // SRC_BGP_ROUTING_INSTANCE_STATIC_ROUTE_H_
BgpConditionListener * listener_
Definition: static_route.h:144
static int static_route_task_id_
Definition: static_route.h:118
RouteKey(const PrefixT &prefix, const IpAddress &nexthop)
Definition: static_route.h:73
bool IsQueueEmpty() const
Definition: queue_task.h:352
int CompareStaticRoute(typename StaticRouteMap::iterator loc, StaticRouteConfigList::iterator it)
void AddStaticRoute(StaticRouteConfigList::iterator it)
std::set< StaticRoutePtr > StaticRouteProcessList
Definition: static_route.h:113
virtual void EnableUnregisterTrigger()
boost::intrusive_ptr< ConditionMatch > ConditionMatchPtr
T::VpnRouteT VpnRouteT
Definition: static_route.h:67
virtual void NotifyAllRoutes()
Family
Definition: address.h:24
T::RouteT RouteT
Definition: static_route.h:66
boost::asio::ip::address IpAddress
Definition: address.h:13
StaticRoute< T > StaticRouteT
Definition: static_route.h:70
RequestType type_
Definition: static_route.h:54
virtual void UpdateAllRoutes()
void UpdateStaticRoute(typename StaticRouteMap::iterator loc, StaticRouteConfigList::iterator it)
StaticRouteMgr(RoutingInstance *instance)
std::map< RouteKey, StaticRoutePtr > StaticRouteMap
Definition: static_route.h:88
virtual void UpdateStaticRouteConfig()
virtual void FlushStaticRouteConfig()
friend class StaticRouteTest
Definition: static_route.h:112
std::set< StaticRouteConfig > StaticRouteList
Definition: bgp_config.h:425
virtual void ProcessStaticRouteConfig()
RoutingInstance * routing_instance()
Definition: static_route.h:141
StaticRouteMgr< StaticRouteInet6 > StaticRouteMgrInet6
Definition: static_route.h:155
virtual void DisableQueue()
Definition: static_route.h:138
DISALLOW_COPY_AND_ASSIGN(StaticRouteMgr)
T::PrefixT PrefixT
Definition: static_route.h:68
bool StaticRouteEventCallback(StaticRouteRequest *req)
StaticRouteMap static_route_map_
Definition: static_route.h:145
StaticRoutePtr info_
Definition: static_route.h:57
virtual void DisableUnregisterTrigger()
uint8_t type
Definition: load_balance.h:109
boost::scoped_ptr< TaskTrigger > unregister_list_trigger_
Definition: static_route.h:149
#define BOOL_KEY_COMPARE(x, y)
Definition: util.h:64
StaticRouteProcessList unregister_static_route_list_
Definition: static_route.h:148
virtual uint32_t GetRouteCount() const
StaticRouteMgr< StaticRouteInet > StaticRouteMgrInet
Definition: static_route.h:154
void EnqueueStaticRouteReq(StaticRouteRequest *req)
WorkQueue< StaticRouteRequest * > * static_route_queue_
Definition: static_route.h:146
void DelStaticRoute(typename StaticRouteMap::iterator loc)
bool ProcessUnregisterList()
DISALLOW_COPY_AND_ASSIGN(StaticRouteRequest)
AddressT GetAddress(IpAddress addr) const
StaticRouteRequest(RequestType type, BgpTable *table, BgpRoute *route, StaticRoutePtr info)
Definition: static_route.h:49
tbb::mutex mutex_
Definition: static_route.h:147
void set_disable(bool disabled)
Definition: queue_task.h:319
void UnregisterAndResolveStaticRoute(StaticRoutePtr entry)
Address::Family GetFamily() const
RoutingInstance * rtinstance_
Definition: static_route.h:143
bool operator<(const RouteKey &rhs) const
Definition: static_route.h:77
BgpTable * table_
Definition: static_route.h:55
void RemoveStaticRoutePrefix(const RouteKey &static_route)
virtual void EnableQueue()
Definition: static_route.h:139
virtual bool FillStaticRouteInfo(RoutingInstance *rtinstance, StaticRouteEntriesInfo *info) const
void StopStaticRouteDone(BgpTable *table, ConditionMatch *info)
virtual bool IsQueueEmpty()
Definition: static_route.h:140
BgpInstanceConfig::StaticRouteList StaticRouteConfigList
Definition: static_route.h:114
void LocateStaticRoutePrefix(const StaticRouteConfig &config)
const StaticRouteMap & static_route_map() const
Definition: static_route.h:99
T::AddressT AddressT
Definition: static_route.h:69
virtual uint32_t GetDownRouteCount() const
ConditionMatchPtr StaticRoutePtr
Definition: static_route.h:41