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