5 #include <boost/asio/ip/host_name.hpp>
6 #include <boost/functional/hash.hpp>
16 #include "cmn/buildinfo.h"
21 using namespace boost::asio::ip;
22 namespace opt = boost::program_options;
23 using namespace options::util;
30 opt::options_description cmdline_options(
"Allowed options");
31 Initialize(evm, cmdline_options);
33 Process(argc, argv, cmdline_options);
41 opt::options_description &cmdline_options) {
42 boost::system::error_code error;
43 string hostname = host_name(error);
45 if (host_ip.empty()) {
46 cout <<
"Error! Cannot resolve host " << hostname <<
47 " to a valid IP address";
51 opt::options_description
generic(
"Generic options");
55 (
"conf_file", opt::value<string>()->default_value(
56 "/etc/contrail/contrail-dns.conf"),
58 (
"help",
"help message")
59 (
"version",
"Display version information")
65 default_collector_server_list_.push_back(
"127.0.0.1:8086");
67 vector<string> default_config_db_server_list;
68 string default_config_db_server(host_ip +
":9042");
69 default_config_db_server_list.push_back(default_config_db_server);
71 vector<string> default_rabbitmq_server_list;
72 string default_rabbitmq_server(host_ip +
":5672");
73 default_rabbitmq_server_list.push_back(default_rabbitmq_server);
76 opt::options_description config(
"Configuration options");
78 (
"DEFAULT.collectors",
79 opt::value<vector<string> >()->default_value(
80 default_collector_server_list_,
"127.0.0.1:8086"),
81 "Collector server list")
82 (
"DEFAULT.dns_config_file",
83 opt::value<string>()->default_value(
"dns_config.xml"),
84 "DNS Configuration file")
86 (
"DEFAULT.named_config_file",
87 opt::value<string>()->default_value(
"contrail-named.conf"),
88 "Named Configuration file")
89 (
"DEFAULT.named_config_directory",
90 opt::value<string>()->default_value(
"/etc/contrail/dns"),
91 "Named Configuration directory")
92 (
"DEFAULT.named_log_file",
93 opt::value<string>()->default_value(
"/var/log/contrail/contrail-named.log"),
95 (
"DEFAULT.rndc_config_file",
96 opt::value<string>()->default_value(
"contrail-rndc.conf"),
97 "Rndc Configuration file")
98 (
"DEFAULT.rndc_secret",
99 opt::value<string>()->default_value(
"xvysmOR8lnUQRBcunkC6vg=="),
101 (
"DEFAULT.named_max_cache_size",
102 opt::value<string>()->default_value(
"32M"),
103 "Maximum cache size, in bytes, used by contrail-named (per view)")
104 (
"DEFAULT.named_max_retransmissions",
105 opt::value<uint16_t>()->default_value(12),
106 "Maximum number of retries to named")
107 (
"DEFAULT.named_retransmission_interval",
108 opt::value<uint16_t>()->default_value(1000),
109 "Retranmission interval in msec")
111 (
"DEFAULT.hostip", opt::value<string>()->default_value(host_ip),
112 "IP address of DNS Server")
113 (
"DEFAULT.hostname", opt::value<string>()->default_value(hostname),
114 "Hostname of DNS Server")
115 (
"DEFAULT.http_server_port",
116 opt::value<uint16_t>()->default_value(default_http_server_port),
117 "Sandesh HTTP listener port")
118 (
"DEFAULT.dns_server_port",
119 opt::value<uint16_t>()->default_value(default_dns_server_port),
122 (
"DEFAULT.log_category",
123 opt::value<string>()->default_value(log_category_),
124 "Category filter for local logging of sandesh messages")
125 (
"DEFAULT.log_disable", opt::bool_switch(&log_disable_),
126 "Disable sandesh logging")
127 (
"DEFAULT.log_property_file", opt::value<string>()->default_value(
""),
128 "log4cplus property file name")
129 (
"DEFAULT.log_file", opt::value<string>()->default_value(
"<stdout>"),
130 "Filename for the logs to be written to")
131 (
"DEFAULT.log_files_count",
132 opt::value<int>()->default_value(10),
133 "Maximum log file roll over index")
134 (
"DEFAULT.log_file_size",
135 opt::value<long>()->default_value(1024*1024),
136 "Maximum size of the log file")
137 (
"DEFAULT.log_level", opt::value<string>()->default_value(
"SYS_NOTICE"),
138 "Severity level for local logging of sandesh messages")
139 (
"DEFAULT.log_local", opt::bool_switch(&log_local_),
140 "Enable local logging of sandesh messages")
141 (
"DEFAULT.use_syslog", opt::bool_switch(&
use_syslog_),
142 "Enable logging to syslog")
143 (
"DEFAULT.syslog_facility", opt::value<string>()->default_value(
"LOG_LOCAL0"),
144 "Syslog facility to receive log lines")
145 (
"DEFAULT.test_mode", opt::bool_switch(&test_mode_),
146 "Enable dns to run in test-mode")
148 (
"CONFIGDB.config_db_server_list",
149 opt::value<vector<string> >()->default_value(
150 default_config_db_server_list, default_config_db_server),
151 "Config database server list")
152 (
"CONFIGDB.config_db_username",
153 opt::value<string>()->default_value(
""),
155 (
"CONFIGDB.config_db_password",
156 opt::value<string>()->default_value(
""),
158 (
"CONFIGDB.config_db_use_ssl",
159 opt::value<bool>()->default_value(
false),
160 "Use SSL for Cassandra connection")
161 (
"CONFIGDB.config_db_ca_certs",
162 opt::value<string>()->default_value(
""),
163 "CA Certificate file for SSL Cassandra connection")
164 (
"CONFIGDB.rabbitmq_server_list",
165 opt::value<vector<string> >()->default_value(
166 default_rabbitmq_server_list, default_rabbitmq_server),
167 "RabbitMQ server list")
168 (
"CONFIGDB.rabbitmq_user",
169 opt::value<string>()->default_value(
"guest"),
171 (
"CONFIGDB.rabbitmq_password",
172 opt::value<string>()->default_value(
"guest"),
174 (
"CONFIGDB.rabbitmq_vhost",
175 opt::value<string>()->default_value(
""),
177 (
"CONFIGDB.rabbitmq_use_ssl",
178 opt::value<bool>()->default_value(
false),
179 "Use SSL for RabbitMQ connection")
180 (
"CONFIGDB.rabbitmq_ssl_version",
181 opt::value<string>()->default_value(
""),
182 "SSL version for RabbitMQ connection")
183 (
"CONFIGDB.rabbitmq_ssl_keyfile",
184 opt::value<string>()->default_value(
""),
185 "Keyfile for SSL RabbitMQ connection")
186 (
"CONFIGDB.rabbitmq_ssl_certfile",
187 opt::value<string>()->default_value(
""),
188 "Certificate file for SSL RabbitMQ connection")
189 (
"CONFIGDB.rabbitmq_ssl_ca_certs",
190 opt::value<string>()->default_value(
""),
191 "CA Certificate file for SSL RabbitMQ connection")
193 (
"DEFAULT.xmpp_dns_auth_enable", opt::bool_switch(&xmpp_auth_enable_),
194 "Enable authentication over Xmpp")
195 (
"DEFAULT.xmpp_server_cert",
196 opt::value<string>()->default_value(
197 "/etc/contrail/ssl/certs/server.pem"),
198 "XMPP Server ssl certificate")
199 (
"DEFAULT.xmpp_server_key",
200 opt::value<string>()->default_value(
201 "/etc/contrail/ssl/private/server-privkey.pem"),
202 "XMPP Server ssl private key")
203 (
"DEFAULT.xmpp_ca_cert",
204 opt::value<string>()->default_value(
205 "/etc/contrail/ssl/certs/ca-cert.pem"),
206 "XMPP CA ssl certificate")
211 config_file_options_.add(config);
212 cmdline_options.add(
generic).add(config);
216 std::string concat_servers;
217 std::vector<std::string>::const_iterator iter;
218 for (iter = list.begin(); iter != list.end(); iter++) {
219 concat_servers += *iter;
221 boost::hash<std::string> string_hash;
222 return(string_hash(concat_servers));
228 boost::hash<std::string> string_hash;
239 opt::options_description &cmdline_options) {
241 opt::variables_map var_map;
242 opt::store(opt::parse_command_line(argc, argv, cmdline_options), var_map);
245 GetOptValue<string>(var_map, config_file_,
"conf_file");
246 ifstream config_file_in;
247 config_file_in.open(config_file_.c_str());
248 if (config_file_in.good()) {
249 opt::store(opt::parse_config_file(config_file_in, config_file_options_),
252 config_file_in.close();
254 opt::notify(var_map);
256 if (var_map.count(
"help")) {
257 cout << cmdline_options << endl;
261 if (var_map.count(
"version")) {
269 GetOptValue<string>(var_map, dns_config_file_,
"DEFAULT.dns_config_file");
270 GetOptValue< vector<string> >(var_map, collector_server_list_,
271 "DEFAULT.collectors");
272 collectors_configured_ = collector_server_list_.size();
273 if (collector_server_list_.size() == 1 &&
274 !collector_server_list_[0].compare(default_collector_server_list_[0])) {
275 collectors_configured_ =
false;
279 collector_chksum_ = GenerateHash(collector_server_list_);
280 randomized_collector_server_list_ = collector_server_list_;
281 std::random_shuffle(randomized_collector_server_list_.begin(),
282 randomized_collector_server_list_.end());
284 GetOptValue<string>(var_map, named_config_file_,
285 "DEFAULT.named_config_file");
286 GetOptValue<string>(var_map, named_config_dir_,
287 "DEFAULT.named_config_directory");
288 GetOptValue<string>(var_map, named_log_file_,
"DEFAULT.named_log_file");
289 GetOptValue<string>(var_map, rndc_config_file_,
"DEFAULT.rndc_config_file");
290 GetOptValue<string>(var_map, rndc_secret_,
"DEFAULT.rndc_secret");
291 GetOptValue<string>(var_map, named_max_cache_size_,
292 "DEFAULT.named_max_cache_size");
293 GetOptValue<uint16_t>(var_map, named_max_retransmissions_,
294 "DEFAULT.named_max_retransmissions");
295 GetOptValue<uint16_t>(var_map, named_retransmission_interval_,
296 "DEFAULT.named_retransmission_interval");
298 GetOptValue<string>(var_map, host_ip_,
"DEFAULT.hostip");
299 GetOptValue<string>(var_map, hostname_,
"DEFAULT.hostname");
301 GetOptValue<uint16_t>(var_map, http_server_port_,
302 "DEFAULT.http_server_port");
304 GetOptValue<uint16_t>(var_map, dns_server_port_,
"DEFAULT.dns_server_port");
306 GetOptValue<string>(var_map, log_category_,
"DEFAULT.log_category");
307 GetOptValue<string>(var_map, log_file_,
"DEFAULT.log_file");
308 GetOptValue<string>(var_map, log_property_file_,
309 "DEFAULT.log_property_file");
310 GetOptValue<int>(var_map, log_files_count_,
"DEFAULT.log_files_count");
311 GetOptValue<long>(var_map, log_file_size_,
"DEFAULT.log_file_size");
312 GetOptValue<string>(var_map, log_level_,
"DEFAULT.log_level");
313 GetOptValue<bool>(var_map,
use_syslog_,
"DEFAULT.use_syslog");
314 GetOptValue<string>(var_map, syslog_facility_,
"DEFAULT.syslog_facility");
315 GetOptValue<uint32_t>(var_map, send_ratelimit_,
316 "DEFAULT.sandesh_send_rate_limit");
317 GetOptValue< vector<string> >(var_map,
318 configdb_options_.config_db_server_list,
319 "CONFIGDB.config_db_server_list");
320 GetOptValue<string>(var_map,
321 configdb_options_.config_db_username,
322 "CONFIGDB.config_db_username");
323 GetOptValue<string>(var_map,
324 configdb_options_.config_db_password,
325 "CONFIGDB.config_db_password");
326 GetOptValue<bool>(var_map,
327 configdb_options_.config_db_use_ssl,
328 "CONFIGDB.config_db_use_ssl");
329 GetOptValue<string>(var_map,
330 configdb_options_.config_db_ca_certs,
331 "CONFIGDB.config_db_ca_certs");
332 GetOptValue< vector<string> >(var_map,
333 configdb_options_.rabbitmq_server_list,
334 "CONFIGDB.rabbitmq_server_list");
335 GetOptValue<string>(var_map,
336 configdb_options_.rabbitmq_user,
337 "CONFIGDB.rabbitmq_user");
338 GetOptValue<string>(var_map,
339 configdb_options_.rabbitmq_password,
340 "CONFIGDB.rabbitmq_password");
341 GetOptValue<string>(var_map,
342 configdb_options_.rabbitmq_vhost,
343 "CONFIGDB.rabbitmq_vhost");
344 GetOptValue<bool>(var_map,
345 configdb_options_.rabbitmq_use_ssl,
346 "CONFIGDB.rabbitmq_use_ssl");
347 GetOptValue<string>(var_map,
348 configdb_options_.rabbitmq_ssl_version,
349 "CONFIGDB.rabbitmq_ssl_version");
350 GetOptValue<string>(var_map,
351 configdb_options_.rabbitmq_ssl_keyfile,
352 "CONFIGDB.rabbitmq_ssl_keyfile");
353 GetOptValue<string>(var_map,
354 configdb_options_.rabbitmq_ssl_certfile,
355 "CONFIGDB.rabbitmq_ssl_certfile");
356 GetOptValue<string>(var_map,
357 configdb_options_.rabbitmq_ssl_ca_certs,
358 "CONFIGDB.rabbitmq_ssl_ca_certs");
359 ParseConfigOptions(var_map);
361 GetOptValue<bool>(var_map, xmpp_auth_enable_,
"DEFAULT.xmpp_dns_auth_enable");
362 GetOptValue<string>(var_map, xmpp_server_cert_,
"DEFAULT.xmpp_server_cert");
363 GetOptValue<string>(var_map, xmpp_server_key_,
"DEFAULT.xmpp_server_key");
364 GetOptValue<string>(var_map, xmpp_ca_cert_,
"DEFAULT.xmpp_ca_cert");
371 opt::variables_map var_map;
372 ifstream config_file_in;
373 config_file_in.open(config_file_.c_str());
374 if (config_file_in.good()) {
375 opt::store(opt::parse_config_file(config_file_in, config_file_options_),
378 config_file_in.close();
380 collector_server_list_.clear();
381 GetOptValue< vector<string> >(var_map, collector_server_list_,
382 "DEFAULT.collectors");
384 uint32_t new_chksum = GenerateHash(collector_server_list_);
385 if (collector_chksum_ != new_chksum) {
386 collector_chksum_ = new_chksum;
388 randomized_collector_server_list_.clear();
389 randomized_collector_server_list_ = collector_server_list_;
390 std::random_shuffle(randomized_collector_server_list_.begin(),
391 randomized_collector_server_list_.end());
397 uint32_t old_config_chksum = configdb_chksum_;
398 ParseConfigOptions(var_map);
399 if ((old_config_chksum != configdb_chksum_) && config_client_manager_) {
400 config_client_manager_->ReinitConfigClient(configdb_options());
406 configdb_options_.config_db_server_list.clear();
407 GetOptValue< vector<string> >(var_map,
408 configdb_options_.config_db_server_list,
409 "CONFIGDB.config_db_server_list");
410 GetOptValue<string>(var_map,
411 configdb_options_.config_db_username,
412 "CONFIGDB.config_db_username");
413 GetOptValue<string>(var_map,
414 configdb_options_.config_db_password,
415 "CONFIGDB.config_db_password");
416 GetOptValue<bool>(var_map,
417 configdb_options_.config_db_use_ssl,
418 "CONFIGDB.config_db_use_ssl");
419 GetOptValue<string>(var_map,
420 configdb_options_.config_db_ca_certs,
421 "CONFIGDB.config_db_ca_certs");
422 configdb_options_.rabbitmq_server_list.clear();
423 GetOptValue< vector<string> >(var_map,
424 configdb_options_.rabbitmq_server_list,
425 "CONFIGDB.rabbitmq_server_list");
426 GetOptValue<string>(var_map,
427 configdb_options_.rabbitmq_user,
428 "CONFIGDB.rabbitmq_user");
429 GetOptValue<string>(var_map,
430 configdb_options_.rabbitmq_password,
431 "CONFIGDB.rabbitmq_password");
432 GetOptValue<string>(var_map,
433 configdb_options_.rabbitmq_vhost,
434 "CONFIGDB.rabbitmq_vhost");
435 GetOptValue<bool>(var_map,
436 configdb_options_.rabbitmq_use_ssl,
437 "CONFIGDB.rabbitmq_use_ssl");
438 GetOptValue<string>(var_map,
439 configdb_options_.rabbitmq_ssl_version,
440 "CONFIGDB.rabbitmq_ssl_version");
441 GetOptValue<string>(var_map,
442 configdb_options_.rabbitmq_ssl_keyfile,
443 "CONFIGDB.rabbitmq_ssl_keyfile");
444 GetOptValue<string>(var_map,
445 configdb_options_.rabbitmq_ssl_certfile,
446 "CONFIGDB.rabbitmq_ssl_certfile");
447 GetOptValue<string>(var_map,
448 configdb_options_.rabbitmq_ssl_ca_certs,
449 "CONFIGDB.rabbitmq_ssl_ca_certs");
450 configdb_chksum_ = GenerateHash(configdb_options_);
bool Process(int argc, char *argv[], boost::program_options::options_description &cmdline_options)
uint32_t GenerateHash(const std::vector< std::string > &list)
void ParseConfigOptions(const boost::program_options::variables_map &var_map)
std::string config_db_password
static void ReConfigCollectors(const std::vector< std::string > &collector_list)
boost::asio::io_context * io_service()
static bool GetBuildInfo(BuildModule id, const std::string &build_info, std::string &result)
void Initialize(EventManager &evm, boost::program_options::options_description &options)
static const uint16_t DnsServerPort()
static const uint16_t HttpPortDns()
std::string rabbitmq_user
void ProcessOptions(const opt::variables_map &var_map, SandeshConfig *sandesh_config)
std::vector< std::string > config_db_server_list
std::string GetHostIp(boost::asio::io_context *io_service, const std::string &hostname)
std::string config_db_username
std::vector< std::string > rabbitmq_server_list
std::string rabbitmq_password
void AddOptions(opt::options_description *sandesh_options, SandeshConfig *sandesh_config)
bool Parse(EventManager &evm, int argc, char **argv)