diff options
author | Susant Sahani <ssahani@vmware.com> | 2020-03-19 22:41:57 +0100 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2020-06-03 14:17:51 +0900 |
commit | b12aaee5ab59bd51e052e3442ed42bee3e0dab7d (patch) | |
tree | ae415bf1612e530f88d8232b2ff6e49730cbfee1 | |
parent | c33f1e5a3fef019c137ee727dee75bcca622eae9 (diff) | |
download | systemd-b12aaee5ab59bd51e052e3442ed42bee3e0dab7d.tar.gz |
network: tc: introduce Quick Fair Queueing (QFQ)
-rw-r--r-- | man/systemd.network.xml | 11 | ||||
-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 | 7 | ||||
-rw-r--r-- | src/network/tc/qdisc.c | 1 | ||||
-rw-r--r-- | src/network/tc/qdisc.h | 2 | ||||
-rw-r--r-- | src/network/tc/qfq.c | 10 | ||||
-rw-r--r-- | src/network/tc/qfq.h | 12 | ||||
-rw-r--r-- | test/fuzz/fuzz-network-parser/directives.network | 3 |
9 files changed, 47 insertions, 3 deletions
diff --git a/man/systemd.network.xml b/man/systemd.network.xml index 146401f6c9..472172094d 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -3253,6 +3253,17 @@ </refsect1> <refsect1> + <title>[QuickFairQueueing] Section Options</title> + <para>The <literal>[QuickFairQueueing]</literal> section manages the queueing discipline + (qdisc) of Quick Fair Queueing (QFQ).</para> + + <variablelist class='network-directives'> + <xi:include href="tc.xml" xpointer="qdisc-parent" /> + <xi:include href="tc.xml" xpointer="qdisc-handle" /> + </variablelist> + </refsect1> + + <refsect1> <title>[BridgeVLAN] Section Options</title> <para>The <literal>[BridgeVLAN]</literal> section manages the VLAN ID configuration of a bridge port and accepts the following keys. Specify several <literal>[BridgeVLAN]</literal> sections to configure several VLAN entries. diff --git a/src/network/meson.build b/src/network/meson.build index 35b35a76a6..9cd5796f09 100644 --- a/src/network/meson.build +++ b/src/network/meson.build @@ -131,6 +131,8 @@ sources = files(''' tc/pie.h tc/qdisc.c tc/qdisc.h + tc/qfq.c + tc/qfq.h tc/sfb.c tc/sfb.h tc/sfq.c diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index b3dde3bfac..a27a02ca24 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -312,6 +312,8 @@ PFIFOFast.Handle, config_parse_qdisc_handle, PFIFOHeadDrop.Parent, config_parse_qdisc_parent, QDISC_KIND_PFIFO_HEAD_DROP, 0 PFIFOHeadDrop.Handle, config_parse_qdisc_handle, QDISC_KIND_PFIFO_HEAD_DROP, 0 PFIFOHeadDrop.PacketLimit, config_parse_pfifo_size, QDISC_KIND_PFIFO_HEAD_DROP, 0 +QuickFairQueueing.Parent, config_parse_qdisc_parent, QDISC_KIND_QFQ, 0 +QuickFairQueueing.Handle, config_parse_qdisc_handle, QDISC_KIND_QFQ, 0 FairQueueing.Parent, config_parse_qdisc_parent, QDISC_KIND_FQ, 0 FairQueueing.Handle, config_parse_qdisc_handle, QDISC_KIND_FQ, 0 FairQueueing.PacketLimit, config_parse_fair_queueing_u32, QDISC_KIND_FQ, 0 diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 50e50fd945..fc8581c983 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -508,9 +508,6 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi "ControlledDelay\0" "DeficitRoundRobinScheduler\0" "DeficitRoundRobinSchedulerClass\0" - "PFIFO\0" - "PFIFOFast\0" - "PFIFOHeadDrop\0" "FairQueueing\0" "FairQueueingControlledDelay\0" "GenericRandomEarlyDetection\0" @@ -518,7 +515,11 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi "HierarchyTokenBucket\0" "HierarchyTokenBucketClass\0" "NetworkEmulator\0" + "PFIFO\0" + "PFIFOFast\0" + "PFIFOHeadDrop\0" "PIE\0" + "QuickFairQueueing\0" "StochasticFairBlue\0" "StochasticFairnessQueueing\0" "TokenBucketFilter\0" diff --git a/src/network/tc/qdisc.c b/src/network/tc/qdisc.c index 543f71330f..6ba4325c9c 100644 --- a/src/network/tc/qdisc.c +++ b/src/network/tc/qdisc.c @@ -27,6 +27,7 @@ const QDiscVTable * const qdisc_vtable[_QDISC_KIND_MAX] = { [QDISC_KIND_HTB] = &htb_vtable, [QDISC_KIND_NETEM] = &netem_vtable, [QDISC_KIND_PIE] = &pie_vtable, + [QDISC_KIND_QFQ] = &qfq_vtable, [QDISC_KIND_PFIFO] = &pfifo_vtable, [QDISC_KIND_PFIFO_FAST] = &pfifo_fast_vtable, [QDISC_KIND_PFIFO_HEAD_DROP] = &pfifo_head_drop_vtable, diff --git a/src/network/tc/qdisc.h b/src/network/tc/qdisc.h index 5c43d7a838..802653efb0 100644 --- a/src/network/tc/qdisc.h +++ b/src/network/tc/qdisc.h @@ -23,6 +23,7 @@ typedef enum QDiscKind { QDISC_KIND_PFIFO_FAST, QDISC_KIND_PFIFO_HEAD_DROP, QDISC_KIND_PIE, + QDISC_KIND_QFQ, QDISC_KIND_SFB, QDISC_KIND_SFQ, QDISC_KIND_TBF, @@ -93,6 +94,7 @@ CONFIG_PARSER_PROTOTYPE(config_parse_qdisc_handle); #include "hhf.h" #include "htb.h" #include "pie.h" +#include "qfq.h" #include "netem.h" #include "drr.h" #include "sfb.h" diff --git a/src/network/tc/qfq.c b/src/network/tc/qfq.c new file mode 100644 index 0000000000..8084cda801 --- /dev/null +++ b/src/network/tc/qfq.c @@ -0,0 +1,10 @@ +/* SPDX-License-Identifier: LGPL-2.1+ + * Copyright © 2020 VMware, Inc. */ + +#include "qdisc.h" +#include "qfq.h" + +const QDiscVTable qfq_vtable = { + .object_size = sizeof(QuickFairQueueing), + .tca_kind = "qfq", +}; diff --git a/src/network/tc/qfq.h b/src/network/tc/qfq.h new file mode 100644 index 0000000000..aa1bad219b --- /dev/null +++ b/src/network/tc/qfq.h @@ -0,0 +1,12 @@ +/* SPDX-License-Identifier: LGPL-2.1+ + * Copyright © 2020 VMware, Inc. */ +#pragma once + +#include "qdisc.h" + +typedef struct QuickFairQueueing { + QDisc meta; +} QuickFairQueueing; + +DEFINE_QDISC_CAST(QFQ, QuickFairQueueing); +extern const QDiscVTable qfq_vtable; diff --git a/test/fuzz/fuzz-network-parser/directives.network b/test/fuzz/fuzz-network-parser/directives.network index 0b62420e0a..f5c6d47296 100644 --- a/test/fuzz/fuzz-network-parser/directives.network +++ b/test/fuzz/fuzz-network-parser/directives.network @@ -411,6 +411,9 @@ PacketLimit= Parent= Handle= PacketLimit= +[QuickFairQueueing] +Parent= +Handle= [DeficitRoundRobinScheduler] Parent= Handle= |