Files
poc-links/include/nodes/HTBNode.h
T
Сергей Маринкевич b6ff5b79f9 qosd: прокинут kind до BaseNode
Теперь конкретные узлы не сами устанавливают себе `kind_`, а делают это
через `BaseNode` — единую точку входа.
2025-10-08 18:51:16 +07:00

43 lines
1.5 KiB
C++

#pragma once
#include <cstdint>
#include <string>
#include "nodes/ComplexNode.h"
#include "mixins/FabricMixin.h"
#include "Logger.h"
/// \brief Узел дисциплины HTB. Составной, допускает нескольких детей.
class HTBNode : public ComplexNode,
public FabricMixin<HTBNode> {
public:
struct Config {
std::uint64_t rate = 0; ///< Разрешённая полоса, бит/с
std::uint64_t burst = 0; ///< Токены для rate, байты
std::uint64_t ceil = 0; ///< Допустимая полоса, бит/с
std::uint64_t cburst = 0; ///< Токены для ceil, байты
std::uint32_t prio = 0; ///< Приоритет класса
std::uint32_t quantum = 0; ///< Квант DRR, байты
std::int32_t overhead = 0; ///< Поправка размера пакета, байты
};
~HTBNode() {
Logger::get("ConDes").dbg(std::string("--- HTB destructor called for: ") + name_);
}
const Config& config() const { return config_; }
private:
friend class FabricMixin<HTBNode>;
HTBNode(std::string&& name) : ComplexNode(std::move(name), "HTB") {
Logger::get("ConDes").dbg(std::string("--- HTB constructor called for: ") + name_);
}
HTBNode(std::string&& name, Config&& config) : ComplexNode(std::move(name), "HTB"),
config_(std::move(config)) {
Logger::get("ConDes").dbg(std::string("--- HTB constructor called for: ") + name_);
}
Config config_{};
};