OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
bgp_xmpp_rtarget_manager.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2016 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef SRC_BGP_BGP_XMPP_RTARGET_MANAGER_H_
6 #define SRC_BGP_BGP_XMPP_RTARGET_MANAGER_H_
7 
8 #include <map>
9 #include <set>
10 #include <string>
11 
13 
14 class BgpNeighborRoutingInstance;
15 class BgpXmppChannel;
16 class DBRequest;
17 class IPeer;
18 class RoutingInstance;
19 
21 public:
22  typedef std::set<RouteTarget> RouteTargetList;
23 
24  explicit BgpXmppRTargetManager(BgpXmppChannel *bgp_xmpp_channel);
25  virtual ~BgpXmppRTargetManager();
26  void RoutingInstanceCallback(RoutingInstance *rt_instance,
27  RouteTargetList *targets);
28  void PublishRTargetRoute(RoutingInstance *rt_instance,
29  bool add_change);
30  void Close();
31 
32  void ASNUpdateCallback(as_t old_asn, as_t old_local_asn) const;
33  void FillInfo(BgpNeighborRoutingInstance *instance,
34  const RouteTargetList &targets) const;
35  void Stale(const RouteTargetList &targets) const;
36  void UpdateRouteTargetRouteFlag(RoutingInstance *routing_instance,
37  const RouteTargetList &targets, uint32_t flags) const;
38 
39 protected:
40  virtual void RTargetRouteOp(as_t asn, const RouteTarget &rtarget,
41  BgpAttrPtr attr, bool add_change,
42  uint32_t flags = 0) const;
43 
44 private:
45  typedef std::set<RoutingInstance *> RoutingInstanceList;
46  typedef std::map<RouteTarget, RoutingInstanceList> PublishedRTargetRoutes;
47 
48  void AddNewRTargetRoute(RoutingInstance *rtinstance,
49  const RouteTarget &rtarget, BgpAttrPtr attr);
50  void DeleteRTargetRoute(RoutingInstance *rtinstance,
51  const RouteTarget &rtarget);
52 
54  uint32_t GetRTargetRouteFlag(const RouteTarget &rtarget) const;
55 
56  virtual BgpAttrPtr GetRouteTargetRouteAttr() const;
57  virtual bool IsSubscriptionEmpty() const;
58  virtual bool IsSubscriptionGrStale(RoutingInstance *instance) const;
59  virtual bool IsSubscriptionLlgrStale(RoutingInstance *instance) const;
60  virtual bool delete_in_progress() const;
61  virtual const IPeer *Peer() const;
63  RoutingInstance *instance) const;
64  virtual void Enqueue(DBRequest *req) const;
65  virtual int local_autonomous_system() const;
66 
69 };
70 
71 #endif // SRC_BGP_BGP_XMPP_RTARGET_MANAGER_H_
virtual const RouteTargetList & GetSubscribedRTargets(RoutingInstance *instance) const
virtual bool IsSubscriptionGrStale(RoutingInstance *instance) const
virtual bool IsSubscriptionLlgrStale(RoutingInstance *instance) const
void AddNewRTargetRoute(RoutingInstance *rtinstance, const RouteTarget &rtarget, BgpAttrPtr attr)
BgpXmppChannel * bgp_xmpp_channel_
virtual void Enqueue(DBRequest *req) const
void FillInfo(BgpNeighborRoutingInstance *instance, const RouteTargetList &targets) const
std::set< RouteTarget > RouteTargetList
virtual BgpAttrPtr GetRouteTargetRouteAttr() const
virtual int local_autonomous_system() const
PublishedRTargetRoutes rtarget_routes_
uint32_t as_t
Definition: bgp_common.h:21
void Stale(const RouteTargetList &targets) const
Definition: ipeer.h:186
std::map< RouteTarget, RoutingInstanceList > PublishedRTargetRoutes
boost::intrusive_ptr< const BgpAttr > BgpAttrPtr
Definition: bgp_attr.h:991
BgpTable * GetRouteTargetTable() const
std::set< RoutingInstance * > RoutingInstanceList
void ASNUpdateCallback(as_t old_asn, as_t old_local_asn) const
BgpXmppRTargetManager(BgpXmppChannel *bgp_xmpp_channel)
virtual void RTargetRouteOp(as_t asn, const RouteTarget &rtarget, BgpAttrPtr attr, bool add_change, uint32_t flags=0) const
virtual bool delete_in_progress() const
virtual const IPeer * Peer() const
void RoutingInstanceCallback(RoutingInstance *rt_instance, RouteTargetList *targets)
void DeleteRTargetRoute(RoutingInstance *rtinstance, const RouteTarget &rtarget)
virtual bool IsSubscriptionEmpty() const
void UpdateRouteTargetRouteFlag(RoutingInstance *routing_instance, const RouteTargetList &targets, uint32_t flags) const
void PublishRTargetRoute(RoutingInstance *rt_instance, bool add_change)
uint32_t GetRTargetRouteFlag(const RouteTarget &rtarget) const