Merge pull request #14767 from yuwata/network-split-qdisc-section
network: split TrafficControlQueueingDiscipline section into small pieces
This commit is contained in:
commit
f2f1b52c6f
4
NEWS
4
NEWS
|
@ -125,10 +125,10 @@ CHANGES WITH 245 in spe:
|
||||||
marking a process so that it is killed implicitly whenever the event
|
marking a process so that it is killed implicitly whenever the event
|
||||||
source watching it is freed).
|
source watching it is freed).
|
||||||
|
|
||||||
* systemd-networkd gained support for configuring Token Buffer Filter
|
* systemd-networkd gained support for configuring Token Bucket Filter
|
||||||
(TBF) parameters in its qdisc configuration support. Similar, support
|
(TBF) parameters in its qdisc configuration support. Similar, support
|
||||||
for Stochastic Fairness Queuing (SFQ), Controlled-Delay Active
|
for Stochastic Fairness Queuing (SFQ), Controlled-Delay Active
|
||||||
Queue Management (CoDel), Fair Queue (FQ) has been added.
|
Queue Management (CoDel), Fair Queueing (FQ) has been added.
|
||||||
|
|
||||||
* systemd-networkd gained support for Intermediate Functional Block
|
* systemd-networkd gained support for Intermediate Functional Block
|
||||||
(IFB) network devices.
|
(IFB) network devices.
|
||||||
|
|
|
@ -2262,10 +2262,11 @@
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
<title>[TrafficControlQueueingDiscipline] Section Options</title>
|
<title>[NetworkEmulator] Section Options</title>
|
||||||
<para>The <literal>[TrafficControlQueueingDiscipline]</literal> section manages the Traffic control. It can be used
|
<para>The <literal>[NetworkEmulator]</literal> section manages the queueing discipline (qdisc) of
|
||||||
to configure the kernel packet scheduler and simulate packet delay and loss for UDP or TCP applications,
|
the network emulator. It can be used to configure the kernel packet scheduler and simulate packet
|
||||||
or limit the bandwidth usage of a particular service to simulate internet connections.</para>
|
delay and loss for UDP or TCP applications, or limit the bandwidth usage of a particular service to
|
||||||
|
simulate internet connections.</para>
|
||||||
|
|
||||||
<variablelist class='network-directives'>
|
<variablelist class='network-directives'>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
|
@ -2277,7 +2278,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>NetworkEmulatorDelaySec=</varname></term>
|
<term><varname>DelaySec=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies the fixed amount of delay to be added to all packets going out of the
|
<para>Specifies the fixed amount of delay to be added to all packets going out of the
|
||||||
interface. Defaults to unset.</para>
|
interface. Defaults to unset.</para>
|
||||||
|
@ -2285,7 +2286,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>NetworkEmulatorDelayJitterSec=</varname></term>
|
<term><varname>DelayJitterSec=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies the chosen delay to be added to the packets outgoing to the network
|
<para>Specifies the chosen delay to be added to the packets outgoing to the network
|
||||||
interface. Defaults to unset.</para>
|
interface. Defaults to unset.</para>
|
||||||
|
@ -2293,7 +2294,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>NetworkEmulatorPacketLimit=</varname></term>
|
<term><varname>PacketLimit=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies the maximum number of packets the qdisc may hold queued at a time.
|
<para>Specifies the maximum number of packets the qdisc may hold queued at a time.
|
||||||
An unsigned integer ranges 0 to 4294967294. Defaults to 1000.</para>
|
An unsigned integer ranges 0 to 4294967294. Defaults to 1000.</para>
|
||||||
|
@ -2301,7 +2302,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>NetworkEmulatorLossRate=</varname></term>
|
<term><varname>LossRate=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies an independent loss probability to be added to the packets outgoing from the
|
<para>Specifies an independent loss probability to be added to the packets outgoing from the
|
||||||
network interface. Takes a percentage value, suffixed with "%". Defaults to unset.</para>
|
network interface. Takes a percentage value, suffixed with "%". Defaults to unset.</para>
|
||||||
|
@ -2309,23 +2310,39 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>NetworkEmulatorDuplicateRate=</varname></term>
|
<term><varname>DuplicateRate=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies that the chosen percent of packets is duplicated before queuing them.
|
<para>Specifies that the chosen percent of packets is duplicated before queuing them.
|
||||||
Takes a percentage value, suffixed with "%". Defaults to unset.</para>
|
Takes a percentage value, suffixed with "%". Defaults to unset.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>[TokenBucketFilter] Section Options</title>
|
||||||
|
<para>The <literal>[TokenBucketFilter]</literal> section manages the queueing discipline (qdisc) of
|
||||||
|
token bucket filter (tbf).</para>
|
||||||
|
|
||||||
|
<variablelist class='network-directives'>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>TokenBufferFilterLatencySec=</varname></term>
|
<term><varname>Parent=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies the latency parameter, which specifies the maximum amount of time a
|
<para>Specifies the parent Queueing Discipline (qdisc). Takes one of <literal>root</literal>,
|
||||||
packet can sit in the Token Buffer Filter (TBF). Defaults to unset.</para>
|
<literal>clsact</literal> or <literal>ingress</literal>. Defaults to <literal>root</literal>.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>TokenBufferFilterLimitSize=</varname></term>
|
<term><varname>LatencySec=</varname></term>
|
||||||
|
<listitem>
|
||||||
|
<para>Specifies the latency parameter, which specifies the maximum amount of time a
|
||||||
|
packet can sit in the Token Bucket Filter (TBF). Defaults to unset.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><varname>LimitSize=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Takes the number of bytes that can be queued waiting for tokens to become available.
|
<para>Takes the number of bytes that can be queued waiting for tokens to become available.
|
||||||
When the size is suffixed with K, M, or G, it is parsed as Kilobytes, Megabytes, or Gigabytes,
|
When the size is suffixed with K, M, or G, it is parsed as Kilobytes, Megabytes, or Gigabytes,
|
||||||
|
@ -2334,7 +2351,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>TokenBufferFilterBurst=</varname></term>
|
<term><varname>Burst=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies the size of the bucket. This is the maximum amount of bytes that tokens
|
<para>Specifies the size of the bucket. This is the maximum amount of bytes that tokens
|
||||||
can be available for instantaneous transfer. When the size is suffixed with K, M, or G, it is
|
can be available for instantaneous transfer. When the size is suffixed with K, M, or G, it is
|
||||||
|
@ -2344,7 +2361,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>TokenBufferFilterRate=</varname></term>
|
<term><varname>Rate=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies the device specific bandwidth. When suffixed with K, M, or G, the specified
|
<para>Specifies the device specific bandwidth. When suffixed with K, M, or G, the specified
|
||||||
bandwidth is parsed as Kilobits, Megabits, or Gigabits, respectively, to the base of 1000.
|
bandwidth is parsed as Kilobits, Megabits, or Gigabits, respectively, to the base of 1000.
|
||||||
|
@ -2353,7 +2370,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>TokenBufferFilterMPUBytes=</varname></term>
|
<term><varname>MPUBytes=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>The Minimum Packet Unit (MPU) determines the minimal token usage (specified in bytes)
|
<para>The Minimum Packet Unit (MPU) determines the minimal token usage (specified in bytes)
|
||||||
for a packet. When suffixed with K, M, or G, the specified size is parsed as Kilobytes,
|
for a packet. When suffixed with K, M, or G, the specified size is parsed as Kilobytes,
|
||||||
|
@ -2362,7 +2379,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>TokenBufferFilterPeakRate=</varname></term>
|
<term><varname>PeakRate=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Takes the maximum depletion rate of the bucket. When suffixed with K, M, or G, the
|
<para>Takes the maximum depletion rate of the bucket. When suffixed with K, M, or G, the
|
||||||
specified size is parsed as Kilobits, Megabits, or Gigabits, respectively, to the base of
|
specified size is parsed as Kilobits, Megabits, or Gigabits, respectively, to the base of
|
||||||
|
@ -2371,23 +2388,55 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>TokenBufferFilterMTUBytes=</varname></term>
|
<term><varname>MTUBytes=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies the size of the peakrate bucket. When suffixed with K, M, or G, the specified
|
<para>Specifies the size of the peakrate bucket. When suffixed with K, M, or G, the specified
|
||||||
size is parsed as Kilobytes, Megabytes, or Gigabytes, respectively, to the base of 1000.
|
size is parsed as Kilobytes, Megabytes, or Gigabytes, respectively, to the base of 1000.
|
||||||
Defaults to unset.</para>
|
Defaults to unset.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>[StochasticFairnessQueueing] Section Options</title>
|
||||||
|
<para>The <literal>[StochasticFairnessQueueing]</literal> section manages the queueing discipline
|
||||||
|
(qdisc) of stochastic fairness queueing (sfq).</para>
|
||||||
|
|
||||||
|
<variablelist class='network-directives'>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>StochasticFairnessQueueingPerturbPeriodSec=</varname></term>
|
<term><varname>Parent=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies the interval in seconds for queue algorithm perturbation. Defaults to unset.</para>
|
<para>Specifies the parent Queueing Discipline (qdisc). Takes one of <literal>root</literal>,
|
||||||
|
<literal>clsact</literal> or <literal>ingress</literal>. Defaults to <literal>root</literal>.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>ControlledDelayPacketLimit=</varname></term>
|
<term><varname>PerturbPeriodSec=</varname></term>
|
||||||
|
<listitem>
|
||||||
|
<para>Specifies the interval in seconds for queue algorithm perturbation. Defaults to unset.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>[ControlledDelay] Section Options</title>
|
||||||
|
<para>The <literal>[ControlledDelay]</literal> section manages the queueing discipline (qdisc) of
|
||||||
|
controlled delay (CoDel).</para>
|
||||||
|
|
||||||
|
<variablelist class='network-directives'>
|
||||||
|
<varlistentry>
|
||||||
|
<term><varname>Parent=</varname></term>
|
||||||
|
<listitem>
|
||||||
|
<para>Specifies the parent Queueing Discipline (qdisc). Takes one of <literal>root</literal>,
|
||||||
|
<literal>clsact</literal> or <literal>ingress</literal>. Defaults to <literal>root</literal>.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><varname>PacketLimit=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies the hard lmit on the queue size in number of packets. When this limit is reached, incoming packets are
|
<para>Specifies the hard lmit on the queue size in number of packets. When this limit is reached, incoming packets are
|
||||||
dropped. An unsigned integer ranges 0 to 4294967294. Defaults to unset and kernel's default is used.</para>
|
dropped. An unsigned integer ranges 0 to 4294967294. Defaults to unset and kernel's default is used.</para>
|
||||||
|
@ -2395,7 +2444,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>ControlledDelayTargetSec=</varname></term>
|
<term><varname>TargetSec=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Takes a timespan. Specifies the acceptable minimum standing/persistent queue delay.
|
<para>Takes a timespan. Specifies the acceptable minimum standing/persistent queue delay.
|
||||||
Defaults to unset and kernel's default is used.</para>
|
Defaults to unset and kernel's default is used.</para>
|
||||||
|
@ -2403,7 +2452,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>ControlledDelayIntervalSec=</varname></term>
|
<term><varname>IntervalSec=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Takes a timespan. This is used to ensure that the measured minimum delay does not
|
<para>Takes a timespan. This is used to ensure that the measured minimum delay does not
|
||||||
become too stale. Defaults to unset and kernel's default is used.</para>
|
become too stale. Defaults to unset and kernel's default is used.</para>
|
||||||
|
@ -2411,7 +2460,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>ControlledDelayECN=</varname></term>
|
<term><varname>ECN=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Takes a boolean. This can be used to mark packets instead of dropping them. Defaults to
|
<para>Takes a boolean. This can be used to mark packets instead of dropping them. Defaults to
|
||||||
unset and kernel's default is used.</para>
|
unset and kernel's default is used.</para>
|
||||||
|
@ -2419,15 +2468,31 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>ControlledDelayCEThresholdSec=</varname></term>
|
<term><varname>CEThresholdSec=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Takes a timespan. This sets a threshold above which all packets are marked with ECN
|
<para>Takes a timespan. This sets a threshold above which all packets are marked with ECN
|
||||||
Congestion Experienced (CE). Defaults to unset and kernel's default is used.</para>
|
Congestion Experienced (CE). Defaults to unset and kernel's default is used.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>[FairQueueingControlledDelay] Section Options</title>
|
||||||
|
<para>The <literal>[FairQueueingControlledDelay]</literal> section manages the queueing discipline
|
||||||
|
(qdisc) of fair queuing controlled delay (FQ-CoDel).</para>
|
||||||
|
|
||||||
|
<variablelist class='network-directives'>
|
||||||
|
<varlistentry>
|
||||||
|
<term><varname>Parent=</varname></term>
|
||||||
|
<listitem>
|
||||||
|
<para>Specifies the parent Queueing Discipline (qdisc). Takes one of <literal>root</literal>,
|
||||||
|
<literal>clsact</literal> or <literal>ingress</literal>. Defaults to <literal>root</literal>.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>FairQueuingControlledDelayPacketLimit=</varname></term>
|
<term><varname>PacketLimit=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies the hard limit on the real queue size. When this limit is reached, incoming packets are
|
<para>Specifies the hard limit on the real queue size. When this limit is reached, incoming packets are
|
||||||
dropped. Defaults to unset and kernel's default is used.</para>
|
dropped. Defaults to unset and kernel's default is used.</para>
|
||||||
|
@ -2435,7 +2500,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>FairQueuingControlledDelayMemoryLimit=</varname></term>
|
<term><varname>MemoryLimit=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies the limit on the total number of bytes that can be queued in this FQ-CoDel instance.
|
<para>Specifies the limit on the total number of bytes that can be queued in this FQ-CoDel instance.
|
||||||
When suffixed with K, M, or G, the specified size is parsed as Kilobytes, Megabytes, or Gigabytes,
|
When suffixed with K, M, or G, the specified size is parsed as Kilobytes, Megabytes, or Gigabytes,
|
||||||
|
@ -2444,7 +2509,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>FairQueuingControlledDelayFlows=</varname></term>
|
<term><varname>Flows=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies the number of flows into which the incoming packets are classified.
|
<para>Specifies the number of flows into which the incoming packets are classified.
|
||||||
Defaults to unset and kernel's default is used.</para>
|
Defaults to unset and kernel's default is used.</para>
|
||||||
|
@ -2452,7 +2517,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>FairQueuingControlledDelayTargetSec=</varname></term>
|
<term><varname>TargetSec=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Takes a timespan. Specifies the acceptable minimum standing/persistent queue delay.
|
<para>Takes a timespan. Specifies the acceptable minimum standing/persistent queue delay.
|
||||||
Defaults to unset and kernel's default is used.</para>
|
Defaults to unset and kernel's default is used.</para>
|
||||||
|
@ -2460,7 +2525,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>FairQueuingControlledDelayIntervalSec=</varname></term>
|
<term><varname>IntervalSec=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Takes a timespan. This is used to ensure that the measured minimum delay does not
|
<para>Takes a timespan. This is used to ensure that the measured minimum delay does not
|
||||||
become too stale. Defaults to unset and kernel's default is used.</para>
|
become too stale. Defaults to unset and kernel's default is used.</para>
|
||||||
|
@ -2468,7 +2533,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>FairQueuingControlledDelayQuantum=</varname></term>
|
<term><varname>Quantum=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies the number of bytes used as 'deficit' in the fair queuing algorithmtimespan.
|
<para>Specifies the number of bytes used as 'deficit' in the fair queuing algorithmtimespan.
|
||||||
When suffixed with K, M, or G, the specified size is parsed as Kilobytes, Megabytes, or Gigabytes,
|
When suffixed with K, M, or G, the specified size is parsed as Kilobytes, Megabytes, or Gigabytes,
|
||||||
|
@ -2477,7 +2542,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>FairQueuingControlledDelayECN=</varname></term>
|
<term><varname>ECN=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Takes a boolean. This can be used to mark packets instead of dropping them. Defaults to
|
<para>Takes a boolean. This can be used to mark packets instead of dropping them. Defaults to
|
||||||
unset and kernel's default is used.</para>
|
unset and kernel's default is used.</para>
|
||||||
|
@ -2485,15 +2550,31 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>FairQueuingControlledDelayCEThresholdSec=</varname></term>
|
<term><varname>CEThresholdSec=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Takes a timespan. This sets a threshold above which all packets are marked with ECN
|
<para>Takes a timespan. This sets a threshold above which all packets are marked with ECN
|
||||||
Congestion Experienced (CE). Defaults to unset and kernel's default is used.</para>
|
Congestion Experienced (CE). Defaults to unset and kernel's default is used.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>[FairQueueing] Section Options</title>
|
||||||
|
<para>The <literal>[FairQueueing]</literal> section manages the queueing discipline
|
||||||
|
(qdisc) of fair queue traffic policing (FQ).</para>
|
||||||
|
|
||||||
|
<variablelist class='network-directives'>
|
||||||
|
<varlistentry>
|
||||||
|
<term><varname>Parent=</varname></term>
|
||||||
|
<listitem>
|
||||||
|
<para>Specifies the parent Queueing Discipline (qdisc). Takes one of <literal>root</literal>,
|
||||||
|
<literal>clsact</literal> or <literal>ingress</literal>. Defaults to <literal>root</literal>.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>FairQueueTrafficPolicingPacketLimit=</varname></term>
|
<term><varname>PacketLimit=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies the hard limit on the real queue size. When this limit is reached, incoming packets are
|
<para>Specifies the hard limit on the real queue size. When this limit is reached, incoming packets are
|
||||||
dropped. Defaults to unset and kernel's default is used.</para>
|
dropped. Defaults to unset and kernel's default is used.</para>
|
||||||
|
@ -2501,7 +2582,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>FairQueueTrafficPolicingFlowLimit=</varname></term>
|
<term><varname>FlowLimit=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies the hard limit on the maximum number of packets queued per flow. Defaults to
|
<para>Specifies the hard limit on the maximum number of packets queued per flow. Defaults to
|
||||||
unset and kernel's default is used.</para>
|
unset and kernel's default is used.</para>
|
||||||
|
@ -2509,7 +2590,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>FairQueueTrafficPolicingQuantum=</varname></term>
|
<term><varname>Quantum=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies the credit per dequeue RR round, i.e. the amount of bytes a flow is allowed
|
<para>Specifies the credit per dequeue RR round, i.e. the amount of bytes a flow is allowed
|
||||||
to dequeue at once. When suffixed with K, M, or G, the specified size is parsed as Kilobytes,
|
to dequeue at once. When suffixed with K, M, or G, the specified size is parsed as Kilobytes,
|
||||||
|
@ -2519,7 +2600,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>FairQueueTrafficPolicingInitialQuantum=</varname></term>
|
<term><varname>InitialQuantum=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies the initial sending rate credit, i.e. the amount of bytes a new flow is
|
<para>Specifies the initial sending rate credit, i.e. the amount of bytes a new flow is
|
||||||
allowed to dequeue initially. When suffixed with K, M, or G, the specified size is parsed as
|
allowed to dequeue initially. When suffixed with K, M, or G, the specified size is parsed as
|
||||||
|
@ -2529,7 +2610,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>FairQueueTrafficPolicingMaximumRate=</varname></term>
|
<term><varname>MaximumRate=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies the maximum sending rate of a flow. When suffixed with K, M, or G, the
|
<para>Specifies the maximum sending rate of a flow. When suffixed with K, M, or G, the
|
||||||
specified size is parsed as Kilobits, Megabits, or Gigabits, respectively, to the base of
|
specified size is parsed as Kilobits, Megabits, or Gigabits, respectively, to the base of
|
||||||
|
@ -2538,7 +2619,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>FairQueueTrafficPolicingBuckets=</varname></term>
|
<term><varname>Buckets=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Specifies the size of the hash table used for flow lookups. Defaults to unset and
|
<para>Specifies the size of the hash table used for flow lookups. Defaults to unset and
|
||||||
kernel's default is used.</para>
|
kernel's default is used.</para>
|
||||||
|
@ -2546,7 +2627,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>FairQueueTrafficPolicingOrphanMask=</varname></term>
|
<term><varname>OrphanMask=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Takes an unsigned integer. For packets not owned by a socket, fq is able to mask a part
|
<para>Takes an unsigned integer. For packets not owned by a socket, fq is able to mask a part
|
||||||
of hash and reduce number of buckets associated with the traffic. Defaults to unset and
|
of hash and reduce number of buckets associated with the traffic. Defaults to unset and
|
||||||
|
@ -2555,7 +2636,7 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>FairQueueTrafficPolicingPacing=</varname></term>
|
<term><varname>Pacing=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Takes a boolean, and enables or disables flow pacing. Defaults to unset and kernel's
|
<para>Takes a boolean, and enables or disables flow pacing. Defaults to unset and kernel's
|
||||||
default is used.</para>
|
default is used.</para>
|
||||||
|
@ -2563,13 +2644,12 @@
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>FairQueueTrafficPolicingCEThresholdSec=</varname></term>
|
<term><varname>CEThresholdSec=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Takes a timespan. This sets a threshold above which all packets are marked with ECN
|
<para>Takes a timespan. This sets a threshold above which all packets are marked with ECN
|
||||||
Congestion Experienced (CE). Defaults to unset and kernel's default is used.</para>
|
Congestion Experienced (CE). Defaults to unset and kernel's default is used.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
</variablelist>
|
</variablelist>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
|
|
|
@ -251,42 +251,47 @@ CAN.BitRate, config_parse_si_uint64,
|
||||||
CAN.SamplePoint, config_parse_permille, 0, offsetof(Network, can_sample_point)
|
CAN.SamplePoint, config_parse_permille, 0, offsetof(Network, can_sample_point)
|
||||||
CAN.RestartSec, config_parse_sec, 0, offsetof(Network, can_restart_us)
|
CAN.RestartSec, config_parse_sec, 0, offsetof(Network, can_restart_us)
|
||||||
CAN.TripleSampling, config_parse_tristate, 0, offsetof(Network, can_triple_sampling)
|
CAN.TripleSampling, config_parse_tristate, 0, offsetof(Network, can_triple_sampling)
|
||||||
TrafficControlQueueingDiscipline.Parent, config_parse_tc_qdiscs_parent, 0, 0
|
ControlledDelay.Parent, config_parse_qdisc_parent, QDISC_KIND_CODEL, 0
|
||||||
TrafficControlQueueingDiscipline.NetworkEmulatorDelaySec, config_parse_tc_network_emulator_delay, 0, 0
|
ControlledDelay.PacketLimit, config_parse_controlled_delay_u32, QDISC_KIND_CODEL, 0
|
||||||
TrafficControlQueueingDiscipline.NetworkEmulatorDelayJitterSec, config_parse_tc_network_emulator_delay, 0, 0
|
ControlledDelay.TargetSec, config_parse_controlled_delay_usec, QDISC_KIND_CODEL, 0
|
||||||
TrafficControlQueueingDiscipline.NetworkEmulatorLossRate, config_parse_tc_network_emulator_rate, 0, 0
|
ControlledDelay.IntervalSec, config_parse_controlled_delay_usec, QDISC_KIND_CODEL, 0
|
||||||
TrafficControlQueueingDiscipline.NetworkEmulatorDuplicateRate, config_parse_tc_network_emulator_rate, 0, 0
|
ControlledDelay.CEThresholdSec, config_parse_controlled_delay_usec, QDISC_KIND_CODEL, 0
|
||||||
TrafficControlQueueingDiscipline.NetworkEmulatorPacketLimit, config_parse_tc_network_emulator_packet_limit, 0, 0
|
ControlledDelay.ECN, config_parse_controlled_delay_bool, QDISC_KIND_CODEL, 0
|
||||||
TrafficControlQueueingDiscipline.TokenBufferFilterRate, config_parse_tc_token_buffer_filter_size, 0, 0
|
FairQueueing.Parent, config_parse_qdisc_parent, QDISC_KIND_FQ, 0
|
||||||
TrafficControlQueueingDiscipline.TokenBufferFilterBurst, config_parse_tc_token_buffer_filter_size, 0, 0
|
FairQueueing.PacketLimit, config_parse_fair_queue_traffic_policing_u32, QDISC_KIND_FQ, 0
|
||||||
TrafficControlQueueingDiscipline.TokenBufferFilterLimitSize, config_parse_tc_token_buffer_filter_size, 0, 0
|
FairQueueing.FlowLimit, config_parse_fair_queue_traffic_policing_u32, QDISC_KIND_FQ, 0
|
||||||
TrafficControlQueueingDiscipline.TokenBufferFilterMTUBytes, config_parse_tc_token_buffer_filter_size, 0, 0
|
FairQueueing.Quantum, config_parse_fair_queue_traffic_policing_size, QDISC_KIND_FQ, 0
|
||||||
TrafficControlQueueingDiscipline.TokenBufferFilterMPUBytes, config_parse_tc_token_buffer_filter_size, 0, 0
|
FairQueueing.InitialQuantum, config_parse_fair_queue_traffic_policing_size, QDISC_KIND_FQ, 0
|
||||||
TrafficControlQueueingDiscipline.TokenBufferFilterPeakRate, config_parse_tc_token_buffer_filter_size, 0, 0
|
FairQueueing.MaximumRate, config_parse_fair_queue_traffic_policing_max_rate, QDISC_KIND_FQ, 0
|
||||||
TrafficControlQueueingDiscipline.TokenBufferFilterLatencySec, config_parse_tc_token_buffer_filter_latency, 0, 0
|
FairQueueing.Buckets, config_parse_fair_queue_traffic_policing_u32, QDISC_KIND_FQ, 0
|
||||||
TrafficControlQueueingDiscipline.StochasticFairnessQueueingPerturbPeriodSec, config_parse_tc_stochastic_fairness_queueing_perturb_period, 0, 0
|
FairQueueing.OrphanMask, config_parse_fair_queue_traffic_policing_u32, QDISC_KIND_FQ, 0
|
||||||
TrafficControlQueueingDiscipline.FairQueuingControlledDelayPacketLimit, config_parse_tc_fair_queuing_controlled_delay_u32, 0, 0
|
FairQueueing.Pacing, config_parse_fair_queue_traffic_policing_bool, QDISC_KIND_FQ, 0
|
||||||
TrafficControlQueueingDiscipline.FairQueuingControlledDelayMemoryLimit, config_parse_tc_fair_queuing_controlled_delay_size, 0, 0
|
FairQueueing.CEThresholdSec, config_parse_fair_queue_traffic_policing_usec, QDISC_KIND_FQ, 0
|
||||||
TrafficControlQueueingDiscipline.FairQueuingControlledDelayFlows, config_parse_tc_fair_queuing_controlled_delay_u32, 0, 0
|
FairQueueingControlledDelay.Parent, config_parse_qdisc_parent, QDISC_KIND_FQ_CODEL, 0
|
||||||
TrafficControlQueueingDiscipline.FairQueuingControlledDelayQuantum, config_parse_tc_fair_queuing_controlled_delay_size, 0, 0
|
FairQueueingControlledDelay.PacketLimit, config_parse_fair_queueing_controlled_delay_u32, QDISC_KIND_FQ_CODEL, 0
|
||||||
TrafficControlQueueingDiscipline.FairQueuingControlledDelayTargetSec, config_parse_tc_fair_queuing_controlled_delay_usec, 0, 0
|
FairQueueingControlledDelay.MemoryLimit, config_parse_fair_queueing_controlled_delay_size, QDISC_KIND_FQ_CODEL, 0
|
||||||
TrafficControlQueueingDiscipline.FairQueuingControlledDelayIntervalSec, config_parse_tc_fair_queuing_controlled_delay_usec, 0, 0
|
FairQueueingControlledDelay.Flows, config_parse_fair_queueing_controlled_delay_u32, QDISC_KIND_FQ_CODEL, 0
|
||||||
TrafficControlQueueingDiscipline.FairQueuingControlledDelayCEThresholdSec, config_parse_tc_fair_queuing_controlled_delay_usec, 0, 0
|
FairQueueingControlledDelay.Quantum, config_parse_fair_queueing_controlled_delay_size, QDISC_KIND_FQ_CODEL, 0
|
||||||
TrafficControlQueueingDiscipline.FairQueuingControlledDelayECN, config_parse_tc_fair_queuing_controlled_delay_bool, 0, 0
|
FairQueueingControlledDelay.TargetSec, config_parse_fair_queueing_controlled_delay_usec, QDISC_KIND_FQ_CODEL, 0
|
||||||
TrafficControlQueueingDiscipline.FairQueueTrafficPolicingPacketLimit, config_parse_tc_fair_queue_traffic_policing_u32, 0, 0
|
FairQueueingControlledDelay.IntervalSec, config_parse_fair_queueing_controlled_delay_usec, QDISC_KIND_FQ_CODEL, 0
|
||||||
TrafficControlQueueingDiscipline.FairQueueTrafficPolicingFlowLimit, config_parse_tc_fair_queue_traffic_policing_u32, 0, 0
|
FairQueueingControlledDelay.CEThresholdSec, config_parse_fair_queueing_controlled_delay_usec, QDISC_KIND_FQ_CODEL, 0
|
||||||
TrafficControlQueueingDiscipline.FairQueueTrafficPolicingQuantum, config_parse_tc_fair_queue_traffic_policing_size, 0, 0
|
FairQueueingControlledDelay.ECN, config_parse_fair_queueing_controlled_delay_bool, QDISC_KIND_FQ_CODEL, 0
|
||||||
TrafficControlQueueingDiscipline.FairQueueTrafficPolicingInitialQuantum, config_parse_tc_fair_queue_traffic_policing_size, 0, 0
|
NetworkEmulator.Parent, config_parse_qdisc_parent, QDISC_KIND_NETEM, 0
|
||||||
TrafficControlQueueingDiscipline.FairQueueTrafficPolicingMaximumRate, config_parse_tc_fair_queue_traffic_policing_max_rate, 0, 0
|
NetworkEmulator.DelaySec, config_parse_network_emulator_delay, QDISC_KIND_NETEM, 0
|
||||||
TrafficControlQueueingDiscipline.FairQueueTrafficPolicingBuckets, config_parse_tc_fair_queue_traffic_policing_u32, 0, 0
|
NetworkEmulator.DelayJitterSec, config_parse_network_emulator_delay, QDISC_KIND_NETEM, 0
|
||||||
TrafficControlQueueingDiscipline.FairQueueTrafficPolicingOrphanMask, config_parse_tc_fair_queue_traffic_policing_u32, 0, 0
|
NetworkEmulator.LossRate, config_parse_network_emulator_rate, QDISC_KIND_NETEM, 0
|
||||||
TrafficControlQueueingDiscipline.FairQueueTrafficPolicingPacing, config_parse_tc_fair_queue_traffic_policing_bool, 0, 0
|
NetworkEmulator.DuplicateRate, config_parse_network_emulator_rate, QDISC_KIND_NETEM, 0
|
||||||
TrafficControlQueueingDiscipline.FairQueueTrafficPolicingCEThresholdSec, config_parse_tc_fair_queue_traffic_policing_usec, 0, 0
|
NetworkEmulator.PacketLimit, config_parse_network_emulator_packet_limit, QDISC_KIND_NETEM, 0
|
||||||
TrafficControlQueueingDiscipline.ControlledDelayPacketLimit, config_parse_tc_controlled_delay_u32, 0, 0
|
StochasticFairnessQueueing.Parent, config_parse_qdisc_parent, QDISC_KIND_SFQ, 0
|
||||||
TrafficControlQueueingDiscipline.ControlledDelayTargetSec, config_parse_tc_controlled_delay_usec, 0, 0
|
StochasticFairnessQueueing.PerturbPeriodSec, config_parse_stochastic_fairness_queueing_perturb_period, QDISC_KIND_SFQ, 0
|
||||||
TrafficControlQueueingDiscipline.ControlledDelayIntervalSec, config_parse_tc_controlled_delay_usec, 0, 0
|
TokenBucketFilter.Parent, config_parse_qdisc_parent, QDISC_KIND_TBF, 0
|
||||||
TrafficControlQueueingDiscipline.ControlledDelayCEThresholdSec, config_parse_tc_controlled_delay_usec, 0, 0
|
TokenBucketFilter.Rate, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0
|
||||||
TrafficControlQueueingDiscipline.ControlledDelayECN, config_parse_tc_controlled_delay_bool, 0, 0
|
TokenBucketFilter.Burst, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0
|
||||||
|
TokenBucketFilter.LimitSize, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0
|
||||||
|
TokenBucketFilter.MTUBytes, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0
|
||||||
|
TokenBucketFilter.MPUBytes, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0
|
||||||
|
TokenBucketFilter.PeakRate, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0
|
||||||
|
TokenBucketFilter.LatencySec, config_parse_token_bucket_filter_latency, QDISC_KIND_TBF, 0
|
||||||
/* backwards compatibility: do not add new entries to this section */
|
/* backwards compatibility: do not add new entries to this section */
|
||||||
Network.IPv4LL, config_parse_ipv4ll, 0, offsetof(Network, link_local)
|
Network.IPv4LL, config_parse_ipv4ll, 0, offsetof(Network, link_local)
|
||||||
DHCP.ClientIdentifier, config_parse_dhcp_client_identifier, 0, offsetof(Network, dhcp_client_identifier)
|
DHCP.ClientIdentifier, config_parse_dhcp_client_identifier, 0, offsetof(Network, dhcp_client_identifier)
|
||||||
|
@ -315,3 +320,9 @@ DHCP.RapidCommit, config_parse_bool,
|
||||||
DHCP.ForceDHCPv6PDOtherInformation, config_parse_bool, 0, offsetof(Network, dhcp6_force_pd_other_information)
|
DHCP.ForceDHCPv6PDOtherInformation, config_parse_bool, 0, offsetof(Network, dhcp6_force_pd_other_information)
|
||||||
DHCPv4.UseDomainName, config_parse_dhcp_use_domains, 0, offsetof(Network, dhcp_use_domains)
|
DHCPv4.UseDomainName, config_parse_dhcp_use_domains, 0, offsetof(Network, dhcp_use_domains)
|
||||||
DHCPv4.CriticalConnection, config_parse_tristate, 0, offsetof(Network, dhcp_critical)
|
DHCPv4.CriticalConnection, config_parse_tristate, 0, offsetof(Network, dhcp_critical)
|
||||||
|
TrafficControlQueueingDiscipline.Parent, config_parse_qdisc_parent, QDISC_KIND_NETEM, 0
|
||||||
|
TrafficControlQueueingDiscipline.NetworkEmulatorDelaySec, config_parse_network_emulator_delay, 0, 0
|
||||||
|
TrafficControlQueueingDiscipline.NetworkEmulatorDelayJitterSec, config_parse_network_emulator_delay, 0, 0
|
||||||
|
TrafficControlQueueingDiscipline.NetworkEmulatorLossRate, config_parse_network_emulator_rate, 0, 0
|
||||||
|
TrafficControlQueueingDiscipline.NetworkEmulatorDuplicateRate, config_parse_network_emulator_rate, 0, 0
|
||||||
|
TrafficControlQueueingDiscipline.NetworkEmulatorPacketLimit, config_parse_network_emulator_packet_limit, 0, 0
|
||||||
|
|
|
@ -481,7 +481,13 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
|
||||||
"IPv6Prefix\0"
|
"IPv6Prefix\0"
|
||||||
"IPv6RoutePrefix\0"
|
"IPv6RoutePrefix\0"
|
||||||
"TrafficControlQueueingDiscipline\0"
|
"TrafficControlQueueingDiscipline\0"
|
||||||
"CAN\0",
|
"CAN\0"
|
||||||
|
"ControlledDelay\0"
|
||||||
|
"FairQueueing\0"
|
||||||
|
"FairQueueingControlledDelay\0"
|
||||||
|
"NetworkEmulator\0"
|
||||||
|
"StochasticFairnessQueueing\0"
|
||||||
|
"TokenBucketFilter\0",
|
||||||
config_item_perf_lookup, network_network_gperf_lookup,
|
config_item_perf_lookup, network_network_gperf_lookup,
|
||||||
CONFIG_PARSE_WARN, network);
|
CONFIG_PARSE_WARN, network);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
|
|
|
@ -74,7 +74,7 @@ static int controlled_delay_fill_message(Link *link, QDisc *qdisc, sd_netlink_me
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_tc_controlled_delay_u32(
|
int config_parse_controlled_delay_u32(
|
||||||
const char *unit,
|
const char *unit,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
|
@ -125,7 +125,7 @@ int config_parse_tc_controlled_delay_u32(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_tc_controlled_delay_usec(
|
int config_parse_controlled_delay_usec(
|
||||||
const char *unit,
|
const char *unit,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
|
@ -157,17 +157,17 @@ int config_parse_tc_controlled_delay_usec(
|
||||||
|
|
||||||
cd = CODEL(qdisc);
|
cd = CODEL(qdisc);
|
||||||
|
|
||||||
if (streq(lvalue, "ControlledDelayTargetSec"))
|
if (streq(lvalue, "TargetSec"))
|
||||||
p = &cd->target_usec;
|
p = &cd->target_usec;
|
||||||
else if (streq(lvalue, "ControlledDelayIntervalSec"))
|
else if (streq(lvalue, "IntervalSec"))
|
||||||
p = &cd->interval_usec;
|
p = &cd->interval_usec;
|
||||||
else if (streq(lvalue, "ControlledDelayCEThresholdSec"))
|
else if (streq(lvalue, "CEThresholdSec"))
|
||||||
p = &cd->ce_threshold_usec;
|
p = &cd->ce_threshold_usec;
|
||||||
else
|
else
|
||||||
assert_not_reached("Invalid lvalue");
|
assert_not_reached("Invalid lvalue");
|
||||||
|
|
||||||
if (isempty(rvalue)) {
|
if (isempty(rvalue)) {
|
||||||
if (streq(lvalue, "ControlledDelayCEThresholdSec"))
|
if (streq(lvalue, "CEThresholdSec"))
|
||||||
*p = USEC_INFINITY;
|
*p = USEC_INFINITY;
|
||||||
else
|
else
|
||||||
*p = 0;
|
*p = 0;
|
||||||
|
@ -189,7 +189,7 @@ int config_parse_tc_controlled_delay_usec(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_tc_controlled_delay_bool(
|
int config_parse_controlled_delay_bool(
|
||||||
const char *unit,
|
const char *unit,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
|
|
|
@ -19,6 +19,6 @@ typedef struct ControlledDelay {
|
||||||
DEFINE_QDISC_CAST(CODEL, ControlledDelay);
|
DEFINE_QDISC_CAST(CODEL, ControlledDelay);
|
||||||
extern const QDiscVTable codel_vtable;
|
extern const QDiscVTable codel_vtable;
|
||||||
|
|
||||||
CONFIG_PARSER_PROTOTYPE(config_parse_tc_controlled_delay_u32);
|
CONFIG_PARSER_PROTOTYPE(config_parse_controlled_delay_u32);
|
||||||
CONFIG_PARSER_PROTOTYPE(config_parse_tc_controlled_delay_usec);
|
CONFIG_PARSER_PROTOTYPE(config_parse_controlled_delay_usec);
|
||||||
CONFIG_PARSER_PROTOTYPE(config_parse_tc_controlled_delay_bool);
|
CONFIG_PARSER_PROTOTYPE(config_parse_controlled_delay_bool);
|
||||||
|
|
|
@ -10,8 +10,8 @@
|
||||||
#include "qdisc.h"
|
#include "qdisc.h"
|
||||||
#include "string-util.h"
|
#include "string-util.h"
|
||||||
|
|
||||||
static int fair_queuing_controlled_delay_init(QDisc *qdisc) {
|
static int fair_queueing_controlled_delay_init(QDisc *qdisc) {
|
||||||
FairQueuingControlledDelay *fqcd;
|
FairQueueingControlledDelay *fqcd;
|
||||||
|
|
||||||
assert(qdisc);
|
assert(qdisc);
|
||||||
|
|
||||||
|
@ -24,8 +24,8 @@ static int fair_queuing_controlled_delay_init(QDisc *qdisc) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int fair_queuing_controlled_delay_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
|
static int fair_queueing_controlled_delay_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
|
||||||
FairQueuingControlledDelay *fqcd;
|
FairQueueingControlledDelay *fqcd;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
@ -93,7 +93,7 @@ static int fair_queuing_controlled_delay_fill_message(Link *link, QDisc *qdisc,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_tc_fair_queuing_controlled_delay_u32(
|
int config_parse_fair_queueing_controlled_delay_u32(
|
||||||
const char *unit,
|
const char *unit,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
|
@ -106,7 +106,7 @@ int config_parse_tc_fair_queuing_controlled_delay_u32(
|
||||||
void *userdata) {
|
void *userdata) {
|
||||||
|
|
||||||
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
||||||
FairQueuingControlledDelay *fqcd;
|
FairQueueingControlledDelay *fqcd;
|
||||||
Network *network = data;
|
Network *network = data;
|
||||||
uint32_t *p;
|
uint32_t *p;
|
||||||
int r;
|
int r;
|
||||||
|
@ -125,9 +125,9 @@ int config_parse_tc_fair_queuing_controlled_delay_u32(
|
||||||
|
|
||||||
fqcd = FQ_CODEL(qdisc);
|
fqcd = FQ_CODEL(qdisc);
|
||||||
|
|
||||||
if (streq(lvalue, "FairQueuingControlledDelayPacketLimit"))
|
if (streq(lvalue, "PacketLimit"))
|
||||||
p = &fqcd->packet_limit;
|
p = &fqcd->packet_limit;
|
||||||
else if (streq(lvalue, "FairQueuingControlledDelayFlows"))
|
else if (streq(lvalue, "Flows"))
|
||||||
p = &fqcd->flows;
|
p = &fqcd->flows;
|
||||||
else
|
else
|
||||||
assert_not_reached("Invalid lvalue.");
|
assert_not_reached("Invalid lvalue.");
|
||||||
|
@ -152,7 +152,7 @@ int config_parse_tc_fair_queuing_controlled_delay_u32(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_tc_fair_queuing_controlled_delay_usec(
|
int config_parse_fair_queueing_controlled_delay_usec(
|
||||||
const char *unit,
|
const char *unit,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
|
@ -165,7 +165,7 @@ int config_parse_tc_fair_queuing_controlled_delay_usec(
|
||||||
void *userdata) {
|
void *userdata) {
|
||||||
|
|
||||||
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
||||||
FairQueuingControlledDelay *fqcd;
|
FairQueueingControlledDelay *fqcd;
|
||||||
Network *network = data;
|
Network *network = data;
|
||||||
usec_t *p;
|
usec_t *p;
|
||||||
int r;
|
int r;
|
||||||
|
@ -184,17 +184,17 @@ int config_parse_tc_fair_queuing_controlled_delay_usec(
|
||||||
|
|
||||||
fqcd = FQ_CODEL(qdisc);
|
fqcd = FQ_CODEL(qdisc);
|
||||||
|
|
||||||
if (streq(lvalue, "FairQueuingControlledDelayTargetSec"))
|
if (streq(lvalue, "TargetSec"))
|
||||||
p = &fqcd->target_usec;
|
p = &fqcd->target_usec;
|
||||||
else if (streq(lvalue, "FairQueuingControlledDelayIntervalSec"))
|
else if (streq(lvalue, "IntervalSec"))
|
||||||
p = &fqcd->interval_usec;
|
p = &fqcd->interval_usec;
|
||||||
else if (streq(lvalue, "FairQueuingControlledDelayCEThresholdSec"))
|
else if (streq(lvalue, "CEThresholdSec"))
|
||||||
p = &fqcd->ce_threshold_usec;
|
p = &fqcd->ce_threshold_usec;
|
||||||
else
|
else
|
||||||
assert_not_reached("Invalid lvalue.");
|
assert_not_reached("Invalid lvalue.");
|
||||||
|
|
||||||
if (isempty(rvalue)) {
|
if (isempty(rvalue)) {
|
||||||
if (streq(lvalue, "FairQueuingControlledDelayCEThresholdSec"))
|
if (streq(lvalue, "CEThresholdSec"))
|
||||||
*p = USEC_INFINITY;
|
*p = USEC_INFINITY;
|
||||||
else
|
else
|
||||||
*p = 0;
|
*p = 0;
|
||||||
|
@ -216,7 +216,7 @@ int config_parse_tc_fair_queuing_controlled_delay_usec(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_tc_fair_queuing_controlled_delay_bool(
|
int config_parse_fair_queueing_controlled_delay_bool(
|
||||||
const char *unit,
|
const char *unit,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
|
@ -229,7 +229,7 @@ int config_parse_tc_fair_queuing_controlled_delay_bool(
|
||||||
void *userdata) {
|
void *userdata) {
|
||||||
|
|
||||||
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
||||||
FairQueuingControlledDelay *fqcd;
|
FairQueueingControlledDelay *fqcd;
|
||||||
Network *network = data;
|
Network *network = data;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -268,7 +268,7 @@ int config_parse_tc_fair_queuing_controlled_delay_bool(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_tc_fair_queuing_controlled_delay_size(
|
int config_parse_fair_queueing_controlled_delay_size(
|
||||||
const char *unit,
|
const char *unit,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
|
@ -281,7 +281,7 @@ int config_parse_tc_fair_queuing_controlled_delay_size(
|
||||||
void *userdata) {
|
void *userdata) {
|
||||||
|
|
||||||
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
||||||
FairQueuingControlledDelay *fqcd;
|
FairQueueingControlledDelay *fqcd;
|
||||||
Network *network = data;
|
Network *network = data;
|
||||||
uint64_t sz;
|
uint64_t sz;
|
||||||
uint32_t *p;
|
uint32_t *p;
|
||||||
|
@ -301,15 +301,15 @@ int config_parse_tc_fair_queuing_controlled_delay_size(
|
||||||
|
|
||||||
fqcd = FQ_CODEL(qdisc);
|
fqcd = FQ_CODEL(qdisc);
|
||||||
|
|
||||||
if (streq(lvalue, "FairQueuingControlledDelayMemoryLimit"))
|
if (streq(lvalue, "MemoryLimit"))
|
||||||
p = &fqcd->memory_limit;
|
p = &fqcd->memory_limit;
|
||||||
else if (streq(lvalue, "FairQueuingControlledDelayQuantum"))
|
else if (streq(lvalue, "Quantum"))
|
||||||
p = &fqcd->quantum;
|
p = &fqcd->quantum;
|
||||||
else
|
else
|
||||||
assert_not_reached("Invalid lvalue.");
|
assert_not_reached("Invalid lvalue.");
|
||||||
|
|
||||||
if (isempty(rvalue)) {
|
if (isempty(rvalue)) {
|
||||||
if (streq(lvalue, "FairQueuingControlledMemoryLimit"))
|
if (streq(lvalue, "MemoryLimit"))
|
||||||
*p = UINT32_MAX;
|
*p = UINT32_MAX;
|
||||||
else
|
else
|
||||||
*p = 0;
|
*p = 0;
|
||||||
|
@ -339,8 +339,8 @@ int config_parse_tc_fair_queuing_controlled_delay_size(
|
||||||
}
|
}
|
||||||
|
|
||||||
const QDiscVTable fq_codel_vtable = {
|
const QDiscVTable fq_codel_vtable = {
|
||||||
.object_size = sizeof(FairQueuingControlledDelay),
|
.object_size = sizeof(FairQueueingControlledDelay),
|
||||||
.tca_kind = "fq_codel",
|
.tca_kind = "fq_codel",
|
||||||
.init = fair_queuing_controlled_delay_init,
|
.init = fair_queueing_controlled_delay_init,
|
||||||
.fill_message = fair_queuing_controlled_delay_fill_message,
|
.fill_message = fair_queueing_controlled_delay_fill_message,
|
||||||
};
|
};
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
#include "qdisc.h"
|
#include "qdisc.h"
|
||||||
#include "time-util.h"
|
#include "time-util.h"
|
||||||
|
|
||||||
typedef struct FairQueuingControlledDelay {
|
typedef struct FairQueueingControlledDelay {
|
||||||
QDisc meta;
|
QDisc meta;
|
||||||
|
|
||||||
uint32_t packet_limit;
|
uint32_t packet_limit;
|
||||||
|
@ -17,12 +17,12 @@ typedef struct FairQueuingControlledDelay {
|
||||||
usec_t interval_usec;
|
usec_t interval_usec;
|
||||||
usec_t ce_threshold_usec;
|
usec_t ce_threshold_usec;
|
||||||
int ecn;
|
int ecn;
|
||||||
} FairQueuingControlledDelay;
|
} FairQueueingControlledDelay;
|
||||||
|
|
||||||
DEFINE_QDISC_CAST(FQ_CODEL, FairQueuingControlledDelay);
|
DEFINE_QDISC_CAST(FQ_CODEL, FairQueueingControlledDelay);
|
||||||
extern const QDiscVTable fq_codel_vtable;
|
extern const QDiscVTable fq_codel_vtable;
|
||||||
|
|
||||||
CONFIG_PARSER_PROTOTYPE(config_parse_tc_fair_queuing_controlled_delay_u32);
|
CONFIG_PARSER_PROTOTYPE(config_parse_fair_queueing_controlled_delay_u32);
|
||||||
CONFIG_PARSER_PROTOTYPE(config_parse_tc_fair_queuing_controlled_delay_usec);
|
CONFIG_PARSER_PROTOTYPE(config_parse_fair_queueing_controlled_delay_usec);
|
||||||
CONFIG_PARSER_PROTOTYPE(config_parse_tc_fair_queuing_controlled_delay_bool);
|
CONFIG_PARSER_PROTOTYPE(config_parse_fair_queueing_controlled_delay_bool);
|
||||||
CONFIG_PARSER_PROTOTYPE(config_parse_tc_fair_queuing_controlled_delay_size);
|
CONFIG_PARSER_PROTOTYPE(config_parse_fair_queueing_controlled_delay_size);
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
static int fair_queue_traffic_policing_init(QDisc *qdisc) {
|
static int fair_queue_traffic_policing_init(QDisc *qdisc) {
|
||||||
FairQueueTrafficPolicing *fq;
|
FairQueueing *fq;
|
||||||
|
|
||||||
assert(qdisc);
|
assert(qdisc);
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ static int fair_queue_traffic_policing_init(QDisc *qdisc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int fair_queue_traffic_policing_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
|
static int fair_queue_traffic_policing_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
|
||||||
FairQueueTrafficPolicing *fq;
|
FairQueueing *fq;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
@ -102,7 +102,7 @@ static int fair_queue_traffic_policing_fill_message(Link *link, QDisc *qdisc, sd
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_tc_fair_queue_traffic_policing_u32(
|
int config_parse_fair_queue_traffic_policing_u32(
|
||||||
const char *unit,
|
const char *unit,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
|
@ -115,7 +115,7 @@ int config_parse_tc_fair_queue_traffic_policing_u32(
|
||||||
void *userdata) {
|
void *userdata) {
|
||||||
|
|
||||||
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
||||||
FairQueueTrafficPolicing *fq;
|
FairQueueing *fq;
|
||||||
Network *network = data;
|
Network *network = data;
|
||||||
uint32_t *p;
|
uint32_t *p;
|
||||||
int r;
|
int r;
|
||||||
|
@ -134,13 +134,13 @@ int config_parse_tc_fair_queue_traffic_policing_u32(
|
||||||
|
|
||||||
fq = FQ(qdisc);
|
fq = FQ(qdisc);
|
||||||
|
|
||||||
if (streq(lvalue, "FairQueueTrafficPolicingPacketLimit"))
|
if (streq(lvalue, "PacketLimit"))
|
||||||
p = &fq->packet_limit;
|
p = &fq->packet_limit;
|
||||||
else if (streq(lvalue, "FairQueueTrafficPolicingFlowLimit"))
|
else if (streq(lvalue, "FlowLimit"))
|
||||||
p = &fq->flow_limit;
|
p = &fq->flow_limit;
|
||||||
else if (streq(lvalue, "FairQueueTrafficPolicingBuckets"))
|
else if (streq(lvalue, "Buckets"))
|
||||||
p = &fq->buckets;
|
p = &fq->buckets;
|
||||||
else if (streq(lvalue, "FairQueueTrafficPolicingOrphanMask"))
|
else if (streq(lvalue, "OrphanMask"))
|
||||||
p = &fq->orphan_mask;
|
p = &fq->orphan_mask;
|
||||||
else
|
else
|
||||||
assert_not_reached("Invalid lvalue");
|
assert_not_reached("Invalid lvalue");
|
||||||
|
@ -165,7 +165,7 @@ int config_parse_tc_fair_queue_traffic_policing_u32(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_tc_fair_queue_traffic_policing_size(
|
int config_parse_fair_queue_traffic_policing_size(
|
||||||
const char *unit,
|
const char *unit,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
|
@ -178,7 +178,7 @@ int config_parse_tc_fair_queue_traffic_policing_size(
|
||||||
void *userdata) {
|
void *userdata) {
|
||||||
|
|
||||||
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
||||||
FairQueueTrafficPolicing *fq;
|
FairQueueing *fq;
|
||||||
Network *network = data;
|
Network *network = data;
|
||||||
uint64_t sz;
|
uint64_t sz;
|
||||||
uint32_t *p;
|
uint32_t *p;
|
||||||
|
@ -198,9 +198,9 @@ int config_parse_tc_fair_queue_traffic_policing_size(
|
||||||
|
|
||||||
fq = FQ(qdisc);
|
fq = FQ(qdisc);
|
||||||
|
|
||||||
if (streq(lvalue, "FairQueueTrafficPolicingQuantum"))
|
if (streq(lvalue, "Quantum"))
|
||||||
p = &fq->quantum;
|
p = &fq->quantum;
|
||||||
else if (streq(lvalue, "FairQueueTrafficPolicingInitialQuantum"))
|
else if (streq(lvalue, "InitialQuantum"))
|
||||||
p = &fq->initial_quantum;
|
p = &fq->initial_quantum;
|
||||||
else
|
else
|
||||||
assert_not_reached("Invalid lvalue");
|
assert_not_reached("Invalid lvalue");
|
||||||
|
@ -232,7 +232,7 @@ int config_parse_tc_fair_queue_traffic_policing_size(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_tc_fair_queue_traffic_policing_bool(
|
int config_parse_fair_queue_traffic_policing_bool(
|
||||||
const char *unit,
|
const char *unit,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
|
@ -245,7 +245,7 @@ int config_parse_tc_fair_queue_traffic_policing_bool(
|
||||||
void *userdata) {
|
void *userdata) {
|
||||||
|
|
||||||
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
||||||
FairQueueTrafficPolicing *fq;
|
FairQueueing *fq;
|
||||||
Network *network = data;
|
Network *network = data;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -284,7 +284,7 @@ int config_parse_tc_fair_queue_traffic_policing_bool(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_tc_fair_queue_traffic_policing_usec(
|
int config_parse_fair_queue_traffic_policing_usec(
|
||||||
const char *unit,
|
const char *unit,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
|
@ -297,7 +297,7 @@ int config_parse_tc_fair_queue_traffic_policing_usec(
|
||||||
void *userdata) {
|
void *userdata) {
|
||||||
|
|
||||||
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
||||||
FairQueueTrafficPolicing *fq;
|
FairQueueing *fq;
|
||||||
Network *network = data;
|
Network *network = data;
|
||||||
usec_t sec;
|
usec_t sec;
|
||||||
int r;
|
int r;
|
||||||
|
@ -343,7 +343,7 @@ int config_parse_tc_fair_queue_traffic_policing_usec(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_tc_fair_queue_traffic_policing_max_rate(
|
int config_parse_fair_queue_traffic_policing_max_rate(
|
||||||
const char *unit,
|
const char *unit,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
|
@ -356,7 +356,7 @@ int config_parse_tc_fair_queue_traffic_policing_max_rate(
|
||||||
void *userdata) {
|
void *userdata) {
|
||||||
|
|
||||||
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
||||||
FairQueueTrafficPolicing *fq;
|
FairQueueing *fq;
|
||||||
Network *network = data;
|
Network *network = data;
|
||||||
uint64_t sz;
|
uint64_t sz;
|
||||||
int r;
|
int r;
|
||||||
|
@ -404,7 +404,7 @@ int config_parse_tc_fair_queue_traffic_policing_max_rate(
|
||||||
|
|
||||||
const QDiscVTable fq_vtable = {
|
const QDiscVTable fq_vtable = {
|
||||||
.init = fair_queue_traffic_policing_init,
|
.init = fair_queue_traffic_policing_init,
|
||||||
.object_size = sizeof(FairQueueTrafficPolicing),
|
.object_size = sizeof(FairQueueing),
|
||||||
.tca_kind = "fq",
|
.tca_kind = "fq",
|
||||||
.fill_message = fair_queue_traffic_policing_fill_message,
|
.fill_message = fair_queue_traffic_policing_fill_message,
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#include "conf-parser.h"
|
#include "conf-parser.h"
|
||||||
#include "qdisc.h"
|
#include "qdisc.h"
|
||||||
|
|
||||||
typedef struct FairQueueTrafficPolicing {
|
typedef struct FairQueueing {
|
||||||
QDisc meta;
|
QDisc meta;
|
||||||
|
|
||||||
uint32_t packet_limit;
|
uint32_t packet_limit;
|
||||||
|
@ -17,13 +17,13 @@ typedef struct FairQueueTrafficPolicing {
|
||||||
uint32_t orphan_mask;
|
uint32_t orphan_mask;
|
||||||
int pacing;
|
int pacing;
|
||||||
usec_t ce_threshold_usec;
|
usec_t ce_threshold_usec;
|
||||||
} FairQueueTrafficPolicing;
|
} FairQueueing;
|
||||||
|
|
||||||
DEFINE_QDISC_CAST(FQ, FairQueueTrafficPolicing);
|
DEFINE_QDISC_CAST(FQ, FairQueueing);
|
||||||
extern const QDiscVTable fq_vtable;
|
extern const QDiscVTable fq_vtable;
|
||||||
|
|
||||||
CONFIG_PARSER_PROTOTYPE(config_parse_tc_fair_queue_traffic_policing_u32);
|
CONFIG_PARSER_PROTOTYPE(config_parse_fair_queue_traffic_policing_u32);
|
||||||
CONFIG_PARSER_PROTOTYPE(config_parse_tc_fair_queue_traffic_policing_size);
|
CONFIG_PARSER_PROTOTYPE(config_parse_fair_queue_traffic_policing_size);
|
||||||
CONFIG_PARSER_PROTOTYPE(config_parse_tc_fair_queue_traffic_policing_bool);
|
CONFIG_PARSER_PROTOTYPE(config_parse_fair_queue_traffic_policing_bool);
|
||||||
CONFIG_PARSER_PROTOTYPE(config_parse_tc_fair_queue_traffic_policing_usec);
|
CONFIG_PARSER_PROTOTYPE(config_parse_fair_queue_traffic_policing_usec);
|
||||||
CONFIG_PARSER_PROTOTYPE(config_parse_tc_fair_queue_traffic_policing_max_rate);
|
CONFIG_PARSER_PROTOTYPE(config_parse_fair_queue_traffic_policing_max_rate);
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#include "networkd-manager.h"
|
#include "networkd-manager.h"
|
||||||
#include "parse-util.h"
|
#include "parse-util.h"
|
||||||
#include "qdisc.h"
|
#include "qdisc.h"
|
||||||
#include "string-util.h"
|
#include "strv.h"
|
||||||
#include "tc-util.h"
|
#include "tc-util.h"
|
||||||
|
|
||||||
static int network_emulator_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
|
static int network_emulator_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
|
||||||
|
@ -54,7 +54,7 @@ static int network_emulator_fill_message(Link *link, QDisc *qdisc, sd_netlink_me
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_tc_network_emulator_delay(
|
int config_parse_network_emulator_delay(
|
||||||
const char *unit,
|
const char *unit,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
|
@ -87,9 +87,9 @@ int config_parse_tc_network_emulator_delay(
|
||||||
ne = NETEM(qdisc);
|
ne = NETEM(qdisc);
|
||||||
|
|
||||||
if (isempty(rvalue)) {
|
if (isempty(rvalue)) {
|
||||||
if (streq(lvalue, "NetworkEmulatorDelaySec"))
|
if (STR_IN_SET(lvalue, "DelaySec", "NetworkEmulatorDelaySec"))
|
||||||
ne->delay = USEC_INFINITY;
|
ne->delay = USEC_INFINITY;
|
||||||
else if (streq(lvalue, "NetworkEmulatorDelayJitterSec"))
|
else if (STR_IN_SET(lvalue, "DelayJitterSec", "NetworkEmulatorDelayJitterSec"))
|
||||||
ne->jitter = USEC_INFINITY;
|
ne->jitter = USEC_INFINITY;
|
||||||
|
|
||||||
qdisc = NULL;
|
qdisc = NULL;
|
||||||
|
@ -104,9 +104,9 @@ int config_parse_tc_network_emulator_delay(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (streq(lvalue, "NetworkEmulatorDelaySec"))
|
if (STR_IN_SET(lvalue, "DelaySec", "NetworkEmulatorDelaySec"))
|
||||||
ne->delay = u;
|
ne->delay = u;
|
||||||
else if (streq(lvalue, "NetworkEmulatorDelayJitterSec"))
|
else if (STR_IN_SET(lvalue, "DelayJitterSec", "NetworkEmulatorDelayJitterSec"))
|
||||||
ne->jitter = u;
|
ne->jitter = u;
|
||||||
|
|
||||||
qdisc = NULL;
|
qdisc = NULL;
|
||||||
|
@ -114,7 +114,7 @@ int config_parse_tc_network_emulator_delay(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_tc_network_emulator_rate(
|
int config_parse_network_emulator_rate(
|
||||||
const char *unit,
|
const char *unit,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
|
@ -147,9 +147,9 @@ int config_parse_tc_network_emulator_rate(
|
||||||
ne = NETEM(qdisc);
|
ne = NETEM(qdisc);
|
||||||
|
|
||||||
if (isempty(rvalue)) {
|
if (isempty(rvalue)) {
|
||||||
if (streq(lvalue, "NetworkEmulatorLossRate"))
|
if (STR_IN_SET(lvalue, "LossRate", "NetworkEmulatorLossRate"))
|
||||||
ne->loss = 0;
|
ne->loss = 0;
|
||||||
else if (streq(lvalue, "NetworkEmulatorDuplicateRate"))
|
else if (STR_IN_SET(lvalue, "DuplicateRate", "NetworkEmulatorDuplicateRate"))
|
||||||
ne->duplicate = 0;
|
ne->duplicate = 0;
|
||||||
|
|
||||||
qdisc = NULL;
|
qdisc = NULL;
|
||||||
|
@ -164,16 +164,16 @@ int config_parse_tc_network_emulator_rate(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (streq(lvalue, "NetworkEmulatorLossRate"))
|
if (STR_IN_SET(lvalue, "LossRate", "NetworkEmulatorLossRate"))
|
||||||
ne->loss = rate;
|
ne->loss = rate;
|
||||||
else if (streq(lvalue, "NetworkEmulatorDuplicateRate"))
|
else if (STR_IN_SET(lvalue, "DuplicateRate", "NetworkEmulatorDuplicateRate"))
|
||||||
ne->duplicate = rate;
|
ne->duplicate = rate;
|
||||||
|
|
||||||
qdisc = NULL;
|
qdisc = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_tc_network_emulator_packet_limit(
|
int config_parse_network_emulator_packet_limit(
|
||||||
const char *unit,
|
const char *unit,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
|
@ -214,8 +214,8 @@ int config_parse_tc_network_emulator_packet_limit(
|
||||||
r = safe_atou(rvalue, &ne->limit);
|
r = safe_atou(rvalue, &ne->limit);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
log_syntax(unit, LOG_ERR, filename, line, r,
|
log_syntax(unit, LOG_ERR, filename, line, r,
|
||||||
"Failed to parse 'NetworkEmulatorPacketLimit=', ignoring assignment: %s",
|
"Failed to parse '%s=', ignoring assignment: %s",
|
||||||
rvalue);
|
lvalue, rvalue);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,6 @@ typedef struct NetworkEmulator {
|
||||||
DEFINE_QDISC_CAST(NETEM, NetworkEmulator);
|
DEFINE_QDISC_CAST(NETEM, NetworkEmulator);
|
||||||
extern const QDiscVTable netem_vtable;
|
extern const QDiscVTable netem_vtable;
|
||||||
|
|
||||||
CONFIG_PARSER_PROTOTYPE(config_parse_tc_network_emulator_delay);
|
CONFIG_PARSER_PROTOTYPE(config_parse_network_emulator_delay);
|
||||||
CONFIG_PARSER_PROTOTYPE(config_parse_tc_network_emulator_rate);
|
CONFIG_PARSER_PROTOTYPE(config_parse_network_emulator_rate);
|
||||||
CONFIG_PARSER_PROTOTYPE(config_parse_tc_network_emulator_packet_limit);
|
CONFIG_PARSER_PROTOTYPE(config_parse_network_emulator_packet_limit);
|
||||||
|
|
|
@ -234,7 +234,7 @@ int qdisc_section_verify(QDisc *qdisc, bool *has_root, bool *has_clsact) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_tc_qdiscs_parent(
|
int config_parse_qdisc_parent(
|
||||||
const char *unit,
|
const char *unit,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
|
@ -254,8 +254,9 @@ int config_parse_tc_qdiscs_parent(
|
||||||
assert(lvalue);
|
assert(lvalue);
|
||||||
assert(rvalue);
|
assert(rvalue);
|
||||||
assert(data);
|
assert(data);
|
||||||
|
assert(ltype >= 0 && ltype < _QDISC_KIND_MAX);
|
||||||
|
|
||||||
r = qdisc_new_static(_QDISC_KIND_INVALID, network, filename, section_line, &qdisc);
|
r = qdisc_new_static(ltype, network, filename, section_line, &qdisc);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@ int qdisc_section_verify(QDisc *qdisc, bool *has_root, bool *has_clsact);
|
||||||
|
|
||||||
DEFINE_NETWORK_SECTION_FUNCTIONS(QDisc, qdisc_free);
|
DEFINE_NETWORK_SECTION_FUNCTIONS(QDisc, qdisc_free);
|
||||||
|
|
||||||
CONFIG_PARSER_PROTOTYPE(config_parse_tc_qdiscs_parent);
|
CONFIG_PARSER_PROTOTYPE(config_parse_qdisc_parent);
|
||||||
|
|
||||||
#include "codel.h"
|
#include "codel.h"
|
||||||
#include "fq-codel.h"
|
#include "fq-codel.h"
|
||||||
|
|
|
@ -31,7 +31,7 @@ static int stochastic_fairness_queueing_fill_message(Link *link, QDisc *qdisc, s
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_tc_stochastic_fairness_queueing_perturb_period(
|
int config_parse_stochastic_fairness_queueing_perturb_period(
|
||||||
const char *unit,
|
const char *unit,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
|
|
|
@ -15,4 +15,4 @@ typedef struct StochasticFairnessQueueing {
|
||||||
DEFINE_QDISC_CAST(SFQ, StochasticFairnessQueueing);
|
DEFINE_QDISC_CAST(SFQ, StochasticFairnessQueueing);
|
||||||
extern const QDiscVTable sfq_vtable;
|
extern const QDiscVTable sfq_vtable;
|
||||||
|
|
||||||
CONFIG_PARSER_PROTOTYPE(config_parse_tc_stochastic_fairness_queueing_perturb_period);
|
CONFIG_PARSER_PROTOTYPE(config_parse_stochastic_fairness_queueing_perturb_period);
|
||||||
|
|
|
@ -15,10 +15,10 @@
|
||||||
#include "tc-util.h"
|
#include "tc-util.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
static int token_buffer_filter_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
|
static int token_bucket_filter_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
|
||||||
uint32_t rtab[256], ptab[256];
|
uint32_t rtab[256], ptab[256];
|
||||||
struct tc_tbf_qopt opt = {};
|
struct tc_tbf_qopt opt = {};
|
||||||
TokenBufferFilter *tbf;
|
TokenBucketFilter *tbf;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(link);
|
assert(link);
|
||||||
|
@ -110,7 +110,7 @@ static int token_buffer_filter_fill_message(Link *link, QDisc *qdisc, sd_netlink
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_tc_token_buffer_filter_size(
|
int config_parse_token_bucket_filter_size(
|
||||||
const char *unit,
|
const char *unit,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
|
@ -124,7 +124,7 @@ int config_parse_tc_token_buffer_filter_size(
|
||||||
|
|
||||||
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
||||||
Network *network = data;
|
Network *network = data;
|
||||||
TokenBufferFilter *tbf;
|
TokenBucketFilter *tbf;
|
||||||
uint64_t k;
|
uint64_t k;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -143,17 +143,17 @@ int config_parse_tc_token_buffer_filter_size(
|
||||||
tbf = TBF(qdisc);
|
tbf = TBF(qdisc);
|
||||||
|
|
||||||
if (isempty(rvalue)) {
|
if (isempty(rvalue)) {
|
||||||
if (streq(lvalue, "TokenBufferFilterRate"))
|
if (streq(lvalue, "Rate"))
|
||||||
tbf->rate = 0;
|
tbf->rate = 0;
|
||||||
else if (streq(lvalue, "TokenBufferFilterBurst"))
|
else if (streq(lvalue, "Burst"))
|
||||||
tbf->burst = 0;
|
tbf->burst = 0;
|
||||||
else if (streq(lvalue, "TokenBufferFilterLimitSize"))
|
else if (streq(lvalue, "LimitSize"))
|
||||||
tbf->limit = 0;
|
tbf->limit = 0;
|
||||||
else if (streq(lvalue, "TokenBufferFilterMTUBytes"))
|
else if (streq(lvalue, "MTUBytes"))
|
||||||
tbf->mtu = 0;
|
tbf->mtu = 0;
|
||||||
else if (streq(lvalue, "TokenBufferFilterMPUBytes"))
|
else if (streq(lvalue, "MPUBytes"))
|
||||||
tbf->mpu = 0;
|
tbf->mpu = 0;
|
||||||
else if (streq(lvalue, "TokenBufferFilterPeakRate"))
|
else if (streq(lvalue, "PeakRate"))
|
||||||
tbf->peak_rate = 0;
|
tbf->peak_rate = 0;
|
||||||
|
|
||||||
qdisc = NULL;
|
qdisc = NULL;
|
||||||
|
@ -168,17 +168,17 @@ int config_parse_tc_token_buffer_filter_size(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (streq(lvalue, "TokenBufferFilterRate"))
|
if (streq(lvalue, "Rate"))
|
||||||
tbf->rate = k / 8;
|
tbf->rate = k / 8;
|
||||||
else if (streq(lvalue, "TokenBufferFilterBurst"))
|
else if (streq(lvalue, "Burst"))
|
||||||
tbf->burst = k;
|
tbf->burst = k;
|
||||||
else if (streq(lvalue, "TokenBufferFilterLimitSize"))
|
else if (streq(lvalue, "LimitSize"))
|
||||||
tbf->limit = k;
|
tbf->limit = k;
|
||||||
else if (streq(lvalue, "TokenBufferFilterMPUBytes"))
|
else if (streq(lvalue, "MPUBytes"))
|
||||||
tbf->mpu = k;
|
tbf->mpu = k;
|
||||||
else if (streq(lvalue, "TokenBufferFilterMTUBytes"))
|
else if (streq(lvalue, "MTUBytes"))
|
||||||
tbf->mtu = k;
|
tbf->mtu = k;
|
||||||
else if (streq(lvalue, "TokenBufferFilterPeakRate"))
|
else if (streq(lvalue, "PeakRate"))
|
||||||
tbf->peak_rate = k / 8;
|
tbf->peak_rate = k / 8;
|
||||||
|
|
||||||
qdisc = NULL;
|
qdisc = NULL;
|
||||||
|
@ -186,7 +186,7 @@ int config_parse_tc_token_buffer_filter_size(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_tc_token_buffer_filter_latency(
|
int config_parse_token_bucket_filter_latency(
|
||||||
const char *unit,
|
const char *unit,
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
|
@ -200,7 +200,7 @@ int config_parse_tc_token_buffer_filter_latency(
|
||||||
|
|
||||||
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
_cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
|
||||||
Network *network = data;
|
Network *network = data;
|
||||||
TokenBufferFilter *tbf;
|
TokenBucketFilter *tbf;
|
||||||
usec_t u;
|
usec_t u;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
|
@ -240,45 +240,45 @@ int config_parse_tc_token_buffer_filter_latency(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int token_buffer_filter_verify(QDisc *qdisc) {
|
static int token_bucket_filter_verify(QDisc *qdisc) {
|
||||||
TokenBufferFilter *tbf = TBF(qdisc);
|
TokenBucketFilter *tbf = TBF(qdisc);
|
||||||
|
|
||||||
if (tbf->limit > 0 && tbf->latency > 0)
|
if (tbf->limit > 0 && tbf->latency > 0)
|
||||||
return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
|
return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||||
"%s: Specifying both TokenBufferFilterLimitSize= and TokenBufferFilterLatencySec= is not allowed. "
|
"%s: Specifying both LimitSize= and LatencySec= is not allowed. "
|
||||||
"Ignoring [TrafficControlQueueingDiscipline] section from line %u.",
|
"Ignoring [TokenBucketFilter] section from line %u.",
|
||||||
qdisc->section->filename, qdisc->section->line);
|
qdisc->section->filename, qdisc->section->line);
|
||||||
|
|
||||||
if (tbf->limit == 0 && tbf->latency == 0)
|
if (tbf->limit == 0 && tbf->latency == 0)
|
||||||
return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
|
return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||||
"%s: Either TokenBufferFilterLimitSize= or TokenBufferFilterLatencySec= is required. "
|
"%s: Either LimitSize= or LatencySec= is required. "
|
||||||
"Ignoring [TrafficControlQueueingDiscipline] section from line %u.",
|
"Ignoring [TokenBucketFilter] section from line %u.",
|
||||||
qdisc->section->filename, qdisc->section->line);
|
qdisc->section->filename, qdisc->section->line);
|
||||||
|
|
||||||
if (tbf->rate == 0)
|
if (tbf->rate == 0)
|
||||||
return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
|
return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||||
"%s: TokenBufferFilterRate= is mandatory. "
|
"%s: Rate= is mandatory. "
|
||||||
"Ignoring [TrafficControlQueueingDiscipline] section from line %u.",
|
"Ignoring [TokenBucketFilter] section from line %u.",
|
||||||
qdisc->section->filename, qdisc->section->line);
|
qdisc->section->filename, qdisc->section->line);
|
||||||
|
|
||||||
if (tbf->burst == 0)
|
if (tbf->burst == 0)
|
||||||
return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
|
return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||||
"%s: TokenBufferFilterBurst= is mandatory. "
|
"%s: Burst= is mandatory. "
|
||||||
"Ignoring [TrafficControlQueueingDiscipline] section from line %u.",
|
"Ignoring [TokenBucketFilter] section from line %u.",
|
||||||
qdisc->section->filename, qdisc->section->line);
|
qdisc->section->filename, qdisc->section->line);
|
||||||
|
|
||||||
if (tbf->peak_rate > 0 && tbf->mtu == 0)
|
if (tbf->peak_rate > 0 && tbf->mtu == 0)
|
||||||
return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
|
return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||||
"%s: TokenBufferFilterMTUBytes= is mandatory when TokenBufferFilterPeakRate= is specified. "
|
"%s: MTUBytes= is mandatory when PeakRate= is specified. "
|
||||||
"Ignoring [TrafficControlQueueingDiscipline] section from line %u.",
|
"Ignoring [TokenBucketFilter] section from line %u.",
|
||||||
qdisc->section->filename, qdisc->section->line);
|
qdisc->section->filename, qdisc->section->line);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QDiscVTable tbf_vtable = {
|
const QDiscVTable tbf_vtable = {
|
||||||
.object_size = sizeof(TokenBufferFilter),
|
.object_size = sizeof(TokenBucketFilter),
|
||||||
.tca_kind = "tbf",
|
.tca_kind = "tbf",
|
||||||
.fill_message = token_buffer_filter_fill_message,
|
.fill_message = token_bucket_filter_fill_message,
|
||||||
.verify = token_buffer_filter_verify
|
.verify = token_bucket_filter_verify
|
||||||
};
|
};
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
#include "qdisc.h"
|
#include "qdisc.h"
|
||||||
#include "time-util.h"
|
#include "time-util.h"
|
||||||
|
|
||||||
typedef struct TokenBufferFilter {
|
typedef struct TokenBucketFilter {
|
||||||
QDisc meta;
|
QDisc meta;
|
||||||
|
|
||||||
uint64_t rate;
|
uint64_t rate;
|
||||||
|
@ -16,10 +16,10 @@ typedef struct TokenBufferFilter {
|
||||||
usec_t latency;
|
usec_t latency;
|
||||||
size_t limit;
|
size_t limit;
|
||||||
size_t mpu;
|
size_t mpu;
|
||||||
} TokenBufferFilter;
|
} TokenBucketFilter;
|
||||||
|
|
||||||
DEFINE_QDISC_CAST(TBF, TokenBufferFilter);
|
DEFINE_QDISC_CAST(TBF, TokenBucketFilter);
|
||||||
extern const QDiscVTable tbf_vtable;
|
extern const QDiscVTable tbf_vtable;
|
||||||
|
|
||||||
CONFIG_PARSER_PROTOTYPE(config_parse_tc_token_buffer_filter_latency);
|
CONFIG_PARSER_PROTOTYPE(config_parse_token_bucket_filter_latency);
|
||||||
CONFIG_PARSER_PROTOTYPE(config_parse_tc_token_buffer_filter_size);
|
CONFIG_PARSER_PROTOTYPE(config_parse_token_bucket_filter_size);
|
||||||
|
|
|
@ -270,6 +270,53 @@ SendOption=
|
||||||
[NextHop]
|
[NextHop]
|
||||||
Id=
|
Id=
|
||||||
Gateway=
|
Gateway=
|
||||||
|
[NetworkEmulator]
|
||||||
|
Parent=
|
||||||
|
DelaySec=
|
||||||
|
DelayJitterSec=
|
||||||
|
LossRate=
|
||||||
|
DuplicateRate=
|
||||||
|
PacketLimit=
|
||||||
|
[TokenBucketFilter]
|
||||||
|
Parent=
|
||||||
|
Rate=
|
||||||
|
Burst=
|
||||||
|
LimitSize=
|
||||||
|
MTUBytes=
|
||||||
|
MPUBytes=
|
||||||
|
PeakRate=
|
||||||
|
LatencySec=
|
||||||
|
[StochasticFairnessQueueing]
|
||||||
|
Parent=
|
||||||
|
PerturbPeriodSec=
|
||||||
|
[FairQueueingControlledDelay]
|
||||||
|
Parent=
|
||||||
|
PacketLimit=
|
||||||
|
MemoryLimit=
|
||||||
|
Flows=
|
||||||
|
Quantum=
|
||||||
|
TargetSec=
|
||||||
|
IntervalSec=
|
||||||
|
CEThresholdSec=
|
||||||
|
ECN=
|
||||||
|
[FairQueueing]
|
||||||
|
Parent=
|
||||||
|
PacketLimit=
|
||||||
|
FlowLimit=
|
||||||
|
Quantum=
|
||||||
|
InitialQuantum=
|
||||||
|
MaximumRate=
|
||||||
|
Buckets=
|
||||||
|
OrphanMask=
|
||||||
|
Pacing=
|
||||||
|
CEThresholdSec=
|
||||||
|
[ControlledDelay]
|
||||||
|
Parent=
|
||||||
|
PacketLimit=
|
||||||
|
TargetSec=
|
||||||
|
IntervalSec=
|
||||||
|
CEThresholdSec=
|
||||||
|
ECN=
|
||||||
[TrafficControlQueueingDiscipline]
|
[TrafficControlQueueingDiscipline]
|
||||||
Parent=
|
Parent=
|
||||||
NetworkEmulatorDelaySec=
|
NetworkEmulatorDelaySec=
|
||||||
|
@ -277,33 +324,3 @@ NetworkEmulatorDelayJitterSec=
|
||||||
NetworkEmulatorLossRate=
|
NetworkEmulatorLossRate=
|
||||||
NetworkEmulatorDuplicateRate=
|
NetworkEmulatorDuplicateRate=
|
||||||
NetworkEmulatorPacketLimit=
|
NetworkEmulatorPacketLimit=
|
||||||
TokenBufferFilterRate=
|
|
||||||
TokenBufferFilterBurst=
|
|
||||||
TokenBufferFilterLimitSize=
|
|
||||||
TokenBufferFilterMTUBytes=
|
|
||||||
TokenBufferFilterMPUBytes=
|
|
||||||
TokenBufferFilterPeakRate=
|
|
||||||
TokenBufferFilterLatencySec=
|
|
||||||
StochasticFairnessQueueingPerturbPeriodSec=
|
|
||||||
FairQueuingControlledDelayPacketLimit=
|
|
||||||
FairQueuingControlledDelayMemoryLimit=
|
|
||||||
FairQueuingControlledDelayFlows=
|
|
||||||
FairQueuingControlledDelayQuantum=
|
|
||||||
FairQueuingControlledDelayTargetSec=
|
|
||||||
FairQueuingControlledDelayIntervalSec=
|
|
||||||
FairQueuingControlledDelayCEThresholdSec=
|
|
||||||
FairQueuingControlledDelayECN=
|
|
||||||
FairQueueTrafficPolicingPacketLimit=
|
|
||||||
FairQueueTrafficPolicingFlowLimit=
|
|
||||||
FairQueueTrafficPolicingQuantum=
|
|
||||||
FairQueueTrafficPolicingInitialQuantum=
|
|
||||||
FairQueueTrafficPolicingMaximumRate=
|
|
||||||
FairQueueTrafficPolicingBuckets=
|
|
||||||
FairQueueTrafficPolicingOrphanMask=
|
|
||||||
FairQueueTrafficPolicingPacing=
|
|
||||||
FairQueueTrafficPolicingCEThresholdSec=
|
|
||||||
ControlledDelayPacketLimit=
|
|
||||||
ControlledDelayTargetSec=
|
|
||||||
ControlledDelayIntervalSec=
|
|
||||||
ControlledDelayCEThresholdSec=
|
|
||||||
ControlledDelayECN=
|
|
||||||
|
|
|
@ -5,22 +5,22 @@ Name=dummy98
|
||||||
IPv6AcceptRA=no
|
IPv6AcceptRA=no
|
||||||
Address=10.1.2.3/16
|
Address=10.1.2.3/16
|
||||||
|
|
||||||
[TrafficControlQueueingDiscipline]
|
[FairQueueing]
|
||||||
Parent=root
|
Parent=root
|
||||||
FairQueueTrafficPolicingPacketLimit=1000
|
PacketLimit=1000
|
||||||
FairQueueTrafficPolicingFlowLimit=200
|
FlowLimit=200
|
||||||
FairQueueTrafficPolicingQuantum=1500
|
Quantum=1500
|
||||||
FairQueueTrafficPolicingInitialQuantum=13000
|
InitialQuantum=13000
|
||||||
FairQueueTrafficPolicingMaximumRate=1M
|
MaximumRate=1M
|
||||||
FairQueueTrafficPolicingBuckets=512
|
Buckets=512
|
||||||
FairQueueTrafficPolicingOrphanMask=511
|
OrphanMask=511
|
||||||
FairQueueTrafficPolicingPacing=yes
|
Pacing=yes
|
||||||
FairQueueTrafficPolicingCEThresholdSec=100ms
|
CEThresholdSec=100ms
|
||||||
|
|
||||||
[TrafficControlQueueingDiscipline]
|
[ControlledDelay]
|
||||||
Parent=clsact
|
Parent=clsact
|
||||||
ControlledDelayPacketLimit=2000
|
PacketLimit=2000
|
||||||
ControlledDelayTargetSec=10ms
|
TargetSec=10ms
|
||||||
ControlledDelayIntervalSec=50ms
|
IntervalSec=50ms
|
||||||
ControlledDelayECN=yes
|
ECN=yes
|
||||||
ControlledDelayCEThresholdSec=100ms
|
CEThresholdSec=100ms
|
||||||
|
|
|
@ -5,20 +5,20 @@ Name=dummy98
|
||||||
IPv6AcceptRA=no
|
IPv6AcceptRA=no
|
||||||
Address=10.1.2.3/16
|
Address=10.1.2.3/16
|
||||||
|
|
||||||
[TrafficControlQueueingDiscipline]
|
[NetworkEmulator]
|
||||||
Parent=root
|
Parent=root
|
||||||
NetworkEmulatorDelaySec=50ms
|
DelaySec=50ms
|
||||||
NetworkEmulatorDelayJitterSec=10ms
|
DelayJitterSec=10ms
|
||||||
NetworkEmulatorLossRate=20%
|
LossRate=20%
|
||||||
NetworkEmulatorPacketLimit=100
|
PacketLimit=100
|
||||||
|
|
||||||
[TrafficControlQueueingDiscipline]
|
[FairQueueingControlledDelay]
|
||||||
Parent=ingress
|
Parent=ingress
|
||||||
FairQueuingControlledDelayPacketLimit=20480
|
PacketLimit=20480
|
||||||
FairQueuingControlledDelayMemoryLimit=64M
|
MemoryLimit=64M
|
||||||
FairQueuingControlledDelayFlows=2048
|
Flows=2048
|
||||||
FairQueuingControlledDelayTargetSec=10ms
|
TargetSec=10ms
|
||||||
FairQueuingControlledDelayIntervalSec=200ms
|
IntervalSec=200ms
|
||||||
FairQueuingControlledDelayQuantum=1400
|
Quantum=1400
|
||||||
FairQueuingControlledDelayECN=yes
|
ECN=yes
|
||||||
FairQueuingControlledDelayCEThresholdSec=100ms
|
CEThresholdSec=100ms
|
||||||
|
|
|
@ -5,14 +5,14 @@ Name=test1
|
||||||
IPv6AcceptRA=no
|
IPv6AcceptRA=no
|
||||||
Address=10.1.2.4/16
|
Address=10.1.2.4/16
|
||||||
|
|
||||||
[TrafficControlQueueingDiscipline]
|
[TokenBucketFilter]
|
||||||
Parent=root
|
Parent=root
|
||||||
TokenBufferFilterRate=1G
|
Rate=1G
|
||||||
TokenBufferFilterBurst=5K
|
Burst=5K
|
||||||
TokenBufferFilterLatencySec=70msec
|
LatencySec=70msec
|
||||||
TokenBufferFilterPeakRate=100G
|
PeakRate=100G
|
||||||
TokenBufferFilterMTUBytes=1M
|
MTUBytes=1M
|
||||||
|
|
||||||
[TrafficControlQueueingDiscipline]
|
[StochasticFairnessQueueing]
|
||||||
Parent=clsact
|
Parent=clsact
|
||||||
StochasticFairnessQueueingPerturbPeriodSec=5sec
|
PerturbPeriodSec=5sec
|
||||||
|
|
Loading…
Reference in a new issue