OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
vn_uve_table.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #include <uve/agent_uve_stats.h>
6 #include <uve/vn_uve_table.h>
7 #include <uve/vn_uve_entry.h>
8 
9 VnUveTable::VnUveTable(Agent *agent, uint32_t default_intvl)
10  : VnUveTableBase(agent, default_intvl) {
11 }
12 
14 }
15 
17  VnUveEntryPtr uve(new VnUveEntry(agent_, vn));
18  return uve;
19 }
20 
23  return uve;
24 }
25 
26 bool VnUveTable::SendUnresolvedVnMsg(const string &vn_name,
27  UveVirtualNetworkAgent &uve) {
28  UveVnMap::iterator it = uve_vn_map_.find(vn_name);
29  if (it == uve_vn_map_.end()) {
30  return false;
31  }
32  VnUveEntryPtr entry_ptr(it->second);
33  VnUveEntry *entry = static_cast<VnUveEntry *>(entry_ptr.get());
34 
35  bool changed = false;
36  uve.set_name(vn_name);
37  changed = entry->PopulateInterVnStats(uve);
38 
39 
40  AgentUveStats *u = static_cast<AgentUveStats *>(agent_->uve());
41  StatsManager *stats = u->stats_manager();
42  /* Send Nameless VrfStats as part of Unknown VN */
43  if (vn_name.compare(FlowHandler::UnknownVn()) == 0) {
44  changed = entry->FillVrfStats(stats->GetNamelessVrfId(), uve);
45  }
46 
47  return changed;
48 }
49 
51  UveVnMap::const_iterator it = uve_vn_map_.begin();
52  while (it != uve_vn_map_.end()) {
53  const VnUveEntry *entry = static_cast<VnUveEntry *>(it->second.get());
54  ++it;
55  if (entry->deleted()) {
56  continue;
57  }
58  if (entry->vn()) {
59  SendVnStatsMsg(entry->vn());
60  }
61  }
62  UveVirtualNetworkAgent uve1, uve2;
64  DispatchVnMsg(uve1);
65  }
67  DispatchVnMsg(uve2);
68  }
69 }
70 
72  VnUveEntry* entry = static_cast<VnUveEntry*>(UveEntryFromVn(vn));
73  if (entry == NULL) {
74  return;
75  }
76  if (entry->deleted()) {
77  return;
78  }
79  UveVirtualNetworkAgent uve;
80 
81  bool send = entry->FrameVnStatsMsg(vn, uve);
82  if (send) {
83  DispatchVnMsg(uve);
84  }
85 }
86 
87 void VnUveTable::UpdateBitmap(const string &vn, uint8_t proto, uint16_t sport,
88  uint16_t dport) {
89  tbb::mutex::scoped_lock lock(uve_vn_map_mutex_);
90  UveVnMap::iterator it = uve_vn_map_.find(vn);
91  if (it == uve_vn_map_.end()) {
92  return;
93  }
94 
95  VnUveEntry * entry = static_cast<VnUveEntry *>(it->second.get());
96  entry->UpdatePortBitmap(proto, sport, dport);
97 }
98 
99 void VnUveTable::UpdateInterVnStats(const string &src, const string &dst,
100  uint64_t bytes, uint64_t pkts,
101  bool outgoing) {
102  tbb::mutex::scoped_lock lock(uve_vn_map_mutex_);
103  UveVnMap::iterator it = uve_vn_map_.find(src);
104  if (it == uve_vn_map_.end()) {
105  return;
106  }
107 
108  VnUveEntry * entry = static_cast<VnUveEntry *>(it->second.get());
109  entry->UpdateInterVnStats(dst, bytes, pkts, outgoing);
110 }
111 
113  if (!info.is_valid_) {
114  return;
115  }
116  UveVnMap::iterator it = uve_vn_map_.find(info.vn_);
117  if (it == uve_vn_map_.end()) {
118  return;
119  }
120 
121  VnUveEntry * entry = static_cast<VnUveEntry *>(it->second.get());
122  entry->UpdateVnAceStats(info.nw_ace_uuid_);
123 }
124 
126  UveVirtualNetworkAgent uve;
127  if (vn == NULL) {
128  return;
129  }
130  VnUveEntry *entry = static_cast<VnUveEntry *>(e);
131  if (entry->FrameVnAceStatsMsg(vn, uve)) {
132  DispatchVnMsg(uve);
133  }
134 }
StatsManager * stats_manager() const
static const std::string LinkLocalVn()
Definition: flow_handler.h:32
bool deleted() const
void IncrVnAceStats(const FlowUveVnAcePolicyInfo &info)
bool FrameVnAceStatsMsg(const VnEntry *vn, UveVirtualNetworkAgent &uve)
bool SendUnresolvedVnMsg(const std::string &vn, UveVirtualNetworkAgent &u)
Definition: vn_uve_table.cc:26
AgentUveBase * uve() const
Definition: agent.cc:909
void UpdateVnAceStats(const std::string &ace_uuid)
bool FillVrfStats(int vrf_id, UveVirtualNetworkAgent &s_vn)
void UpdatePortBitmap(uint8_t proto, uint16_t sport, uint16_t dport)
Definition: vn_uve_entry.cc:23
static const std::string UnknownVn()
Definition: flow_handler.h:26
void UpdateInterVnStats(const string &dst_vn, uint64_t bytes, uint64_t pkts, bool outgoing)
Definition: vn_uve_entry.cc:33
Definition: agent.h:358
const VnEntry * vn() const
void SendVnStatsMsg(const VnEntry *vn)
Definition: vn_uve_table.cc:71
bool PopulateInterVnStats(UveVirtualNetworkAgent &s_vn)
tbb::mutex uve_vn_map_mutex_
void UpdateInterVnStats(const std::string &src, const std::string &dst, uint64_t bytes, uint64_t pkts, bool outgoing)
Definition: vn_uve_table.cc:99
virtual ~VnUveTable()
Definition: vn_uve_table.cc:13
Definition: vn.h:151
void SendVnStats()
Definition: vn_uve_table.cc:50
VnUveTable(Agent *agent, uint32_t default_intvl)
Definition: vn_uve_table.cc:9
void SendVnAceStats(VnUveEntryBase *entry, const VnEntry *vn)
VnUveEntryBase * UveEntryFromVn(const VnEntry *vn)
boost::shared_ptr< VnUveEntryBase > VnUveEntryPtr
virtual VnUveEntryPtr Allocate()
Definition: vn_uve_table.cc:21
int GetNamelessVrfId()
virtual void DispatchVnMsg(const UveVirtualNetworkAgent &uve)
bool FrameVnStatsMsg(const VnEntry *vn, UveVirtualNetworkAgent &uve)
void UpdateBitmap(const std::string &vn, uint8_t proto, uint16_t sport, uint16_t dport)
Definition: vn_uve_table.cc:87