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