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