OpenSDN source code
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 #include <tbb/mutex.h>
12 
13 #include <map>
14 #include <string>
15 
16 #include "base/queue_task.h"
17 #include "ifmap/ifmap_client.h"
18 #include "ifmap/ifmap_server.h"
19 #include "xmpp/xmpp_channel.h"
20 
21 class XmppChannel;
22 class XmppServer;
24 class IFMapXmppChannelMapEntry;
25 
26 // Xmpp Channel Events
27 enum XCEvent {
32 };
33 
37  std::string name;
38 };
39 
41 public:
42  static const std::string NoFqnSet;
43  class IFMapSender;
45  virtual ~IFMapXmppChannel();
46 
47  std::string ToString() const { return channel_->ToString(); } // hostname
49 
50  virtual void ReceiveUpdate(const XmppStanza::XmppMessage *);
51  XmppChannel *channel() { return channel_; }
52 
53  void ClearCounters();
54  uint64_t msgs_sent() const;
55  std::string VrSubscribeGetVrName(const std::string &iqnode,
56  bool *valid_message);
57  std::string VmSubscribeGetVmUuid(const std::string &iqnode,
58  bool *valid_message);
60 
61  void ProcessVrSubscribe(const std::string &identifier);
62  void EnqueueVrSubscribe(const std::string &identifier);
63 
64  void ProcessVmSubscribe(const std::string &vm_uuid);
65  void ProcessVmUnsubscribe(const std::string &vm_uuid);
66  void EnqueueVmSubUnsub(bool subscribe, const std::string &vm_uuid);
67  bool get_client_added() { return client_added_; }
68  const std::string& channel_name() { return channel_name_; }
69  const std::string& FQName() const;
70 
71 private:
72  friend class XmppIfmapTest;
73  void WriteReadyCb(const boost::system::error_code &ec);
74 
80  bool client_added_; // true if ifmap_server has processed add-client
81  std::string channel_name_;
82 };
83 
85 public:
87  virtual ~IFMapChannelManager();
88 
90  IFMapXmppChannel *FindChannel(std::string);
94  void ProcessChannelReady(XmppChannel *channel);
95  void ProcessChannelNotReady(XmppChannel *channel);
96 
101  }
104  }
107  }
110  }
113  }
116  }
119  }
122  }
125  }
126 
129  }
132  }
135  }
138  }
141  }
144  }
146  return vmsub_novrsub_messages;
147  }
150  }
153  }
156  }
159  }
160  void FillChannelMap(std::vector<IFMapXmppChannelMapEntry> *out_map);
161 
162 private:
164  friend class XmppIfmapTest;
165  typedef std::map<XmppChannel *, IFMapXmppChannel *> ChannelMap;
168  };
169 
173  tbb::mutex channel_map_mutex_; // serializes access to channel_map_
175 
177 
178  void DeleteIFMapXmppChannel(IFMapXmppChannel *ifmap_chnl);
179  void EnqueueChannelEvent(XCEvent event, XmppChannel *channel);
180 
181  tbb::atomic<uint64_t> unknown_subscribe_messages;
182  tbb::atomic<uint64_t> unknown_unsubscribe_messages;
183  tbb::atomic<uint64_t> duplicate_channel_ready_messages;
184  tbb::atomic<uint64_t> invalid_channel_not_ready_messages;
185  tbb::atomic<uint64_t> invalid_channel_state_messages;
186  tbb::atomic<uint64_t> invalid_vm_subscribe_messages;
187  tbb::atomic<uint64_t> vmsub_novrsub_messages;
188  tbb::atomic<uint64_t> vmunsub_novrsub_messages;
189  tbb::atomic<uint64_t> vmunsub_novmsub_messages;
190  tbb::atomic<uint64_t> duplicate_vrsub_messages;
191  tbb::atomic<uint64_t> duplicate_vmsub_messages;
192 };
193 
194 #endif // __XMPP_IFMAP_INC__
void incr_invalid_channel_not_ready_messages()
Definition: ifmap_xmpp.h:102
IFMapXmppChannel * FindChannel(XmppChannel *)
Definition: ifmap_xmpp.cc:364
ChannelMap channel_map_
Definition: ifmap_xmpp.h:172
uint64_t get_vmunsub_novmsub_messages()
Definition: ifmap_xmpp.h:151
uint64_t get_vmunsub_novrsub_messages()
Definition: ifmap_xmpp.h:148
tbb::atomic< uint64_t > vmsub_novrsub_messages
Definition: ifmap_xmpp.h:187
void ProcessChannelNotReady(XmppChannel *channel)
Definition: ifmap_xmpp.cc:418
uint64_t get_invalid_channel_not_ready_messages()
Definition: ifmap_xmpp.h:136
void incr_invalid_channel_state_messages()
Definition: ifmap_xmpp.h:105
std::map< XmppChannel *, IFMapXmppChannel * > ChannelMap
Definition: ifmap_xmpp.h:165
tbb::atomic< uint64_t > invalid_vm_subscribe_messages
Definition: ifmap_xmpp.h:186
tbb::atomic< uint64_t > vmunsub_novmsub_messages
Definition: ifmap_xmpp.h:189
uint64_t get_duplicate_channel_ready_messages()
Definition: ifmap_xmpp.h:133
IFMapChannelManager(XmppServer *, IFMapServer *)
Definition: ifmap_xmpp.cc:336
friend class XmppIfmapTest
Definition: ifmap_xmpp.h:164
tbb::atomic< uint64_t > duplicate_channel_ready_messages
Definition: ifmap_xmpp.h:183
virtual IFMapXmppChannel * CreateIFMapXmppChannel(XmppChannel *)
Definition: ifmap_xmpp.cc:383
WorkQueue< ConfigTaskQueueEntry > config_task_work_queue_
Definition: ifmap_xmpp.h:174
void incr_invalid_vm_subscribe_messages()
Definition: ifmap_xmpp.h:108
void EnqueueChannelUnregister(XmppChannel *channel)
Definition: ifmap_xmpp.cc:470
tbb::atomic< uint64_t > unknown_unsubscribe_messages
Definition: ifmap_xmpp.h:182
tbb::atomic< uint64_t > invalid_channel_not_ready_messages
Definition: ifmap_xmpp.h:184
uint64_t get_unknown_unsubscribe_messages()
Definition: ifmap_xmpp.h:130
tbb::atomic< uint64_t > duplicate_vrsub_messages
Definition: ifmap_xmpp.h:190
void incr_unknown_unsubscribe_messages()
Definition: ifmap_xmpp.h:98
tbb::atomic< uint64_t > duplicate_vmsub_messages
Definition: ifmap_xmpp.h:191
uint64_t get_vmsub_novrsub_messages()
Definition: ifmap_xmpp.h:145
tbb::atomic< uint64_t > vmunsub_novrsub_messages
Definition: ifmap_xmpp.h:188
tbb::atomic< uint64_t > unknown_subscribe_messages
Definition: ifmap_xmpp.h:181
void ProcessChannelReady(XmppChannel *channel)
Definition: ifmap_xmpp.cc:400
void incr_duplicate_vmsub_messages()
Definition: ifmap_xmpp.h:123
void EnqueueChannelEvent(XCEvent event, XmppChannel *channel)
Definition: ifmap_xmpp.cc:436
bool ProcessChannelUnregister(ConfigTaskQueueEntry entry)
Definition: ifmap_xmpp.cc:462
void incr_vmunsub_novmsub_messages()
Definition: ifmap_xmpp.h:117
void IFMapXmppChannelEventCb(XmppChannel *, xmps::PeerState)
Definition: ifmap_xmpp.cc:448
friend class IFMapChannelManagerTest
Definition: ifmap_xmpp.h:163
void incr_vmsub_novrsub_messages()
Definition: ifmap_xmpp.h:111
uint64_t get_duplicate_vmsub_messages()
Definition: ifmap_xmpp.h:157
IFMapServer * ifmap_server_
Definition: ifmap_xmpp.h:171
uint64_t get_invalid_channel_state_messages()
Definition: ifmap_xmpp.h:139
tbb::mutex channel_map_mutex_
Definition: ifmap_xmpp.h:173
void FillChannelMap(std::vector< IFMapXmppChannelMapEntry > *out_map)
Definition: ifmap_xmpp.cc:477
tbb::atomic< uint64_t > invalid_channel_state_messages
Definition: ifmap_xmpp.h:185
uint64_t get_unknown_subscribe_messages()
Definition: ifmap_xmpp.h:127
XmppServer * xmpp_server_
Definition: ifmap_xmpp.h:170
virtual ~IFMapChannelManager()
Definition: ifmap_xmpp.cc:359
uint64_t get_invalid_vm_subscribe_messages()
Definition: ifmap_xmpp.h:142
void incr_unknown_subscribe_messages()
Definition: ifmap_xmpp.h:97
void incr_vmunsub_novrsub_messages()
Definition: ifmap_xmpp.h:114
void incr_duplicate_channel_ready_messages()
Definition: ifmap_xmpp.h:99
void incr_duplicate_vrsub_messages()
Definition: ifmap_xmpp.h:120
void DeleteIFMapXmppChannel(IFMapXmppChannel *ifmap_chnl)
Definition: ifmap_xmpp.cc:394
uint64_t get_duplicate_vrsub_messages()
Definition: ifmap_xmpp.h:154
bool MustProcessChannelNotReady()
Definition: ifmap_xmpp.cc:180
uint64_t msgs_sent() const
Definition: ifmap_xmpp.cc:331
IFMapServer * ifmap_server_
Definition: ifmap_xmpp.h:77
void ProcessVrSubscribe(const std::string &identifier)
Definition: ifmap_xmpp.cc:192
std::string VrSubscribeGetVrName(const std::string &iqnode, bool *valid_message)
Definition: ifmap_xmpp.cc:148
std::string channel_name_
Definition: ifmap_xmpp.h:81
virtual void ReceiveUpdate(const XmppStanza::XmppMessage *)
Definition: ifmap_xmpp.cc:277
XmppChannel * channel_
Definition: ifmap_xmpp.h:76
void ProcessVmUnsubscribe(const std::string &vm_uuid)
Definition: ifmap_xmpp.cc:231
friend class XmppIfmapTest
Definition: ifmap_xmpp.h:72
std::string VmSubscribeGetVmUuid(const std::string &iqnode, bool *valid_message)
Definition: ifmap_xmpp.cc:163
IFMapClient * Sender()
Definition: ifmap_xmpp.cc:327
IFMapChannelManager * ifmap_channel_manager_
Definition: ifmap_xmpp.h:78
xmps::PeerId peer_id_
Definition: ifmap_xmpp.h:75
void WriteReadyCb(const boost::system::error_code &ec)
Definition: ifmap_xmpp.cc:122
IFMapXmppChannel(XmppChannel *, IFMapServer *, IFMapChannelManager *)
Definition: ifmap_xmpp.cc:127
const std::string & FQName() const
Definition: ifmap_xmpp.cc:184
virtual ~IFMapXmppChannel()
Definition: ifmap_xmpp.cc:140
void ProcessVmSubscribe(const std::string &vm_uuid)
Definition: ifmap_xmpp.cc:208
XmppChannel * channel()
Definition: ifmap_xmpp.h:51
std::string ToString() const
Definition: ifmap_xmpp.h:47
IFMapSender * ifmap_client_
Definition: ifmap_xmpp.h:79
void EnqueueVrSubscribe(const std::string &identifier)
Definition: ifmap_xmpp.cc:254
void EnqueueVmSubUnsub(bool subscribe, const std::string &vm_uuid)
Definition: ifmap_xmpp.cc:264
static const std::string NoFqnSet
Definition: ifmap_xmpp.h:42
bool get_client_added()
Definition: ifmap_xmpp.h:67
const std::string & channel_name()
Definition: ifmap_xmpp.h:68
virtual const std::string & ToString() const =0
XCEvent
Definition: ifmap_xmpp.h:27
@ XCE_VR_SUBSCRIBE
Definition: ifmap_xmpp.h:29
@ XCE_NOT_READY
Definition: ifmap_xmpp.h:28
@ XCE_VM_SUBSCRIBE
Definition: ifmap_xmpp.h:30
@ XCE_VM_UNSUBSCRIBE
Definition: ifmap_xmpp.h:31
std::string name
Definition: ifmap_xmpp.h:37
XmppChannel * channel
Definition: ifmap_xmpp.h:36