b6ff5b79f9
Теперь конкретные узлы не сами устанавливают себе `kind_`, а делают это через `BaseNode` — единую точку входа.
45 lines
1.6 KiB
C++
45 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <string>
|
|
#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<TypedOneToManyLink<INode, REDNode>>,
|
|
public FabricMixin<WREDNode> {
|
|
public:
|
|
struct Config {
|
|
std::uint32_t vqs = 0; ///< Количество виртуальных очередей (обязателен)
|
|
std::uint32_t def = 0; ///< Виртуальная очередь по умолчанию
|
|
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>;
|
|
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_{};
|
|
};
|
|
|
|
|