Line data Source code
1 : /* 2 : * Copyright (c) 2016 Juniper Networks, Inc. All rights reserved. 3 : */ 4 : 5 : #ifndef SRC_VNSW_AGENT_BRIDGE_DOMAIN_H_ 6 : #define SRC_VNSW_AGENT_BRIDGE_DOMAIN_H_ 7 : 8 : #include <boost/scoped_ptr.hpp> 9 : #include <cmn/agent.h> 10 : #include <oper_db.h> 11 : 12 : class BridgeDomainTable; 13 : 14 : struct BridgeDomainKey : public AgentOperDBKey { 15 0 : BridgeDomainKey(const boost::uuids::uuid &id) : 16 0 : AgentOperDBKey(), uuid_(id) { } 17 : BridgeDomainKey(const boost::uuids::uuid &id, DBSubOperation sub_op) : 18 : AgentOperDBKey(sub_op), uuid_(id) { } 19 0 : virtual ~BridgeDomainKey() { } 20 : 21 : boost::uuids::uuid uuid_; 22 : }; 23 : 24 : struct BridgeDomainData : public AgentOperDBData { 25 0 : BridgeDomainData(Agent *agent, IFMapNode *node): 26 0 : AgentOperDBData(agent, node), name_(""), 27 0 : vn_uuid_(boost::uuids::nil_uuid()), isid_(0), 28 0 : learning_enabled_(false), bmac_vrf_name_(""), 29 0 : pbb_etree_enabled_(false), mac_aging_time_(0) {} 30 : 31 : std::string name_; 32 : boost::uuids::uuid vn_uuid_; 33 : uint32_t isid_; 34 : bool learning_enabled_; 35 : std::string bmac_vrf_name_; 36 : bool pbb_etree_enabled_; 37 : uint32_t mac_aging_time_; 38 : }; 39 : 40 : class BridgeDomainEntry : AgentRefCount<BridgeDomainEntry>, 41 : public AgentOperDBEntry { 42 : public: 43 : BridgeDomainEntry(const BridgeDomainTable *table, 44 : const boost::uuids::uuid &id); 45 0 : virtual ~BridgeDomainEntry() {} 46 : 47 : virtual bool IsLess(const DBEntry &rhs) const; 48 : virtual std::string ToString() const; 49 : virtual KeyPtr GetDBRequestKey() const; 50 : virtual void SetKey(const DBRequestKey *key); 51 : bool DBEntrySandesh(Sandesh *resp, std::string &name) const; 52 : bool Change(const BridgeDomainTable *table, const BridgeDomainData *data); 53 : void Delete(); 54 : 55 0 : const boost::uuids::uuid &uuid() const { return uuid_; } 56 0 : const std::string &name() const { return name_; } 57 0 : const VnEntry* vn() const { 58 0 : return vn_.get(); 59 : } 60 : 61 0 : uint32_t isid() const { 62 0 : return isid_; 63 : } 64 : 65 0 : uint32_t GetRefCount() const { 66 0 : return AgentRefCount<BridgeDomainEntry>::GetRefCount(); 67 : } 68 : 69 0 : const VrfEntry* vrf() const { 70 0 : return vrf_.get(); 71 : } 72 : 73 0 : bool learning_enabled() const { 74 0 : return learning_enabled_; 75 : } 76 : 77 0 : bool pbb_etree_enabled() const { 78 0 : return pbb_etree_enabled_; 79 : } 80 : 81 : bool mac_aging_time() const { 82 : return mac_aging_time_; 83 : } 84 : 85 0 : bool layer2_control_word() const { 86 0 : return layer2_control_word_; 87 : } 88 : 89 : private: 90 : friend class BridgeDomainTable; 91 : void UpdateVrf(const BridgeDomainData *data); 92 : 93 : const BridgeDomainTable *table_; 94 : boost::uuids::uuid uuid_; 95 : std::string name_; 96 : VnEntryRef vn_; 97 : uint32_t isid_; 98 : VrfEntryRef vrf_; 99 : std::string bmac_vrf_name_; 100 : bool learning_enabled_; 101 : bool pbb_etree_enabled_; 102 : uint32_t mac_aging_time_; 103 : bool layer2_control_word_; 104 : DISALLOW_COPY_AND_ASSIGN(BridgeDomainEntry); 105 : }; 106 : 107 : class BridgeDomainTable : public AgentOperDBTable { 108 : public: 109 : BridgeDomainTable(Agent *agent, DB *db, const std::string &name); 110 : virtual ~BridgeDomainTable(); 111 : 112 : static DBTableBase *CreateTable(Agent *agent, DB *db, 113 : const std::string &name); 114 : virtual std::unique_ptr<DBEntry> AllocEntry(const DBRequestKey *k) const; 115 0 : virtual size_t Hash(const DBEntry *entry) const {return 0;} 116 0 : virtual size_t Hash(const DBRequestKey *key) const {return 0;} 117 : 118 : virtual DBEntry *OperDBAdd(const DBRequest *req); 119 : virtual bool OperDBOnChange(DBEntry *entry, const DBRequest *req); 120 : virtual bool OperDBResync(DBEntry *entry, const DBRequest *req); 121 : virtual bool OperDBDelete(DBEntry *entry, const DBRequest *req); 122 : 123 : virtual bool IFNodeToReq(IFMapNode *node, DBRequest &req, 124 : const boost::uuids::uuid &u); 125 : bool ProcessConfig(IFMapNode *node, DBRequest &req, 126 : const boost::uuids::uuid &u); 127 : virtual bool IFNodeToUuid(IFMapNode *node, boost::uuids::uuid &u); 128 : virtual AgentSandeshPtr GetAgentSandesh(const AgentSandeshArguments *args, 129 : const std::string &context); 130 : BridgeDomainEntry* Find(const boost::uuids::uuid &u); 131 : private: 132 : DISALLOW_COPY_AND_ASSIGN(BridgeDomainTable); 133 : }; 134 : #endif