OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ifmap_xmpp.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef __XMPP_IFMAP_INC__
6 #define __XMPP_IFMAP_INC__
7 
8 #include <boost/function.hpp>
9 #include <boost/system/error_code.hpp>
10 #include <tbb/atomic.h>
11 
12 #include <map>
13 #include <string>
14 
15 #include "base/queue_task.h"
16 #include "ifmap/ifmap_client.h"
17 #include "ifmap/ifmap_server.h"
18 #include "xmpp/xmpp_channel.h"
19 
20 class XmppChannel;
21 class XmppServer;
23 class IFMapXmppChannelMapEntry;
24 
25 // Xmpp Channel Events
26 enum XCEvent {
31 };
32 
36  std::string name;
37 };
38 
40 public:
41  static const std::string NoFqnSet;
42  class IFMapSender;
44  virtual ~IFMapXmppChannel();
45 
46  std::string ToString() const { return channel_->ToString(); } // hostname
48 
49  virtual void ReceiveUpdate(const XmppStanza::XmppMessage *);
50  XmppChannel *channel() { return channel_; }
51 
52  void ClearCounters();
53  uint64_t msgs_sent() const;
54  std::string VrSubscribeGetVrName(const std::string &iqnode,
55  bool *valid_message);
56  std::string VmSubscribeGetVmUuid(const std::string &iqnode,
57  bool *valid_message);
59 
60  void ProcessVrSubscribe(const std::string &identifier);
61  void EnqueueVrSubscribe(const std::string &identifier);
62 
63  void ProcessVmSubscribe(const std::string &vm_uuid);
64  void ProcessVmUnsubscribe(const std::string &vm_uuid);
65  void EnqueueVmSubUnsub(bool subscribe, const std::string &vm_uuid);
66  bool get_client_added() { return client_added_; }
67  const std::string& channel_name() { return channel_name_; }
68  const std::string& FQName() const;
69 
70 private:
71  friend class XmppIfmapTest;
72  void WriteReadyCb(const boost::system::error_code &ec);
73 
79  bool client_added_; // true if ifmap_server has processed add-client
80  std::string channel_name_;
81 };
82 
84 public:
86  virtual ~IFMapChannelManager();
87 
89  IFMapXmppChannel *FindChannel(std::string);
93  void ProcessChannelReady(XmppChannel *channel);
94  void ProcessChannelNotReady(XmppChannel *channel);
95 
100  }
103  }
106  }
109  }
112  }
115  }
118  }
121  }
124  }
125 
128  }
131  }
134  }
137  }
140  }
143  }
145  return vmsub_novrsub_messages;
146  }
149  }
152  }
155  }
158  }
159  void FillChannelMap(std::vector<IFMapXmppChannelMapEntry> *out_map);
160 
161 private:
163  friend class XmppIfmapTest;
164  typedef std::map<XmppChannel *, IFMapXmppChannel *> ChannelMap;
167  };
168 
172  tbb::mutex channel_map_mutex_; // serializes access to channel_map_
174 
176 
177  void DeleteIFMapXmppChannel(IFMapXmppChannel *ifmap_chnl);
178  void EnqueueChannelEvent(XCEvent event, XmppChannel *channel);
179 
180  tbb::atomic<uint64_t> unknown_subscribe_messages;
181  tbb::atomic<uint64_t> unknown_unsubscribe_messages;
182  tbb::atomic<uint64_t> duplicate_channel_ready_messages;
183  tbb::atomic<uint64_t> invalid_channel_not_ready_messages;
184  tbb::atomic<uint64_t> invalid_channel_state_messages;
185  tbb::atomic<uint64_t> invalid_vm_subscribe_messages;
186  tbb::atomic<uint64_t> vmsub_novrsub_messages;
187  tbb::atomic<uint64_t> vmunsub_novrsub_messages;
188  tbb::atomic<uint64_t> vmunsub_novmsub_messages;
189  tbb::atomic<uint64_t> duplicate_vrsub_messages;
190  tbb::atomic<uint64_t> duplicate_vmsub_messages;
191 };
192 
193 #endif // __XMPP_IFMAP_INC__
void incr_unknown_subscribe_messages()
Definition: ifmap_xmpp.h:96
tbb::atomic< uint64_t > vmunsub_novmsub_messages
Definition: ifmap_xmpp.h:188
tbb::atomic< uint64_t > unknown_unsubscribe_messages
Definition: ifmap_xmpp.h:181
virtual ~IFMapChannelManager()
Definition: ifmap_xmpp.cc:359
IFMapSender * ifmap_client_
Definition: ifmap_xmpp.h:78
std::string ToString() const
Definition: ifmap_xmpp.h:46
void incr_unknown_unsubscribe_messages()
Definition: ifmap_xmpp.h:97
void DeleteIFMapXmppChannel(IFMapXmppChannel *ifmap_chnl)
Definition: ifmap_xmpp.cc:394
virtual void ReceiveUpdate(const XmppStanza::XmppMessage *)
Definition: ifmap_xmpp.cc:277
tbb::atomic< uint64_t > invalid_channel_not_ready_messages
Definition: ifmap_xmpp.h:183
tbb::atomic< uint64_t > duplicate_vmsub_messages
Definition: ifmap_xmpp.h:190
xmps::PeerId peer_id_
Definition: ifmap_xmpp.h:74
IFMapServer * ifmap_server_
Definition: ifmap_xmpp.h:170
void incr_vmunsub_novmsub_messages()
Definition: ifmap_xmpp.h:116
IFMapServer * ifmap_server_
Definition: ifmap_xmpp.h:76
bool get_client_added()
Definition: ifmap_xmpp.h:66
tbb::atomic< uint64_t > vmunsub_novrsub_messages
Definition: ifmap_xmpp.h:187
void EnqueueVmSubUnsub(bool subscribe, const std::string &vm_uuid)
Definition: ifmap_xmpp.cc:264
uint64_t get_unknown_subscribe_messages()
Definition: ifmap_xmpp.h:126
IFMapXmppChannel(XmppChannel *, IFMapServer *, IFMapChannelManager *)
Definition: ifmap_xmpp.cc:127
friend class XmppIfmapTest
Definition: ifmap_xmpp.h:163
void ProcessChannelNotReady(XmppChannel *channel)
Definition: ifmap_xmpp.cc:418
uint64_t get_duplicate_vmsub_messages()
Definition: ifmap_xmpp.h:156
void incr_vmsub_novrsub_messages()
Definition: ifmap_xmpp.h:110
IFMapChannelManager * ifmap_channel_manager_
Definition: ifmap_xmpp.h:77
static const std::string NoFqnSet
Definition: ifmap_xmpp.h:41
IFMapClient * Sender()
Definition: ifmap_xmpp.cc:327
void incr_invalid_channel_state_messages()
Definition: ifmap_xmpp.h:104
void ProcessVmUnsubscribe(const std::string &vm_uuid)
Definition: ifmap_xmpp.cc:231
uint64_t get_vmunsub_novrsub_messages()
Definition: ifmap_xmpp.h:147
const std::string & channel_name()
Definition: ifmap_xmpp.h:67
tbb::atomic< uint64_t > duplicate_vrsub_messages
Definition: ifmap_xmpp.h:189
tbb::atomic< uint64_t > duplicate_channel_ready_messages
Definition: ifmap_xmpp.h:182
XCEvent
Definition: ifmap_xmpp.h:26
void ProcessChannelReady(XmppChannel *channel)
Definition: ifmap_xmpp.cc:400
tbb::atomic< uint64_t > invalid_channel_state_messages
Definition: ifmap_xmpp.h:184
void WriteReadyCb(const boost::system::error_code &ec)
Definition: ifmap_xmpp.cc:122
void IFMapXmppChannelEventCb(XmppChannel *, xmps::PeerState)
Definition: ifmap_xmpp.cc:448
bool ProcessChannelUnregister(ConfigTaskQueueEntry entry)
Definition: ifmap_xmpp.cc:462
IFMapXmppChannel * FindChannel(XmppChannel *)
Definition: ifmap_xmpp.cc:364
std::map< XmppChannel *, IFMapXmppChannel * > ChannelMap
Definition: ifmap_xmpp.h:164
tbb::atomic< uint64_t > vmsub_novrsub_messages
Definition: ifmap_xmpp.h:186
void FillChannelMap(std::vector< IFMapXmppChannelMapEntry > *out_map)
Definition: ifmap_xmpp.cc:477
void EnqueueVrSubscribe(const std::string &identifier)
Definition: ifmap_xmpp.cc:254
void incr_duplicate_vmsub_messages()
Definition: ifmap_xmpp.h:122
uint64_t get_duplicate_channel_ready_messages()
Definition: ifmap_xmpp.h:132
tbb::atomic< uint64_t > invalid_vm_subscribe_messages
Definition: ifmap_xmpp.h:185
uint64_t get_unknown_unsubscribe_messages()
Definition: ifmap_xmpp.h:129
bool MustProcessChannelNotReady()
Definition: ifmap_xmpp.cc:180
uint64_t get_invalid_channel_state_messages()
Definition: ifmap_xmpp.h:138
virtual const std::string & ToString() const =0
uint64_t get_vmsub_novrsub_messages()
Definition: ifmap_xmpp.h:144
std::string name
Definition: ifmap_xmpp.h:36
XmppServer * xmpp_server_
Definition: ifmap_xmpp.h:169
uint64_t get_invalid_vm_subscribe_messages()
Definition: ifmap_xmpp.h:141
uint64_t get_duplicate_vrsub_messages()
Definition: ifmap_xmpp.h:153
virtual ~IFMapXmppChannel()
Definition: ifmap_xmpp.cc:140
void ProcessVmSubscribe(const std::string &vm_uuid)
Definition: ifmap_xmpp.cc:208
void EnqueueChannelEvent(XCEvent event, XmppChannel *channel)
Definition: ifmap_xmpp.cc:436
tbb::atomic< uint64_t > unknown_subscribe_messages
Definition: ifmap_xmpp.h:180
void incr_invalid_channel_not_ready_messages()
Definition: ifmap_xmpp.h:101
std::string VrSubscribeGetVrName(const std::string &iqnode, bool *valid_message)
Definition: ifmap_xmpp.cc:148
IFMapChannelManager(XmppServer *, IFMapServer *)
Definition: ifmap_xmpp.cc:336
uint64_t get_invalid_channel_not_ready_messages()
Definition: ifmap_xmpp.h:135
void incr_duplicate_vrsub_messages()
Definition: ifmap_xmpp.h:119
void incr_invalid_vm_subscribe_messages()
Definition: ifmap_xmpp.h:107
friend class XmppIfmapTest
Definition: ifmap_xmpp.h:71
tbb::mutex channel_map_mutex_
Definition: ifmap_xmpp.h:172
ChannelMap channel_map_
Definition: ifmap_xmpp.h:171
virtual IFMapXmppChannel * CreateIFMapXmppChannel(XmppChannel *)
Definition: ifmap_xmpp.cc:383
const std::string & FQName() const
Definition: ifmap_xmpp.cc:184
XmppChannel * channel
Definition: ifmap_xmpp.h:35
void EnqueueChannelUnregister(XmppChannel *channel)
Definition: ifmap_xmpp.cc:470
void ProcessVrSubscribe(const std::string &identifier)
Definition: ifmap_xmpp.cc:192
uint64_t msgs_sent() const
Definition: ifmap_xmpp.cc:331
std::string VmSubscribeGetVmUuid(const std::string &iqnode, bool *valid_message)
Definition: ifmap_xmpp.cc:163
void incr_vmunsub_novrsub_messages()
Definition: ifmap_xmpp.h:113
uint64_t get_vmunsub_novmsub_messages()
Definition: ifmap_xmpp.h:150
friend class IFMapChannelManagerTest
Definition: ifmap_xmpp.h:162
XmppChannel * channel()
Definition: ifmap_xmpp.h:50
XmppChannel * channel_
Definition: ifmap_xmpp.h:75
WorkQueue< ConfigTaskQueueEntry > config_task_work_queue_
Definition: ifmap_xmpp.h:173
std::string channel_name_
Definition: ifmap_xmpp.h:80
void incr_duplicate_channel_ready_messages()
Definition: ifmap_xmpp.h:98