10 #include <boost/asio/ip/host_name.hpp>
11 #include <boost/bind.hpp>
12 #include <boost/date_time/posix_time/posix_time.hpp>
13 #include <boost/program_options.hpp>
15 #include "nodeinfo_types.h"
26 #include "bgp/bgp_peer_types.h"
36 #include "control-node/buildinfo.h"
46 #include "sandesh/common/vns_constants.h"
47 #include "sandesh/common/vns_types.h"
48 #include "sandesh/sandesh_http.h"
49 #include "sandesh/sandesh_trace.h"
50 #include "schema/bgp_schema_types.h"
51 #include "schema/vnc_cfg_types.h"
52 #include "xmpp/sandesh/xmpp_peer_info_types.h"
58 using namespace boost::asio::ip;
59 using process::ConnectionInfo;
62 using process::ProcessState;
63 using process::ConnectionType;
65 using process::g_process_info_constants;
72 ifstream file(filename);
73 string content((istreambuf_iterator<char>(file)),
74 istreambuf_iterator<char>());
80 vnc_cfg_JsonParserInit(json_parser);
81 vnc_cfg_Server_ModuleInit(server->
database(), server->
graph());
82 bgp_schema_JsonParserInit(json_parser);
83 bgp_schema_Server_ModuleInit(server->
database(), server->
graph());
106 boost::system::error_code ec;
110 " conversion error:" << ec.message());
116 return (xmpp_server);
121 static const int kTimeout = 15;
124 for (
int i = 0; i < (kTimeout * 1000); i++) {
134 boost::scoped_ptr<BgpXmppChannelManager> *channel_manager) {
137 BgpServer *bgp_server = (*channel_manager)->bgp_server();
138 XmppServer *xmpp_server = (*channel_manager)->xmpp_server();
145 for (
int cnt = 0; xmpp_server->
ConnectionCount() != 0 && cnt < 15; cnt++) {
160 channel_manager->reset();
164 ConnectionStateManager::
165 GetInstance()->Shutdown();
179 static bool shutdown_;
181 if (shutdown_)
return;
190 const std::vector<ConnectionInfo> &cinfos,
192 std::vector<ConnectionTypeName> expected_connections) {
209 LOG(ERROR,
"SIGHUP handler ERROR: " << error);
212 LOG(WARN,
"Received signal " << sig <<
" inside ReConfigSignalHandler()");
216 int main(
int argc,
char *argv[]) {
222 srand(
unsigned(time(NULL)));
223 std::vector<Signal::SignalHandler> sighup_handlers = boost::assign::list_of
225 std::vector<Signal::SignalHandler> sigusr1_handlers = boost::assign::list_of
227 std::vector<Signal::SignalHandler> sigterm_handler = boost::assign::list_of
229 Signal::SignalCallbackMap smap = boost::assign::map_list_of
230 (SIGHUP, sighup_handlers)
231 (SIGUSR1, sigusr1_handlers)
232 (SIGTERM, sigterm_handler)
238 string module_name = g_vns_constants.ModuleNames.find(module)->second;
240 if (log_property_file.size()) {
275 boost::scoped_ptr<BgpServer> bgp_server(
new BgpServer(&
evm));
277 sandesh_context.
bgp_server = bgp_server.get();
281 ConnectionStateManager::GetInstance();
290 boost::scoped_ptr<ConfigClientManager> config_client_manager_ptr(
292 ConfigStaticObjectFactory::Create<ConfigJsonParserBase>(),
301 ifmap_server.set_config_manager(config_client_manager);
303 BgpIfmapConfigManager *config_manager =
304 static_cast<BgpIfmapConfigManager *
>(bgp_server->config_manager());
310 boost::system::error_code ec;
314 " conversion error: " << ec.message());
316 bgp_server->rtarget_group_mgr()->Initialize();
322 xmpp_cfg.dscp_value = bgp_server->global_qos()->control_dscp();
324 if (xmpp_server == NULL) {
329 boost::scoped_ptr<BgpXmppChannelManager> bgp_peer_manager(
333 ifmap_server.set_ifmap_channel_manager(&ifmap_channel_mgr);
347 std::vector<ConnectionTypeName> expected_connections;
348 expected_connections = boost::assign::list_of
350 ConnectionType::DATABASE)->second,
"Cassandra"))
352 ConnectionType::DATABASE)->second,
"RabbitMQ"))
354 ConnectionType::COLLECTOR)->second,
""))
355 .convert_to_container<vector<
\
359 LOG(INFO,
"Collectors are not configured!");
360 expected_connections.pop_back();
363 ConnectionStateManager::GetInstance()->Init(
365 module_name, g_vns_constants.INSTANCE_ID_DEFAULT,
367 bgp_server.get(), config_client_manager, _1, _2, _3,
368 expected_connections),
"ObjectBgpRouter");
371 g_vns_constants.Module2NodeType.find(module)->second;
377 g_vns_constants.NodeTypeNames.find(node_type)->second,
378 g_vns_constants.INSTANCE_ID_DEFAULT,
387 g_vns_constants.ModuleNames.find(module)->second,
389 g_vns_constants.NodeTypeNames.find(node_type)->second,
390 g_vns_constants.INSTANCE_ID_DEFAULT,
407 bgp_peer_manager.get(),
408 &ifmap_server, build_info);
BgpXmppChannelManager * xmpp_peer_manager
boost::asio::ip::tcp::endpoint endpoint
ConfigJsonParserBase * config_json_parser()
log4cplus::LogLevel SandeshLevelTolog4Level(SandeshLevel::type slevel)
static void SetHostname(const std::string name)
The TaskScheduler keeps track of what tasks are currently schedulable. When a task is enqueued it is ...
std::string log_level() const
int log_files_count() const
#define CONTROL_NODE_EXIT(message)
static int GetDefaultThreadCount()
static void Initialize(uint32_t thread_count=0, EventManager *evm=NULL)
static SandeshLevel::type StringToLevel(std::string level)
const ConfigClientOptions & configdb_options() const
void ParseReConfig(bool force_reinit)
uint16_t http_server_port() const
static void SetLoggingParams(bool enable_local_log, std::string category, std::string level, bool enable_trace_print=false, bool enable_flow_log=false, bool enable_session_syslog=false)
virtual bool Initialize(short port)
static bool GetTestMode()
boost::asio::ip::address IpAddress
long log_file_size() const
void ifmap_server_set(IFMapServer *ifmap_server)
void RegisterSandeshShowIfmapHandlers(BgpSandeshContext *bsc)
boost::asio::io_context * io_service()
RoutingInstanceMgr * routing_instance_mgr()
static bool GetBuildInfo(BuildModule id, const std::string &build_info, std::string &result)
static void WaitForIdle()
bool mvpn_ipv4_enable() const
static void SetSelfIp(std::string ip)
std::map< std::string, std::map< std::string, std::string > > DerivedStats
static void SetProgramName(const char *name)
std::string xmpp_server_cert() const
bool GetEndOfRibComputed() const
void Initialize(DB *db, DBGraph *db_graph, const std::string &localname)
bool collectors_configured() const
std::string path_to_ca_cert
static XmppServer * CreateXmppServer(EventManager *evm, Options *options, XmppChannelConfig *xmpp_cfg)
std::string host_ip() const
static string FileRead(const char *filename)
void SetTrackRunTime(bool value)
std::string log_property_file() const
void SigTermSignalHandler(const boost::system::error_code &error, int sig, bool force_reinit)
void set_config_client_manager(ConfigClientManager *mgr)
std::vector< std::string > randomized_collector_server_list() const
static TaskScheduler * GetInstance()
bool xmpp_auth_enabled() const
static std::string GetProcessState(bool bgpHasSelfConfiguration, bool bgpIsAdminDown, bool configEndOfRibComputed, process::ProcessState::type *state, std::string *message)
void GetProcessStateCb(const vector< ConnectionInfo > &cinfos, ProcessState::type &state, string &message, const vector< ConnectionTypeName > &expected_connections)
static void ControlNodeGetProcessStateCb(const BgpServer *bgp_server, const ConfigClientManager *config_client_manager, const std::vector< ConnectionInfo > &cinfos, ProcessState::type &state, std::string &message, std::vector< ConnectionTypeName > expected_connections)
std::string path_to_server_cert
bool IsEmpty(bool running_only=false)
Returns true if there are no tasks running and/or enqueued If running_only is true, enqueued tasks are ignored i.e. return true if there are no running tasks. Ignore TaskGroup or TaskEntry if it is disabled.
static void DeleteServer(TcpServer *server)
const SandeshConfig & sandesh_config() const
void set_test_mode(bool test_mode)
std::string bgp_config_file() const
void IFMapLinkTable_Init(DB *db, DBGraph *graph)
std::pair< std::string, std::string > ConnectionTypeName
std::string syslog_facility() const
static void set_module_context(const std::string &module_name, SandeshContext *context)
void set_gr_helper_disable(bool gr_helper_disable)
std::string log_file() const
bool HasSelfConfiguration() const
std::string xmpp_server_key() const
std::string log_category() const
IpAddress AddressFromString(const std::string &ip_address_str, boost::system::error_code *ec)
static bool InitGenerator(const std::string &module, const std::string &source, const std::string &node_type, const std::string &instance_id, EventManager *evm, unsigned short http_port, const std::vector< std::string > &collectors, SandeshContext *client_context=NULL, DerivedStats ds=DerivedStats(), const SandeshConfig &config=SandeshConfig())
std::string hostname() const
static void SetTestMode(const bool flag)
void ControlNodeShutdown()
static void SetDefaultSchedulingPolicy()
#define LOG(_Level, _Msg)
bool gr_helper_bgp_disable() const
void SetLoggingDisabled(bool flag)
void RegisterSandeshShowXmppExtensions(BgpSandeshContext *bsc)
int tcp_hold_time() const
static void StartControlNodeInfoLogger(EventManager &evm, uint64_t period_msecs, const BgpServer *server, const BgpXmppChannelManager *xmpp_channel_mgr, const IFMapServer *ifmap_server, const string &build_info)
size_t ConnectionCount() const
bool gr_helper_xmpp_disable() const
uint16_t xmpp_port() const
bool Parse(EventManager &evm, int argc, char **argv)
static int GetNumWorkers()
void ReConfigSignalHandler(const boost::system::error_code &error, int sig, bool force_reinit)
uint16_t bgp_port() const
std::string xmpp_ca_cert() const
static void IFMap_Initialize(IFMapServer *server, ConfigJsonParser *json_parser)
static const char * kControlNodeJID
std::string path_to_server_priv_key
bool task_track_run_time() const
static void ShutdownServers(boost::scoped_ptr< BgpXmppChannelManager > *channel_manager)