OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
agent_cmn.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef vnsw_agent_cmn_hpp
6 #define vnsw_agent_cmn_hpp
7 
8 #include <sys/socket.h>
9 #include <netinet/in.h>
10 #include <arpa/inet.h>
11 #include <unistd.h>
12 
13 #include <boost/intrusive_ptr.hpp>
14 #include <boost/bind.hpp>
15 #include <boost/uuid/uuid.hpp>
16 #include <boost/uuid/uuid_io.hpp>
17 #include <boost/uuid/nil_generator.hpp>
18 
19 #include <tbb/atomic.h>
20 #include <tbb/mutex.h>
21 
22 #include <io/event_manager.h>
23 #include <db/db.h>
24 #include <db/db_entry.h>
25 #include <db/db_table.h>
26 #include <db/db_table_partition.h>
27 #include <db/db_table_walker.h>
28 
29 #include <base/address.h>
30 #include <base/logging.h>
31 #include <base/task.h>
32 #include <base/task_trigger.h>
33 #include <base/task_annotations.h>
34 #include <base/dependency.h>
35 #include <base/lifetime.h>
36 
39 
40 #include <sandesh/sandesh_trace.h>
41 #include <sandesh/common/vns_constants.h>
42 
43 #include <cmn/agent.h>
44 #include <cmn/agent_db.h>
45 #include <cmn/event_notifier.h>
46 
47 #include <stdio.h>
48 #include <execinfo.h>
49 #include <dlfcn.h>
50 #include <cxxabi.h>
51 
52 static inline bool UnregisterDBTable(DBTable *table,
54  table->Unregister(id);
55  return true;
56 }
57 
58 static inline TaskTrigger *SafeDBUnregister(DBTable *table,
60  TaskTrigger *trigger =
61  new TaskTrigger(boost::bind(&UnregisterDBTable, table, id),
62  TaskScheduler::GetInstance()->GetTaskId("db::DBTable"), 0);
63  trigger->Set();
64  return trigger;
65 }
66 
67 static inline void CfgUuidSet(uint64_t ms_long, uint64_t ls_long,
68  boost::uuids::uuid &u) {
69  for (int i = 0; i < 8; i++) {
70  u.data[7 - i] = ms_long & 0xFF;
71  ms_long = ms_long >> 8;
72  }
73 
74  for (int i = 0; i < 8; i++) {
75  u.data[15 - i] = ls_long & 0xFF;
76  ls_long = ls_long >> 8;
77  }
78 }
79 
80 static inline void CloseTaskFds(void) {
81  int max_open_fds = sysconf(_SC_OPEN_MAX);
82  int fd;
83  for(fd = 3; fd < max_open_fds; fd++)
84  close(fd);
85 }
86 
88 extern bool GetBuildInfo(std::string &build_info_str);
89 
90 #define OPER_IFMAP_TRACE(obj, ...)\
91 do {\
92  Oper##obj::TraceMsg(OperConfigTraceBuf, __FILE__, __LINE__, __VA_ARGS__);\
93 } while (false)
94 
95 #define IFMAP_ERROR(obj, ...)\
96 do {\
97  if (LoggingDisabled()) break;\
98  obj::Send(g_vns_constants.CategoryNames.find(Category::IFMAP_AGENT)->second,\
99  SandeshLevel::SYS_ERR, __FILE__, __LINE__, ##__VA_ARGS__);\
100 } while (false)
101 
102 std::string AgentBackTrace(int skip);
103 #endif // vnsw_agent_cmn_hpp
static void CloseTaskFds(void)
Definition: agent_cmn.h:80
static void CfgUuidSet(uint64_t ms_long, uint64_t ls_long, boost::uuids::uuid &u)
Definition: agent_cmn.h:67
SandeshTraceBufferPtr OperConfigTraceBuf
int ListenerId
Definition: db_table.h:62
boost::uuids::uuid uuid
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr
Definition: sandesh_trace.h:18
void Unregister(ListenerId listener)
Definition: db_table.cc:186
static bool UnregisterDBTable(DBTable *table, DBTableBase::ListenerId id)
Definition: agent_cmn.h:52
static TaskScheduler * GetInstance()
Definition: task.cc:547
std::string AgentBackTrace(int skip=1)
Definition: agent.cc:1187
static TaskTrigger * SafeDBUnregister(DBTable *table, DBTableBase::ListenerId id)
Definition: agent_cmn.h:58
bool GetBuildInfo(std::string &build_info_str)
int32_t skip(Protocol_ &prot, TType type)
Definition: TProtocol.h:187