Skip to content

Commit f5fc044

Browse files
ssahaniyuwata
authored andcommitted
network: TC - introduce DRR
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
1 parent 5c21b46 commit f5fc044

File tree

9 files changed

+58
-0
lines changed

9 files changed

+58
-0
lines changed

man/systemd.network.xml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2739,6 +2739,32 @@
27392739
</variablelist>
27402740
</refsect1>
27412741

2742+
<refsect1>
2743+
<title>[DeficitRoundRobinScheduler] Section Options</title>
2744+
<para>The <literal>[DeficitRoundRobinScheduler]</literal> section manages the queueing discipline (qdisc) of
2745+
Deficit Round Robin Scheduler (DRR).</para>
2746+
2747+
<variablelist class='network-directives'>
2748+
<varlistentry>
2749+
<term><varname>Parent=</varname></term>
2750+
<listitem>
2751+
<para>Specifies the parent Queueing Discipline (qdisc). Takes one of <literal>root</literal>,
2752+
<literal>clsact</literal>, <literal>ingress</literal> or a class id. The class id takes the
2753+
major and minor number in hexadecimal ranges 1 to ffff separated with a colon
2754+
(<literal>major:minor</literal>). Defaults to <literal>root</literal>.</para>
2755+
</listitem>
2756+
</varlistentry>
2757+
2758+
<varlistentry>
2759+
<term><varname>Handle=</varname></term>
2760+
<listitem>
2761+
<para>Specifies the major number of unique identifier of the qdisc, known as the handle.
2762+
Takes a number in hexadecimal ranges 1 to ffff. Defaults to unset.</para>
2763+
</listitem>
2764+
</varlistentry>
2765+
</variablelist>
2766+
</refsect1>
2767+
27422768
<refsect1>
27432769
<title>[GenericRandomEarlyDetection] Section Options</title>
27442770
<para>The <literal>[GenericRandomEarlyDetection]</literal> section manages the queueing discipline

src/network/meson.build

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ sources = files('''
111111
tc/cake.h
112112
tc/codel.c
113113
tc/codel.h
114+
tc/drr.c
115+
tc/drr.h
114116
tc/fifo.c
115117
tc/fifo.h
116118
tc/fq.c

src/network/networkd-network-gperf.gperf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,8 @@ ControlledDelay.TargetSec, config_parse_controlled_delay_usec,
269269
ControlledDelay.IntervalSec, config_parse_controlled_delay_usec, QDISC_KIND_CODEL, 0
270270
ControlledDelay.CEThresholdSec, config_parse_controlled_delay_usec, QDISC_KIND_CODEL, 0
271271
ControlledDelay.ECN, config_parse_controlled_delay_bool, QDISC_KIND_CODEL, 0
272+
DeficitRoundRobinScheduler.Parent, config_parse_qdisc_parent, QDISC_KIND_DRR, 0
273+
DeficitRoundRobinScheduler.Handle, config_parse_qdisc_handle, QDISC_KIND_DRR, 0
272274
PFIFO.Parent, config_parse_qdisc_parent, QDISC_KIND_PFIFO, 0
273275
PFIFO.Handle, config_parse_qdisc_handle, QDISC_KIND_PFIFO, 0
274276
PFIFO.PacketLimit, config_parse_fifo_size, QDISC_KIND_PFIFO, 0

src/network/networkd-network.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
488488
"QDisc\0"
489489
"CAKE\0"
490490
"ControlledDelay\0"
491+
"DeficitRoundRobinScheduler\0"
491492
"PFIFO\0"
492493
"FairQueueing\0"
493494
"FairQueueingControlledDelay\0"

src/network/tc/drr.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/* SPDX-License-Identifier: LGPL-2.1+
2+
* Copyright © 2020 VMware, Inc. */
3+
4+
#include "drr.h"
5+
6+
const QDiscVTable drr_vtable = {
7+
.object_size = sizeof(DeficitRoundRobinScheduler),
8+
.tca_kind = "drr",
9+
};

src/network/tc/drr.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/* SPDX-License-Identifier: LGPL-2.1+
2+
* Copyright © 2020 VMware, Inc. */
3+
#pragma once
4+
5+
#include "qdisc.h"
6+
7+
typedef struct DeficitRoundRobinScheduler {
8+
QDisc meta;
9+
} DeficitRoundRobinScheduler;
10+
11+
DEFINE_QDISC_CAST(DRR, DeficitRoundRobinScheduler);
12+
extern const QDiscVTable drr_vtable;

src/network/tc/qdisc.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
const QDiscVTable * const qdisc_vtable[_QDISC_KIND_MAX] = {
1919
[QDISC_KIND_CAKE] = &cake_vtable,
2020
[QDISC_KIND_CODEL] = &codel_vtable,
21+
[QDISC_KIND_DRR] = &drr_vtable,
2122
[QDISC_KIND_FQ] = &fq_vtable,
2223
[QDISC_KIND_FQ_CODEL] = &fq_codel_vtable,
2324
[QDISC_KIND_GRED] = &gred_vtable,

src/network/tc/qdisc.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
typedef enum QDiscKind {
1212
QDISC_KIND_CAKE,
1313
QDISC_KIND_CODEL,
14+
QDISC_KIND_DRR,
1415
QDISC_KIND_FQ,
1516
QDISC_KIND_FQ_CODEL,
1617
QDISC_KIND_GRED,
@@ -88,6 +89,7 @@ CONFIG_PARSER_PROTOTYPE(config_parse_qdisc_handle);
8889
#include "htb.h"
8990
#include "pie.h"
9091
#include "netem.h"
92+
#include "drr.h"
9193
#include "sfb.h"
9294
#include "sfq.h"
9395
#include "tbf.h"

test/fuzz/fuzz-network-parser/directives.network

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,3 +374,6 @@ PacketLimit=
374374
Parent=
375375
Handle=
376376
PacketLimit=
377+
[DeficitRoundRobinScheduler]
378+
Parent=
379+
Handle=

0 commit comments

Comments
 (0)