OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
controller_init.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #include <algorithm>
6 #include <base/string_util.h>
7 #include <base/logging.h>
8 #include <base/timer.h>
9 #include <base/contrail_ports.h>
10 #include <base/connection_info.h>
11 #include <base/address_util.h>
12 #include <net/tunnel_encap_type.h>
13 #include <sandesh/sandesh_trace.h>
14 #include <cmn/agent_cmn.h>
16 #include <xmpp/xmpp_init.h>
17 #include <pugixml/pugixml.hpp>
18 #include <oper/global_qos_config.h>
20 #include <oper/vrf.h>
21 #include <oper/peer.h>
22 #include <oper/mirror_table.h>
23 #include <oper/multicast.h>
24 #include <controller/controller_types.h>
31 
32 using namespace boost::asio;
33 
35  "ControllerConnections", 5000));
37  "ControllerInfo", 5000));
39  "ControllerTxConfig_1", 5000));
41  "ControllerTxConfig_2", 5000));
43  "ControllerRouteWalker", 5000));
45  "Controller", 5000));
47  "ControllerRxRouteXmppMessage1", 5000));
49  "ControllerRxConfigXmppMessage1", 5000));
51  "ControllerRxRouteXmppMessage2", 5000));
53  "ControllerRxConfigXmppMessage2", 5000));
55  "ControllerTxXmppMessage_1", 5000));
57  "ControllerTxXmppMessage_2", 5000));
58 
60  std::vector<string>server_list) :
61  ControllerWorkQueueData(), service_name_(service_name),
62  server_list_(server_list) {
63 }
64 
66  ControllerWorkQueueData(), channel_(channel) {
67 }
68 
70  : agent_(agent), multicast_sequence_number_(0),
71  work_queue_(agent->task_scheduler()->GetTaskId("Agent::ControllerXmpp"), 0,
72  boost::bind(&VNController::ControllerWorkQueueProcess, this,
73  _1)),
74  fabric_multicast_label_range_(), xmpp_channel_down_cb_(),
75  disconnect_(false) {
76  work_queue_.set_name("Controller Queue");
77  for (uint8_t count = 0; count < MAX_XMPP_SERVERS; count++) {
78  timed_out_channels_[count].clear();
79  }
80  delpeer_walks_.clear();
82 }
83 
86 }
87 
88 void VNController::FillMcastLabelRange(uint32_t *start_idx,
89  uint32_t *end_idx,
90  uint8_t idx) const {
91  // Multicast labels required by both control nodes
92  uint32_t max_mc_labels = 2 * (agent_->vrouter_max_vrfs());
93  // Multicast label count per control node
94  uint32_t mc_label_count = 0;
95  uint32_t vrouter_max_labels = agent_->vrouter_max_labels();
96 
97  if (max_mc_labels + MIN_UNICAST_LABEL_RANGE < vrouter_max_labels) {
98  mc_label_count = agent_->vrouter_max_vrfs();
99  } else {
100  mc_label_count = (vrouter_max_labels - MIN_UNICAST_LABEL_RANGE)/2;
101  }
102 
103  *start_idx = vrouter_max_labels - ((idx + 1) * mc_label_count);
104  *end_idx = (vrouter_max_labels - ((idx) * mc_label_count) - 1);
105 }
106 
108  uint32_t start = 0;
109  uint32_t end = 0;
110  std::stringstream str;
111 
112  //Logic for multicast label allocation
113  // 1> Reserve minimum 4k label for unicast
114  // 2> In the remaining label space
115  // * Try allocating labels equal to no. of VN
116  // for each control node
117  // * If label space is not huge enough
118  // split remaining unicast label for both control
119  // node
120  // Remaining label would be used for unicast mpls label
122  str << 0 << "-" << 0;
126  str.str();
127  return;
128  }
129 
130  FillMcastLabelRange(&start, &end, idx);
131  str << start << "-" << end;
132 
133  agent_->mpls_table()->ReserveMulticastLabel(start, end, idx);
137  str.str();
138 }
139 
141  GlobalQosConfig* qos = NULL;
142  if (agent_->oper_db()) {
143  qos = agent_->oper_db()->global_qos_config();
144  }
145  if (qos && qos->control_dscp() != GlobalQosConfig::kInvalidDscp) {
146  xmpp_cfg->dscp_value = qos->control_dscp();
147  } else {
148  xmpp_cfg->dscp_value = 0;
149  }
150 }
151 
153 
154  uint8_t count = 0;
155 
156  if (agent_->is_vhost_interface_up() == false) {
157  // Sleep 100 msec to avoid cpu hogging.
158  usleep(100000);
160  new ControllerConnectRetryData(true, false));
161  ControllerWorkQueueDataType base_data =
162  boost::static_pointer_cast<ControllerWorkQueueData>(data);
163  work_queue_.Enqueue(base_data);
164  return;
165  }
166 
167  while (count < MAX_XMPP_SERVERS) {
169  if (!agent_->controller_ifmap_xmpp_server(count).empty()) {
170 
172  if (ch) {
173  // Channel is created, do not disturb
174  CONTROLLER_CONNECTIONS_TRACE(DiscoveryConnection,
175  "XMPP Server is already present, ignore reconfig response",
176  count, ch->GetXmppServer(), "");
177  count++;
178  continue;
179  }
180 
181  boost::system::error_code ec;
182  XmppChannelConfig *xmpp_cfg = new XmppChannelConfig(true);
183  xmpp_cfg->ToAddr = XmppInit::kControlNodeJID;
184  xmpp_cfg->FromAddr = agent_->agent_name();
185  xmpp_cfg->NodeAddr = XmppInit::kPubSubNS;
186  FastConvergenceParameters fc_params =
188  if (fc_params.enable) {
189  xmpp_cfg->xmpp_hold_time = fc_params.xmpp_hold_time;
190  }
191  /*
192  * Since TcpServer asserts in bind failure,
193  * dont need to assert in failure.
194  * Also TorAgent can be run anywhere. so vhost0
195  * ip binding should not be done for TorAgent.
196  */
197  Ip4Address local_endpoint;
198  if (!agent_->tor_agent_enabled() && !agent_->isMockMode()) {
199  local_endpoint = agent_->compute_node_ip();
200  xmpp_cfg->local_endpoint.address(AddressFromString(
201  local_endpoint.to_string(), &ec));
202  }
203  if (agent_->test_mode()) {
204  local_endpoint = Ip4Address::from_string("127.0.0.1", ec);
205  xmpp_cfg->local_endpoint.address(AddressFromString(
206  local_endpoint.to_string(), &ec));
207  }
208  xmpp_cfg->endpoint.address(AddressFromString(
209  agent_->controller_ifmap_xmpp_server(count), &ec));
210  assert(ec.value() == 0);
211  xmpp_cfg->auth_enabled = agent_->xmpp_auth_enabled();
212  if (xmpp_cfg->auth_enabled) {
215  xmpp_cfg->path_to_ca_cert = agent_->xmpp_ca_cert();
216  }
217  uint16_t port = agent_->controller_ifmap_xmpp_port(count);
218  xmpp_cfg->endpoint.port(port);
219  SetDscpConfig(xmpp_cfg);
220  xmpp_cfg->xmlns = agent_->subcluster_name();
221 
222  // Create Xmpp Client
223  XmppClient *client = new XmppClient(agent_->event_manager(), xmpp_cfg);
224 
225  XmppInit *xmpp = new XmppInit();
226  xmpp->AddXmppChannelConfig(xmpp_cfg);
227  // create bgp peer
228  AgentXmppChannel *bgp_peer = new AgentXmppChannel(agent_,
231  fabric_multicast_label_range_str,
232  count);
235  bgp_peer, _2));
236  xmpp->InitClient(client);
237 
238  XmppChannel *channel = client->
239  FindChannel(XmppInit::kControlNodeJID);
240  assert(channel);
243  this, bgp_peer->GetXmppServerIdx(),
244  _1, _2, _3, _4, _5));
247  this, bgp_peer->GetXmppServerIdx(),
248  _1, _2, _3, _4, _5));
249  bgp_peer->RegisterXmppChannel(channel);
250 
251  bgp_peer->UpdateConnectionInfo(channel->GetPeerState());
252 
253  // create ifmap peer
254  AgentIfMapXmppChannel *ifmap_peer =
255  new AgentIfMapXmppChannel(agent_, channel, count);
256 
257  agent_->set_controller_xmpp_channel(bgp_peer, count);
258  agent_->set_ifmap_xmpp_channel(ifmap_peer, count);
261  }
262  count++;
263  }
264 }
265 
267 
268  if (agent_->GetDnsProto() == NULL) {
269  return;
270  }
271 
272  if (agent_->is_vhost_interface_up() == false) {
273  // Sleep 100 msec to avoid cpu hogging.
274  usleep(100000);
276  new ControllerConnectRetryData(false, true));
277  ControllerWorkQueueDataType base_data =
278  boost::static_pointer_cast<ControllerWorkQueueData>(data);
279  work_queue_.Enqueue(base_data);
280  return;
281  }
282 
283  uint8_t count = 0;
284  while (count < MAX_XMPP_SERVERS) {
285  if (!agent_->dns_server(count).empty()) {
286 
288  if (ch) {
289  // Channel is up and running, do not disturb
290  CONTROLLER_CONNECTIONS_TRACE(DiscoveryConnection,
291  "DNS Server is already present, ignore reconfig response",
292  count, ch->GetXmppServer(), "");
293  count++;
294  continue;
295  }
296 
297  // XmppChannel Configuration
298  boost::system::error_code ec;
299  XmppChannelConfig *xmpp_cfg_dns = new XmppChannelConfig(true);
300  xmpp_cfg_dns->ToAddr = XmppInit::kDnsNodeJID;
301  xmpp_cfg_dns->FromAddr = agent_->agent_name() + "/dns";
302  xmpp_cfg_dns->NodeAddr = "";
303  /*
304  * Since TcpServer asserts in bind failure,
305  * dont need to assert in failure.
306  * Also TorAgent can be run anywhere. so vhost0
307  * ip binding should not be done for TorAgent.
308  */
309  Ip4Address local_endpoint;
310  if (!agent_->tor_agent_enabled() && !agent_->isMockMode()) {
311  local_endpoint = agent_->compute_node_ip();
312  xmpp_cfg_dns->local_endpoint.address(AddressFromString(
313  local_endpoint.to_string(), &ec));
314  }
315  if (agent_->test_mode()) {
316  local_endpoint = Ip4Address::from_string("127.0.0.1", ec);
317  xmpp_cfg_dns->local_endpoint.address(AddressFromString(
318  local_endpoint.to_string(), &ec));
319  }
320  xmpp_cfg_dns->endpoint.address(AddressFromString(
321  agent_->dns_server(count), &ec));
322  assert(ec.value() == 0);
323  if (agent_->xmpp_dns_test_mode()) {
324  xmpp_cfg_dns->endpoint.port(agent_->dns_server_port(count));
325  } else {
326  xmpp_cfg_dns->endpoint.port(ContrailPorts::DnsXmpp());
327  }
328  xmpp_cfg_dns->auth_enabled = agent_->dns_auth_enabled();
329  if (xmpp_cfg_dns->auth_enabled) {
330  xmpp_cfg_dns->path_to_server_cert = agent_->xmpp_server_cert();
332  xmpp_cfg_dns->path_to_ca_cert = agent_->xmpp_ca_cert();
333  }
334  SetDscpConfig(xmpp_cfg_dns);
335 
336  // Create Xmpp Client
337  XmppClient *client_dns = new XmppClient(agent_->event_manager(),
338  xmpp_cfg_dns);
339 
340  XmppInit *xmpp_dns = new XmppInit();
341  // create dns peer
343  agent_->dns_server(count),
344  count);
347  dns_peer, _2));
348 
349  xmpp_dns->AddXmppChannelConfig(xmpp_cfg_dns);
350  xmpp_dns->InitClient(client_dns);
351 
352  XmppChannel *channel_dns = client_dns->FindChannel(
354  assert(channel_dns);
355  dns_peer->RegisterXmppChannel(channel_dns);
356 
357 
358  dns_peer->UpdateConnectionInfo(channel_dns->GetPeerState());
359  agent_->set_dns_xmpp_client(client_dns, count);
360  agent_->set_dns_xmpp_channel(dns_peer, count);
361  agent_->set_dns_xmpp_init(xmpp_dns, count);
362  }
363  count++;
364  }
365 }
366 
368  /* Connect to Control-Node Xmpp Server */
371 
372  /* Connect to DNS Xmpp Server */
375 
376  /* Inits */
381  Register(boost::bind(&VNController::GracefulRestartConfigListener,
382  this));
383 }
384 
385 // Disconnect on agent shutdown.
387  XmppClient *cl;
388  uint8_t count = 0;
389  disconnect_ = true;
390  while (count < MAX_XMPP_SERVERS) {
391  if ((cl = agent_->controller_ifmap_xmpp_client(count)) != NULL) {
392  cl->Shutdown();
393  }
394  // Delpeer walk for channel slot = count
396  // Delpeer walk done for timedout channels which used to represent this
397  // slot.
398  FlushTimedOutChannels(count);
399  count ++;
400  }
401 }
402 
403 // Test-only code to verify that xmpp timeout has been updated correctly.
405  XmppClient *cl;
406  uint8_t count = 0;
407  while (count < MAX_XMPP_SERVERS) {
408  if ((cl = agent_->controller_ifmap_xmpp_client(count)) != NULL) {
409  if (to != cl->XmppTimeOut(XmppInit::kControlNodeJID))
410  return false;
411  }
412  count++;
413  }
414  return true;
415 }
416 
417 // Update agent-controller xmpp connection witth new timeout value.
418 void VNController::XmppServerUpdate(uint8_t xmpp_hold_time) {
419  XmppClient *cl;
420  uint8_t count = 0;
421  while (count < MAX_XMPP_SERVERS) {
422  if ((cl = agent_->controller_ifmap_xmpp_client(count)) != NULL) {
423  cl->UpdateTimeOut(xmpp_hold_time, XmppInit::kControlNodeJID);
424  }
425  count ++;
426  }
427 }
428 
430  XmppClient *cl;
431  uint8_t count = 0;
432  while (count < MAX_XMPP_SERVERS) {
433  if ((cl = agent_->dns_xmpp_client(count)) != NULL) {
434  cl->Shutdown();
435  }
436  count ++;
437  }
438 }
439 
441  if (!ptr.get())
442  return;
443 
444  ptr.get()->bgp_peer_id()->DelPeerRoutes(
445  boost::bind(&VNController::DelPeerWalkDone, this, ptr.get()),
446  ptr.get()->sequence_number());
447  delpeer_walks_.push_back(ptr);
448 }
449 
450 //During delete of xmpp channel, check if BGP peer is deleted.
451 //If not agent never got a channel down state and is being removed
452 //as it is not part of discovery list.
453 //Artificially inject NOT_READY in agent xmpp channel.
456  if (!channel)
457  return;
458 
459  BgpPeer *bgp_peer = channel->bgp_peer_id();
460  if (bgp_peer != NULL) {
461  //Defer delete of channel till delete walk of bgp peer is over.
462  //Till walk is over, unregister as table listener is not done and there
463  //may be notifications(which will be ignored though, but valid pointer is
464  //needed). BgpPeer destructor will handle deletion of channel.
467  channel->Unregister();
468  }
469  //Every delete of channel should delete flow of bgp-as-a-service,
470  //which is using this CN.
471  if (xmpp_channel_down_cb_.empty() == false) {
473  }
474 }
475 
476 //Trigger shutdown and cleanup of routes for the client
480 }
481 
483  uint8_t count = 0;
484  XmppClient *cl;
485  while (count < MAX_XMPP_SERVERS) {
486  if ((cl = agent_->controller_ifmap_xmpp_client(count)) != NULL) {
488  }
489  if ((cl = agent_->dns_xmpp_client(count)) != NULL) {
490  DisConnectDnsServer(count);
491  }
492  count++;
493  }
494 
497  agent_ifmap_vm_export_.reset();
498 }
499 
500 
502  const std::string &server_ip) {
503 
504  uint8_t count = 0;
505  while (count < MAX_XMPP_SERVERS) {
507  if (ch && (ch->GetXmppServer().compare(server_ip) == 0)) {
508  return ch;
509  }
510  count++;
511  }
512 
513  return NULL;
514 }
515 
516 const string VNController::MakeConnectionPrefix(bool is_dns) const {
517  string name_prefix;
518  if (is_dns) {
519  name_prefix = agent_->xmpp_dns_server_prefix();
520  } else {
521  name_prefix = agent_->xmpp_control_node_prefix();
522  }
523  return name_prefix;
524 }
525 
526 void VNController::DeleteConnectionInfo(const std::string &addr, bool is_dns)
527  const {
528  boost::asio::ip::tcp::endpoint ep;
529  boost::system::error_code ec;
530  ep.address(AddressFromString(addr, &ec));
531  const string name = ep.address().to_string();
532  const string &name_prefix = MakeConnectionPrefix(is_dns);
533  agent_->connection_state()->Delete(process::ConnectionType::XMPP,
534  name_prefix + name);
535 }
536 
539  ControllerWorkQueueDataType base_data =
540  boost::static_pointer_cast<ControllerWorkQueueData>(data);
541  work_queue_.Enqueue(base_data);
542 }
543 
546  for (AgentXmppChannelListIter it = delpeer_walks_.begin();
547  it != delpeer_walks_.end(); it++) {
548  if ((*it).get() == channel) {
549  delpeer_walks_.erase(it);
550  break;
551  }
552  }
553  //delete channel;
554  if (disconnect_ & delpeer_walks_.empty())
555  Cleanup();
556 }
557 
559  for (AgentXmppChannelListIter it = timed_out_channels_[idx].begin();
560  it != timed_out_channels_[idx].end(); it++) {
561  StartDelPeerWalk((*it));
562  }
563  timed_out_channels_[idx].clear();
564 }
565 
567 
568  // Managed Delete of XmppClient object, which deletes the
569  // dependent XmppClientConnection object and
570  // scoped XmppChannel object
572  //In case of UT xc can be NULL
573  if (!agent_->test_mode() || xc) {
575  xc->Shutdown(); // ManagedDelete
576  }
578 
579  //cleanup AgentXmppChannel
581  //Trigger removal from service inuse list for discovery
582  //cleanup AgentIfmapXmppChannel
586 
587  delete agent_->ifmap_xmpp_channel(idx);
588  agent_->set_ifmap_xmpp_channel(NULL, idx);
589 
590  if (!agent_->test_mode() || xc) {
592  delete agent_->controller_ifmap_xmpp_init(idx);
595  }
596 
598 }
599 
601  const std::string &server_ip,
602  std::vector<std::string> resp) {
603 
604  std::vector<std::string>::iterator iter;
605  int8_t count = -1;
606  int8_t min_iter = std::min(static_cast<int>(resp.size()), MAX_XMPP_SERVERS);
607  for (iter = resp.begin(); ++count < min_iter; iter++) {
608  std::vector<string> servers;
609  boost::split(servers, *iter, boost::is_any_of(":"));
610  if (servers[0].compare(server_ip) == 0) {
611  return true;
612  }
613  }
614  return false;
615 }
616 
617 
619 
620  std::vector<string> controller_list =
622 
624  g_vns_constants.XMPP_SERVER_DISCOVERY_SERVICE_NAME,
625  controller_list));
626  ControllerWorkQueueDataType base_data =
627  boost::static_pointer_cast<ControllerWorkQueueData>(data);
628  work_queue_.Enqueue(base_data);
629 }
630 
632 
633  std::vector<string> dns_list =
635 
637  g_vns_constants.DNS_SERVER_DISCOVERY_SERVICE_NAME,
638  dns_list));
639  ControllerWorkQueueDataType base_data =
640  boost::static_pointer_cast<ControllerWorkQueueData>(data);
641  work_queue_.Enqueue(base_data);
642 }
643 
645 
647  Agent::GetInstance()->GetControllerlistChksum()) {
648 
651 
653  }
654 
655  if (dns_list_chksum_ !=
656  Agent::GetInstance()->GetDnslistChksum()) {
657 
660 
662  }
663 }
664 
665 bool VNController::ApplyControllerReConfigInternal(std::vector<string> resp) {
667  std::vector<string>::iterator iter;
668  int8_t count = -1;
669 
670  /* Apply only MAX_XMPP_SERVERS from list as the list is ordered */
671  int8_t min_iter = std::min(static_cast<int>(resp.size()), MAX_XMPP_SERVERS);
672  for (iter = resp.begin(); ++count < min_iter; iter++) {
673  std::string server_ip;
674  uint16_t server_port;
675  addressParser.ParseAddress(*iter, &server_ip, &server_port);
676  std::string str_port = integerToString(server_port);
677 
678  CONTROLLER_CONNECTIONS_TRACE(DiscoveryConnection, "XMPP ReConfig Apply Server Ip",
679  count, server_ip, str_port);
680 
681  AgentXmppChannel *chnl = FindAgentXmppChannel(server_ip);
682  if (chnl) {
683  if (chnl->GetXmppChannel() &&
684  chnl->GetXmppChannel()->GetPeerState() == xmps::READY) {
685  CONTROLLER_CONNECTIONS_TRACE(DiscoveryConnection,
686  " XMPP ReConfig Server is READY and running, ignore", count,
687  chnl->GetXmppServer(), "");
688  continue;
689  } else {
690  CONTROLLER_CONNECTIONS_TRACE(DiscoveryConnection,
691  " XMPP ReConfig Server is NOT_READY, ignore", count,
692  chnl->GetXmppServer(), "");
693  continue;
694  }
695 
696  } else {
697 
698  for (uint8_t xs_idx = 0; xs_idx < MAX_XMPP_SERVERS; xs_idx++) {
699 
700  if (agent_->controller_ifmap_xmpp_server(xs_idx).empty()) {
701 
702  CONTROLLER_CONNECTIONS_TRACE(DiscoveryConnection,
703  "Set Xmpp ReConfig Channel",
704  xs_idx, server_ip, str_port);
705 
706  agent_->set_controller_ifmap_xmpp_server(server_ip, xs_idx);
707  agent_->set_controller_ifmap_xmpp_port(server_port, xs_idx);
708  break;
709 
710  } else if (agent_->controller_xmpp_channel(xs_idx)) {
711 
713  agent_->controller_ifmap_xmpp_server(xs_idx), resp)) {
714 
715  CONTROLLER_CONNECTIONS_TRACE(DiscoveryConnection,
716  "Retain Xmpp ReConfig Channel ", xs_idx,
717  agent_->controller_ifmap_xmpp_server(xs_idx), "");
718  continue;
719  }
720 
721  CONTROLLER_CONNECTIONS_TRACE(DiscoveryConnection,
722  "ReSet Xmpp ReConfig Channel ", xs_idx,
724  server_ip);
725 
727  agent_->set_controller_ifmap_xmpp_server(server_ip, xs_idx);
728  agent_->set_controller_ifmap_xmpp_port(server_port, xs_idx);
729  break;
730  }
731  }
732  }
733  }
734 
736  return true;
737 }
738 
740  const std::string &server_ip) {
741 
742  uint8_t count = 0;
743  while (count < MAX_XMPP_SERVERS) {
745  if (ch && (ch->GetXmppServer().compare(server_ip) == 0)) {
746  return ch;
747  }
748  count++;
749  }
750 
751  return NULL;
752 }
753 
755 
756  // Managed Delete of XmppClient object, which deletes the
757  // dependent XmppClientConnection object and
758  // scoped_ptr XmppChannel
759  XmppClient *xc = agent_->dns_xmpp_client(idx);
761  xc->Shutdown();
762  agent_->set_dns_xmpp_client(NULL, idx);
763 
764  //cleanup AgentDnsXmppChannel
765  delete agent_->dns_xmpp_channel(idx);
766  agent_->set_dns_xmpp_channel(NULL, idx);
767 
768  agent_->dns_xmpp_init(idx)->Reset();
769  delete agent_->dns_xmpp_init(idx);
770  agent_->set_dns_xmpp_init(NULL, idx);
771 
773  agent_->reset_dns_server(idx);
774 }
775 
776 bool VNController::ApplyDnsReConfigInternal(std::vector<string> resp) {
778  std::vector<string>::iterator iter;
779  int8_t count = -1;
780 
781  /* Apply only MAX_XMPP_SERVERS from list as the list is ordered */
782  int8_t min_iter = std::min(static_cast<int>(resp.size()), MAX_XMPP_SERVERS);
783  for (iter = resp.begin(); ++count < min_iter; iter++) {
784  std::string server_ip;
785  uint16_t server_port;
786  addressParser.ParseAddress(*iter, &server_ip, &server_port);
787  std::string str_port = integerToString(server_port);
788 
789  CONTROLLER_CONNECTIONS_TRACE(DiscoveryConnection,
790  "DNS Server ReConfig Apply Server Ip",
791  count, server_ip, str_port);
792 
793  AgentDnsXmppChannel *chnl = FindAgentDnsXmppChannel(server_ip);
794  if (chnl) {
795  if (chnl->GetXmppChannel() &&
796  chnl->GetXmppChannel()->GetPeerState() == xmps::READY) {
797  CONTROLLER_CONNECTIONS_TRACE(DiscoveryConnection,
798  "DNS Server is READY and running, ignore", count,
799  chnl->GetXmppServer(), "");
800  continue;
801  } else {
802  CONTROLLER_CONNECTIONS_TRACE(DiscoveryConnection,
803  "DNS Server is NOT_READY, ignore", count,
804  chnl->GetXmppServer(), "");
805  continue;
806  }
807  } else {
808 
809  for (uint8_t xs_idx = 0; xs_idx < MAX_XMPP_SERVERS; xs_idx++) {
810 
811  if (agent_->dns_server(xs_idx).empty()) {
812 
813  CONTROLLER_CONNECTIONS_TRACE(DiscoveryConnection,
814  "Set Dns Xmpp Channel ",
815  xs_idx, server_ip, str_port);
816 
817  agent_->set_dns_server(server_ip, xs_idx);
818  agent_->set_dns_server_port(server_port, xs_idx);
819  break;
820 
821  } else if (agent_->dns_xmpp_channel(xs_idx)) {
822 
824  agent_->dns_server(xs_idx), resp)) {
825 
826  CONTROLLER_CONNECTIONS_TRACE(DiscoveryConnection,
827  "Retain Dns Xmpp Channel ", xs_idx,
828  agent_->dns_server(xs_idx), "");
829  continue;
830  }
831 
832  CONTROLLER_CONNECTIONS_TRACE(DiscoveryConnection,
833  "ReSet Dns ReConfigChannel ", xs_idx,
834  agent_->dns_server(xs_idx), server_ip);
835 
836  DisConnectDnsServer(xs_idx);
837  agent_->set_dns_server(server_ip, xs_idx);
838  agent_->set_dns_server_port(server_port, xs_idx);
839  break;
840  }
841  }
842  }
843  }
844 
846  return true;
847 }
848 
849 /*
850  * Returns the number of active agentxmppchannel.
851  * AgentXmppChannel is identified as active if it has a BGP peer
852  * attached to it.
853  */
855  uint8_t active_xmpps = 0;
856  for (uint8_t count = 0; count < MAX_XMPP_SERVERS; count++) {
858  if (xc) {
859  // Check if AgentXmppChannel has BGP peer
860  if (xc->bgp_peer_id() != NULL)
861  active_xmpps++;
862  }
863  }
864 
865  return active_xmpps;
866 }
867 
869  for (uint8_t count = 0; count < MAX_XMPP_SERVERS; count++) {
871  if (xc) {
872  // Check if AgentXmppChannel has BGP peer
873  if (xc->bgp_peer_id() != NULL)
874  return xc;
875  }
876  }
877 
878  return NULL;
879 }
880 
882  uint8_t count = 0;
883  while (count < MAX_XMPP_SERVERS) {
884  if (agent_->controller_xmpp_channel(count))
886  Start(agent_->controller_xmpp_channel(count));
887  count++;
888  }
889 }
890 
892  uint8_t count = 0;
893  while (count < MAX_XMPP_SERVERS) {
894  if (agent_->controller_xmpp_channel(count)) {
896  end_of_rib_tx_timer()->Cancel();
898  }
899  count++;
900  }
901 }
902 
904 
905  //DOM processing
906  ControllerXmppDataType derived_xmpp_data =
907  boost::dynamic_pointer_cast<ControllerXmppData>(data);
908  if (derived_xmpp_data) {
909  return XmppMessageProcess(derived_xmpp_data);
910  }
911 
912  // VM Subscription message
913  ControllerVmiSubscribeData *subscribe_data =
914  boost::dynamic_pointer_cast<ControllerVmiSubscribeData>(data.get());
915  if (subscribe_data && agent_ifmap_vm_export_.get()) {
916  agent_ifmap_vm_export_->VmiEvent(subscribe_data);
917  return true;
918  }
919 
920  //ReConfig
921  ControllerReConfigDataType reconfig_data =
922  boost::dynamic_pointer_cast<ControllerReConfigData>(data);
923  if (reconfig_data) {
924  if (reconfig_data->service_name_.compare(
925  g_vns_constants.XMPP_SERVER_DISCOVERY_SERVICE_NAME) == 0) {
926  return ApplyControllerReConfigInternal(reconfig_data->server_list_);
927  } else if (reconfig_data->service_name_.compare(
928  g_vns_constants.DNS_SERVER_DISCOVERY_SERVICE_NAME) == 0) {
929  return ApplyDnsReConfigInternal(reconfig_data->server_list_);
930  } else {
931  LOG(ERROR, "Unknown Service Name %s" << reconfig_data->service_name_);
932  return true;
933  }
934  }
935 
936  ControllerDelPeerDataType del_peer_data =
937  boost::dynamic_pointer_cast<ControllerDelPeerData>(data);
938  if (del_peer_data) {
939  DelPeerWalkDoneProcess(del_peer_data.get()->channel());
940  return true;
941  }
942 
943  AgentIfMapXmppChannel::EndOfConfigDataPtr end_of_config_data =
944  boost::dynamic_pointer_cast<EndOfConfigData>(data);
945  if (end_of_config_data &&
947  end_of_config_data->channel())) {
948  end_of_config_data->channel()->ProcessEndOfConfig();
949  return true;
950  }
951 
952  //Connection retry for servers
953  ControllerConnectRetryDataType connect_retry_data =
954  boost::dynamic_pointer_cast<ControllerConnectRetryData>(data);
955  if (connect_retry_data) {
956  if (connect_retry_data->connect_xmpp_server()) {
958  return true;
959  }
960  if (connect_retry_data->connect_dns_xmpp_server()) {
962  return true;
963  }
964  }
965 
966  return true;
967 }
968 
970  if (data->peer_id() == xmps::BGP) {
971  if (data->config()) {
972  AgentXmppChannel *peer =
973  agent_->controller_xmpp_channel(data->channel_id());
974  if (peer) {
975  peer->ReceiveBgpMessage(data->dom());
976  }
977  } else {
978  AgentXmppChannel *peer =
979  agent_->controller_xmpp_channel(data->channel_id());
980  if (peer) {
982  data->peer_state());
983  }
984  }
985  } else if (data->peer_id() == xmps::CONFIG) {
986  AgentIfMapXmppChannel *peer =
987  agent_->ifmap_xmpp_channel(data->channel_id());
988  if (peer) {
989  peer->ReceiveConfigMessage(data->dom());
990  }
991  } else if (data->peer_id() == xmps::DNS) {
992  AgentDnsXmppChannel *peer =
993  agent_->dns_xmpp_channel(data->channel_id());
994  if (data->config()) {
995  if (peer) {
996  peer->ReceiveDnsMessage(data->dom());
997  }
998  } else {
999  if (peer) {
1001  data->peer_state());
1002  }
1003  }
1004  }
1005 
1006  return true;
1007 }
1008 
1010  work_queue_.Enqueue(data);
1011 }
1012 
1013 bool VNController::RxXmppMessageTrace(uint8_t peer_index,
1014  const std::string &to_address,
1015  int port, int size,
1016  const std::string &msg,
1017  const XmppStanza::XmppMessage *xmppmsg) {
1018  const std::string &to = xmppmsg->to;
1019  if (to.find(XmppInit::kBgpPeer) != string::npos) {
1020  CONTROLLER_RX_ROUTE_MESSAGE_TRACE(Message, peer_index, to_address,
1021  port, size, msg);
1022  return true;
1023  } else if (to.find(XmppInit::kConfigPeer) != string::npos) {
1024  CONTROLLER_RX_CONFIG_MESSAGE_TRACE(Message, peer_index, to_address,
1025  port, size, msg);
1026  return true;
1027  }
1028  return false;
1029 }
1030 
1031 bool VNController::TxXmppMessageTrace(uint8_t peer_index,
1032  const std::string &to_address,
1033  int port, int size,
1034  const std::string &msg,
1035  const XmppStanza::XmppMessage *xmppmsg) {
1036  CONTROLLER_TX_MESSAGE_TRACE(Message, peer_index, to_address,
1037  port, size, msg);
1038  return true;
1039 }
1040 
1042  return (work_queue_.IsQueueEmpty() == 0);
1043 }
1044 
1045 MacAddress VNController::GetTunnelMac(const autogen::EnetNextHopType &nh) {
1046  return MacAddress(nh.mac);
1047 }
1048 
1049 MacAddress VNController::GetTunnelMac(const autogen::NextHopType &nh) {
1050  return MacAddress();
1051 }
1052 
1054 (const autogen::EnetTunnelEncapsulationListType &encap) {
1055  TunnelType::TypeBmap bmap = 0;
1056  for (autogen::EnetTunnelEncapsulationListType::const_iterator iter =
1057  encap.begin(); iter != encap.end(); iter++) {
1058  TunnelEncapType::Encap encap =
1060  if ((encap == TunnelEncapType::GRE) ||
1061  (encap == TunnelEncapType::MPLS_O_GRE))
1062  bmap |= (1 << TunnelType::MPLS_GRE);
1063  if (encap == TunnelEncapType::MPLS_O_UDP)
1064  bmap |= (1 << TunnelType::MPLS_UDP);
1065  if (encap == TunnelEncapType::VXLAN)
1066  bmap |= (1 << TunnelType::VXLAN);
1067  if (encap == TunnelEncapType::NATIVE)
1068  bmap |= (1 << TunnelType::NATIVE);
1069  if (encap == TunnelEncapType::MPLS)
1070  bmap |= (1 << TunnelType::MPLS_OVER_MPLS);
1071  }
1072  return bmap;
1073 }
1074 
1076 (const autogen::TunnelEncapsulationListType &encap) {
1077  TunnelType::TypeBmap bmap = 0;
1078  for (autogen::TunnelEncapsulationListType::const_iterator iter =
1079  encap.begin(); iter != encap.end(); iter++) {
1080  TunnelEncapType::Encap encap =
1082  if ((encap == TunnelEncapType::GRE) ||
1083  (encap == TunnelEncapType::MPLS_O_GRE))
1084  bmap |= (1 << TunnelType::MPLS_GRE);
1085  if (encap == TunnelEncapType::MPLS_O_UDP)
1086  bmap |= (1 << TunnelType::MPLS_UDP);
1087  if (encap == TunnelEncapType::NATIVE)
1088  bmap |= (1 << TunnelType::NATIVE);
1089  if (encap == TunnelEncapType::MPLS)
1090  bmap |= (1 << TunnelType::MPLS_OVER_MPLS);
1091  }
1092  return bmap;
1093 }
1094 
1096 (const autogen::McastTunnelEncapsulationListType &encap) {
1097  TunnelType::TypeBmap bmap = 0;
1098  for (autogen::McastTunnelEncapsulationListType::const_iterator iter =
1099  encap.begin(); iter != encap.end(); iter++) {
1100  TunnelEncapType::Encap encap =
1102  if ((encap == TunnelEncapType::GRE) ||
1103  (encap == TunnelEncapType::MPLS_O_GRE))
1104  bmap |= (1 << TunnelType::MPLS_GRE);
1105  if (encap == TunnelEncapType::MPLS_O_UDP)
1106  bmap |= (1 << TunnelType::MPLS_UDP);
1107  }
1108  return bmap;
1109 }
1110 
1112  bool enable = agent_->oper_db()->global_system_config()->
1113  gres_parameters().IsEnabled();
1114 
1115  for (uint8_t i = 0; i < MAX_XMPP_SERVERS; i++) {
1116  if (agent_->ifmap_xmpp_channel(i)) {
1118  GresEnabled(enable);
1119  }
1120  if (agent_->controller_xmpp_channel(i)) {
1122  GresEnabled(enable);
1124  GresEnabled(enable);
1125  }
1126  }
1127 }
boost::asio::ip::tcp::endpoint endpoint
Definition: xmpp_config.h:24
uint32_t TypeBmap
Definition: nexthop.h:248
SandeshTraceBufferPtr ControllerConnectionsTraceBuf(SandeshTraceBufferCreate("ControllerConnections", 5000))
#define CONTROLLER_TX_MESSAGE_TRACE(obj, index,...)
XmppChannel * GetXmppChannel()
boost::shared_ptr< ControllerDelPeerData > ControllerDelPeerDataType
const std::string & subcluster_name() const
Definition: agent.h:753
static void HandleXmppClientChannelEvent(AgentDnsXmppChannel *peer, xmps::PeerState state)
void set_controller_xmpp_channel(AgentXmppChannel *channel, uint8_t idx)
Definition: agent.cc:1115
bool IsQueueEmpty() const
Definition: queue_task.h:352
SandeshTraceBufferPtr ControllerInfoTraceBuf
GracefulRestartParameters & gres_parameters()
static Agent * GetInstance()
Definition: agent.h:436
void set_controller_ifmap_xmpp_client(XmppClient *client, uint8_t idx)
Definition: agent.h:775
void set_dns_server_port(uint16_t port, uint8_t idx)
Definition: agent.h:871
static const uint8_t kInvalidDscp
bool test_mode() const
Definition: agent.h:1191
#define CONTROLLER_RX_ROUTE_MESSAGE_TRACE(obj, index,...)
void Shutdown(bool delete_entries=true)
Definition: queue_task.h:152
const uint16_t controller_ifmap_xmpp_port(uint8_t idx) const
Definition: agent.h:757
Ip4Address compute_node_ip() const
Definition: agent.h:681
bool tor_agent_enabled() const
Definition: agent.h:1164
void Reset(bool keep_config=false)
Definition: xmpp_init.cc:63
virtual void RegisterTxMessageTraceCallback(TxMessageTraceCb cb)=0
FastConvergenceParameters & fc_params()
void DelPeerWalkDoneProcess(AgentXmppChannel *ch)
std::vector< string > & GetDnslist()
Definition: agent.h:700
void set_dns_xmpp_init(XmppInit *xmpp, uint8_t idx)
Definition: agent.h:833
boost::asio::ip::tcp::endpoint local_endpoint
Definition: xmpp_config.h:25
SandeshTraceBufferPtr ControllerTxConfigTraceBuf1
void reset_controller_xmpp_channel(uint8_t idx)
Definition: agent.cc:1120
bool xmpp_dns_test_mode() const
Definition: agent.h:1194
bool VerifyXmppServerTimeout(uint32_t to)
const std::string & dns_server(uint8_t idx) const
Definition: agent.h:857
void SetAgentMcastLabelRange(uint8_t idx)
uint8_t ActiveXmppConnectionCount()
SandeshTraceBufferPtr ControllerRxConfigMessageTraceBuf1
VNController(Agent *agent)
#define XMPP_DNS_SERVER_PORT
Definition: agent.h:293
GlobalQosConfig * global_qos_config() const
Definition: operdb_init.h:81
EndOfRibTxTimer * end_of_rib_tx_timer()
boost::shared_ptr< ControllerReConfigData > ControllerReConfigDataType
void DnsXmppServerConnect()
EndOfRibRxTimer * end_of_rib_rx_timer()
uint8_t control_dscp() const
uint32_t XmppTimeOut(const char *conn_id)
Definition: xmpp_client.cc:289
const FabricMulticastLabelRange & fabric_multicast_label_range(uint8_t idx) const
void set_controller_ifmap_xmpp_server(const std::string &addr, uint8_t idx)
Definition: agent.h:733
#define XMPP_SERVER_PORT
Definition: agent.h:292
boost::shared_ptr< ControllerXmppData > ControllerXmppDataType
uint32_t GetControllerlistChksum()
Definition: agent.h:696
SandeshTraceBufferPtr ControllerTxMessageTraceBuf1
boost::shared_ptr< EndOfConfigData > EndOfConfigDataPtr
void SetDscpConfig(XmppChannelConfig *xmpp_cfg) const
void UpdateConnectionInfo(xmps::PeerState state)
boost::shared_ptr< AgentXmppChannel > controller_xmpp_channel_ref(uint8_t idx)
Definition: agent.cc:1124
std::string ToAddr
Definition: xmpp_config.h:20
uint32_t vrouter_max_vrfs() const
Definition: agent.h:1273
WorkQueue< ControllerWorkQueueDataType > work_queue_
AgentXmppChannel * controller_xmpp_channel(uint8_t idx) const
Definition: agent.h:809
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr
Definition: sandesh_trace.h:18
void StartDelPeerWalk(AgentXmppChannelPtr ch)
MplsTable * mpls_table() const
Definition: agent.h:510
void Enqueue(ControllerWorkQueueDataType data)
#define CONTROLLER_CONNECTIONS_TRACE(obj,...)
static void HandleAgentXmppClientChannelEvent(AgentXmppChannel *peer, xmps::PeerState state)
void reset_dns_server(uint8_t idx)
Definition: agent.h:863
virtual xmps::PeerState GetPeerState() const =0
AgentIfMapXmppChannel * channel()
OperDB * oper_db() const
Definition: agent.cc:1013
void UpdateConnectionInfo(xmps::PeerState state)
AgentIfMapXmppChannel * ifmap_xmpp_channel(uint8_t idx) const
Definition: agent.h:792
EndOfConfigTimer * end_of_config_timer()
void RegisterXmppChannel(XmppChannel *channel)
void StartEndOfRibTxTimer()
void DisConnectDnsServer(uint8_t idx)
#define MIN_UNICAST_LABEL_RANGE
Definition: agent.h:290
void Delete(ConnectionType::type ctype, const std::string &name)
void DeleteAgentXmppChannel(uint8_t idx)
AgentDnsXmppChannel * dns_xmpp_channel(uint8_t idx) const
Definition: agent.h:844
std::string path_to_ca_cert
Definition: xmpp_config.h:30
void ReceiveBgpMessage(std::unique_ptr< XmlBase > impl)
std::string FromAddr
Definition: xmpp_config.h:21
void set_dns_server(const std::string &addr, uint8_t idx)
Definition: agent.h:860
void ReserveMulticastLabel(uint32_t start, uint32_t end, uint8_t idx)
Definition: mpls.cc:392
SandeshTraceBufferPtr ControllerTraceBuf
void set_dns_xmpp_channel(AgentDnsXmppChannel *chnl, uint8_t idx)
Definition: agent.h:847
void DeleteConnectionInfo(const std::string &addr, bool is_dns) const
XmppClient * controller_ifmap_xmpp_client(uint8_t idx)
Definition: agent.h:771
MacAddress GetTunnelMac(const autogen::EnetNextHopType &nh)
static const std::string integerToString(const NumberType &num)
Definition: string_util.h:19
void set_controller_ifmap_xmpp_port(uint16_t port, uint8_t idx)
Definition: agent.h:760
TunnelType::TypeBmap GetTypeBitmap(const autogen::EnetTunnelEncapsulationListType &encap)
Definition: agent.h:358
AgentXmppChannelList delpeer_walks_
std::string GetXmppServer()
virtual void RegisterRxMessageTraceCallback(RxMessageTraceCb cb)=0
ControllerDelPeerData(AgentXmppChannel *ch)
XmppClient * dns_xmpp_client(uint8_t idx) const
Definition: agent.h:837
void DelPeerWalkDone(AgentXmppChannel *ch)
VNController * controller() const
Definition: agent.cc:981
EventManager * event_manager() const
Definition: agent.h:1103
SandeshTraceBufferPtr ControllerTxMessageTraceBuf2
bool ApplyControllerReConfigInternal(std::vector< string >service_list)
std::string xmlns
Definition: xmpp_config.h:35
FabricMulticastLabelRange fabric_multicast_label_range_[MAX_XMPP_SERVERS]
void UnRegisterConnectionEvent(xmps::PeerId)
Definition: xmpp_client.cc:201
XmppInit * dns_xmpp_init(uint8_t idx) const
Definition: agent.h:830
const std::string MakeConnectionPrefix(bool is_dns) const
std::string path_to_server_cert
Definition: xmpp_config.h:28
void GracefulRestartConfigListener()
SandeshTraceBufferPtr ControllerRxRouteMessageTraceBuf2
boost::scoped_ptr< AgentIfMapVmExport > agent_ifmap_vm_export_
static const std::string & xmpp_dns_server_prefix()
Definition: agent.h:444
uint32_t vrouter_max_labels() const
Definition: agent.h:1252
bool RxXmppMessageTrace(uint8_t peer_index, const std::string &to_address, int port, int size, const std::string &msg, const XmppStanza::XmppMessage *xmpp_msg)
const bool xmpp_auth_enabled() const
Definition: agent.h:740
uint8_t GetXmppServerIdx()
static void XmppClientChannelEvent(AgentXmppChannel *peer, xmps::PeerState state)
const std::string & controller_ifmap_xmpp_server(uint8_t idx) const
Definition: agent.h:730
std::vector< string > & GetControllerlist()
Definition: agent.h:692
SandeshTraceBufferPtr ControllerTxConfigTraceBuf2
bool IsWorkQueueEmpty() const
uint32_t controller_list_chksum_
boost::shared_ptr< ControllerConnectRetryData > ControllerConnectRetryDataType
const std::string & agent_name() const
Definition: agent.h:878
AgentXmppChannelList timed_out_channels_[MAX_XMPP_SERVERS]
XmppChannel * FindChannel(const std::string &address)
Definition: xmpp_client.cc:269
boost::asio::ip::address_v4 Ip4Address
Definition: address.h:14
const uint16_t dns_server_port(uint8_t idx) const
Definition: agent.h:868
virtual ~VNController()
#define MAX_XMPP_SERVERS
Definition: agent.h:291
void set_disable(bool disabled)
Definition: queue_task.h:319
std::string GetXmppServer()
static const char * kPubSubNS
Definition: xmpp_init.h:20
boost::shared_ptr< ControllerWorkQueueData > ControllerWorkQueueDataType
const std::string & xmpp_ca_cert() const
Definition: agent.h:749
IpAddress AddressFromString(const std::string &ip_address_str, boost::system::error_code *ec)
void DisConnectControllerIfmapServer(uint8_t idx)
bool is_vhost_interface_up() const
Definition: agent.cc:108
uint8_t dscp_value
Definition: xmpp_config.h:34
static const char * kDnsNodeJID
Definition: xmpp_init.h:19
AgentXmppChannel * GetActiveXmppChannel()
boost::shared_ptr< AgentXmppChannel > AgentXmppChannelPtr
void FlushTimedOutChannels(uint8_t index)
void set_dns_xmpp_client(XmppClient *client, uint8_t idx)
Definition: agent.h:840
const bool dns_auth_enabled() const
Definition: agent.h:826
void XmppServerDisConnect()
void set_cn_mcast_builder(AgentXmppChannel *peer)
Definition: agent.cc:579
DnsProto * GetDnsProto() const
Definition: agent.h:987
AgentXmppChannelList::iterator AgentXmppChannelListIter
SandeshTraceBufferPtr ControllerRxRouteMessageTraceBuf1
XmppChannelDownCb xmpp_channel_down_cb_
static int compare(const Type &lhs, const Type &rhs)
bool TxXmppMessageTrace(uint8_t peer_index, const std::string &to_address, int port, int size, const std::string &msg, const XmppStanza::XmppMessage *xmpp_msg)
void ParseAddress(const std::string &address, std::string *out_ip, uint16_t *out_port) const
void RegisterXmppChannel(XmppChannel *channel)
void RegisterConnectionEvent(xmps::PeerId, ConnectionEventCb)
Definition: xmpp_client.cc:195
static const std::string & xmpp_control_node_prefix()
Definition: agent.h:447
void XmppServerConnect()
void XmppServerUpdate(uint8_t time_out)
uint32_t GetDnslistChksum()
Definition: agent.h:704
#define LOG(_Level, _Msg)
Definition: logging.h:33
void ReceiveConfigMessage(std::unique_ptr< XmlBase > impl)
void set_controller_ifmap_xmpp_init(XmppInit *init, uint8_t idx)
Definition: agent.h:767
static const char * kConfigPeer
Definition: xmpp_init.h:23
static TunnelEncapType::Encap TunnelEncapFromString(const std::string &encap)
BgpPeer * bgp_peer_id()
uint32_t dns_list_chksum_
ControllerReConfigData(std::string service_name, std::vector< string > server_list)
void set_ifmap_xmpp_channel(AgentIfMapXmppChannel *channel, uint8_t idx)
Definition: agent.h:795
void reset_controller_ifmap_xmpp_server(uint8_t idx)
Definition: agent.h:736
const std::string & xmpp_server_cert() const
Definition: agent.h:743
void DnsXmppServerDisConnect()
SandeshTraceBufferPtr ControllerRouteWalkerTraceBuf
static void ProcessDelete(DynamicPeer *p)
Definition: peer.cc:63
bool AgentReConfigXmppServerConnectedExists(const std::string &server_ip, std::vector< std::string > resp)
XmppChannel * GetXmppChannel()
static void XmppClientChannelEvent(AgentDnsXmppChannel *peer, xmps::PeerState state)
XmppInit * controller_ifmap_xmpp_init(uint8_t idx) const
Definition: agent.h:764
const std::string & xmpp_server_key() const
Definition: agent.h:746
#define CONTROLLER_RX_CONFIG_MESSAGE_TRACE(obj, index,...)
bool ControllerWorkQueueProcess(ControllerWorkQueueDataType data)
void UpdateTimeOut(uint8_t time_out, const char *conn_id)
Definition: xmpp_client.cc:282
void Shutdown()
Definition: xmpp_client.cc:167
void increment_multicast_sequence_number()
bool Enqueue(QueueEntryT entry)
Definition: queue_task.h:248
static const uint16_t DnsXmpp()
process::ConnectionState * connection_state() const
Definition: agent.h:953
GlobalSystemConfig * global_system_config() const
Definition: operdb_init.h:85
void ReceiveDnsMessage(std::unique_ptr< XmlBase > impl)
static const char * kBgpPeer
Definition: xmpp_init.h:24
AgentXmppChannel * FindAgentXmppChannel(const std::string &server_ip)
void ReConnectDnsServer()
void set_name(const std::string &name)
Definition: queue_task.h:307
void ReConnectXmppServer()
bool XmppMessageProcess(ControllerXmppDataType data)
static const char * kControlNodeJID
Definition: xmpp_init.h:17
const int8_t & ifmap_active_xmpp_server_index() const
Definition: agent.h:780
void FillMcastLabelRange(uint32_t *star_idx, uint32_t *end_idx, uint8_t idx) const
std::string path_to_server_priv_key
Definition: xmpp_config.h:29
AgentDnsXmppChannel * FindAgentDnsXmppChannel(const std::string &server_ip)
SandeshTraceBufferPtr SandeshTraceBufferCreate(const std::string &buf_name, size_t buf_size, bool trace_enable=true)
Definition: sandesh_trace.h:46
bool isMockMode() const
Definition: agent.cc:153
bool ApplyDnsReConfigInternal(std::vector< string >service_list)
std::string NodeAddr
Definition: xmpp_config.h:22
SandeshTraceBufferPtr ControllerRxConfigMessageTraceBuf2