Line data Source code
1 : /* 2 : * Copyright (c) 2017 Juniper Networks, Inc. All rights reserved. 3 : */ 4 : 5 : #ifndef tsn_elector_agent_oper_hpp 6 : #define tsn_elector_agent_oper_hpp 7 : 8 : #include <cmn/agent_cmn.h> 9 : #include <cmn/agent.h> 10 : #include <oper/agent_route_walker.h> 11 : 12 : struct TsnElectorState : public DBState { 13 : TsnElectorState(AgentRouteTable *table, TsnElector *elector); 14 : virtual ~TsnElectorState(); 15 : 16 : DBTable::ListenerId inet4_id_; 17 : AgentRouteTable *inet4_table_; 18 : }; 19 : 20 : class TsnElectorWalker : public AgentRouteWalker { 21 : public: 22 : TsnElectorWalker(const std::string &name, Agent *agent); 23 : virtual ~TsnElectorWalker(); 24 : 25 : void LeaveTsnMastership(); 26 : void AcquireTsnMastership(); 27 : virtual bool RouteWalkNotify(DBTablePartBase *partition, DBEntryBase *e); 28 : 29 : private: 30 : bool master_; 31 : DISALLOW_COPY_AND_ASSIGN(TsnElectorWalker); 32 : }; 33 : 34 : class TsnElector { 35 : public: 36 : typedef std::vector<std::string> ManagedPhysicalDevicesList; 37 : TsnElector(Agent *agent); 38 : virtual ~TsnElector(); 39 : 40 : void Register(); 41 : void Shutdown(); 42 : void Notify(DBTablePartBase *partition, DBEntryBase *e); 43 : void RouteNotify(DBTablePartBase *partition, DBEntryBase *e); 44 : bool IsMaster() const; 45 : const Agent *agent() const {return agent_;} 46 : const std::vector<string> &active_tsn_servers() const { 47 : return active_tsn_servers_; 48 : } 49 : const ManagedPhysicalDevicesList &ManagedPhysicalDevices() const; 50 : 51 : private: 52 : bool IsTsnNoForwardingEnabled() const; 53 0 : TsnElectorWalker *walker() { 54 0 : return static_cast<TsnElectorWalker *>(walker_.get()); 55 : } 56 : 57 : const Agent *agent_; 58 : DBTable::ListenerId vrf_listener_id_; 59 : std::vector<std::string> active_tsn_servers_; 60 : AgentRouteWalkerPtr walker_; 61 : DISALLOW_COPY_AND_ASSIGN(TsnElector); 62 : }; 63 : 64 : #endif /* tsn_elector_agent_oper_hpp */