OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 
31  uuid mp_uuid_;
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;
75  void SendObjectLog(SandeshTraceBufferPtr ptr,
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:
113  static MulticastPolicyTable* mp_table_;
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
virtual ~MulticastPolicyKey()
std::vector< SourceGroupInfo > mcast_sg_
uint32_t GetRefCount() const
Definition: agent_db.h:54
void set_mcast_sg(std::vector< SourceGroupInfo > &mcast_sg)
void set_name(std::string &name)
std::vector< SourceGroupInfo > mcast_sg_
MulticastPolicyEntry(uuid mp_uuid)
boost::asio::ip::address IpAddress
Definition: address.h:13
virtual size_t Hash(const DBEntry *entry) const
const uuid & GetMpUuid() const
boost::uuids::uuid uuid
const std::string & name() const
MulticastPolicyData(Agent *agent, IFMapNode *node, const std::string &name, const std::vector< SourceGroupInfo > &lst)
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr
Definition: sandesh_trace.h:18
Definition: db.h:24
static string ToString(PhysicalDevice::ManagementProtocol proto)
uint32_t GetRefCount() const
uint8_t type
Definition: load_balance.h:109
Definition: agent.h:358
const std::vector< SourceGroupInfo > & mcast_sg() const
class boost::shared_ptr< AgentSandesh > AgentSandeshPtr
Definition: agent_db.h:18
#define DISALLOW_COPY_AND_ASSIGN(_Class)
Definition: util.h:15
static bool IsLess(const ShowRoute &lhs, const ShowRoute &rhs, const BgpSandeshContext *bsc, const string &table_name)
virtual ~MulticastPolicyTable()
virtual ~MulticastPolicyData()
MulticastPolicyKey(uuid mp_uuid)
MulticastPolicyTable(DB *db, const std::string &name)
virtual ~MulticastPolicyEntry()
virtual size_t Hash(const DBRequestKey *key) const