6 #include <boost/uuid/uuid_io.hpp>
10 #include <vnc_cfg_types.h>
19 using namespace autogen;
34 std::stringstream uuidstring;
35 uuidstring << mp_uuid_;
36 return uuidstring.str();
52 std::vector<SourceGroupInfo>::const_iterator it = mcast_sg_.begin();
53 while (it != mcast_sg_.end()) {
54 if ((it->source == source) && (it->group == group)) {
68 return std::unique_ptr<DBEntry>(
static_cast<DBEntry *
>(mp));
74 ChangeHandler(mp, req);
82 bool ret = ChangeHandler(mp, req);
87 std::vector<SourceGroupInfo> mcast_sg;
94 const std::vector<SourceGroupInfo> &lhs,
95 const std::vector<SourceGroupInfo> &rhs)
const {
97 if (lhs.size() != rhs.size()) {
101 vector<SourceGroupInfo>::const_iterator lit = lhs.begin();
102 vector<SourceGroupInfo>::const_iterator rit = rhs.begin();
103 while (lit != lhs.end() && rit != rhs.end()) {
104 if ((lit->source != rit->source) ||
105 (lit->group != rit->group) ||
106 (lit->action != rit->action)) {
134 const std::string &name) {
142 MulticastPolicy *cfg =
static_cast<MulticastPolicy *
>(node->
GetObject());
144 autogen::IdPermsType id_perms = cfg->id_perms();
145 CfgUuidSet(id_perms.uuid.uuid_mslong, id_perms.uuid.uuid_lslong, u);
151 MulticastPolicy *cfg =
static_cast<MulticastPolicy *
>(node->
GetObject());
159 agent()->mp_table()->Enqueue(&req);
163 agent()->config_manager()->AddMulticastPolicyNode(node);
173 MulticastPolicy *cfg =
static_cast<MulticastPolicy *
>(node->
GetObject());
178 autogen::MulticastPolicy *data =
179 static_cast<autogen::MulticastPolicy *
>(node->
GetObject());
181 autogen::IdPermsType id_perms = data->id_perms();
183 std::vector<autogen::MulticastSourceGroup> cfg_sg_list =
184 data->multicast_source_groups();
185 std::vector<autogen::MulticastSourceGroup>::const_iterator it =
188 std::vector<SourceGroupInfo> sg_list;
190 boost::system::error_code ec;
191 while (it != cfg_sg_list.end()) {
192 sg.
source = IpAddress::from_string(it->source_address, ec);
193 sg.
group = IpAddress::from_string(it->group_address, ec);
194 sg.
action = (it->action ==
"pass") ?
197 sg_list.push_back(sg);
205 req.
key.reset(mp_key);
206 req.
data.reset(mp_data);
207 agent()->mp_table()->Enqueue(&req);
212 std::string &name)
const {
214 MulticastPolicyResp *resp =
static_cast<MulticastPolicyResp *
>(sresp);
217 MulticastPolicySandeshData data;
218 std::vector<MulticastPolicyEntrySandeshData> entries;
219 std::vector<SourceGroupInfo>::const_iterator it =
222 while (it != mcast_sg_.end()) {
223 MulticastPolicyEntrySandeshData entry;
224 entry.set_entry_id(
id);
225 entry.set_source_address(it->source.to_string());
226 entry.set_group_address(it->group.to_string());
229 entries.push_back(entry);
232 data.set_entries(entries);
234 std::vector<MulticastPolicySandeshData> &list =
235 const_cast<std::vector<MulticastPolicySandeshData>&
>
236 (resp->get_mp_list());
237 list.push_back(data);
242 void MulticastPolicyReq::HandleRequest()
const {
245 sand->DoSandesh(sand);
250 const std::string &context) {
virtual bool OperDBDelete(DBEntry *entry, const DBRequest *req)
virtual AgentSandeshPtr GetAgentSandesh(const AgentSandeshArguments *args, const std::string &context)
virtual bool IFNodeToUuid(IFMapNode *node, boost::uuids::uuid &u)
virtual bool IFNodeToReq(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
static void CfgUuidSet(uint64_t ms_long, uint64_t ls_long, boost::uuids::uuid &u)
void set_mcast_sg(std::vector< SourceGroupInfo > &mcast_sg)
std::string GetString(const std::string &key) const
virtual bool OperDBOnChange(DBEntry *entry, const DBRequest *req)
void set_name(std::string &name)
bool DBEntrySandesh(Sandesh *sresp, std::string &name) const
std::vector< SourceGroupInfo > mcast_sg_
static MulticastPolicyTable * mp_table_
virtual void SetKey(const DBRequestKey *key)
boost::asio::ip::address IpAddress
std::unique_ptr< DBRequestData > data
bool ProcessConfig(IFMapNode *node, DBRequest &req, const boost::uuids::uuid &u)
const std::string & name() const
static std::string UuidToString(const boost::uuids::uuid &id)
bool ChangeHandler(DBEntry *entry, const DBRequest *req)
boost::shared_ptr< TraceBuffer< SandeshTrace > > SandeshTraceBufferPtr
std::unique_ptr< DBRequestKey > KeyPtr
virtual string ToString() const
virtual KeyPtr GetDBRequestKey() const
std::unique_ptr< DBRequestKey > key
const std::vector< SourceGroupInfo > & mcast_sg() const
class boost::shared_ptr< AgentSandesh > AgentSandeshPtr
bool IsEqual(const std::vector< SourceGroupInfo > &lhs, const std::vector< SourceGroupInfo > &rhs) const
const std::string & name() const
virtual DBEntry * OperDBAdd(const DBRequest *req)
IFMapObject * GetObject()
static DBTableBase * CreateTable(DB *db, const std::string &name)
virtual std::unique_ptr< DBEntry > AllocEntry(const DBRequestKey *k) const
SandeshTraceBufferPtr MulticastPolicyTraceBuf(SandeshTraceBufferCreate("MulticastPolicy", 5000))
SourceGroupInfo::Action GetAction(IpAddress source, IpAddress group) const
virtual bool IsLess(const DBEntry &rhs) const
SandeshTraceBufferPtr SandeshTraceBufferCreate(const std::string &buf_name, size_t buf_size, bool trace_enable=true)