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