]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: TC - introduce pfifo_fast
authorSusant Sahani <ssahani@vmware.com>
Wed, 11 Mar 2020 10:02:20 +0000 (11:02 +0100)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 12 Mar 2020 06:38:18 +0000 (15:38 +0900)
pfifo_fast - three-band first in, first out queue

Please see https://linux.die.net/man/8/tc-pfifo_fast

man/systemd.network.xml
src/network/networkd-network-gperf.gperf
src/network/networkd-network.c
src/network/tc/fifo.c
src/network/tc/fifo.h
src/network/tc/qdisc.c
src/network/tc/qdisc.h
test/fuzz/fuzz-network-parser/directives.network

index c6997f14206d70bbc61f63d113bfc869a8d49e75..5f01c505294806cd75b03bb897eff11aa282fce3 100644 (file)
     </variablelist>
   </refsect1>
 
+  <refsect1>
+     <title>[PFIFOFast] Section Options</title>
+     <para>The <literal>[PFIFOFast]</literal> section manages the queueing discipline (qdisc) of
+     Packet First In First Out Fast (pfifo_fast).</para>
+
+     <variablelist class='network-directives'>
+       <varlistentry>
+         <term><varname>Parent=</varname></term>
+         <listitem>
+           <para>As in <literal>[PFIFO]</literal> section.</para></listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term><varname>Handle=</varname></term>
+         <listitem>
+           <para>As in <literal>[PFIFO]</literal> section..</para>
+         </listitem>
+       </varlistentry>
+     </variablelist>
+  </refsect1>
+
   <refsect1>
     <title>[CAKE] Section Options</title>
     <para>The <literal>[CAKE]</literal> section manages the queueing discipline (qdisc) of
index 0e8ecabc670aa43c347718845dd028b1417b9449..3b7b9ebd8bd1213b820ae1f5b1ed7b4f09673b3e 100644 (file)
@@ -280,6 +280,8 @@ DeficitRoundRobinSchedulerClass.Quantum,     config_parse_drr_size,
 PFIFO.Parent,                                config_parse_qdisc_parent,                                QDISC_KIND_PFIFO,              0
 PFIFO.Handle,                                config_parse_qdisc_handle,                                QDISC_KIND_PFIFO,              0
 PFIFO.PacketLimit,                           config_parse_pfifo_size,                                  QDISC_KIND_PFIFO,              0
+PFIFOFast.Parent,                            config_parse_qdisc_parent,                                QDISC_KIND_PFIFO_FAST,         0
+PFIFOFast.Handle,                            config_parse_qdisc_handle,                                QDISC_KIND_PFIFO_FAST,         0
 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
index 6b1f00c099932b06d039081f97aee4ddedbd68aa..728191728f26e5db8a784f38ed889670fb72f485 100644 (file)
@@ -492,6 +492,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
                               "DeficitRoundRobinScheduler\0"
                               "DeficitRoundRobinSchedulerClass\0"
                               "PFIFO\0"
+                              "PFIFOFast\0"
                               "PFIFOHeadDrop\0"
                               "FairQueueing\0"
                               "FairQueueingControlledDelay\0"
index a524b614b969e7a6d1c53539cf9125390df1c5f4..8ef6e513bb1c840e4476c41ce7987ef131411cd7 100644 (file)
@@ -176,3 +176,8 @@ const QDiscVTable pfifo_head_drop_vtable = {
        .tca_kind = "pfifo_head_drop",
        .fill_message = fifo_fill_message,
 };
+
+const QDiscVTable pfifo_fast_vtable = {
+       .object_size = sizeof(FirstInFirstOut),
+       .tca_kind = "pfifo_fast",
+};
index bba5f17abefba7fabb74aee0c883d301edabcf84..e4c976b942cf0583861245f95b7b20255411b7fd 100644 (file)
@@ -14,10 +14,12 @@ typedef struct FirstInFirstOut {
 DEFINE_QDISC_CAST(PFIFO, FirstInFirstOut);
 DEFINE_QDISC_CAST(BFIFO, FirstInFirstOut);
 DEFINE_QDISC_CAST(PFIFO_HEAD_DROP, FirstInFirstOut);
+DEFINE_QDISC_CAST(PFIFO_FAST, FirstInFirstOut);
 
 extern const QDiscVTable pfifo_vtable;
 extern const QDiscVTable bfifo_vtable;
 extern const QDiscVTable pfifo_head_drop_vtable;
+extern const QDiscVTable pfifo_fast_vtable;
 
 CONFIG_PARSER_PROTOTYPE(config_parse_pfifo_size);
 CONFIG_PARSER_PROTOTYPE(config_parse_bfifo_size);
index da0f43f7d2a602cd02629bd76fb0095242661527..57f08900996ca8679a097574762254f2815cbd17 100644 (file)
@@ -27,6 +27,7 @@ const QDiscVTable * const qdisc_vtable[_QDISC_KIND_MAX] = {
         [QDISC_KIND_NETEM] = &netem_vtable,
         [QDISC_KIND_PIE] = &pie_vtable,
         [QDISC_KIND_PFIFO] = &pfifo_vtable,
+        [QDISC_KIND_PFIFO_FAST] = &pfifo_fast_vtable,
         [QDISC_KIND_PFIFO_HEAD_DROP] = &pfifo_head_drop_vtable,
         [QDISC_KIND_SFB] = &sfb_vtable,
         [QDISC_KIND_SFQ] = &sfq_vtable,
index 8f348d69e3eea2e6e4c0452742295a4038cc1e7a..0d606bf8242a459b90877f17f46eb01bafb02796 100644 (file)
@@ -19,6 +19,7 @@ typedef enum QDiscKind {
         QDISC_KIND_HTB,
         QDISC_KIND_NETEM,
         QDISC_KIND_PFIFO,
+        QDISC_KIND_PFIFO_FAST,
         QDISC_KIND_PFIFO_HEAD_DROP,
         QDISC_KIND_PIE,
         QDISC_KIND_SFB,
index c0f71bc13f74e6967f6b1d18a456c52b748b6638..5265946dfe55d3d5edb50ab432e2768453d4a3f9 100644 (file)
@@ -368,6 +368,9 @@ PacketLimit=
 Parent=
 Handle=
 PacketLimit=
+[PFIFOFast]
+Parent=
+Handle=
 [GenericRandomEarlyDetection]
 Parent=
 Handle=