OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
interface.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 #ifndef vnsw_agent_interface_hpp
5 #define vnsw_agent_interface_hpp
6 
8 // Agent supports multiple type of interface. Class Interface is defines
9 // common attributes of all interfaces. All interfaces derive from the base
10 // Interface class
12 
13 #include <boost/optional.hpp>
14 #include <cmn/agent_cmn.h>
15 #include <cmn/index_vector.h>
16 #include <oper/oper_db.h>
18 
19 struct InterfaceData;
20 class VmInterface;
22 
23 class Interface : AgentRefCount<Interface>, public AgentOperDBEntry {
24 public:
25  // Type of interfaces supported
26  enum Type {
28  // Represents the physical ethernet port. Can be LAG interface also
30  // Remote Physical interface
32  // Logical interface
34  // Interface in the virtual machine
36  // The inet interfaces created in host-os
37  // Example interfaces:
38  // vhost0 in case of KVM
39  // xap0 in case of XEN
40  // vgw in case of Simple Gateway
42  // pkt0 interface used to exchange packets between vrouter and agent
44  };
45 
46  enum Trace {
47  ADD,
48  DEL,
53  };
54 
60  };
61 
62  enum Transport {
68  };
69 
70  static const uint32_t kInvalidIndex = 0xFFFFFFFF;
71 
73  const std::string &name, VrfEntry *vrf, bool os_oper_state,
75  virtual ~Interface();
76 
77  // DBEntry virtual function. Must be implemented by derived interfaces
78  virtual KeyPtr GetDBRequestKey() const = 0;
79  //DBEntry virtual function. Implmeneted in base class since its common
80  //for all interfaces
81  virtual void SetKey(const DBRequestKey *key);
82 
83  // virtual functions for specific interface types
84  virtual bool CmpInterface(const DBEntry &rhs) const = 0;
85  virtual bool Delete(const DBRequest *req) { return true; }
86  virtual void Add() { }
87  virtual void SendTrace(const AgentDBTable *table, Trace event) const;
88  virtual void GetOsParams(Agent *agent);
89  void SetPciIndex(Agent *agent, size_t index);
90 
91  // DBEntry comparator virtual function
92  bool IsLess(const DBEntry &rhs) const {
93  const Interface &intf = static_cast<const Interface &>(rhs);
94  if (type_ != intf.type_) {
95  return type_ < intf.type_;
96  }
97 
98  return CmpInterface(rhs);
99  }
100 
101  uint32_t vrf_id() const;
102  uint32_t GetRefCount() const {
104  }
105 
106  bool DBEntrySandesh(Sandesh *sresp, std::string &name) const;
107 
108  // Tunnelled packets are expected on PHYSICAL interfaces only
109  bool IsTunnelEnabled() const { return (type_ == PHYSICAL);}
110 
111  // Accessor methods
112  Type type() const {return type_;}
113  const boost::uuids::uuid &GetUuid() const {return uuid_;}
114  const std::string &name() const {return os_params_.name_;}
115  VrfEntry *vrf() const {return vrf_.get();}
116  bool ipv4_active() const {return ipv4_active_;}
117  bool ipv6_active() const {return ipv6_active_;}
118  bool is_hc_active() const { return is_hc_active_; }
121  bool ip_active(Address::Family family) const;
122  bool l2_active() const {return l2_active_;}
123  const uint32_t id() const {return id_;}
124  bool dhcp_enabled() const {return dhcp_enabled_;}
125  bool dhcp_enabled_v6() const {return dhcp_enabled_v6_;}
126  bool dns_enabled() const {return dns_enabled_;}
127  uint32_t label() const {return label_;}
128  uint32_t l2_label() const {return l2_label_;}
129  bool IsL2LabelValid(uint32_t label) const { return (label_ == label);}
130  uint32_t os_index() const {return os_params_.os_index_;}
131  const MacAddress &mac() const {return os_params_.mac_;}
132  bool os_oper_state() const { return os_params_.os_oper_state_; }
133  bool admin_state() const { return admin_state_; }
134  // Used only for test code
135  void set_test_oper_state(bool val) { test_oper_state_ = val; }
136  void set_flow_key_nh(const NextHop *nh) { flow_key_nh_ = nh;}
137  const NextHop* flow_key_nh() const {return flow_key_nh_.get();}
139  bool IsUveActive() const;
140  const AgentQosConfig* qos_config() const {
141  return qos_config_.get();
142  }
143  void UpdateOperStateOfSubIntf(const InterfaceTable *table);
144  bool NeedDefaultOsOperStateDisabled(Agent *agent) const;
145  boost::optional<InterfaceOsParams::IfGuid> os_guid() const { return os_params_.os_guid_; }
147  return logical_router_uuid_;
148  }
151  }
152 
154  return os_params_;
155  }
156 
157 protected:
158  void SetItfSandeshData(ItfSandeshData &data) const;
159  virtual void ObtainOsSpecificParams(const std::string &name, Agent *agent);
160 
164  uint32_t label_;
165  uint32_t l2_label_;
168  // if interface is marked active by health check
170  // interface has metadata ip active
174  size_t id_;
179  // Used only for test code
181  //Reference to nexthop, whose index gets used as key in
182  //flow lookup for traffic ingressing from this interface
183  //packet interface and bridge interface will not have this
184  //reference set.
190 
191 private:
192  friend class InterfaceTable;
195 };
196 
197 // Common key for all interfaces.
198 struct InterfaceKey : public AgentOperDBKey {
200  type_ = rhs.type_;
201  uuid_ = rhs.uuid_;
202  name_ = rhs.name_;
203  }
204 
206  const boost::uuids::uuid &uuid,
207  const std::string &name, bool is_mcast) :
208  AgentOperDBKey(sub_op), type_(type), uuid_(uuid), name_(name) {
209  }
210 
211  void Init(Interface::Type type, const boost::uuids::uuid &intf_uuid,
212  const std::string &name) {
213  type_ = type;
214  uuid_ = intf_uuid;
215  name_ = name;
216  }
217 
218  bool IsLess(const InterfaceKey &rhs) const {
219  if (type_ != rhs.type_) {
220  return type_ < rhs.type_;
221  }
222 
223  if (uuid_ != rhs.uuid_) {
224  return uuid_ < rhs.uuid_;
225  }
226 
227  return name_ < rhs.name_;
228  }
229 
230  bool IsEqual(const InterfaceKey &rhs) const {
231  if ((IsLess(rhs) == false) && (rhs.IsLess(*this) == false)) {
232  return true;
233  }
234  return false;
235  }
236 
237  // Virtual methods for interface keys
238  virtual Interface *AllocEntry(const InterfaceTable *table) const = 0;
239  virtual Interface *AllocEntry(const InterfaceTable *table,
240  const InterfaceData *data) const = 0;
241  virtual InterfaceKey *Clone() const = 0;
242 
245  std::string name_;
246 };
247 
248 // Common data for all interfaces. The data is further derived based on type
249 // of interfaces
252  Interface::Transport transport) :
253  AgentOperDBData(agent, node), transport_(transport),
255 
256  void VmPortInit() { vrf_name_ = ""; }
257  void EthInit(const std::string &vrf_name) { vrf_name_ = vrf_name; }
258  void PktInit() { vrf_name_ = ""; }
259  void InetInit(const std::string &vrf_name) { vrf_name_ = vrf_name; }
260  void RemotePhysicalPortInit(const std::string &vrf_name) {
261  vrf_name_ = vrf_name;
262  }
263 
264  // This is constant-data. Set only during create and not modified later
265  std::string vrf_name_;
268 };
269 
272  const boost::uuids::uuid &qos_config_uuid):
273  AgentOperDBData(agent, node), qos_config_uuid_(qos_config_uuid) {}
274 
276 };
277 
279 // Definition of tree containing physical-device-vn entry created by the VMI
280 //
281 // Physical-device-vn entries are built from the VM-Interface to VN link
282 // The table contains physical-device-vn entry for every VM-Interface
286  const boost::uuids::uuid &vn);
288 
290 
293 };
294 
295 typedef std::map<boost::uuids::uuid, VmiToPhysicalDeviceVnData>
298 // Interface Table
299 // Index for interface is maintained using an IndexVector.
302 public:
303  struct DhcpSnoopEntry {
304  DhcpSnoopEntry() : addr_(0), config_entry_(false) { }
305  DhcpSnoopEntry(const Ip4Address &addr, bool config_entry) :
306  addr_(addr), config_entry_(config_entry) { }
310  };
311 
312  typedef std::map<const std::string, DhcpSnoopEntry> DhcpSnoopMap;
313  typedef std::map<const std::string, DhcpSnoopEntry>::iterator DhcpSnoopIterator;
314 
315  // Map of VM-Interface UUID to VmiType. VmiType is computed based on the
316  // config when interface is added. But when VMI is deleted, the VmiType
317  // cannot be computed. So, store the computed value in this map
318  // Storing VmiType as int to avoid forward declaration
319  typedef std::map<boost::uuids::uuid, int> VmiToVmiTypeMap;
320 
321  // DNS module is optional. Callback function to keep DNS entry for
322  // floating ip in-sync. This callback is defined to avoid linking error
323  // when DNS is not enabled
324  typedef boost::function<void(VmInterface *, const VnEntry *,
325  const IpAddress &, bool)> UpdateFloatingIpFn;
326 
327  InterfaceTable(DB *db, const std::string &name);
328  virtual ~InterfaceTable() { }
329 
330  void Init(OperDB *oper);
331  static DBTableBase *CreateTable(DB *db, const std::string &name);
333 
334  // DBTable virtual functions
335  std::unique_ptr<DBEntry> AllocEntry(const DBRequestKey *k) const;
336  size_t Hash(const DBEntry *entry) const { return 0; }
337  size_t Hash(const DBRequestKey *key) const { return 0; }
339  const std::string &context);
340 
341  DBEntry *OperDBAdd(const DBRequest *req);
342  bool OperDBOnChange(DBEntry *entry, const DBRequest *req);
343  bool OperDBDelete(DBEntry *entry, const DBRequest *req);
344  bool OperDBResync(DBEntry *entry, const DBRequest *req);
345 
346  // Config handlers
347  bool ProcessConfig(IFMapNode *node, DBRequest &req,
348  const boost::uuids::uuid &u);
350  const boost::uuids::uuid &u);
352  const boost::uuids::uuid &u);
354  const boost::uuids::uuid &u);
355  bool VmiProcessConfig(IFMapNode *node, DBRequest &req,
356  const boost::uuids::uuid &u);
357  bool VmiIFNodeToReq(IFMapNode *node, DBRequest &req,
358  const boost::uuids::uuid &u);
362  const boost::uuids::uuid &u);
364  const boost::uuids::uuid &u);
366  &req, const boost::uuids::uuid &u);
367  bool IFNodeToReq(IFMapNode *node, DBRequest &req, const boost::uuids::uuid
368  &u);
369  bool IFNodeToUuid(IFMapNode *node, boost::uuids::uuid &u);
370 
371  // Handle change in VxLan Identifier mode from global-config
373 
375 
376  // Helper functions
377  VrfEntry *FindVrfRef(const std::string &name) const;
378  VnEntry *FindVnRef(const boost::uuids::uuid &uuid) const;
379  VmEntry *FindVmRef(const boost::uuids::uuid &uuid) const;
380  MirrorEntry *FindMirrorRef(const std::string &name) const;
381 
382  // Interface index managing routines
383  void FreeInterfaceId(size_t index);
384  const Interface *FindInterface(size_t index) const;
385  Interface *FindInterface(size_t index);
386 
391  const Interface *FindInterfaceFromMetadataIp(const Ip4Address &ip) const;
392 
397  const Interface *FindInterfaceFromMetadataIp(const Ip6Address &ip) const;
398 
399  // Metadata address management routines (IPv4 & IPv6)
400 
414  virtual bool FindVmUuidFromMetadataIp(const IpAddress &ip,
415  std::string *vm_ip,
416  std::string *vm_uuid,
417  std::string *vm_project_uuid);
418 
423  void LinkVmPortToMetaDataIp(const Interface* intf, const Ip6Address &addr);
424 
425  // Dhcp Snoop Map entries
426  const Ip4Address GetDhcpSnoopEntry(const std::string &ifname);
427  void DeleteDhcpSnoopEntry(const std::string &ifname);
428  void AddDhcpSnoopEntry(const std::string &ifname, const Ip4Address &addr);
429  void AuditDhcpSnoopTable();
430  void DhcpSnoopSetConfigSeen(const std::string &ifname);
431 
434  void AddVmiToVmiType(const boost::uuids::uuid &u, int type);
435  int GetVmiToVmiType(const boost::uuids::uuid &u);
436  void DelVmiToVmiType(const boost::uuids::uuid &u);
437 
438  // Routines managing VMI to physical-device-vn entry
440  boost::uuids::uuid &dev,
441  boost::uuids::uuid &vn,
442  IFMapNode *vn_node);
444 
445  // TODO : to remove this
447  Agent *agent() const { return agent_; }
448  OperDB *operdb() const { return operdb_; }
449 
450  uint32_t vmi_count() const { return vmi_count_; }
453 
454  uint32_t li_count() const { return li_count_; }
455  void incr_li_count() { li_count_++; }
456  void decr_li_count() { li_count_--; }
457 
458  uint32_t active_vmi_count() const { return active_vmi_count_; }
461 
462  uint32_t vmi_ifnode_to_req() const { return vmi_ifnode_to_req_; }
463  uint32_t li_ifnode_to_req() const { return li_ifnode_to_req_; }
464  uint32_t pi_ifnode_to_req() const { return pi_ifnode_to_req_; }
465  //Shutdown
466  virtual void Clear();
467  void CreateVhost();
468  void CreateVhostReq();
469 
470 private:
471  bool L2VmInterfaceWalk(DBTablePartBase *partition,
472  DBEntryBase *entry);
474  DBTableBase *partition);
475 
477  OperDB *operdb_; // Cached entry
478  Agent *agent_; // Cached entry
481 
482  // On restart, DHCP Snoop entries are read from kernel and updated in the
483  // ASIO context. Lock used to synchronize
484  tbb::mutex dhcp_snoop_mutex_;
488  // Tree of physical-device-vn entries created by VMIs
490  // Count of type of interfaces
491  uint32_t vmi_count_;
492  uint32_t li_count_;
493  // Count of active vm-interfaces
498 
500 };
501 
502 #endif // vnsw_agent_interface_hpp
bool OperDBDelete(DBEntry *entry, const DBRequest *req)
Definition: interface.cc:284
boost::uuids::uuid uuid_
Definition: interface.h:162
IndexVector< Interface * > index_table_
Definition: interface.h:480
size_t Hash(const DBEntry *entry) const
Definition: interface.h:336
boost::function< void(VmInterface *, const VnEntry *, const IpAddress &, bool)> UpdateFloatingIpFn
Definition: interface.h:325
bool is_hc_active_
Definition: interface.h:169
DhcpSnoopEntry(const Ip4Address &addr, bool config_entry)
Definition: interface.h:305
void SetItfSandeshData(ItfSandeshData &data) const
Definition: interface.cc:822
Type type() const
Definition: interface.h:112
void AddVmiToVmiType(const boost::uuids::uuid &u, int type)
Definition: interface.cc:1519
VmiToPhysicalDeviceVnTree vmi_to_physical_device_vn_tree_
Definition: interface.h:489
uint32_t l2_label_
Definition: interface.h:165
bool ip_active(Address::Family family) const
Definition: interface.cc:1476
DhcpSnoopMap dhcp_snoop_map_
Definition: interface.h:485
const AgentQosConfig * qos_config() const
Definition: interface.h:140
void set_update_floatingip_cb(UpdateFloatingIpFn fn)
Definition: interface.cc:630
void VmInterfaceWalkDone(DBTable::DBTableWalkRef walk_ref, DBTableBase *partition)
Definition: interface.cc:405
uint32_t GetRefCount() const
Definition: agent_db.h:54
Definition: vrf.h:86
InterfaceTable * table_
Definition: interface.h:193
virtual bool CmpInterface(const DBEntry &rhs) const =0
InterfaceQosConfigData(const Agent *agent, IFMapNode *node, const boost::uuids::uuid &qos_config_uuid)
Definition: interface.h:271
const boost::uuids::uuid & GetUuid() const
Definition: interface.h:113
boost::uuids::uuid qos_config_uuid_
Definition: interface.h:275
void UpdateOperStateOfSubIntf(const InterfaceTable *table)
Definition: interface.cc:1493
void EthInit(const std::string &vrf_name)
Definition: interface.h:257
const uint32_t id() const
Definition: interface.h:123
bool VmiIFNodeToReq(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
uint32_t li_ifnode_to_req_
Definition: interface.h:496
Transport transport_
Definition: interface.h:186
std::map< boost::uuids::uuid, int > VmiToVmiTypeMap
Definition: interface.h:319
virtual InterfaceKey * Clone() const =0
bool test_oper_state_
Definition: interface.h:180
bool dhcp_enabled_
Definition: interface.h:175
Family
Definition: address.h:24
bool dns_enabled() const
Definition: interface.h:126
uint32_t os_index() const
Definition: interface.h:130
std::unique_ptr< DBEntry > AllocEntry(const DBRequestKey *k) const
Definition: interface.cc:157
VmiToPhysicalDeviceVnData & operator=(VmiToPhysicalDeviceVnData const &rhs)
boost::asio::ip::address IpAddress
Definition: address.h:13
InterfaceData(Agent *agent, IFMapNode *node, Interface::Transport transport)
Definition: interface.h:251
Definition: vm.h:32
Interface::Transport transport() const
Definition: interface.h:138
bool OperDBResync(DBEntry *entry, const DBRequest *req)
Definition: interface.cc:256
bool l2_active() const
Definition: interface.h:122
VmEntry * FindVmRef(const boost::uuids::uuid &uuid) const
Definition: interface.cc:301
void DeleteDhcpSnoopEntry(const std::string &ifname)
Definition: interface.cc:727
virtual void Clear()
Definition: interface.cc:413
void DelPhysicalDeviceVnEntry(const boost::uuids::uuid &vmi)
Interface(Type type, const boost::uuids::uuid &uuid, const std::string &name, VrfEntry *vrf, bool os_oper_state, const boost::uuids::uuid &logical_router_uuid)
Definition: interface.cc:480
InterfaceKey(const InterfaceKey &rhs)
Definition: interface.h:199
bool l2_active_
Definition: interface.h:173
virtual Interface * AllocEntry(const InterfaceTable *table) const =0
uint32_t active_vmi_count_
Definition: interface.h:494
static DBTableBase * CreateTable(DB *db, const std::string &name)
Definition: interface.cc:317
virtual ~Interface()
Definition: interface.cc:495
InterfaceTable(DB *db, const std::string &name)
Definition: interface.cc:59
void set_flow_key_nh(const NextHop *nh)
Definition: interface.h:136
void PktInit()
Definition: interface.h:258
std::map< const std::string, DhcpSnoopEntry >::iterator DhcpSnoopIterator
Definition: interface.h:313
void DelVmiToVmiType(const boost::uuids::uuid &u)
Definition: interface.cc:1530
boost::uuids::uuid uuid
boost::uuids::uuid dev_
Definition: interface.h:291
bool VmiIFNodeToUuid(IFMapNode *node, boost::uuids::uuid &u)
bool dhcp_enabled_v6_
Definition: interface.h:176
InterfaceKey(AgentKey::DBSubOperation sub_op, Interface::Type type, const boost::uuids::uuid &uuid, const std::string &name, bool is_mcast)
Definition: interface.h:205
uint32_t vmi_ifnode_to_req() const
Definition: interface.h:462
Interface::Transport transport_
Definition: interface.h:266
VmiToPhysicalDeviceVnData(const boost::uuids::uuid &dev, const boost::uuids::uuid &vn)
void CreateVhostReq()
Definition: interface.cc:453
const MacAddress & mac() const
Definition: interface.h:131
bool metadata_ip_active_
Definition: interface.h:171
bool metadata_l2_active_
Definition: interface.h:172
void FreeInterfaceId(size_t index)
Definition: interface.cc:164
uint32_t pi_ifnode_to_req() const
Definition: interface.h:464
Agent * agent() const
Definition: interface.h:447
VrfEntry * vrf() const
Definition: interface.h:115
bool IsLess(const DBEntry &rhs) const
Definition: interface.h:92
const boost::uuids::uuid & logical_router_uuid() const
Definition: interface.h:146
DBTable::DBTableWalkRef global_config_change_walk_ref_
Definition: interface.h:479
bool IFNodeToUuid(IFMapNode *node, boost::uuids::uuid &u)
Definition: interface.cc:78
bool IsTunnelEnabled() const
Definition: interface.h:109
std::unique_ptr< DBRequestKey > KeyPtr
Definition: db_entry.h:25
MirrorEntry * FindMirrorRef(const std::string &name) const
Definition: interface.cc:311
boost::uuids::uuid logical_router_uuid_
Definition: interface.h:267
uint32_t GetRefCount() const
Definition: interface.h:102
void AddDhcpSnoopEntry(const std::string &ifname, const Ip4Address &addr)
Definition: interface.cc:750
Agent * agent_
Definition: interface.h:478
const NextHop * flow_key_nh() const
Definition: interface.h:137
virtual AgentSandeshPtr GetAgentSandesh(const AgentSandeshArguments *args, const std::string &context)
Definition: interface.cc:1442
std::string name_
Definition: interface.h:245
InterfaceConstRef FindVmi(const boost::uuids::uuid &u)
Definition: interface.cc:419
boost::uuids::uuid logical_router_uuid_
Definition: interface.h:189
std::map< const std::string, DhcpSnoopEntry > DhcpSnoopMap
Definition: interface.h:312
uint32_t label() const
Definition: interface.h:127
bool DBEntrySandesh(Sandesh *sresp, std::string &name) const
Definition: interface.cc:1417
Definition: db.h:24
bool PhysicalInterfaceProcessConfig(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
bool ipv6_active_
Definition: interface.h:167
bool L2VmInterfaceWalk(DBTablePartBase *partition, DBEntryBase *entry)
Definition: interface.cc:383
void Init()
Definition: db_table.cc:387
bool metadata_l2_active() const
Definition: interface.h:120
uint8_t type
Definition: load_balance.h:109
bool dhcp_enabled_v6() const
Definition: interface.h:125
const UpdateFloatingIpFn & update_floatingip_cb() const
Definition: interface.cc:634
virtual void ObtainOsSpecificParams(const std::string &name, Agent *agent)
void CreateVhost()
Definition: interface.cc:426
Definition: agent.h:358
uint32_t label_
Definition: interface.h:164
std::string vrf_name_
Definition: interface.h:265
bool LogicalInterfaceProcessConfig(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
uint32_t vrf_id() const
Definition: interface.cc:621
virtual void SendTrace(const AgentDBTable *table, Trace event) const
Definition: interface.cc:1455
void DhcpSnoopSetConfigSeen(const std::string &ifname)
Definition: interface.cc:739
void decr_li_count()
Definition: interface.h:456
bool ipv4_active() const
Definition: interface.h:116
void AuditDhcpSnoopTable()
Definition: interface.cc:772
NextHopConstRef flow_key_nh_
Definition: interface.h:185
boost::asio::ip::address_v6 Ip6Address
Definition: address.h:15
boost::intrusive_ptr< const AgentQosConfig > AgentQosConfigConstRef
Definition: agent.h:178
VnEntry * FindVnRef(const boost::uuids::uuid &uuid) const
Definition: interface.cc:306
bool metadata_ip_active() const
Definition: interface.h:119
bool InterfaceCommonProcessConfig(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
Definition: interface.cc:107
DBEntry * OperDBAdd(const DBRequest *req)
Definition: interface.cc:169
virtual bool FindVmUuidFromMetadataIp(const IpAddress &ip, std::string *vm_ip, std::string *vm_uuid, std::string *vm_project_uuid)
Finds information about a virtual machine connected to a given vm interface with a specified link loc...
Definition: interface.cc:339
InterfaceOsParams get_os_params()
Definition: interface.h:153
Definition: trace.h:220
bool IsLess(const InterfaceKey &rhs) const
Definition: interface.h:218
Type type_
Definition: interface.h:161
virtual void SetKey(const DBRequestKey *key)
Definition: interface.cc:614
bool dhcp_enabled() const
Definition: interface.h:124
bool os_oper_state() const
Definition: interface.h:132
uint32_t pi_ifnode_to_req_
Definition: interface.h:497
boost::intrusive_ptr< const Interface > InterfaceConstRef
Definition: agent.h:51
bool PhysicalInterfaceIFNodeToReq(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
bool NeedDefaultOsOperStateDisabled(Agent *agent) const
Definition: interface.cc:1509
void LinkVmPortToMetaDataIp(const Interface *intf, const Ip6Address &addr)
Creates a link between a given interface (Interface) and a given IPv6 address.
VrfEntry * FindVrfRef(const std::string &name) const
Definition: interface.cc:295
void RemotePhysicalPortInit(const std::string &vrf_name)
Definition: interface.h:260
uint32_t vmi_count() const
Definition: interface.h:450
bool admin_state_
Definition: interface.h:178
class boost::shared_ptr< AgentSandesh > AgentSandeshPtr
Definition: agent_db.h:18
void UpdatePhysicalDeviceVnEntry(const boost::uuids::uuid &vmi, boost::uuids::uuid &dev, boost::uuids::uuid &vn, IFMapNode *vn_node)
boost::uuids::uuid vn_
Definition: interface.h:292
Interface::Type type_
Definition: interface.h:243
const std::string & name() const
Definition: db_table.h:110
void incr_vmi_count()
Definition: interface.h:451
void VmPortInit()
Definition: interface.h:256
virtual ~InterfaceTable()
Definition: interface.h:328
void decr_active_vmi_count()
Definition: interface.h:460
int GetVmiToVmiType(const boost::uuids::uuid &u)
Definition: interface.cc:1523
uint32_t active_vmi_count() const
Definition: interface.h:458
boost::asio::ip::address_v4 Ip4Address
Definition: address.h:14
void set_test_oper_state(bool val)
Definition: interface.h:135
tbb::mutex dhcp_snoop_mutex_
Definition: interface.h:484
static InterfaceTable * GetInstance()
Definition: interface.h:446
size_t Hash(const DBRequestKey *key) const
Definition: interface.h:337
Definition: vn.h:151
bool ipv4_active_
Definition: interface.h:166
bool IsEqual(const InterfaceKey &rhs) const
Definition: interface.h:230
virtual KeyPtr GetDBRequestKey() const =0
DISALLOW_COPY_AND_ASSIGN(Interface)
void incr_active_vmi_count()
Definition: interface.h:459
UpdateFloatingIpFn update_floatingip_cb_
Definition: interface.h:486
OperDB * operdb() const
Definition: interface.h:448
void SetPciIndex(Agent *agent, size_t index)
Definition: interface.cc:508
bool IsL2LabelValid(uint32_t label) const
Definition: interface.h:129
bool admin_state() const
Definition: interface.h:133
const Agent * agent() const
Definition: oper_db.h:65
uint32_t li_ifnode_to_req() const
Definition: interface.h:463
VmiToVmiTypeMap vmi_to_vmitype_map_
Definition: interface.h:487
bool IsUveActive() const
Definition: interface.cc:1486
DISALLOW_COPY_AND_ASSIGN(InterfaceTable)
static const uint32_t kInvalidIndex
Definition: interface.h:70
boost::intrusive_ptr< const NextHop > NextHopConstRef
Definition: agent.h:126
uint32_t l2_label() const
Definition: interface.h:128
AgentQosConfigConstRef qos_config_
Definition: interface.h:187
DBSubOperation
Definition: agent_db.h:96
const Interface * FindInterface(size_t index) const
Definition: interface.cc:323
VrfEntryRef vrf_
Definition: interface.h:163
struct InterfaceOsParams os_params_
Definition: interface.h:188
boost::optional< IfGuid > os_guid_
uint32_t vmi_count_
Definition: interface.h:491
const std::string & name() const
Definition: interface.h:114
uint32_t vmi_ifnode_to_req_
Definition: interface.h:495
void set_logical_router_uuid(const boost::uuids::uuid &logical_router_uuid)
Definition: interface.h:149
void InetInit(const std::string &vrf_name)
Definition: interface.h:259
bool OperDBOnChange(DBEntry *entry, const DBRequest *req)
Definition: interface.cc:198
bool RemotePhysicalInterfaceIFNodeToReq(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
virtual bool Delete(const DBRequest *req)
Definition: interface.h:85
void decr_vmi_count()
Definition: interface.h:452
static InterfaceTable * interface_table_
Definition: interface.h:476
boost::intrusive_ptr< DBTableWalk > DBTableWalkRef
Definition: db_table.h:169
uint32_t li_count_
Definition: interface.h:492
bool LogicalInterfaceIFNodeToReq(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
void incr_li_count()
Definition: interface.h:455
bool dns_enabled_
Definition: interface.h:177
bool IFNodeToReq(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
Definition: interface.cc:90
virtual void GetOsParams(Agent *agent)
Definition: interface.cc:536
MirrorDirection
Definition: interface.h:55
boost::optional< InterfaceOsParams::IfGuid > os_guid() const
Definition: interface.h:145
const Ip4Address GetDhcpSnoopEntry(const std::string &ifname)
Definition: interface.cc:717
boost::uuids::uuid uuid_
Definition: interface.h:244
std::map< boost::uuids::uuid, VmiToPhysicalDeviceVnData > VmiToPhysicalDeviceVnTree
Definition: interface.h:296
virtual void Add()
Definition: interface.h:86
bool VmiProcessConfig(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
bool ProcessConfig(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
Definition: interface.cc:128
bool ipv6_active() const
Definition: interface.h:117
OperDB * operdb_
Definition: interface.h:477
void RegisterDBClients(IFMapDependencyManager *dep)
Definition: interface.cc:75
const Interface * FindInterfaceFromMetadataIp(const Ip4Address &ip) const
Finds an interface (Interface) to which a given IPv4 address belongs to.
Definition: interface.cc:371
void Init(Interface::Type type, const boost::uuids::uuid &intf_uuid, const std::string &name)
Definition: interface.h:211
bool is_hc_active() const
Definition: interface.h:118
bool LogicalInterfaceIFNodeToUuid(IFMapNode *node, boost::uuids::uuid &u)
void GlobalVrouterConfigChanged()
Definition: interface.cc:409
uint32_t li_count() const
Definition: interface.h:454
size_t id_
Definition: interface.h:174