#pragma once #include #include #include "nodes/BaseNode.h" #include "mixins/LazyLinkMixin.h" #include "mixins/FabricMixin.h" #include "links/TypedOneToManyLink.h" #include "nodes/REDNode.h" #include "Logger.h" class WREDNode : public BaseNode, virtual public LazyLinkMixin>, public FabricMixin { public: struct Config { bool grio = false; ///< Наследование буферов (GRIO) std::uint64_t limit = 0; ///< Глобальный лимит буфера, байты (необязателен) bool ecn = false; ///< Включить ECN на дисциплине bool harddrop = false; ///< Жёсткий дроп при превышении max }; ~WREDNode() { Logger::get("ConDes").dbg(std::string("--- WRED destructor called for: ") + name_); } const Config& config() const { return config_; } private: friend class FabricMixin; WREDNode(std::string&& name) : BaseNode(std::move(name), "WRED") { Logger::get("ConDes").dbg(std::string("--- WRED constructor called for: ") + name_); } WREDNode(std::string&& name, Config&& config) : BaseNode(std::move(name), "WRED"), config_(std::move(config)) { Logger::get("ConDes").dbg(std::string("--- WRED constructor called for: ") + name_); } Config config_{}; };