Files
poc-links/include/nodes/REDNode.h
T
Сергей Маринкевич 9b5996abb5 qosd: добавлены атрибуты узлов
Мне показалось, будет удобно использовать вложенную структуру в качестве
аргумента конструктора.
2025-10-08 18:51:16 +07:00

46 lines
1.8 KiB
C++

#pragma once
#include <cstdint>
#include "nodes/LeafNode.h"
#include "mixins/FabricMixin.h"
#include "Logger.h"
/// \brief Узел дисциплины RED. Лист; не допускает дочерних элементов.
class REDNode : public LeafNode,
public FabricMixin<REDNode> {
public:
struct Config {
std::uint64_t limit = 0; ///< Размер буфера, байты (обязателен)
std::uint64_t min = 0; ///< Нижняя граница для разметки, байты
std::uint64_t max = 0; ///< Верхняя граница для разметки, байты
std::uint32_t avpkt = 0; ///< Средний размер пакета, байты (обязателен)
std::uint64_t burst = 0; ///< Всплеск, байты
double probability = 0.0; ///< Максимальная вероятность, 0..1
std::uint64_t bandwidth = 0; ///< Скорость интерфейса, бит/с
bool ecn = false; ///< Включить ECN-разметку вместо дропа
bool harddrop = false; ///< Жёсткий дроп при превышении max
bool nodrop = false; ///< Не дропать non-ECN-пакеты
};
~REDNode() {
Logger::get("ConDes").dbg(std::string("--- RED destructor called for: ") + name_);
}
const Config& config() const { return config_; }
private:
friend class FabricMixin<REDNode>;
REDNode(std::string&& name)
: LeafNode(std::move(name), "RED") {
Logger::get("ConDes").dbg(std::string("--- RED constructor called for: ") + name_);
}
REDNode(std::string&& name, Config&& config)
: LeafNode(std::move(name), "RED"), config_(std::move(config)) {
Logger::get("ConDes").dbg(std::string("--- RED constructor called for: ") + name_);
}
Config config_{};
};