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