Line data Source code
1 : /* 2 : * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved. 3 : * Copyright Contributors to the OpenSDN project 4 : */ 5 : 6 : #ifndef vnsw_agent_vxlan_ksync_h 7 : #define vnsw_agent_vxlan_ksync_h 8 : 9 : #include <boost/asio.hpp> 10 : #include <boost/bind/bind.hpp> 11 : 12 : #include <db/db_entry.h> 13 : #include <db/db_table.h> 14 : #include <db/db_table_partition.h> 15 : #include <ksync/ksync_entry.h> 16 : #include <ksync/ksync_object.h> 17 : #include <ksync/ksync_netlink.h> 18 : #include "oper/nexthop.h" 19 : #include "oper/vxlan.h" 20 : #include "vrouter/ksync/agent_ksync_types.h" 21 : 22 : using namespace boost::placeholders; 23 : 24 : class VxLanKSyncObject; 25 : 26 : class VxLanIdKSyncEntry : public KSyncNetlinkDBEntry { 27 : public: 28 : VxLanIdKSyncEntry(VxLanKSyncObject *obj, const VxLanIdKSyncEntry *entry, 29 : uint32_t index); 30 : VxLanIdKSyncEntry(VxLanKSyncObject *obj, const VxLanId *label); 31 : virtual ~VxLanIdKSyncEntry(); 32 : 33 737 : NHKSyncEntry *nh() const { 34 737 : return static_cast<NHKSyncEntry *>(nh_.get()); 35 : } 36 : KSyncDBObject *GetObject() const; 37 : 38 : virtual bool IsLess(const KSyncEntry &rhs) const; 39 : virtual std::string ToString() const; 40 : virtual KSyncEntry *UnresolvedReference(); 41 : virtual bool Sync(DBEntry *e); 42 : virtual int AddMsg(char *buf, int buf_len); 43 : virtual int ChangeMsg(char *buf, int buf_len); 44 : virtual int DeleteMsg(char *buf, int buf_len); 45 : void FillObjectLog(sandesh_op::type op, KSyncVxLanInfo &info) const; 46 : private: 47 : int Encode(sandesh_op::type op, char *buf, int buf_len); 48 : VxLanKSyncObject *ksync_obj_; 49 : uint32_t label_; 50 : KSyncEntryPtr nh_; 51 : DISALLOW_COPY_AND_ASSIGN(VxLanIdKSyncEntry); 52 : }; 53 : 54 : class VxLanKSyncObject : public KSyncDBObject { 55 : public: 56 : static const int kVxLanIndexCount = 10000; 57 : VxLanKSyncObject(KSync *ksync); 58 : virtual ~VxLanKSyncObject(); 59 67 : KSync *ksync() const { return ksync_; } 60 : virtual KSyncEntry *Alloc(const KSyncEntry *entry, uint32_t index); 61 : virtual KSyncEntry *DBToKSyncEntry(const DBEntry *e); 62 : void RegisterDBClients(); 63 : private: 64 : KSync *ksync_; 65 : DISALLOW_COPY_AND_ASSIGN(VxLanKSyncObject); 66 : }; 67 : 68 : #endif // vnsw_agent_vxlan_ksync_h