13 #include <sandesh/sandesh_trace.h>
17 #include <pugixml/pugixml.hpp>
24 #include <controller/controller_types.h>
32 using namespace boost::asio;
35 "ControllerConnections", 5000));
37 "ControllerInfo", 5000));
39 "ControllerTxConfig_1", 5000));
41 "ControllerTxConfig_2", 5000));
43 "ControllerRouteWalker", 5000));
47 "ControllerRxRouteXmppMessage1", 5000));
49 "ControllerRxConfigXmppMessage1", 5000));
51 "ControllerRxRouteXmppMessage2", 5000));
53 "ControllerRxConfigXmppMessage2", 5000));
55 "ControllerTxXmppMessage_1", 5000));
57 "ControllerTxXmppMessage_2", 5000));
60 std::vector<string>server_list) :
62 server_list_(server_list) {
70 : agent_(agent), multicast_sequence_number_(0),
71 work_queue_(agent->task_scheduler()->GetTaskId(
"Agent::ControllerXmpp"), 0,
74 fabric_multicast_label_range_(), xmpp_channel_down_cb_(),
94 uint32_t mc_label_count = 0;
103 *start_idx = vrouter_max_labels - ((idx + 1) * mc_label_count);
104 *end_idx = (vrouter_max_labels - ((idx) * mc_label_count) - 1);
110 std::stringstream str;
122 str << 0 <<
"-" << 0;
131 str << start <<
"-" << end;
162 boost::static_pointer_cast<ControllerWorkQueueData>(data);
175 "XMPP Server is already present, ignore reconfig response",
181 boost::system::error_code ec;
201 local_endpoint.to_string(), &ec));
204 local_endpoint = Ip4Address::from_string(
"127.0.0.1", ec);
206 local_endpoint.to_string(), &ec));
210 assert(ec.value() == 0);
231 fabric_multicast_label_range_str,
244 _1, _2, _3, _4, _5));
248 _1, _2, _3, _4, _5));
278 boost::static_pointer_cast<ControllerWorkQueueData>(data);
291 "DNS Server is already present, ignore reconfig response",
298 boost::system::error_code ec;
313 local_endpoint.to_string(), &ec));
316 local_endpoint = Ip4Address::from_string(
"127.0.0.1", ec);
318 local_endpoint.to_string(), &ec));
322 assert(ec.value() == 0);
444 ptr.get()->bgp_peer_id()->DelPeerRoutes(
446 ptr.get()->sequence_number());
460 if (bgp_peer != NULL) {
502 const std::string &server_ip) {
528 boost::asio::ip::tcp::endpoint ep;
529 boost::system::error_code ec;
531 const string name = ep.address().to_string();
540 boost::static_pointer_cast<ControllerWorkQueueData>(data);
548 if ((*it).get() == channel) {
601 const std::string &server_ip,
602 std::vector<std::string> resp) {
604 std::vector<std::string>::iterator iter;
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) {
620 std::vector<string> controller_list =
624 g_vns_constants.XMPP_SERVER_DISCOVERY_SERVICE_NAME,
627 boost::static_pointer_cast<ControllerWorkQueueData>(data);
633 std::vector<string> dns_list =
637 g_vns_constants.DNS_SERVER_DISCOVERY_SERVICE_NAME,
640 boost::static_pointer_cast<ControllerWorkQueueData>(data);
667 std::vector<string>::iterator iter;
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);
679 count, server_ip, str_port);
686 " XMPP ReConfig Server is READY and running, ignore", count,
691 " XMPP ReConfig Server is NOT_READY, ignore", count,
703 "Set Xmpp ReConfig Channel",
704 xs_idx, server_ip, str_port);
716 "Retain Xmpp ReConfig Channel ", xs_idx,
722 "ReSet Xmpp ReConfig Channel ", xs_idx,
740 const std::string &server_ip) {
778 std::vector<string>::iterator iter;
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);
790 "DNS Server ReConfig Apply Server Ip",
791 count, server_ip, str_port);
798 "DNS Server is READY and running, ignore", count,
803 "DNS Server is NOT_READY, ignore", count,
814 "Set Dns Xmpp Channel ",
815 xs_idx, server_ip, str_port);
827 "Retain Dns Xmpp Channel ", xs_idx,
833 "ReSet Dns ReConfigChannel ", xs_idx,
855 uint8_t active_xmpps = 0;
896 end_of_rib_tx_timer()->Cancel();
907 boost::dynamic_pointer_cast<ControllerXmppData>(data);
908 if (derived_xmpp_data) {
914 boost::dynamic_pointer_cast<ControllerVmiSubscribeData>(data.get());
922 boost::dynamic_pointer_cast<ControllerReConfigData>(data);
924 if (reconfig_data->service_name_.compare(
925 g_vns_constants.XMPP_SERVER_DISCOVERY_SERVICE_NAME) == 0) {
927 }
else if (reconfig_data->service_name_.compare(
928 g_vns_constants.DNS_SERVER_DISCOVERY_SERVICE_NAME) == 0) {
931 LOG(ERROR,
"Unknown Service Name %s" << reconfig_data->service_name_);
937 boost::dynamic_pointer_cast<ControllerDelPeerData>(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();
954 boost::dynamic_pointer_cast<ControllerConnectRetryData>(data);
955 if (connect_retry_data) {
956 if (connect_retry_data->connect_xmpp_server()) {
960 if (connect_retry_data->connect_dns_xmpp_server()) {
971 if (data->config()) {
991 }
else if (data->peer_id() ==
xmps::DNS) {
994 if (data->config()) {
1001 data->peer_state());
1014 const std::string &to_address,
1016 const std::string &msg,
1018 const std::string &to = xmppmsg->
to;
1032 const std::string &to_address,
1034 const std::string &msg,
1054 (
const autogen::EnetTunnelEncapsulationListType &encap) {
1056 for (autogen::EnetTunnelEncapsulationListType::const_iterator iter =
1057 encap.begin(); iter != encap.end(); iter++) {
1076 (
const autogen::TunnelEncapsulationListType &encap) {
1078 for (autogen::TunnelEncapsulationListType::const_iterator iter =
1079 encap.begin(); iter != encap.end(); iter++) {
1096 (
const autogen::McastTunnelEncapsulationListType &encap) {
1098 for (autogen::McastTunnelEncapsulationListType::const_iterator iter =
1099 encap.begin(); iter != encap.end(); iter++) {
1113 gres_parameters().IsEnabled();
1118 GresEnabled(enable);
1122 GresEnabled(enable);
1124 GresEnabled(enable);
boost::asio::ip::address_v4 Ip4Address
IpAddress AddressFromString(const std::string &ip_address_str, boost::system::error_code *ec)
#define MIN_UNICAST_LABEL_RANGE
#define XMPP_DNS_SERVER_PORT
void ReceiveDnsMessage(std::unique_ptr< XmlBase > impl)
static void XmppClientChannelEvent(AgentDnsXmppChannel *peer, xmps::PeerState state)
void UpdateConnectionInfo(xmps::PeerState state)
std::string GetXmppServer()
XmppChannel * GetXmppChannel()
void RegisterXmppChannel(XmppChannel *channel)
static void HandleXmppClientChannelEvent(AgentDnsXmppChannel *peer, xmps::PeerState state)
boost::shared_ptr< EndOfConfigData > EndOfConfigDataPtr
EndOfConfigTimer * end_of_config_timer()
void ReceiveConfigMessage(std::unique_ptr< XmlBase > impl)
uint8_t GetXmppServerIdx()
static void XmppClientChannelEvent(AgentXmppChannel *peer, xmps::PeerState state)
EndOfRibRxTimer * end_of_rib_rx_timer()
XmppChannel * GetXmppChannel()
void UpdateConnectionInfo(xmps::PeerState state)
std::string GetXmppServer()
EndOfRibTxTimer * end_of_rib_tx_timer()
void StopEndOfRibTxWalker()
void RegisterXmppChannel(XmppChannel *channel)
void ReceiveBgpMessage(std::unique_ptr< XmlBase > impl)
static void HandleAgentXmppClientChannelEvent(AgentXmppChannel *peer, xmps::PeerState state)
bool xmpp_dns_test_mode() const
DnsProto * GetDnsProto() const
const std::string & subcluster_name() const
AgentXmppChannel * controller_xmpp_channel(uint8_t idx) const
std::vector< string > & GetControllerlist()
VNController * controller() const
void set_ifmap_xmpp_channel(AgentIfMapXmppChannel *channel, uint8_t idx)
XmppInit * dns_xmpp_init(uint8_t idx) const
void set_dns_xmpp_init(XmppInit *xmpp, uint8_t idx)
XmppInit * controller_ifmap_xmpp_init(uint8_t idx) const
const bool xmpp_auth_enabled() const
const std::string & dns_server(uint8_t idx) const
void set_dns_xmpp_channel(AgentDnsXmppChannel *chnl, uint8_t idx)
AgentDnsXmppChannel * dns_xmpp_channel(uint8_t idx) const
const std::string & agent_name() const
EventManager * event_manager() const
const std::string & xmpp_server_cert() const
uint32_t vrouter_max_labels() const
uint32_t vrouter_max_vrfs() const
void set_dns_server_port(uint16_t port, uint8_t idx)
uint32_t GetControllerlistChksum()
void reset_dns_server(uint8_t idx)
const std::string & controller_ifmap_xmpp_server(uint8_t idx) const
const uint16_t dns_server_port(uint8_t idx) const
static const std::string & xmpp_dns_server_prefix()
Ip4Address compute_node_ip() const
const uint16_t controller_ifmap_xmpp_port(uint8_t idx) const
bool is_vhost_interface_up() const
void set_controller_ifmap_xmpp_port(uint16_t port, uint8_t idx)
static const std::string & xmpp_control_node_prefix()
void set_cn_mcast_builder(AgentXmppChannel *peer)
void set_controller_ifmap_xmpp_init(XmppInit *init, uint8_t idx)
void set_controller_ifmap_xmpp_server(const std::string &addr, uint8_t idx)
const std::string & xmpp_server_key() const
static Agent * GetInstance()
void set_dns_server(const std::string &addr, uint8_t idx)
std::vector< string > & GetDnslist()
XmppClient * dns_xmpp_client(uint8_t idx) const
void set_controller_ifmap_xmpp_client(XmppClient *client, uint8_t idx)
bool tor_agent_enabled() const
const bool dns_auth_enabled() const
void set_dns_xmpp_client(XmppClient *client, uint8_t idx)
const std::string & xmpp_ca_cert() const
void set_controller_xmpp_channel(AgentXmppChannel *channel, uint8_t idx)
process::ConnectionState * connection_state() const
AgentIfMapXmppChannel * ifmap_xmpp_channel(uint8_t idx) const
XmppClient * controller_ifmap_xmpp_client(uint8_t idx)
void reset_controller_xmpp_channel(uint8_t idx)
void reset_controller_ifmap_xmpp_server(uint8_t idx)
const int8_t & ifmap_active_xmpp_server_index() const
MplsTable * mpls_table() const
boost::shared_ptr< AgentXmppChannel > controller_xmpp_channel_ref(uint8_t idx)
uint32_t GetDnslistChksum()
static const uint16_t DnsXmpp()
ControllerDelPeerData(AgentXmppChannel *ch)
ControllerReConfigData(std::string service_name, std::vector< string > server_list)
static void ProcessDelete(DynamicPeer *p)
FastConvergenceParameters & fc_params()
GracefulRestartParameters & gres_parameters()
void ReserveMulticastLabel(uint32_t start, uint32_t end, uint8_t idx)
GlobalSystemConfig * global_system_config() const
GlobalQosConfig * global_qos_config() const
static TunnelEncapType::Encap TunnelEncapFromString(const std::string &encap)
void GracefulRestartConfigListener()
boost::scoped_ptr< AgentIfMapVmExport > agent_ifmap_vm_export_
MacAddress GetTunnelMac(const autogen::EnetNextHopType &nh)
WorkQueue< ControllerWorkQueueDataType > work_queue_
AgentXmppChannel * FindAgentXmppChannel(const std::string &server_ip)
void DisConnectDnsServer(uint8_t idx)
boost::shared_ptr< AgentXmppChannel > AgentXmppChannelPtr
AgentXmppChannelList::iterator AgentXmppChannelListIter
void FillMcastLabelRange(uint32_t *star_idx, uint32_t *end_idx, uint8_t idx) const
void StartDelPeerWalk(AgentXmppChannelPtr ch)
uint8_t ActiveXmppConnectionCount()
bool ApplyDnsReConfigInternal(std::vector< string >service_list)
boost::shared_ptr< ControllerXmppData > ControllerXmppDataType
AgentXmppChannelList delpeer_walks_
bool XmppMessageProcess(ControllerXmppDataType data)
uint32_t controller_list_chksum_
void SetDscpConfig(XmppChannelConfig *xmpp_cfg) const
uint32_t dns_list_chksum_
void XmppServerDisConnect()
AgentXmppChannelList timed_out_channels_[MAX_XMPP_SERVERS]
boost::shared_ptr< ControllerWorkQueueData > ControllerWorkQueueDataType
boost::shared_ptr< ControllerReConfigData > ControllerReConfigDataType
void FlushTimedOutChannels(uint8_t index)
void DelPeerWalkDoneProcess(AgentXmppChannel *ch)
AgentXmppChannel * GetActiveXmppChannel()
AgentDnsXmppChannel * FindAgentDnsXmppChannel(const std::string &server_ip)
bool AgentReConfigXmppServerConnectedExists(const std::string &server_ip, std::vector< std::string > resp)
TunnelType::TypeBmap GetTypeBitmap(const autogen::EnetTunnelEncapsulationListType &encap)
void SetAgentMcastLabelRange(uint8_t idx)
bool TxXmppMessageTrace(uint8_t peer_index, const std::string &to_address, int port, int size, const std::string &msg, const XmppStanza::XmppMessage *xmpp_msg)
const FabricMulticastLabelRange & fabric_multicast_label_range(uint8_t idx) const
const std::string MakeConnectionPrefix(bool is_dns) const
void StartEndOfRibTxTimer()
void XmppServerUpdate(uint8_t time_out)
bool RxXmppMessageTrace(uint8_t peer_index, const std::string &to_address, int port, int size, const std::string &msg, const XmppStanza::XmppMessage *xmpp_msg)
VNController(Agent *agent)
void DnsXmppServerConnect()
void DeleteConnectionInfo(const std::string &addr, bool is_dns) const
void DeleteAgentXmppChannel(uint8_t idx)
void DelPeerWalkDone(AgentXmppChannel *ch)
void DnsXmppServerDisConnect()
void Enqueue(ControllerWorkQueueDataType data)
bool ControllerWorkQueueProcess(ControllerWorkQueueDataType data)
boost::shared_ptr< ControllerDelPeerData > ControllerDelPeerDataType
boost::shared_ptr< ControllerConnectRetryData > ControllerConnectRetryDataType
bool VerifyXmppServerTimeout(uint32_t to)
void ReConnectXmppServer()
bool IsWorkQueueEmpty() const
FabricMulticastLabelRange fabric_multicast_label_range_[MAX_XMPP_SERVERS]
void DisConnectControllerIfmapServer(uint8_t idx)
bool ApplyControllerReConfigInternal(std::vector< string >service_list)
void ReConnectDnsServer()
void increment_multicast_sequence_number()
XmppChannelDownCb xmpp_channel_down_cb_
bool Enqueue(QueueEntryT entry)
void set_disable(bool disabled)
void Shutdown(bool delete_entries=true)
bool IsQueueEmpty() const
void set_name(const std::string &name)
boost::asio::ip::tcp::endpoint local_endpoint
boost::asio::ip::tcp::endpoint endpoint
std::string path_to_ca_cert
std::string path_to_server_cert
std::string path_to_server_priv_key
virtual void RegisterRxMessageTraceCallback(RxMessageTraceCb cb)=0
virtual xmps::PeerState GetPeerState() const =0
virtual void RegisterTxMessageTraceCallback(TxMessageTraceCb cb)=0
void UpdateTimeOut(uint8_t time_out, const char *conn_id)
XmppChannel * FindChannel(const std::string &address)
uint32_t XmppTimeOut(const char *conn_id)
void UnRegisterConnectionEvent(xmps::PeerId)
void RegisterConnectionEvent(xmps::PeerId, ConnectionEventCb)
void AddXmppChannelConfig(XmppChannelConfig *)
static const char * kConfigPeer
static const char * kPubSubNS
static const char * kControlNodeJID
static const char * kBgpPeer
void InitClient(XmppClient *)
void Reset(bool keep_config=false)
static const char * kDnsNodeJID
void ParseAddress(const std::string &address, std::string *out_ip, uint16_t *out_port) const
void Delete(ConnectionType::type ctype, const std::string &name)
SandeshTraceBufferPtr ControllerTxMessageTraceBuf2(SandeshTraceBufferCreate("ControllerTxXmppMessage_2", 5000))
SandeshTraceBufferPtr ControllerRxRouteMessageTraceBuf1(SandeshTraceBufferCreate("ControllerRxRouteXmppMessage1", 5000))
SandeshTraceBufferPtr ControllerTraceBuf(SandeshTraceBufferCreate("Controller", 5000))
SandeshTraceBufferPtr ControllerTxConfigTraceBuf1(SandeshTraceBufferCreate("ControllerTxConfig_1", 5000))
SandeshTraceBufferPtr ControllerRxRouteMessageTraceBuf2(SandeshTraceBufferCreate("ControllerRxRouteXmppMessage2", 5000))
SandeshTraceBufferPtr ControllerTxMessageTraceBuf1(SandeshTraceBufferCreate("ControllerTxXmppMessage_1", 5000))
SandeshTraceBufferPtr ControllerRxConfigMessageTraceBuf1(SandeshTraceBufferCreate("ControllerRxConfigXmppMessage1", 5000))
SandeshTraceBufferPtr ControllerRxConfigMessageTraceBuf2(SandeshTraceBufferCreate("ControllerRxConfigXmppMessage2", 5000))
SandeshTraceBufferPtr ControllerRouteWalkerTraceBuf(SandeshTraceBufferCreate("ControllerRouteWalker", 5000))
SandeshTraceBufferPtr ControllerConnectionsTraceBuf(SandeshTraceBufferCreate("ControllerConnections", 5000))
SandeshTraceBufferPtr ControllerTxConfigTraceBuf2(SandeshTraceBufferCreate("ControllerTxConfig_2", 5000))
SandeshTraceBufferPtr ControllerInfoTraceBuf(SandeshTraceBufferCreate("ControllerInfo", 5000))
#define CONTROLLER_TX_MESSAGE_TRACE(obj, index,...)
#define CONTROLLER_RX_CONFIG_MESSAGE_TRACE(obj, index,...)
#define CONTROLLER_CONNECTIONS_TRACE(obj,...)
#define CONTROLLER_RX_ROUTE_MESSAGE_TRACE(obj, index,...)
#define LOG(_Level, _Msg)
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr
SandeshTraceBufferPtr SandeshTraceBufferCreate(const std::string &buf_name, size_t buf_size, bool trace_enable=true)
static int compare(const Type &lhs, const Type &rhs)
static const std::string integerToString(const NumberType &num)
static const uint8_t kInvalidDscp
uint8_t control_dscp() const
std::string fabric_multicast_label_range_str