Skip to content

Commit b12aaee

Browse files
ssahaniyuwata
authored andcommitted
network: tc: introduce Quick Fair Queueing (QFQ)
1 parent c33f1e5 commit b12aaee

File tree

9 files changed

+47
-3
lines changed

9 files changed

+47
-3
lines changed

man/systemd.network.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3252,6 +3252,17 @@
32523252
</variablelist>
32533253
</refsect1>
32543254

3255+
<refsect1>
3256+
<title>[QuickFairQueueing] Section Options</title>
3257+
<para>The <literal>[QuickFairQueueing]</literal> section manages the queueing discipline
3258+
(qdisc) of Quick Fair Queueing (QFQ).</para>
3259+
3260+
<variablelist class='network-directives'>
3261+
<xi:include href="tc.xml" xpointer="qdisc-parent" />
3262+
<xi:include href="tc.xml" xpointer="qdisc-handle" />
3263+
</variablelist>
3264+
</refsect1>
3265+
32553266
<refsect1>
32563267
<title>[BridgeVLAN] Section Options</title>
32573268
<para>The <literal>[BridgeVLAN]</literal> section manages the VLAN ID configuration of a bridge port and accepts

src/network/meson.build

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ sources = files('''
131131
tc/pie.h
132132
tc/qdisc.c
133133
tc/qdisc.h
134+
tc/qfq.c
135+
tc/qfq.h
134136
tc/sfb.c
135137
tc/sfb.h
136138
tc/sfq.c

src/network/networkd-network-gperf.gperf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,8 @@ PFIFOFast.Handle, config_parse_qdisc_handle,
312312
PFIFOHeadDrop.Parent, config_parse_qdisc_parent, QDISC_KIND_PFIFO_HEAD_DROP, 0
313313
PFIFOHeadDrop.Handle, config_parse_qdisc_handle, QDISC_KIND_PFIFO_HEAD_DROP, 0
314314
PFIFOHeadDrop.PacketLimit, config_parse_pfifo_size, QDISC_KIND_PFIFO_HEAD_DROP, 0
315+
QuickFairQueueing.Parent, config_parse_qdisc_parent, QDISC_KIND_QFQ, 0
316+
QuickFairQueueing.Handle, config_parse_qdisc_handle, QDISC_KIND_QFQ, 0
315317
FairQueueing.Parent, config_parse_qdisc_parent, QDISC_KIND_FQ, 0
316318
FairQueueing.Handle, config_parse_qdisc_handle, QDISC_KIND_FQ, 0
317319
FairQueueing.PacketLimit, config_parse_fair_queueing_u32, QDISC_KIND_FQ, 0

src/network/networkd-network.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -508,17 +508,18 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
508508
"ControlledDelay\0"
509509
"DeficitRoundRobinScheduler\0"
510510
"DeficitRoundRobinSchedulerClass\0"
511-
"PFIFO\0"
512-
"PFIFOFast\0"
513-
"PFIFOHeadDrop\0"
514511
"FairQueueing\0"
515512
"FairQueueingControlledDelay\0"
516513
"GenericRandomEarlyDetection\0"
517514
"HeavyHitterFilter\0"
518515
"HierarchyTokenBucket\0"
519516
"HierarchyTokenBucketClass\0"
520517
"NetworkEmulator\0"
518+
"PFIFO\0"
519+
"PFIFOFast\0"
520+
"PFIFOHeadDrop\0"
521521
"PIE\0"
522+
"QuickFairQueueing\0"
522523
"StochasticFairBlue\0"
523524
"StochasticFairnessQueueing\0"
524525
"TokenBucketFilter\0"

src/network/tc/qdisc.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ const QDiscVTable * const qdisc_vtable[_QDISC_KIND_MAX] = {
2727
[QDISC_KIND_HTB] = &htb_vtable,
2828
[QDISC_KIND_NETEM] = &netem_vtable,
2929
[QDISC_KIND_PIE] = &pie_vtable,
30+
[QDISC_KIND_QFQ] = &qfq_vtable,
3031
[QDISC_KIND_PFIFO] = &pfifo_vtable,
3132
[QDISC_KIND_PFIFO_FAST] = &pfifo_fast_vtable,
3233
[QDISC_KIND_PFIFO_HEAD_DROP] = &pfifo_head_drop_vtable,

src/network/tc/qdisc.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ typedef enum QDiscKind {
2323
QDISC_KIND_PFIFO_FAST,
2424
QDISC_KIND_PFIFO_HEAD_DROP,
2525
QDISC_KIND_PIE,
26+
QDISC_KIND_QFQ,
2627
QDISC_KIND_SFB,
2728
QDISC_KIND_SFQ,
2829
QDISC_KIND_TBF,
@@ -93,6 +94,7 @@ CONFIG_PARSER_PROTOTYPE(config_parse_qdisc_handle);
9394
#include "hhf.h"
9495
#include "htb.h"
9596
#include "pie.h"
97+
#include "qfq.h"
9698
#include "netem.h"
9799
#include "drr.h"
98100
#include "sfb.h"

src/network/tc/qfq.c

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

src/network/tc/qfq.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 QuickFairQueueing {
8+
QDisc meta;
9+
} QuickFairQueueing;
10+
11+
DEFINE_QDISC_CAST(QFQ, QuickFairQueueing);
12+
extern const QDiscVTable qfq_vtable;

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,9 @@ PacketLimit=
411411
Parent=
412412
Handle=
413413
PacketLimit=
414+
[QuickFairQueueing]
415+
Parent=
416+
Handle=
414417
[DeficitRoundRobinScheduler]
415418
Parent=
416419
Handle=

0 commit comments

Comments
 (0)