Line data Source code
1 : /* 2 : * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved. 3 : */ 4 : 5 : #ifndef __AGENT_OPER_QOS_QUEUE_H 6 : #define __AGENT_OPER_QOS_QUEUE_H 7 : 8 : #include <cmn/agent.h> 9 : #include <oper_db.h> 10 : #include <cmn/index_vector.h> 11 : 12 : class Agent; 13 : class DB; 14 : 15 : struct QosQueueKey : public AgentOperDBKey { 16 0 : QosQueueKey(const boost::uuids::uuid &uuid): 17 0 : uuid_(uuid) {} 18 : 19 : QosQueueKey(const QosQueueKey &rhs): 20 : uuid_(rhs.uuid_) {} 21 : 22 : bool IsLess(const QosQueueKey &rhs) const { 23 : return uuid_ < rhs.uuid_; 24 : } 25 : 26 : boost::uuids::uuid uuid_; 27 : }; 28 : 29 : struct QosQueueData : public AgentOperDBData { 30 : 31 0 : QosQueueData(const Agent *agent, IFMapNode *node, const std::string &name, 32 0 : uint16_t id): 33 0 : AgentOperDBData(agent, node), name_(name), id_(id) {} 34 : std::string name_; 35 : uint16_t id_; 36 : }; 37 : 38 : class QosQueue : 39 : AgentRefCount<QosQueue>, public AgentOperDBEntry { 40 : public: 41 : QosQueue(const boost::uuids::uuid &uuid); 42 : virtual ~QosQueue(); 43 : 44 : KeyPtr GetDBRequestKey() const; 45 : std::string ToString() const; 46 : virtual bool IsLess(const DBEntry &rhs) const; 47 : virtual bool DBEntrySandesh(Sandesh *resp, std::string &name) const; 48 : 49 : virtual bool Change(const DBRequest *req); 50 : virtual void Delete(const DBRequest *req); 51 : virtual void SetKey(const DBRequestKey *key); 52 : virtual void PostAdd(); 53 : 54 0 : virtual bool DeleteOnZeroRefCount() const { 55 0 : return false; 56 : } 57 0 : virtual void OnZeroRefCount() {}; 58 0 : uint32_t GetRefCount() const { 59 0 : return AgentRefCount<QosQueue>::GetRefCount(); 60 : } 61 : 62 0 : const boost::uuids::uuid& uuid() const {return uuid_;} 63 0 : uint32_t id() const { 64 0 : return id_; 65 : } 66 0 : void set_id(uint32_t id) { 67 0 : id_ = id; 68 0 : } 69 : 70 0 : const std::string& name() const { 71 0 : return name_; 72 : } 73 : 74 0 : uint16_t nic_queue_id() const { 75 0 : return nic_queue_id_; 76 : } 77 : 78 : private: 79 : boost::uuids::uuid uuid_; 80 : uint16_t id_; 81 : std::string name_; 82 : uint16_t nic_queue_id_; 83 : DISALLOW_COPY_AND_ASSIGN(QosQueue); 84 : }; 85 : 86 : class QosQueueTable : public AgentOperDBTable { 87 : public: 88 : static const uint32_t kInvalidIndex=0xFF; 89 : QosQueueTable(Agent *agent, DB *db, const std::string &name); 90 : virtual ~QosQueueTable(); 91 : 92 : static DBTableBase *CreateTable(Agent *agent, DB *db, 93 : const std::string &name); 94 : 95 : virtual std::unique_ptr<DBEntry> AllocEntry(const DBRequestKey *k) const; 96 : 97 0 : virtual size_t Hash(const DBEntry *entry) const {return 0;} 98 0 : virtual size_t Hash(const DBRequestKey *key) const {return 0;} 99 : 100 : virtual DBEntry *OperDBAdd(const DBRequest *req); 101 : virtual bool OperDBOnChange(DBEntry *entry, const DBRequest *req); 102 : virtual bool OperDBDelete(DBEntry *entry, const DBRequest *req); 103 : virtual bool OperDBResync(DBEntry *entry, const DBRequest *req); 104 : 105 : virtual bool IFNodeToReq(IFMapNode *node, DBRequest &req, 106 : const boost::uuids::uuid &u); 107 : virtual bool IFNodeToUuid(IFMapNode *node, boost::uuids::uuid &u); 108 : virtual bool ProcessConfig(IFMapNode *node, DBRequest &req, 109 : const boost::uuids::uuid &u); 110 : void ReleaseIndex(QosQueue *qos_queue); 111 : virtual AgentSandeshPtr GetAgentSandesh(const AgentSandeshArguments *args, 112 : const std::string &context); 113 : private: 114 : IndexVector<QosQueue *> index_table_; 115 : DISALLOW_COPY_AND_ASSIGN(QosQueueTable); 116 : }; 117 : #endif