OpenSDN source code
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 <io/event_manager.h>
20 #include <db/db.h>
21 #include <db/db_entry.h>
22 #include <db/db_table.h>
23 #include <db/db_table_partition.h>
24 #include <db/db_table_walker.h>
25 
26 #include <base/address.h>
27 #include <base/logging.h>
28 #include <base/task.h>
29 #include <base/task_trigger.h>
30 #include <base/task_annotations.h>
31 #include <base/dependency.h>
32 #include <base/lifetime.h>
33 
36 
37 #include <sandesh/sandesh_trace.h>
38 #include <sandesh/common/vns_constants.h>
39 
40 #include <cmn/agent.h>
41 #include <cmn/agent_db.h>
42 #include <cmn/event_notifier.h>
43 
44 #include <stdio.h>
45 #include <execinfo.h>
46 #include <dlfcn.h>
47 #include <cxxabi.h>
48 
49 static inline bool UnregisterDBTable(DBTable *table,
51  table->Unregister(id);
52  return true;
53 }
54 
55 static inline TaskTrigger *SafeDBUnregister(DBTable *table,
57  TaskTrigger *trigger =
58  new TaskTrigger(boost::bind(&UnregisterDBTable, table, id),
59  TaskScheduler::GetInstance()->GetTaskId("db::DBTable"), 0);
60  trigger->Set();
61  return trigger;
62 }
63 
64 static inline void CfgUuidSet(uint64_t ms_long, uint64_t ls_long,
65  boost::uuids::uuid &u) {
66  for (int i = 0; i < 8; i++) {
67  u.data[7 - i] = ms_long & 0xFF;
68  ms_long = ms_long >> 8;
69  }
70 
71  for (int i = 0; i < 8; i++) {
72  u.data[15 - i] = ls_long & 0xFF;
73  ls_long = ls_long >> 8;
74  }
75 }
76 
77 static inline void CloseTaskFds(void) {
78  int max_open_fds = sysconf(_SC_OPEN_MAX);
79  int fd;
80  for(fd = 3; fd < max_open_fds; fd++)
81  close(fd);
82 }
83 
85 
86 #define OPER_IFMAP_TRACE(obj, ...)\
87 do {\
88  Oper##obj::TraceMsg(OperConfigTraceBuf, __FILE__, __LINE__, __VA_ARGS__);\
89 } while (false)
90 
91 #define IFMAP_ERROR(obj, ...)\
92 do {\
93  if (LoggingDisabled()) break;\
94  obj::Send(g_vns_constants.CategoryNames.find(Category::IFMAP_AGENT)->second,\
95  SandeshLevel::SYS_ERR, __FILE__, __LINE__, ##__VA_ARGS__);\
96 } while (false)
97 
98 std::string AgentBackTrace(int skip);
99 #endif // vnsw_agent_cmn_hpp
std::string AgentBackTrace(int skip)
Definition: agent.cc:1199
static bool UnregisterDBTable(DBTable *table, DBTableBase::ListenerId id)
Definition: agent_cmn.h:49
static TaskTrigger * SafeDBUnregister(DBTable *table, DBTableBase::ListenerId id)
Definition: agent_cmn.h:55
static void CloseTaskFds(void)
Definition: agent_cmn.h:77
static void CfgUuidSet(uint64_t ms_long, uint64_t ls_long, boost::uuids::uuid &u)
Definition: agent_cmn.h:64
SandeshTraceBufferPtr OperConfigTraceBuf
void Unregister(ListenerId listener)
Definition: db_table.cc:211
int ListenerId
Definition: db_table.h:62
static TaskScheduler * GetInstance()
Definition: task.cc:554
int32_t skip(Protocol_ &prot, TType type)
Definition: TProtocol.h:187
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr
Definition: sandesh_trace.h:18
boost::uuids::uuid uuid