syncd/SaiSwitchInterface.h (65 lines of code) (raw):

#pragma once extern "C" { #include "sai.h" #include "saimetadata.h" } #include <set> #include <unordered_map> #include <map> namespace syncd { class SaiSwitchInterface { private: SaiSwitchInterface(const SaiSwitchInterface&); SaiSwitchInterface& operator=(const SaiSwitchInterface&); public: SaiSwitchInterface( _In_ sai_object_id_t switchVid, _In_ sai_object_id_t switchRid); virtual ~SaiSwitchInterface() = default; public: sai_object_id_t getVid() const; sai_object_id_t getRid() const; public: virtual std::unordered_map<sai_object_id_t, sai_object_id_t> getVidToRidMap() const = 0; virtual std::unordered_map<sai_object_id_t, sai_object_id_t> getRidToVidMap() const = 0; virtual bool isDiscoveredRid( _In_ sai_object_id_t rid) const = 0; virtual bool isColdBootDiscoveredRid( _In_ sai_object_id_t rid) const = 0; virtual bool isSwitchObjectDefaultRid( _In_ sai_object_id_t rid) const = 0; virtual bool isNonRemovableRid( _In_ sai_object_id_t rid) const = 0; virtual std::set<sai_object_id_t> getDiscoveredRids() const = 0; /** * @brief Gets default object based on switch attribute. * * NOTE: This method will throw exception if invalid attribute is * specified, since attribute queried by this method are explicitly * declared in SaiSwitch constructor. * * @param attr_id Switch attribute to query. * * @return Valid RID or specified switch attribute received from * switch. This value can be also SAI_NULL_OBJECT_ID if switch don't * support this attribute. */ virtual sai_object_id_t getSwitchDefaultAttrOid( _In_ sai_attr_id_t attr_id) const; virtual void removeExistingObject( _In_ sai_object_id_t rid) = 0; virtual void removeExistingObjectReference( _In_ sai_object_id_t rid) = 0; virtual void getDefaultMacAddress( _Out_ sai_mac_t& mac) const = 0; virtual sai_object_id_t getDefaultValueForOidAttr( _In_ sai_object_id_t rid, _In_ sai_attr_id_t attr_id) = 0; virtual std::set<sai_object_id_t> getColdBootDiscoveredVids() const = 0; virtual std::set<sai_object_id_t> getWarmBootDiscoveredVids() const = 0; virtual std::set<sai_object_id_t> getWarmBootNewDiscoveredVids(); virtual void onPostPortCreate( _In_ sai_object_id_t port_rid, _In_ sai_object_id_t port_vid) = 0; virtual void postPortRemove( _In_ sai_object_id_t portRid) = 0; virtual void collectPortRelatedObjects( _In_ sai_object_id_t portRid) = 0; protected: /** * @brief Switch virtual ID assigned by syncd. */ sai_object_id_t m_switch_vid; /** * @brief Switch real ID assigned by SAI SDK. */ sai_object_id_t m_switch_rid; /** * @brief Map of default RIDs retrieved from Switch object. * * It will contain RIDs like CPU port, default virtual router, default * trap group. etc. Those objects here should be considered non * removable. */ std::map<sai_attr_id_t,sai_object_id_t> m_default_rid_map; std::set<sai_object_id_t> m_coldBootDiscoveredVids; std::set<sai_object_id_t> m_warmBootDiscoveredVids; std::set<sai_object_id_t> m_warmBootNewDiscoveredVids; }; }