OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
vm_uve_entry.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #include <uve/vm_uve_entry.h>
7 #include <uve/agent_uve.h>
8 
9 using namespace std;
10 
11 VmUveEntry::VmUveEntry(Agent *agent, const string &vm_name)
12  : VmUveEntryBase(agent, vm_name), port_bitmap_() {
13 }
14 
16 }
17 
18 void VmUveEntry::UpdatePortBitmap(uint8_t proto, uint16_t sport,
19  uint16_t dport) {
20  tbb::mutex::scoped_lock lock(mutex_);
21  if (deleted_ && !renewed_) {
22  /* Skip updates on VmUveEntry if it is marked for delete */
23  return;
24  }
25  //Update VM bitmap
26  port_bitmap_.AddPort(proto, sport, dport);
27 
28  InterfaceUveStatsTable *table = static_cast<InterfaceUveStatsTable *>
30  //Update vm interfaces bitmap
31  InterfaceSet::iterator it = interface_tree_.begin();
32  while(it != interface_tree_.end()) {
33  table->UpdatePortBitmap(*it, proto, sport, dport);
34  ++it;
35  }
36 }
37 
38 bool VmUveEntry::SetVmPortBitmap(UveVirtualMachineAgent *uve) {
39  bool changed = false;
40  tbb::mutex::scoped_lock lock(mutex_);
41 
42  vector<uint32_t> tcp_sport;
43  if (port_bitmap_.tcp_sport_.Sync(tcp_sport)) {
44  uve->set_tcp_sport_bitmap(tcp_sport);
45  changed = true;
46  }
47 
48  vector<uint32_t> tcp_dport;
49  if (port_bitmap_.tcp_dport_.Sync(tcp_dport)) {
50  uve->set_tcp_dport_bitmap(tcp_dport);
51  changed = true;
52  }
53 
54  vector<uint32_t> udp_sport;
55  if (port_bitmap_.udp_sport_.Sync(udp_sport)) {
56  uve->set_udp_sport_bitmap(udp_sport);
57  changed = true;
58  }
59 
60  vector<uint32_t> udp_dport;
61  if (port_bitmap_.udp_dport_.Sync(udp_dport)) {
62  uve->set_udp_dport_bitmap(udp_dport);
63  changed = true;
64  }
65  return changed;
66 }
67 
68 bool VmUveEntry::FrameVmStatsMsg(UveVirtualMachineAgent *uve) {
69  bool changed = false;
70  uve->set_name(vm_config_name());
71 
72  if (SetVmPortBitmap(uve)) {
73  changed = true;
74  }
75 
76  return changed;
77 }
78 
82 }
virtual ~VmUveEntry()
Definition: vm_uve_entry.cc:15
InterfaceSet interface_tree_
L4PortBitmap port_bitmap_
Definition: vm_uve_entry.h:20
AgentUveBase * uve() const
Definition: agent.cc:909
void AddPort(uint8_t proto, uint16_t sport, uint16_t dport)
PortBitmap udp_sport_
const std::string & vm_config_name() const
bool changed() const
void UpdatePortBitmap(const string &name, uint8_t proto, uint16_t sport, uint16_t dport)
void UpdatePortBitmap(uint8_t proto, uint16_t sport, uint16_t dport)
Definition: vm_uve_entry.cc:18
Definition: agent.h:358
bool FrameVmStatsMsg(UveVirtualMachineAgent *uve)
Definition: vm_uve_entry.cc:68
PortBitmap udp_dport_
virtual void Reset()
PortBitmap tcp_sport_
VmUveEntry(Agent *agent, const string &vm_name)
Definition: vm_uve_entry.cc:11
InterfaceUveTable * interface_uve_table() const
PortBitmap tcp_dport_
bool SetVmPortBitmap(UveVirtualMachineAgent *uve)
Definition: vm_uve_entry.cc:38
bool Sync(std::vector< uint32_t > &bmap)
virtual void Reset()
Definition: vm_uve_entry.cc:79