OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
vrf_assign.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef vnsw_agent_vrf_assign_hpp
6 #define vnsw_agent_vrf_assign_hpp
7 
8 #include <cmn/agent_cmn.h>
9 #include <cmn/agent.h>
10 
12 // Base class for VRF Assignment table. Implementation of specific types must
13 // derive from this class
15 
16 class VrfAssign : AgentRefCount<VrfAssign>, public AgentDBEntry {
17 public:
18  enum Type {
21  };
22 
23  struct VrfAssignKey : public AgentKey {
25  virtual ~VrfAssignKey() { };
26 
29  uint16_t vlan_tag_;
30 
31  void VlanInit(const boost::uuids::uuid intf_uuid, uint16_t vlan_tag) {
32  type_ = VLAN;
33  intf_uuid_ = intf_uuid;
34  vlan_tag_ = vlan_tag;
35  };
36  };
37 
38  struct VrfAssignData : public AgentData {
39  VrfAssignData(const std::string vrf_name) :
40  AgentData(), vrf_name_(vrf_name) { };
41  virtual ~VrfAssignData() { };
42 
43  const std::string vrf_name_;
44  };
45 
47  : type_(type), interface_(intrface), vrf_(NULL, this) { };
48  virtual ~VrfAssign() { };
49 
50  uint32_t GetRefCount() const {
52  };
53  bool IsLess(const DBEntry &rhs) const;
54  bool Change(const DBRequest *req);
55 
56  virtual bool VrfAssignIsLess(const VrfAssign &rhs) const = 0;
57  virtual bool VrfAssignChange(const DBRequest *req) {return false;};
58 
59  const Type GetType() const {return type_;};
60  const Interface *GetInterface() const {return interface_.get();};
61  const VrfEntry *GetVrf() const {return vrf_.get();};
62 
63 protected:
64  friend class VrfAssignTable;
65  void SetVrf(VrfEntry *vrf) {vrf_ = vrf;};
66  Type type_;
69 private:
71 };
72 
74 // Data for VLAN based VRF Assignment
76 class VlanVrfAssign : public VrfAssign {
77 public:
78  VlanVrfAssign(Interface *intrface, uint16_t vlan_tag):
79  VrfAssign(VLAN, intrface), vlan_tag_(vlan_tag), nh_(NULL) {}
80  virtual ~VlanVrfAssign() {}
81  bool VrfAssignIsLess(const VrfAssign &rhs) const;
82 
83  virtual std::string ToString() const {return "VlanVrfAssign";};
84 
85  const uint32_t GetVlanTag() const {return vlan_tag_;};
86  const NextHop *nh() const {return nh_.get();}
87  bool DBEntrySandesh(Sandesh *sresp, std::string &name) const;
88  KeyPtr GetDBRequestKey() const;
89  void SetKey(const DBRequestKey *key);
90  virtual bool VrfAssignChange(const DBRequest *req);
91 
92 private:
93  uint16_t vlan_tag_;
96 };
97 
99 // VRF Assignment table definition
101 class VrfAssignTable : public AgentDBTable {
102 public:
103  VrfAssignTable(DB *db, const std::string &name) : AgentDBTable(db, name) {}
104  virtual ~VrfAssignTable() { }
105 
106  virtual size_t Hash(const DBEntry *entry) const {return 0;};
107  virtual size_t Hash(const DBRequestKey *key) const {return 0;};
108 
109  virtual std::unique_ptr<DBEntry> AllocEntry(const DBRequestKey *k) const;
110  virtual DBEntry *Add(const DBRequest *req);
111  virtual bool OnChange(DBEntry *entry, const DBRequest *req);
113  const std::string &context);
114 
115  static DBTableBase *CreateTable(DB *db, const std::string &name);
117 
118  static Interface *FindInterface(const boost::uuids::uuid &intf_uuid);
119  static VrfEntry *FindVrf(const std::string &name);
120 
121  static void CreateVlanReq(const boost::uuids::uuid &intf_uuid,
122  const std::string &vrf_name, uint16_t vlan_tag);
123  static void DeleteVlanReq(const boost::uuids::uuid &intf_uuid,
124  uint16_t vlan_tag);
125  static void CreateVlan(const boost::uuids::uuid &intf_uuid,
126  const std::string &vrf_name, uint16_t vlan_tag);
127  static void DeleteVlan(const boost::uuids::uuid &intf_uuid,
128  uint16_t vlan_tag);
129  static VrfAssign *FindVlanReq(const boost::uuids::uuid &intf_uuid,
130  uint16_t vlan_tag);
131 
132 private:
134  VrfAssign *AllocWithKey(const DBRequestKey *k) const;
136 };
137 
138 #endif // vnsw_agent_vrf_assign_hpp
const VrfEntry * GetVrf() const
Definition: vrf_assign.h:61
static void DeleteVlan(const boost::uuids::uuid &intf_uuid, uint16_t vlan_tag)
Definition: vrf_assign.cc:132
static VrfEntry * FindVrf(const std::string &name)
Definition: vrf_assign.cc:82
uint32_t GetRefCount() const
Definition: agent_db.h:54
Definition: vrf.h:86
uint16_t vlan_tag_
Definition: vrf_assign.h:93
const std::string vrf_name_
Definition: vrf_assign.h:41
VrfAssignTable(DB *db, const std::string &name)
Definition: vrf_assign.h:103
static VrfAssignTable * GetInstance()
Definition: vrf_assign.h:116
const Type GetType() const
Definition: vrf_assign.h:59
boost::uuids::uuid uuid
boost::uuids::uuid intf_uuid_
Definition: vrf_assign.h:28
const NextHop * nh() const
Definition: vrf_assign.h:86
VrfAssignData(const std::string vrf_name)
Definition: vrf_assign.h:39
virtual bool OnChange(DBEntry *entry, const DBRequest *req)
Definition: vrf_assign.cc:66
std::unique_ptr< DBRequestKey > KeyPtr
Definition: db_entry.h:25
bool Change(const DBRequest *req)
Definition: vrf_assign.cc:169
void SetKey(const DBRequestKey *key)
Definition: vrf_assign.cc:217
void SetVrf(VrfEntry *vrf)
Definition: vrf_assign.h:65
Definition: db.h:24
virtual std::string ToString() const
Definition: vrf_assign.h:83
virtual bool VrfAssignChange(const DBRequest *req)
Definition: vrf_assign.h:57
VrfEntryRef vrf_
Definition: vrf_assign.h:68
DISALLOW_COPY_AND_ASSIGN(VlanVrfAssign)
void VlanInit(const boost::uuids::uuid intf_uuid, uint16_t vlan_tag)
Definition: vrf_assign.h:31
uint8_t type
Definition: load_balance.h:109
const uint32_t GetVlanTag() const
Definition: vrf_assign.h:85
static DBTableBase * CreateTable(DB *db, const std::string &name)
Definition: vrf_assign.cc:70
virtual bool VrfAssignChange(const DBRequest *req)
Definition: vrf_assign.cc:187
static VrfAssign * FindVlanReq(const boost::uuids::uuid &intf_uuid, uint16_t vlan_tag)
Definition: vrf_assign.cc:146
bool IsLess(const DBEntry &rhs) const
Definition: vrf_assign.cc:156
KeyPtr GetDBRequestKey() const
Definition: vrf_assign.cc:211
DISALLOW_COPY_AND_ASSIGN(VrfAssign)
class boost::shared_ptr< AgentSandesh > AgentSandeshPtr
Definition: agent_db.h:18
static void DeleteVlanReq(const boost::uuids::uuid &intf_uuid, uint16_t vlan_tag)
Definition: vrf_assign.cc:102
const std::string & name() const
Definition: db_table.h:110
bool DBEntrySandesh(Sandesh *sresp, std::string &name) const
Definition: vrf_assign.cc:224
DISALLOW_COPY_AND_ASSIGN(VrfAssignTable)
virtual AgentSandeshPtr GetAgentSandesh(const AgentSandeshArguments *args, const std::string &context)
Definition: vrf_assign.cc:253
boost::intrusive_ptr< const NextHop > NextHopConstRef
Definition: agent.h:126
virtual ~VlanVrfAssign()
Definition: vrf_assign.h:80
virtual size_t Hash(const DBEntry *entry) const
Definition: vrf_assign.h:106
static void CreateVlanReq(const boost::uuids::uuid &intf_uuid, const std::string &vrf_name, uint16_t vlan_tag)
Definition: vrf_assign.cc:86
static VrfAssignTable * vrf_assign_table_
Definition: vrf_assign.h:133
VrfAssign::Type type_
Definition: vrf_assign.h:25
boost::intrusive_ptr< Interface > InterfaceRef
Definition: agent.h:49
const Interface * GetInterface() const
Definition: vrf_assign.h:60
InterfaceRef interface_
Definition: vrf_assign.h:67
static void CreateVlan(const boost::uuids::uuid &intf_uuid, const std::string &vrf_name, uint16_t vlan_tag)
Definition: vrf_assign.cc:116
uint32_t GetRefCount() const
Definition: vrf_assign.h:50
virtual bool VrfAssignIsLess(const VrfAssign &rhs) const =0
Type type_
Definition: vrf_assign.h:65
virtual ~VrfAssignTable()
Definition: vrf_assign.h:104
virtual size_t Hash(const DBRequestKey *key) const
Definition: vrf_assign.h:107
virtual std::unique_ptr< DBEntry > AllocEntry(const DBRequestKey *k) const
Definition: vrf_assign.cc:23
VrfAssign(Type type, Interface *intrface)
Definition: vrf_assign.h:46
virtual ~VrfAssign()
Definition: vrf_assign.h:48
static Interface * FindInterface(const boost::uuids::uuid &intf_uuid)
Definition: vrf_assign.cc:76
bool VrfAssignIsLess(const VrfAssign &rhs) const
Definition: vrf_assign.cc:206
VlanVrfAssign(Interface *intrface, uint16_t vlan_tag)
Definition: vrf_assign.h:78
VrfAssign * AllocWithKey(const DBRequestKey *k) const
Definition: vrf_assign.cc:27
virtual DBEntry * Add(const DBRequest *req)
Definition: vrf_assign.cc:52
NextHopConstRef nh_
Definition: vrf_assign.h:94