qosd: уточнил комментарии к параметрам узлов

This commit is contained in:
Сергей Маринкевич
2025-10-08 17:43:29 +07:00
parent b6ff5b79f9
commit d3269cadd8
4 changed files with 40 additions and 26 deletions
+2 -1
View File
@@ -6,7 +6,8 @@
#include "Logger.h"
/// \brief Класс сложного (составного) узла дерева.
/// Может содержать несколько дочерних ComplexNode или один SimpleNode.
/// Может содержать несколько дочерних узлов такого же типа или один узел
/// отличного типа.
class ComplexNode : public BaseNode,
virtual public HierarchicalLinkMixin<INode> {
public:
+16 -7
View File
@@ -11,13 +11,22 @@ 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; ///< Поправка размера пакета, байты
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() {
+14 -10
View File
@@ -6,20 +6,24 @@
#include "Logger.h"
/// \brief Узел дисциплины RED. Лист; не допускает дочерних элементов.
///
/// \note Может быть подключен к:
/// + WRED для настройки VQ;
/// + SFQ для настройки per-flow 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-пакеты
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() {
+1 -1
View File
@@ -13,6 +13,7 @@ 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; ///< Лимит на один поток, пакеты
@@ -21,7 +22,6 @@ public:
std::uint32_t flows = 0; ///< Число потоков
std::uint32_t quantum = 0; ///< Порция RR, байты
bool headdrop = false; ///< Отбрасывать из головы очереди
/// Параметры RED per-flow задаются через дочерний REDNode.
};
~SFQNode() {