Skip to content

Commit

Permalink
Merge "Segregate XMPP message traces for config and route." into R2.20
Browse files Browse the repository at this point in the history
  • Loading branch information
Zuul authored and opencontrail-ci-admin committed Sep 8, 2015
2 parents 3cc33ad + 4130efd commit 101b1e4
Show file tree
Hide file tree
Showing 13 changed files with 113 additions and 7 deletions.
3 changes: 3 additions & 0 deletions src/bgp/test/bgp_xmpp_channel_test.cc
Expand Up @@ -97,6 +97,9 @@ class XmppChannelMock : public XmppChannel {
virtual std::string LastFlap() const {
return "";
}
virtual void RegisterRxMessageTraceCallback(RxMessageTraceCb cb) {
return;
}
};

class BgpXmppChannelMock : public BgpXmppChannel {
Expand Down
3 changes: 3 additions & 0 deletions src/bgp/test/bgp_xmpp_parse_test.cc
Expand Up @@ -80,6 +80,9 @@ class XmppChannelMock : public XmppChannel {
virtual string LastFlap() const {
return "";
}
virtual void RegisterRxMessageTraceCallback(RxMessageTraceCb cb) {
return;
}
};

class BgpXmppChannelMock : public BgpXmppChannel {
Expand Down
12 changes: 12 additions & 0 deletions src/vnsw/agent/controller/controller.sandesh
Expand Up @@ -113,6 +113,18 @@ trace sandesh AgentXmppTimer {
3: string channel;
}

trace sandesh AgentXmppMessage {
1: "Received xmpp message from: ";
2: string IPaddress;
3: "Port";
4: i32 port;
5: "Size: ";
6: i32 size;
7: "Packet: ";
8: string packet;
9: "$";
}

request sandesh AgentXmppConnectionStatusReq {
}

Expand Down
1 change: 1 addition & 0 deletions src/vnsw/agent/controller/controller_ifmap.h
Expand Up @@ -34,6 +34,7 @@ class AgentIfMapXmppChannel {
uint8_t GetXmppServerIdx() { return xs_idx_; }
static uint64_t GetSeqNumber() { return seq_number_; }
static uint64_t NewSeqNumber();

protected:
virtual void WriteReadyCb(const boost::system::error_code &ec);

Expand Down
26 changes: 26 additions & 0 deletions src/vnsw/agent/controller/controller_init.cc
Expand Up @@ -32,10 +32,16 @@ SandeshTraceBufferPtr ControllerDiscoveryTraceBuf(SandeshTraceBufferCreate(
"ControllerDiscovery", 5000));
SandeshTraceBufferPtr ControllerInfoTraceBuf(SandeshTraceBufferCreate(
"ControllerInfo", 5000));
SandeshTraceBufferPtr ControllerTxConfigTraceBuf(SandeshTraceBufferCreate(
"ControllerTxConfig", 5000));
SandeshTraceBufferPtr ControllerRouteWalkerTraceBuf(SandeshTraceBufferCreate(
"ControllerRouteWalker", 5000));
SandeshTraceBufferPtr ControllerTraceBuf(SandeshTraceBufferCreate(
"Controller", 5000));
SandeshTraceBufferPtr ControllerRxRouteMessageTraceBuf(SandeshTraceBufferCreate(
"ControllerRxRouteXmppMessage", 5000));
SandeshTraceBufferPtr ControllerRxConfigMessageTraceBuf(SandeshTraceBufferCreate(
"ControllerRxConfigXmppMessage", 5000));

ControllerDiscoveryData::ControllerDiscoveryData(std::vector<DSResponse> resp) :
ControllerWorkQueueData(), discovery_response_(resp) {
Expand Down Expand Up @@ -114,6 +120,9 @@ void VNController::XmppServerConnect() {
XmppChannel *channel = client->
FindChannel(XmppInit::kControlNodeJID);
assert(channel);
channel->RegisterRxMessageTraceCallback(
boost::bind(&VNController::XmppMessageTrace,
this, _1, _2, _3, _4, _5));
bgp_peer->RegisterXmppChannel(channel);

bgp_peer->UpdateConnectionInfo(channel->GetPeerState());
Expand Down Expand Up @@ -749,3 +758,20 @@ bool VNController::XmppMessageProcess(ControllerXmppDataType data) {
void VNController::Enqueue(ControllerWorkQueueDataType data) {
work_queue_.Enqueue(data);
}

bool VNController::XmppMessageTrace(const std::string &to_address,
int port, int size,
const std::string &msg,
const XmppStanza::XmppMessage *xmppmsg) {
const std::string &to = xmppmsg->to;
if (to.find(XmppInit::kBgpPeer) != string::npos) {
CONTROLLER_RX_ROUTE_MESSAGE_TRACE(Message, to_address,
port, size, msg);
return true;
} else if (to.find(XmppInit::kConfigPeer) != string::npos) {
CONTROLLER_RX_CONFIG_MESSAGE_TRACE(Message, to_address,
port, size, msg);
return true;
}
return false;
}
24 changes: 24 additions & 0 deletions src/vnsw/agent/controller/controller_init.h
Expand Up @@ -140,6 +140,10 @@ class VNController {
Agent *agent() {return agent_;}
void Enqueue(ControllerWorkQueueDataType data);
void DeleteAgentXmppChannel(AgentXmppChannel *ch);
bool XmppMessageTrace(const std::string &to_address,
int port, int size,
const std::string &msg,
const XmppStanza::XmppMessage *xmpp_msg);

private:
AgentXmppChannel *FindAgentXmppChannel(const std::string &server_ip);
Expand All @@ -161,15 +165,35 @@ class VNController {
};

extern SandeshTraceBufferPtr ControllerInfoTraceBuf;
extern SandeshTraceBufferPtr ControllerTxConfigTraceBuf;
extern SandeshTraceBufferPtr ControllerDiscoveryTraceBuf;
extern SandeshTraceBufferPtr ControllerRouteWalkerTraceBuf;
extern SandeshTraceBufferPtr ControllerTraceBuf;
extern SandeshTraceBufferPtr ControllerRxRouteMessageTraceBuf;
extern SandeshTraceBufferPtr ControllerRxConfigMessageTraceBuf;

#define CONTROLLER_RX_ROUTE_MESSAGE_TRACE(obj, ...)\
do {\
AgentXmpp##obj::TraceMsg(ControllerRxRouteMessageTraceBuf, __FILE__, \
__LINE__, __VA_ARGS__);\
} while(0);\

#define CONTROLLER_RX_CONFIG_MESSAGE_TRACE(obj, ...)\
do {\
AgentXmpp##obj::TraceMsg(ControllerRxConfigMessageTraceBuf, __FILE__, \
__LINE__, __VA_ARGS__);\
} while(0);\

#define CONTROLLER_INFO_TRACE(obj, ...)\
do {\
AgentXmpp##obj::TraceMsg(ControllerInfoTraceBuf, __FILE__, __LINE__, __VA_ARGS__);\
} while(0);\

#define CONTROLLER_TX_CONFIG_TRACE(obj, ...)\
do {\
AgentXmpp##obj::TraceMsg(ControllerTxConfigTraceBuf, __FILE__, __LINE__, __VA_ARGS__);\
} while(0);\

#define CONTROLLER_ROUTE_WALKER_TRACE(obj, ...)\
do {\
AgentXmpp##obj::TraceMsg(ControllerRouteWalkerTraceBuf, __FILE__, __LINE__, __VA_ARGS__);\
Expand Down
4 changes: 2 additions & 2 deletions src/vnsw/agent/controller/controller_peer.cc
Expand Up @@ -1597,7 +1597,7 @@ bool AgentXmppChannel::ControllerSendVmCfgSubscribe(AgentXmppChannel *peer,


datalen_ = XmppProto::EncodeMessage(impl.get(), data_, sizeof(data_));
CONTROLLER_INFO_TRACE(Trace, peer->GetBgpPeerName(), "",
CONTROLLER_TX_CONFIG_TRACE(Trace, peer->GetBgpPeerName(), "",
std::string(reinterpret_cast<const char *>(data_), datalen_));
// send data
if (peer->SendUpdate(data_,datalen_) == false) {
Expand Down Expand Up @@ -1637,7 +1637,7 @@ bool AgentXmppChannel::ControllerSendCfgSubscribe(AgentXmppChannel *peer) {
pugi->AddAttribute("node", node);

datalen_ = XmppProto::EncodeMessage(impl.get(), data_, sizeof(data_));
CONTROLLER_INFO_TRACE(Trace, peer->GetBgpPeerName(), "",
CONTROLLER_TX_CONFIG_TRACE(Trace, peer->GetBgpPeerName(), "",
std::string(reinterpret_cast<const char *>(data_), datalen_));
// send data
if (peer->SendUpdate(data_,datalen_) == false) {
Expand Down
2 changes: 2 additions & 0 deletions src/vnsw/agent/test/test_cmn_util.h
Expand Up @@ -397,6 +397,8 @@ class XmppChannelMock : public XmppChannel {
std::string FromString() const { return string("fake-from"); }
const XmppConnection *connection() const { return NULL; }

virtual void RegisterRxMessageTraceCallback(RxMessageTraceCb cb) {
}
virtual std::string LastStateName() const {
return "";
}
Expand Down
7 changes: 7 additions & 0 deletions src/xmpp/xmpp_channel.h
Expand Up @@ -36,11 +36,18 @@ class XmppChannel {
typedef boost::function<
void(const XmppStanza::XmppMessage *, xmps::PeerState state)
> ReceiveCb;
typedef boost::function<bool(const std::string &,
int,
int,
const std::string &,
const XmppStanza::XmppMessage * msg)
> RxMessageTraceCb;

virtual ~XmppChannel() { }
virtual bool Send(const uint8_t *, size_t, xmps::PeerId, SendReadyCb) = 0;
virtual void RegisterReceive(xmps::PeerId, ReceiveCb) = 0;
virtual void UnRegisterReceive(xmps::PeerId) = 0;
virtual void RegisterRxMessageTraceCallback(RxMessageTraceCb cb) = 0;
virtual void Close() = 0;
virtual std::string ToString() const = 0;
virtual std::string StateName() const = 0;
Expand Down
17 changes: 16 additions & 1 deletion src/xmpp/xmpp_channel_mux.cc
Expand Up @@ -13,7 +13,7 @@ using namespace std;
using namespace xmsm;

XmppChannelMux::XmppChannelMux(XmppConnection *connection)
: connection_(connection) {
: connection_(connection), rx_message_trace_cb_(NULL) {
}

XmppChannelMux::~XmppChannelMux() {
Expand Down Expand Up @@ -193,3 +193,18 @@ uint32_t XmppChannelMux::FlapCount() const {
std::string XmppChannelMux::LastFlap() const {
return connection_->last_flap_at();
}

void XmppChannelMux::RegisterRxMessageTraceCallback(RxMessageTraceCb cb) {
rx_message_trace_cb_ = cb;
}

bool XmppChannelMux::RxMessageTrace(const std::string &to_address,
int port,
int msg_size,
const std::string &msg,
const XmppStanza::XmppMessage *xmpp_msg) {
if (rx_message_trace_cb_) {
return rx_message_trace_cb_(to_address, port, msg_size, msg, xmpp_msg);
}
return false;
}
5 changes: 5 additions & 0 deletions src/xmpp/xmpp_channel_mux.h
Expand Up @@ -22,6 +22,7 @@ class XmppChannelMux : public XmppChannel {
virtual bool Send(const uint8_t *, size_t, xmps::PeerId, SendReadyCb);
virtual void RegisterReceive(xmps::PeerId, ReceiveCb);
virtual void UnRegisterReceive(xmps::PeerId);
virtual void RegisterRxMessageTraceCallback(RxMessageTraceCb cb);
size_t ReceiverCount() const;
std::vector<std::string> GetReceiverList() const;

Expand Down Expand Up @@ -51,6 +52,9 @@ class XmppChannelMux : public XmppChannel {

virtual const XmppConnection *connection() const { return connection_; }
virtual XmppConnection *connection() { return connection_; }
bool RxMessageTrace(const std::string &to_address, int port, int msg_size,
const std::string &msg,
const XmppStanza::XmppMessage *xmpp_msg);

protected:
friend class XmppChannelMuxMock;
Expand All @@ -67,6 +71,7 @@ class XmppChannelMux : public XmppChannel {
SendReadyCb cb_;
XmppConnection *connection_;
tbb::mutex mutex_;
RxMessageTraceCb rx_message_trace_cb_;
};

#endif // __XMPP_CHANNEL_MUX_H__
14 changes: 11 additions & 3 deletions src/xmpp/xmpp_connection.cc
Expand Up @@ -501,9 +501,17 @@ void XmppConnection::ReceiveMsg(XmppSession *session, const string &msg) {
if (minfo) {
session->IncStats((unsigned int)minfo->type, msg.size());
if (minfo->type != XmppStanza::WHITESPACE_MESSAGE_STANZA) {
XMPP_MESSAGE_TRACE(XmppRxStream,
session->remote_endpoint().address().to_string(),
session->remote_endpoint().port(), msg.size(), msg);
if (!(mux_ &&
(mux_->RxMessageTrace(session->
remote_endpoint().address().to_string(),
session->remote_endpoint().port(),
msg.size(), msg, minfo)))) {
XMPP_MESSAGE_TRACE(XmppRxStream,
session->
remote_endpoint().address().to_string(),
session->
remote_endpoint().port(), msg.size(), msg);
}
}
IncProtoStats((unsigned int)minfo->type);
state_machine_->OnMessage(session, minfo);
Expand Down
2 changes: 1 addition & 1 deletion src/xmpp/xmpp_init.cc
Expand Up @@ -34,7 +34,7 @@ const char *XmppInit::kBgpPeer = "bgp-peer";
const char *XmppInit::kDnsPeer = "dns-peer";
const char *XmppInit::kOtherPeer = "other-peer";

SandeshTraceBufferPtr XmppMessageTraceBuf(SandeshTraceBufferCreate(XMPP_MESSAGE_TRACE_BUF, 1000));
SandeshTraceBufferPtr XmppMessageTraceBuf(SandeshTraceBufferCreate(XMPP_MESSAGE_TRACE_BUF, 5000));
SandeshTraceBufferPtr XmppTraceBuf(SandeshTraceBufferCreate(XMPP_TRACE_BUF, 1000));

XmppInit::XmppInit()
Expand Down

0 comments on commit 101b1e4

Please sign in to comment.