OpenSDN source code
agent_init.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef vnsw_agent_init_agent_init_hpp
6 #define vnsw_agent_init_agent_init_hpp
7 
8 #include <mutex>
9 
10 #include <boost/program_options.hpp>
11 #include <init/agent_param.h>
12 
13 class Agent;
14 class AgentParam;
15 class DiagTable;
16 class ServicesModule;
17 class PktModule;
18 class ResourceManager;
19 
20 // The class to drive agent initialization. Does init of basic modules
21 // Daemons should derive from AgentInit class and tune / implement virtual
22 // methods
23 class AgentInit {
24 public:
25  AgentInit();
26  virtual ~AgentInit();
27 
28  Agent *agent() const { return agent_.get(); }
29 
30  AgentParam *agent_param() const { return agent_param_; }
31  void set_agent_param(AgentParam *param) { agent_param_ = param; }
32 
33  // Process options
34  virtual void ProcessOptions
35  (const std::string &config_file, const std::string &program_name);
36  // Platform specific inits
37  void InitPlatform();
38 
39  // Kickstarts initialization
40  virtual int Start(Logging &logging);
41 
42  // Initialize the agent factory based on platform
43  virtual void FactoryInit() = 0;
44 
45  virtual std::string InstanceId();
46  virtual std::string ModuleName();
47  virtual int ModuleType();
48  virtual std::string AgentName();
49 
50  // Init has two set of routines
51  // - *Base routines that provide basic common initialization
52  // - Another set of routines for platform specific initializations
53 
54  // Start method called from DBTable-task context
55  virtual bool InitBase();
56  virtual bool Init() { return true; }
57 
58  virtual void InitLoggingBase();
59  virtual void InitLogging() { }
60 
61  // Init connection to collector if relavent config present
62  virtual void InitCollectorBase();
63  virtual void InitCollector() { }
64 
65  // Create modules. AgentInit creates Config, OperDB and Controller
66  virtual void CreateModulesBase();
67  virtual void CreateModules() { }
68 
69  // Create DBTables
70  virtual void CreateDBTablesBase();
71  virtual void CreateDBTables() { }
72 
73  // DBTable client registerations
74  virtual void RegisterDBClientsBase();
75  virtual void RegisterDBClients() { }
76 
77  // Module specific inits. Called after DBTable and DBTable clients are
78  // created
79  virtual void InitModulesBase();
80  virtual void InitModules() { }
81 
82  // Create Route Peers
83  virtual void CreatePeersBase();
84  virtual void CreatePeers() { }
85 
86  // Create static VRFs. Fabric VRF is created by default
87  virtual void CreateVrfBase();
88  virtual void CreateVrf() { }
89 
90  // Create static nexthops including drop-nh and receive-nh
91  virtual void CreateNextHopsBase();
92  virtual void CreateNextHops() { }
93 
94  // Create static interfaces
95  virtual void CreateInterfacesBase();
96  virtual void CreateInterfaces() { }
97 
98  // Connect to controller. Should be called after IP address is known
99  // for vhost0 interface
100  virtual void ConnectToControllerBase();
101  virtual void ConnectToController() { }
102 
103  virtual void InitDoneBase();
104  virtual void InitDone() { }
105 
106  void CreateResourceManager();
109  // Shutdown routines
111  virtual void Shutdown();
112 
113  // Shutdown IO operations
114  void IoShutdownBase();
115  virtual void IoShutdown() { }
116 
117  // Flush all flows
118  virtual void FlushFlowsBase();
119  virtual void FlushFlows() { }
120 
121  // Shutdown VGW
122  virtual void VgwShutdownBase();
123  virtual void VgwShutdown() { }
124 
125  // Delete routes
126  virtual void DeleteRoutesBase();
127  virtual void DeleteRoutes() { }
128 
129  // Delete other DB Entries
130  virtual void DeleteDBEntriesBase();
131  virtual void DeleteDBEntries() { }
132 
133  // Shutdown services
134  virtual void ServicesShutdownBase();
135  virtual void ServicesShutdown() { }
136 
137  // Shutdown pkt interface
138  virtual void PktShutdownBase();
139  virtual void PktShutdown() { }
140 
141  // Shutdown agent profiling
142  virtual void ProfileShutdownBase();
143 
144  // Shutdown other modules
145  virtual void ModulesShutdownBase();
146  virtual void ModulesShutdown() { }
147 
148  // Shutdown UVE
149  virtual void UveShutdownBase();
150  virtual void UveShutdown() { }
151 
152  // Shutdown Stats collector
153  virtual void StatsCollectorShutdownBase();
154  virtual void StatsCollectorShutdown() { }
155 
156  // Shutdown Flow collector
157  virtual void FlowStatsCollectorShutdownBase();
158  virtual void FlowStatsCollectorShutdown() { }
159 
160  // Shutdown KSync
161  virtual void KSyncShutdownBase();
162  virtual void KSyncShutdown() { }
163 
164  // Utility
165  virtual void WaitForIdle() = 0;
166  void WaitForDBEmpty();
167  void DeleteVhost();
168 
169 private:
170  std::unique_ptr<Agent> agent_;
172 
173  std::mutex init_mutex_;
174  std::unique_ptr<TaskTrigger> trigger_;
175 
176  std::unique_ptr<AgentStats> stats_;
177  std::unique_ptr<AgentConfig> cfg_;
178  std::unique_ptr<OperDB> oper_;
179 
181  std::unique_ptr<VNController> controller_;
182  std::unique_ptr<ResourceManager> resource_manager_;
183  std::unique_ptr<EventNotifier> event_notifier_;
184 
186 };
187 
188 #endif // vnsw_agent_init_agent_init_hpp
std::unique_ptr< ResourceManager > resource_manager_
Definition: agent_init.h:182
virtual void PktShutdownBase()
Definition: agent_init.cc:515
virtual ~AgentInit()
Definition: agent_init.cc:37
virtual void CreateNextHopsBase()
Definition: agent_init.cc:316
virtual void CreateInterfacesBase()
Definition: agent_init.cc:320
virtual void RegisterDBClientsBase()
Definition: agent_init.cc:244
virtual void InitLogging()
Definition: agent_init.h:59
DISALLOW_COPY_AND_ASSIGN(AgentInit)
void WaitForDBEmpty()
Definition: agent_init.cc:494
virtual void ServicesShutdown()
Definition: agent_init.h:135
virtual void FlowStatsCollectorShutdownBase()
Definition: agent_init.cc:563
virtual void DeleteDBEntries()
Definition: agent_init.h:131
void IoShutdownBase()
Definition: agent_init.cc:386
void InitPlatform()
Definition: agent_init.cc:73
virtual void VgwShutdown()
Definition: agent_init.h:123
virtual void ModulesShutdown()
Definition: agent_init.h:146
virtual void InitModules()
Definition: agent_init.h:80
virtual void StatsCollectorShutdown()
Definition: agent_init.h:154
virtual void FactoryInit()=0
virtual void ProcessOptions(const std::string &config_file, const std::string &program_name)
Definition: agent_init.cc:52
virtual void Shutdown()
Definition: agent_init.cc:593
std::unique_ptr< TaskTrigger > trigger_
Definition: agent_init.h:174
virtual void DeleteRoutes()
Definition: agent_init.h:127
virtual void ProfileShutdownBase()
Definition: agent_init.cc:525
virtual void KSyncShutdownBase()
Definition: agent_init.cc:583
virtual std::string InstanceId()
Definition: agent_init.cc:69
void set_agent_param(AgentParam *param)
Definition: agent_init.h:31
virtual void CreateDBTables()
Definition: agent_init.h:71
virtual void CreateModules()
Definition: agent_init.h:67
std::unique_ptr< VNController > controller_
Definition: agent_init.h:181
virtual void ConnectToController()
Definition: agent_init.h:101
virtual std::string AgentName()
Definition: agent_init.cc:65
virtual void WaitForIdle()=0
virtual void InitLoggingBase()
Definition: agent_init.cc:181
virtual void UveShutdownBase()
Definition: agent_init.cc:553
virtual int ModuleType()
Definition: agent_init.cc:56
virtual void CreateNextHops()
Definition: agent_init.h:92
virtual void FlowStatsCollectorShutdown()
Definition: agent_init.h:158
virtual void CreatePeers()
Definition: agent_init.h:84
virtual void ConnectToControllerBase()
Definition: agent_init.cc:324
std::unique_ptr< EventNotifier > event_notifier_
Definition: agent_init.h:183
virtual void PktShutdown()
Definition: agent_init.h:139
virtual std::string ModuleName()
Definition: agent_init.cc:60
virtual void InitDone()
Definition: agent_init.h:104
virtual void CreateInterfaces()
Definition: agent_init.h:96
virtual void VgwShutdownBase()
Definition: agent_init.cc:407
virtual bool InitBase()
Definition: agent_init.cc:156
bool enable_controller_
Definition: agent_init.h:180
virtual void CreateDBTablesBase()
Definition: agent_init.cc:232
virtual void KSyncShutdown()
Definition: agent_init.h:162
virtual void InitDoneBase()
Definition: agent_init.cc:340
void SetResourceManagerReady()
Definition: agent_init.cc:165
std::unique_ptr< AgentStats > stats_
Definition: agent_init.h:176
virtual void CreatePeersBase()
Definition: agent_init.cc:197
virtual void InitCollectorBase()
Definition: agent_init.cc:191
virtual void StatsCollectorShutdownBase()
Definition: agent_init.cc:558
virtual void DeleteDBEntriesBase()
Definition: agent_init.cc:443
virtual void InitCollector()
Definition: agent_init.h:63
virtual void DeleteRoutesBase()
Definition: agent_init.cc:417
virtual void ServicesShutdownBase()
Definition: agent_init.cc:505
virtual void IoShutdown()
Definition: agent_init.h:115
virtual void CreateVrfBase()
Definition: agent_init.cc:288
std::mutex init_mutex_
Definition: agent_init.h:173
virtual void CreateVrf()
Definition: agent_init.h:88
AgentParam * agent_param() const
Definition: agent_init.h:30
virtual void ModulesShutdownBase()
Definition: agent_init.cc:536
virtual void FlushFlows()
Definition: agent_init.h:119
virtual bool Init()
Definition: agent_init.h:56
void CreateResourceManager()
Definition: agent_init.cc:227
virtual void RegisterDBClients()
Definition: agent_init.h:75
virtual void CreateModulesBase()
Definition: agent_init.cc:205
std::unique_ptr< OperDB > oper_
Definition: agent_init.h:178
virtual void InitModulesBase()
Definition: agent_init.cc:256
virtual int Start(Logging &logging)
Definition: agent_init.cc:93
void DeleteVhost()
Definition: agent_init.cc:433
std::unique_ptr< Agent > agent_
Definition: agent_init.h:170
std::unique_ptr< AgentConfig > cfg_
Definition: agent_init.h:177
virtual void UveShutdown()
Definition: agent_init.h:150
AgentParam * agent_param_
Definition: agent_init.h:171
Agent * agent() const
Definition: agent_init.h:28
virtual void FlushFlowsBase()
Definition: agent_init.cc:397
Definition: agent.h:360
A class providing basic control over logging capabilities in OpenSDN control plane.
Definition: logging.h:43
string program_name(string filename)