Files
poc-links/include/nodes/SFQNode.h
T
Сергей Маринкевич 43b44d7ee5 qosd: добавлены атрибуты узлов
Мне показалось, будет удобно использовать вложенную структуру в качестве
аргумента конструктора.
2025-10-08 19:02:03 +07:00

49 lines
1.8 KiB
C++

#pragma once
#include <cstdint>
#include "nodes/BaseNode.h"
#include "mixins/LazyLinkMixin.h"
#include "mixins/FabricMixin.h"
#include "links/TypedOneToOneLink.h"
#include "nodes/REDNode.h"
#include "Logger.h"
/// \brief Узел дисциплины SFQ. Допускает одного ребёнка типа REDNode для настройки per-flow RED.
class SFQNode : public BaseNode,
virtual public LazyLinkMixin<TypedOneToOneLink<INode, REDNode>>,
public FabricMixin<SFQNode> {
public:
/// \note Параметры RED per-flow задаются через дочерний REDNode.
struct Config {
std::uint32_t limit = 0; ///< Суммарный лимит по всем потокам, пакеты
std::uint32_t depth = 0; ///< Лимит на один поток, пакеты
std::uint32_t divisor = 1024; ///< Размер хэш-таблицы (степень двойки)
std::uint32_t perturb = 0; ///< Период пертурбации, секунды
std::uint32_t flows = 0; ///< Число потоков
std::uint32_t quantum = 0; ///< Порция RR, байты
bool headdrop = false; ///< Отбрасывать из головы очереди
};
~SFQNode() {
Logger::get("ConDes").dbg(std::string("--- SFQ destructor called for: ") + name_);
}
const Config& config() const { return config_; }
private:
friend class FabricMixin<SFQNode>;
SFQNode(std::string&& name) : BaseNode(std::move(name)) {
kind_ = "SFQ";
Logger::get("ConDes").dbg(std::string("--- SFQ constructor called for: ") + name_);
}
SFQNode(std::string&& name, Config&& config)
: BaseNode(std::move(name)), config_(std::move(config)) {
kind_ = "SFQ";
Logger::get("ConDes").dbg(std::string("--- SFQ constructor called for: ") + name_);
}
Config config_{};
};