]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: TC - introduce DRR
authorSusant Sahani <ssahani@vmware.com>
Tue, 10 Mar 2020 07:46:40 +0000 (08:46 +0100)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 12 Mar 2020 06:35:51 +0000 (15:35 +0900)
Introduce the Deficit Round Robin Scheduler is a classful queuing discipline as
a more flexible replacement for Stochastic Fairness Queuing.

http://man7.org/linux/man-pages/man8/tc-drr.8.html

man/systemd.network.xml
src/network/meson.build
src/network/networkd-network-gperf.gperf
src/network/networkd-network.c
src/network/tc/drr.c [new file with mode: 0644]
src/network/tc/drr.h [new file with mode: 0644]
src/network/tc/qdisc.c
src/network/tc/qdisc.h
test/fuzz/fuzz-network-parser/directives.network

index 350b5172be021298f1a83f7cf0153456425a2887..556deea88178f380a7a55965b65992db8a6b7da6 100644 (file)
     </variablelist>
   </refsect1>
 
+  <refsect1>
+    <title>[DeficitRoundRobinScheduler] Section Options</title>
+    <para>The <literal>[DeficitRoundRobinScheduler]</literal> section manages the queueing discipline (qdisc) of
+    Deficit Round Robin Scheduler (DRR).</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>, <literal>ingress</literal> or a class id. The class id takes the
+          major and minor number in hexadecimal ranges 1 to ffff separated with a colon
+          (<literal>major:minor</literal>). Defaults to <literal>root</literal>.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>Handle=</varname></term>
+        <listitem>
+          <para>Specifies the major number of unique identifier of the qdisc, known as the handle.
+          Takes a number in hexadecimal ranges 1 to ffff. Defaults to unset.</para>
+        </listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
   <refsect1>
     <title>[GenericRandomEarlyDetection] Section Options</title>
     <para>The <literal>[GenericRandomEarlyDetection]</literal> section manages the queueing discipline
index 92ef0c1febe60b824f092549337c80dec6703d80..8376a087b95a0f51f367ad1c20a47552a613cd05 100644 (file)
@@ -111,6 +111,8 @@ sources = files('''
         tc/cake.h
         tc/codel.c
         tc/codel.h
+        tc/drr.c
+        tc/drr.h
         tc/fifo.c
         tc/fifo.h
         tc/fq.c
index 9b58702f105aeb335539df5744d34536265c713c..17e4256b54b0c4cd99920805d2e5364a5121edbf 100644 (file)
@@ -269,6 +269,8 @@ ControlledDelay.TargetSec,                   config_parse_controlled_delay_usec,
 ControlledDelay.IntervalSec,                 config_parse_controlled_delay_usec,                       QDISC_KIND_CODEL,              0
 ControlledDelay.CEThresholdSec,              config_parse_controlled_delay_usec,                       QDISC_KIND_CODEL,              0
 ControlledDelay.ECN,                         config_parse_controlled_delay_bool,                       QDISC_KIND_CODEL,              0
+DeficitRoundRobinScheduler.Parent,           config_parse_qdisc_parent,                                QDISC_KIND_DRR,                0
+DeficitRoundRobinScheduler.Handle,           config_parse_qdisc_handle,                                QDISC_KIND_DRR,                0
 PFIFO.Parent,                                config_parse_qdisc_parent,                                QDISC_KIND_PFIFO,              0
 PFIFO.Handle,                                config_parse_qdisc_handle,                                QDISC_KIND_PFIFO,              0
 PFIFO.PacketLimit,                           config_parse_fifo_size,                                   QDISC_KIND_PFIFO,              0
index 62e9a7c5d580f74d75d1dea4d29806466651ae0e..896e5b9de6125d8c591b9edbc3d6b951fcb4b475 100644 (file)
@@ -488,6 +488,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
                               "QDisc\0"
                               "CAKE\0"
                               "ControlledDelay\0"
+                              "DeficitRoundRobinScheduler\0"
                               "PFIFO\0"
                               "FairQueueing\0"
                               "FairQueueingControlledDelay\0"
diff --git a/src/network/tc/drr.c b/src/network/tc/drr.c
new file mode 100644 (file)
index 0000000..086d775
--- /dev/null
@@ -0,0 +1,9 @@
+/* SPDX-License-Identifier: LGPL-2.1+
+ * Copyright © 2020 VMware, Inc. */
+
+#include "drr.h"
+
+const QDiscVTable drr_vtable = {
+        .object_size = sizeof(DeficitRoundRobinScheduler),
+        .tca_kind = "drr",
+};
diff --git a/src/network/tc/drr.h b/src/network/tc/drr.h
new file mode 100644 (file)
index 0000000..4e20c4f
--- /dev/null
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: LGPL-2.1+
+ * Copyright © 2020 VMware, Inc. */
+#pragma once
+
+#include "qdisc.h"
+
+typedef struct DeficitRoundRobinScheduler {
+        QDisc meta;
+} DeficitRoundRobinScheduler;
+
+DEFINE_QDISC_CAST(DRR, DeficitRoundRobinScheduler);
+extern const QDiscVTable drr_vtable;
index 44f296e744e1b5c48273de59370054520319cfc4..06204063ebfb671be8e62af102f6741d4609e50f 100644 (file)
@@ -18,6 +18,7 @@
 const QDiscVTable * const qdisc_vtable[_QDISC_KIND_MAX] = {
         [QDISC_KIND_CAKE] = &cake_vtable,
         [QDISC_KIND_CODEL] = &codel_vtable,
+        [QDISC_KIND_DRR] = &drr_vtable,
         [QDISC_KIND_FQ] = &fq_vtable,
         [QDISC_KIND_FQ_CODEL] = &fq_codel_vtable,
         [QDISC_KIND_GRED] = &gred_vtable,
index 81e740f66d5a381b9d17013b38ff7e6225d7e76b..dea3847728f141e18741a2fd223d43aa9a837a31 100644 (file)
@@ -11,6 +11,7 @@
 typedef enum QDiscKind {
         QDISC_KIND_CAKE,
         QDISC_KIND_CODEL,
+        QDISC_KIND_DRR,
         QDISC_KIND_FQ,
         QDISC_KIND_FQ_CODEL,
         QDISC_KIND_GRED,
@@ -88,6 +89,7 @@ CONFIG_PARSER_PROTOTYPE(config_parse_qdisc_handle);
 #include "htb.h"
 #include "pie.h"
 #include "netem.h"
+#include "drr.h"
 #include "sfb.h"
 #include "sfq.h"
 #include "tbf.h"
index b48e7eb3e4f9b9b5ebbe9ff3264eb0b6c8abd84f..151b1c2c39b8db6a624cee6cb9af7ff0f2bb05a7 100644 (file)
@@ -374,3 +374,6 @@ PacketLimit=
 Parent=
 Handle=
 PacketLimit=
+[DeficitRoundRobinScheduler]
+Parent=
+Handle=