qosd: уточнил комментарии к параметрам узлов
This commit is contained in:
@@ -6,7 +6,8 @@
|
|||||||
#include "Logger.h"
|
#include "Logger.h"
|
||||||
|
|
||||||
/// \brief Класс сложного (составного) узла дерева.
|
/// \brief Класс сложного (составного) узла дерева.
|
||||||
/// Может содержать несколько дочерних ComplexNode или один SimpleNode.
|
/// Может содержать несколько дочерних узлов такого же типа или один узел
|
||||||
|
/// отличного типа.
|
||||||
class ComplexNode : public BaseNode,
|
class ComplexNode : public BaseNode,
|
||||||
virtual public HierarchicalLinkMixin<INode> {
|
virtual public HierarchicalLinkMixin<INode> {
|
||||||
public:
|
public:
|
||||||
|
|||||||
+16
-7
@@ -11,13 +11,22 @@ class HTBNode : public ComplexNode,
|
|||||||
public FabricMixin<HTBNode> {
|
public FabricMixin<HTBNode> {
|
||||||
public:
|
public:
|
||||||
struct Config {
|
struct Config {
|
||||||
std::uint64_t rate = 0; ///< Разрешённая полоса, бит/с
|
std::uint64_t cir = 0; ///< Разрешённая полоса, CIR, бит/с.
|
||||||
std::uint64_t burst = 0; ///< Токены для rate, байты
|
std::uint64_t cburst = 0; ///< Токены для CIR, байты.
|
||||||
std::uint64_t ceil = 0; ///< Допустимая полоса, бит/с
|
std::uint64_t pir = 0; ///< Допустимая полоса, PIR, бит/с.
|
||||||
std::uint64_t cburst = 0; ///< Токены для ceil, байты
|
std::uint64_t pburst = 0; ///< Токены для PIR, байты.
|
||||||
std::uint32_t prio = 0; ///< Приоритет класса
|
std::uint32_t prio = 0; ///< Приоритет класса.
|
||||||
std::uint32_t quantum = 0; ///< Квант DRR, байты
|
std::uint32_t quantum = 0; ///< Квант DRR, байты.
|
||||||
std::int32_t overhead = 0; ///< Поправка размера пакета, байты
|
|
||||||
|
/// \brief Поправка размера пакета, байты.
|
||||||
|
///
|
||||||
|
/// \note Вообще, этот параметр исторически взят с Linux/TC HTB.
|
||||||
|
/// И в таком контексте: речь **не** про STAB, а именно про
|
||||||
|
/// параметр класса HTB. Он, в отличие от STAB, не влияет на сам
|
||||||
|
/// размер пакета, а используется только для поправки шейпера
|
||||||
|
/// конкретно этого класса. Впрочем, в BC2 есть такая же местная
|
||||||
|
/// поправка для шейперов, см. FS 31.5.2.3 Packet Length Offset.
|
||||||
|
std::int32_t overhead = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
~HTBNode() {
|
~HTBNode() {
|
||||||
|
|||||||
+14
-10
@@ -6,20 +6,24 @@
|
|||||||
#include "Logger.h"
|
#include "Logger.h"
|
||||||
|
|
||||||
/// \brief Узел дисциплины RED. Лист; не допускает дочерних элементов.
|
/// \brief Узел дисциплины RED. Лист; не допускает дочерних элементов.
|
||||||
|
///
|
||||||
|
/// \note Может быть подключен к:
|
||||||
|
/// + WRED для настройки VQ;
|
||||||
|
/// + SFQ для настройки per-flow RED.
|
||||||
class REDNode : public LeafNode,
|
class REDNode : public LeafNode,
|
||||||
public FabricMixin<REDNode> {
|
public FabricMixin<REDNode> {
|
||||||
public:
|
public:
|
||||||
struct Config {
|
struct Config {
|
||||||
std::uint64_t limit = 0; ///< Размер буфера, байты (обязателен)
|
std::uint64_t limit = 0; ///< Размер буфера, байты (обязателен).
|
||||||
std::uint64_t min = 0; ///< Нижняя граница для разметки, байты
|
std::uint64_t min = 0; ///< Нижняя граница для разметки, байты.
|
||||||
std::uint64_t max = 0; ///< Верхняя граница для разметки, байты
|
std::uint64_t max = 0; ///< Верхняя граница для разметки, байты.
|
||||||
std::uint32_t avpkt = 0; ///< Средний размер пакета, байты (обязателен)
|
std::uint32_t avpkt = 0; ///< Средний размер пакета, байты (обязателен).
|
||||||
std::uint64_t burst = 0; ///< Всплеск, байты
|
std::uint64_t burst = 0; ///< Всплеск, байты.
|
||||||
double probability = 0.0; ///< Максимальная вероятность, 0..1
|
double probability = 0.0; ///< Максимальная вероятность, 0..1.
|
||||||
std::uint64_t bandwidth = 0; ///< Скорость интерфейса, бит/с
|
std::uint64_t bandwidth = 0; ///< Скорость интерфейса, бит/с.
|
||||||
bool ecn = false; ///< Включить ECN-разметку вместо дропа
|
bool ecn = false; ///< Включить ECN-разметку вместо дропа.
|
||||||
bool harddrop = false; ///< Жёсткий дроп при превышении max
|
bool harddrop = false; ///< Жёсткий дроп при превышении max.
|
||||||
bool nodrop = false; ///< Не дропать non-ECN-пакеты
|
bool nodrop = false; ///< Не дропать non-ECN-пакеты.
|
||||||
};
|
};
|
||||||
|
|
||||||
~REDNode() {
|
~REDNode() {
|
||||||
|
|||||||
@@ -13,15 +13,15 @@ class SFQNode : public BaseNode,
|
|||||||
virtual public LazyLinkMixin<TypedOneToOneLink<INode, REDNode>>,
|
virtual public LazyLinkMixin<TypedOneToOneLink<INode, REDNode>>,
|
||||||
public FabricMixin<SFQNode> {
|
public FabricMixin<SFQNode> {
|
||||||
public:
|
public:
|
||||||
|
/// \note Параметры RED per-flow задаются через дочерний REDNode.
|
||||||
struct Config {
|
struct Config {
|
||||||
std::uint32_t limit = 0; ///< Суммарный лимит по всем потокам, пакеты
|
std::uint32_t limit = 0; ///< Суммарный лимит по всем потокам, пакеты
|
||||||
std::uint32_t depth = 0; ///< Лимит на один поток, пакеты
|
std::uint32_t depth = 0; ///< Лимит на один поток, пакеты
|
||||||
std::uint32_t divisor = 1024; ///< Размер хэш-таблицы (степень двойки)
|
std::uint32_t divisor = 1024; ///< Размер хэш-таблицы (степень двойки)
|
||||||
std::uint32_t perturb = 0; ///< Период пертурбации, секунды
|
std::uint32_t perturb = 0; ///< Период пертурбации, секунды
|
||||||
std::uint32_t flows = 0; ///< Число потоков
|
std::uint32_t flows = 0; ///< Число потоков
|
||||||
std::uint32_t quantum = 0; ///< Порция RR, байты
|
std::uint32_t quantum = 0; ///< Порция RR, байты
|
||||||
bool headdrop = false; ///< Отбрасывать из головы очереди
|
bool headdrop = false; ///< Отбрасывать из головы очереди
|
||||||
/// Параметры RED per-flow задаются через дочерний REDNode.
|
|
||||||
};
|
};
|
||||||
|
|
||||||
~SFQNode() {
|
~SFQNode() {
|
||||||
|
|||||||
Reference in New Issue
Block a user