OpenSDN source code
multicast_policy.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_multcast_policy_hpp
6 #define vnsw_agent_multcast_policy_hpp
7 
8 #include <cmn/agent_cmn.h>
9 #include <cmn/agent.h>
10 #include <agent_types.h>
11 #include <oper/oper_db.h>
12 
13 using namespace boost::uuids;
14 using namespace std;
15 
17 public:
18  enum Action {
21  };
25 };
26 
28  MulticastPolicyKey(uuid mp_uuid) : AgentOperDBKey(), mp_uuid_(mp_uuid) {} ;
29  virtual ~MulticastPolicyKey() { };
30 
32 };
33 
36  const std::string &name,
37  const std::vector<SourceGroupInfo> &lst) :
38  AgentOperDBData(agent, node), name_(name), mcast_sg_(lst) {}
39  virtual ~MulticastPolicyData() {}
40 
41  std::string name_;
42  std::vector<SourceGroupInfo> mcast_sg_;
43 };
44 
46  AgentRefCount<MulticastPolicyEntry>, public AgentOperDBEntry {
47 public:
48  MulticastPolicyEntry(uuid mp_uuid) : mp_uuid_(mp_uuid) {};
49  virtual ~MulticastPolicyEntry() { };
50 
51  virtual bool IsLess(const DBEntry &rhs) const;
52  virtual KeyPtr GetDBRequestKey() const;
53  virtual void SetKey(const DBRequestKey *key);
54  virtual string ToString() const;
55 
56  const uuid &GetMpUuid() const {return mp_uuid_;};
57  const std::string& name() const {return name_;}
58  void set_name(std::string& name) {
59  name_ = name;
60  }
61  const std::vector<SourceGroupInfo> & mcast_sg() const {
62  return mcast_sg_;
63  }
64  void set_mcast_sg(std::vector<SourceGroupInfo> &mcast_sg) {
65  mcast_sg_ = mcast_sg;
66  }
67 
68  uint32_t GetRefCount() const {
70  }
71 
72  SourceGroupInfo::Action GetAction(IpAddress source, IpAddress group) const;
73 
74  bool DBEntrySandesh(Sandesh *sresp, std::string &name) const;
76  AgentLogEvent::type event) const;
77 
78 private:
79  friend class MulticastPolicyTable;
81  std::string name_;
82  std::vector<SourceGroupInfo> mcast_sg_;
84 };
85 
87 public:
88  static const uint32_t kInvalidMpId = 0;
89  MulticastPolicyTable(DB *db, const std::string &name) :
90  AgentOperDBTable(db, name) { }
91  virtual ~MulticastPolicyTable() { }
92 
93  virtual std::unique_ptr<DBEntry> AllocEntry(const DBRequestKey *k) const;
94  virtual size_t Hash(const DBEntry *entry) const {return 0;};
95  virtual size_t Hash(const DBRequestKey *key) const {return 0;};
96 
97  virtual DBEntry *OperDBAdd(const DBRequest *req);
98  virtual bool OperDBOnChange(DBEntry *entry, const DBRequest *req);
99  virtual bool OperDBDelete(DBEntry *entry, const DBRequest *req);
100 
101  virtual bool IFNodeToReq(IFMapNode *node, DBRequest &req,
102  const boost::uuids::uuid &u);
103  virtual bool IFNodeToUuid(IFMapNode *node, boost::uuids::uuid &u);
104  virtual AgentSandeshPtr GetAgentSandesh(const AgentSandeshArguments *args,
105  const std::string &context);
106  bool ProcessConfig(IFMapNode *node, DBRequest &req,
107  const boost::uuids::uuid &u);
108 
109  static DBTableBase *CreateTable(DB *db, const std::string &name);
110  static MulticastPolicyTable *GetInstance() {return mp_table_;};
111 
112 private:
114  bool ChangeHandler(DBEntry *entry, const DBRequest *req);
115  bool IsEqual(const std::vector<SourceGroupInfo> &lhs,
116  const std::vector<SourceGroupInfo> &rhs) const;
118 };
119 
120 #endif // vnsw_agent_multicast_policy_hpp
boost::asio::ip::address IpAddress
Definition: address.h:13
class boost::shared_ptr< AgentSandesh > AgentSandeshPtr
Definition: agent_db.h:18
static bool IsLess(const ShowRoute &lhs, const ShowRoute &rhs, const BgpSandeshContext *bsc, const string &table_name)
uint32_t GetRefCount() const
Definition: agent_db.h:54
Definition: agent.h:360
Definition: db.h:24
void set_mcast_sg(std::vector< SourceGroupInfo > &mcast_sg)
const std::string & name() const
const uuid & GetMpUuid() const
std::vector< SourceGroupInfo > mcast_sg_
void set_name(std::string &name)
uint32_t GetRefCount() const
void SendObjectLog(SandeshTraceBufferPtr ptr, AgentLogEvent::type event) const
DISALLOW_COPY_AND_ASSIGN(MulticastPolicyEntry)
const std::vector< SourceGroupInfo > & mcast_sg() const
MulticastPolicyEntry(uuid mp_uuid)
virtual ~MulticastPolicyEntry()
static MulticastPolicyTable * mp_table_
static MulticastPolicyTable * GetInstance()
virtual size_t Hash(const DBRequestKey *key) const
virtual size_t Hash(const DBEntry *entry) const
MulticastPolicyTable(DB *db, const std::string &name)
DISALLOW_COPY_AND_ASSIGN(MulticastPolicyTable)
virtual ~MulticastPolicyTable()
uint8_t type
Definition: load_balance.h:2
static string ToString(PhysicalDevice::ManagementProtocol proto)
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr
Definition: sandesh_trace.h:18
virtual ~MulticastPolicyData()
MulticastPolicyData(Agent *agent, IFMapNode *node, const std::string &name, const std::vector< SourceGroupInfo > &lst)
std::vector< SourceGroupInfo > mcast_sg_
MulticastPolicyKey(uuid mp_uuid)
virtual ~MulticastPolicyKey()
boost::uuids::uuid uuid