e2290e1b7a
Мне показалось, будет удобно использовать вложенную структуру в качестве аргумента конструктора.
52 lines
2.1 KiB
C++
52 lines
2.1 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 cir = 0; ///< Разрешённая полоса, CIR, бит/с.
|
|
std::uint64_t cburst = 0; ///< Токены для CIR, байты.
|
|
std::uint64_t pir = 0; ///< Допустимая полоса, PIR, бит/с.
|
|
std::uint64_t pburst = 0; ///< Токены для PIR, байты.
|
|
std::uint32_t prio = 0; ///< Приоритет класса.
|
|
std::uint32_t quantum = 0; ///< Квант DRR, байты.
|
|
|
|
/// \brief Поправка размера пакета, байты.
|
|
///
|
|
/// \note Вообще, этот параметр исторически взят с Linux/TC HTB.
|
|
/// И в таком контексте: речь **не** про STAB, а именно про
|
|
/// параметр класса HTB. Он, в отличие от STAB, не влияет на сам
|
|
/// размер пакета, а используется только для поправки шейпера
|
|
/// конкретно этого класса. Впрочем, в BC2 есть такая же местная
|
|
/// поправка для шейперов, см. FS 31.5.2.3 Packet Length Offset.
|
|
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_{};
|
|
};
|
|
|
|
|