5 #ifndef ctrlplane_bgp_log_h
7 #define ctrlplane_bgp_log_h
9 #include "sandesh/sandesh_trace.h"
10 #include "sandesh/common/vns_types.h"
12 #include "bgp/bgp_log_types.h"
17 namespace bgp_log_test {
20 void init(std::string log_file,
unsigned long log_file_size,
21 unsigned long log_file_index,
bool enable_syslog,
22 std::string syslog_facility, std::string ident,
23 std::string log_level);
29 #define BGP_DEBUG_UT(str) \
30 BGP_LOG_STR(BgpMessage, Sandesh::LoggingUtLevel(), BGP_LOG_FLAG_ALL, str)
31 #define BGP_WARN_UT(str) \
32 BGP_LOG_STR(BgpMessage, SandeshLevel::UT_WARN, BGP_LOG_FLAG_ALL, str)
36 #define BGP_TRACE_BUF "BgpTraceBuf"
37 #define BGP_PEER_OBJECT_TRACE_BUF "BgpPeerObjectTraceBuf"
42 #define BGP_LOG_FLAG_SYSLOG 1
43 #define BGP_LOG_FLAG_TRACE 2
44 #define BGP_LOG_FLAG_ALL (BGP_LOG_FLAG_SYSLOG | BGP_LOG_FLAG_TRACE)
46 #define BGP_UVE_SEND(type, object) \
48 if (LoggingDisabled()) break; \
52 #define BGP_UVE_SEND2(type, object, arg) \
54 if (LoggingDisabled()) break; \
55 type::Send(object, arg); \
59 #define BGP_LOG(obj, level, flags, ...) \
61 if (LoggingDisabled()) break; \
62 if ((flags) & BGP_LOG_FLAG_SYSLOG) { \
63 obj##Log::Send("BGP", level, __FILE__, __LINE__, ##__VA_ARGS__); \
64 if (bgp_log_test::unit_test()) break; \
66 if ((flags) & BGP_LOG_FLAG_TRACE) { \
67 obj##Trace::TraceMsg(BgpTraceBuf, __FILE__, __LINE__, \
73 #define BGP_LOG_NOTICE(obj, flags, ...) \
75 if (LoggingDisabled()) break; \
76 if ((flags) & BGP_LOG_FLAG_SYSLOG) { \
77 obj##Notice##Log::Send("BGP", SandeshLevel::SYS_NOTICE, __FILE__, \
78 __LINE__, ##__VA_ARGS__); \
79 if (bgp_log_test::unit_test()) break; \
81 if ((flags) & BGP_LOG_FLAG_TRACE) { \
82 const std::string __trace_buf(BGP_TRACE_BUF); \
83 obj##Notice##Trace::TraceMsg(BgpTraceBuf, __FILE__, __LINE__, \
89 #define BGP_LOG_STR(obj, level, flags, arg) \
91 if (LoggingDisabled()) break; \
92 std::ostringstream _os; \
94 BGP_LOG(obj, level, flags, _os.str()); \
98 #define BGP_LOG_ERROR_STR(obj, level, flags, arg) \
100 if (LoggingDisabled()) break; \
101 std::ostringstream _os; \
103 BGP_LOG(obj##Error, SandeshLevel::SYS_ERR, flags, _os.str()); \
107 #define BGP_LOG_WARNING_STR(obj, flags, arg) \
109 if (LoggingDisabled()) break; \
110 std::ostringstream _os; \
112 BGP_LOG(obj##Warning, SandeshLevel::SYS_WARN, flags, _os.str()); \
116 #define BGP_LOG_NOTICE_STR(obj, flags, arg) \
118 if (LoggingDisabled()) break; \
119 std::ostringstream _os; \
121 BGP_LOG(obj##Notice, SandeshLevel::SYS_NOTICE, flags, _os.str()); \
128 #define BGP_LOG_SERVER(peer, table) \
129 if (LoggingDisabled()) break; \
130 if (dynamic_cast<const IPeer *>(peer) && \
131 dynamic_cast<const IPeer *>(peer)->server() && \
132 dynamic_cast<const IPeer *>(peer)->server()->logging_disabled()) \
134 bgp_log_test::LogServerName(dynamic_cast<const IPeer *>(peer), \
135 dynamic_cast<const BgpTable *>(table)); \
138 #define BGP_PEER_DIR_OUT "SEND"
139 #define BGP_PEER_DIR_IN "RECV"
140 #define BGP_PEER_DIR_NA ""
142 #define BGP_LOG_PEER_INTERNAL(type, peer, level, flags, ...) \
144 const IPeer *_peer = dynamic_cast<const IPeer *>(peer); \
145 std::string _peer_name; \
147 _peer_name = _peer->ToUVEKey(); \
149 _peer_name = "Unknown"; \
151 if (_peer && _peer->IsXmppPeer()) { \
152 BGP_LOG(XmppPeer ## type, level, flags, _peer_name, ##__VA_ARGS__);\
154 BGP_LOG(BgpPeer ## type, level, flags, _peer_name, ##__VA_ARGS__); \
159 #define BGP_LOG_PEER(type, peer, level, flags, dir, arg) \
161 if (LoggingDisabled()) break; \
163 BGP_LOG_SERVER(peer, (BgpTable *) 0); \
164 std::ostringstream _os; \
166 BGP_LOG_PEER_INTERNAL(type, peer, level, flags, dir, _os.str()); \
170 #define BGP_LOG_PEER_NOTICE(type, peer, flags, dir, arg) \
172 if (LoggingDisabled()) break; \
174 BGP_LOG_SERVER(peer, (BgpTable *) 0); \
175 std::ostringstream _os; \
177 BGP_LOG_PEER_INTERNAL(type##Notice, peer, SandeshLevel::SYS_NOTICE, \
178 flags, dir, _os.str()); \
182 #define BGP_LOG_PEER_WARNING(type, peer, flags, dir, arg) \
184 if (LoggingDisabled()) break; \
186 BGP_LOG_SERVER(peer, (BgpTable *) 0); \
187 std::ostringstream _os; \
189 BGP_LOG_PEER_INTERNAL(type##Warning, peer, SandeshLevel::SYS_WARN, \
190 flags, dir, _os.str()); \
194 #define BGP_LOG_PEER_CRITICAL(type, peer, flags, dir, arg) \
196 if (LoggingDisabled()) break; \
198 BGP_LOG_SERVER(peer, (BgpTable *) 0); \
199 std::ostringstream _os; \
201 BGP_LOG_PEER_INTERNAL(type##Critical, peer, SandeshLevel::SYS_CRIT, \
202 flags, dir, _os.str()); \
205 #define BGP_LOG_PEER_TABLE(peer, level, flags, tbl, arg) \
207 if (LoggingDisabled()) break; \
208 BGP_LOG_SERVER(peer, tbl); \
209 std::ostringstream _os; \
211 BGP_LOG_PEER_INTERNAL(Table, peer, level, flags, BGP_PEER_DIR_NA, \
212 (tbl) ? (tbl)->name() : "", \
213 ((tbl) && (tbl)->routing_instance()) ? \
214 (tbl)->routing_instance()->name() : "", \
218 #define BGP_LOG_PEER_INSTANCE(peer, instance, level, flags, arg) \
220 if (LoggingDisabled()) break; \
221 std::ostringstream _os; \
223 BGP_LOG_PEER_INTERNAL(Instance, peer, level, flags, BGP_PEER_DIR_NA, \
224 instance, _os.str()); \
227 #define BGP_LOG_PEER_INSTANCE_WARNING(peer, instance, flags, arg) \
229 if (LoggingDisabled()) break; \
230 std::ostringstream _os; \
232 BGP_LOG_PEER_INTERNAL(Instance, peer, SandeshLevel::SYS_WARN, flags, \
234 instance, _os.str()); \
237 #define BGP_LOG_PEER_INSTANCE_CRITICAL(peer, instance, dir, flags, arg) \
239 if (LoggingDisabled()) break; \
240 std::ostringstream _os; \
242 BGP_LOG_PEER_INTERNAL(Instance, peer, SandeshLevel::SYS_CRIT, flags, \
243 dir, instance, _os.str()); \
247 #define BGP_LOG_ROUTE(table, peer, route, arg) \
249 if (LoggingDisabled()) break; \
250 BGP_LOG_SERVER(peer, table); \
251 std::ostringstream _os; \
253 BGP_LOG_PEER_INTERNAL(Route, peer, SandeshLevel::SYS_DEBUG, \
254 BGP_LOG_FLAG_TRACE, BGP_PEER_DIR_NA, _os.str(), \
255 (route) ? (route)->ToString() : "", \
256 (table) ? (table)->name() : ""); \
260 #define BGP_LOG_TABLE(table, level, flags, arg) \
262 if (LoggingDisabled()) break; \
263 BGP_LOG_SERVER((const IPeer *) 0, table); \
264 std::ostringstream _os; \
266 BGP_LOG(BgpTable, level, flags, (table) ? (table)->name() : "", \
270 #define BGP_CONFIG_LOG_INTERNAL(type, server, level, flags, ...) \
272 if (LoggingDisabled()) break; \
273 if ((flags) & BGP_LOG_FLAG_SYSLOG) { \
274 bgp_log_test::LogServerName(server); \
275 BgpConfig##type##Log::Send("BGPConfig", level, \
276 __FILE__, __LINE__, ##__VA_ARGS__); \
278 if ((flags) & BGP_LOG_FLAG_TRACE) { \
279 BgpConfig##type##Trace::TraceMsg(BgpTraceBuf, \
280 __FILE__, __LINE__, ##__VA_ARGS__); \
284 #define BGP_CONFIG_LOG_INSTANCE(type, server, rtinstance, level, flags, ...) \
285 BGP_CONFIG_LOG_INTERNAL(Instance##type, server, level, flags, \
286 (rtinstance)->name(), ##__VA_ARGS__);
288 #define BGP_CONFIG_LOG_NEIGHBOR(type, server, neighbor, level, flags, ...) \
289 BGP_CONFIG_LOG_INTERNAL(Neighbor##type, server, level, flags, \
290 (neighbor)->name(), ##__VA_ARGS__);
292 #define BGP_CONFIG_LOG_PEERING(type, server, peering, level, flags, ...) \
293 BGP_CONFIG_LOG_INTERNAL(Peering##type, server, level, flags, \
294 (peering)->name(), ##__VA_ARGS__);
296 #define BGP_CONFIG_LOG_PROTOCOL(type, server, protocol, level, flags, ...) \
297 BGP_CONFIG_LOG_INTERNAL(Protocol##type, server, level, flags, \
298 (protocol)->instance()->name(), ##__VA_ARGS__);
302 #define BGP_TRACE_PEER_OBJECT(peer, peer_info) \
304 if (LoggingDisabled()) break; \
305 BGP_LOG_SERVER(peer, (BgpTable *) 0); \
306 BgpPeerObjectTrace::TraceMsg(BgpPeerObjectTraceBuf, __FILE__, __LINE__,\
310 #define BGP_TRACE_PEER_PACKET(peer, msg, size, level) \
312 if (LoggingDisabled()) break; \
313 if ((level) > Sandesh::LoggingLevel()) break; \
314 BgpPeerInfo peer_info; \
316 BGP_LOG_SERVER(peer, (BgpTable *) 0); \
317 (peer)->state_machine()->SetDataCollectionKey(&peer_info); \
318 peer_info.set_packet_data((peer)->BytesToHexString(msg, size)); \
319 BGP_TRACE_PEER_OBJECT(peer, peer_info); \
322 #endif // ctrlplane_bgp_log_h
SandeshTraceBufferPtr BgpTraceBuf
void LogServerName(const BgpServer *server)
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr
SandeshTraceBufferPtr BgpPeerObjectTraceBuf