diff options
author | Susant Sahani <ssahani@vmware.com> | 2020-03-10 08:46:40 +0100 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2020-03-12 15:35:51 +0900 |
commit | f5fc04417ed15cbe20ba922de30ce5e440dc2215 (patch) | |
tree | dd4cf8c1a79539c2ee274cbf790e0960983666e5 /src/network | |
parent | 5c21b46e49b6cfb6b5fa181eb38a0632e0f4226c (diff) | |
download | systemd-f5fc04417ed15cbe20ba922de30ce5e440dc2215.tar.gz |
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
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/meson.build | 2 | ||||
-rw-r--r-- | src/network/networkd-network-gperf.gperf | 2 | ||||
-rw-r--r-- | src/network/networkd-network.c | 1 | ||||
-rw-r--r-- | src/network/tc/drr.c | 9 | ||||
-rw-r--r-- | src/network/tc/drr.h | 12 | ||||
-rw-r--r-- | src/network/tc/qdisc.c | 1 | ||||
-rw-r--r-- | src/network/tc/qdisc.h | 2 |
7 files changed, 29 insertions, 0 deletions
diff --git a/src/network/meson.build b/src/network/meson.build index 92ef0c1feb..8376a087b9 100644 --- a/src/network/meson.build +++ b/src/network/meson.build @@ -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 diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index 9b58702f10..17e4256b54 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -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 diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 62e9a7c5d5..896e5b9de6 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -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 index 0000000000..086d775ed4 --- /dev/null +++ b/src/network/tc/drr.c @@ -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 index 0000000000..4e20c4f7d1 --- /dev/null +++ b/src/network/tc/drr.h @@ -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; diff --git a/src/network/tc/qdisc.c b/src/network/tc/qdisc.c index 44f296e744..06204063eb 100644 --- a/src/network/tc/qdisc.c +++ b/src/network/tc/qdisc.c @@ -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, diff --git a/src/network/tc/qdisc.h b/src/network/tc/qdisc.h index 81e740f66d..dea3847728 100644 --- a/src/network/tc/qdisc.h +++ b/src/network/tc/qdisc.h @@ -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" |