]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: tc/cake: introduce SplitGSO= setting
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 3 Nov 2021 20:38:13 +0000 (05:38 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 9 Nov 2021 01:58:44 +0000 (10:58 +0900)
man/systemd.network.xml
src/network/networkd-network-gperf.gperf
src/network/tc/cake.c
src/network/tc/cake.h
test/fuzz/fuzz-network-parser/directives.network

index 78c0f6cd57a5b8e52d3dbf9df33829f0db7d405f..d844b205d44d074ed9c36a8bc35d2a34ae11b0a2 100644 (file)
@@ -3677,6 +3677,15 @@ Token=prefixstable:2002:da8:1::</programlisting></para>
         </listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><varname>SplitGSO=</varname></term>
+        <listitem>
+          <para>Takes a boolean value. When true, CAKE will split General Segmentation Offload (GSO)
+          super-packets into their on-the-wire components and dequeue them individually. Defaults to
+          unset, and the kernel's default is used.</para>
+        </listitem>
+      </varlistentry>
+
     </variablelist>
   </refsect1>
 
index 956d7b130e36e7193ce292a5e99514acace5f114..33a2f296d6f04b4a11b495b4d3be94706bfa495f 100644 (file)
@@ -395,6 +395,7 @@ CAKE.NAT,                                    config_parse_cake_tristate,
 CAKE.PriorityQueueingPreset,                 config_parse_cake_priority_queueing_preset,               QDISC_KIND_CAKE,               0
 CAKE.FirewallMark,                           config_parse_cake_fwmark,                                 QDISC_KIND_CAKE,               0
 CAKE.Wash,                                   config_parse_cake_tristate,                               QDISC_KIND_CAKE,               0
+CAKE.SplitGSO,                               config_parse_cake_tristate,                               QDISC_KIND_CAKE,               0
 ControlledDelay.Parent,                      config_parse_qdisc_parent,                                QDISC_KIND_CODEL,              0
 ControlledDelay.Handle,                      config_parse_qdisc_handle,                                QDISC_KIND_CODEL,              0
 ControlledDelay.PacketLimit,                 config_parse_controlled_delay_u32,                        QDISC_KIND_CODEL,              0
index cad36dc2375d066222da1a1754e79b326a43eb0d..34e89c847b0babc1a2b44a6916079c2e39f6a2d0 100644 (file)
@@ -25,6 +25,7 @@ static int cake_init(QDisc *qdisc) {
         c->nat = -1;
         c->preset = _CAKE_PRESET_INVALID;
         c->wash = -1;
+        c->split_gso = -1;
 
         return 0;
 }
@@ -103,6 +104,12 @@ static int cake_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req)
                         return log_link_error_errno(link, r, "Could not append TCA_CAKE_WASH attribute: %m");
         }
 
+        if (c->split_gso >= 0) {
+                r = sd_netlink_message_append_u32(req, TCA_CAKE_SPLIT_GSO, c->wash);
+                if (r < 0)
+                        return log_link_error_errno(link, r, "Could not append TCA_CAKE_SPLIT_GSO attribute: %m");
+        }
+
         r = sd_netlink_message_close_container(req);
         if (r < 0)
                 return log_link_error_errno(link, r, "Could not close container TCA_OPTIONS: %m");
@@ -323,6 +330,8 @@ int config_parse_cake_tristate(
                 dest = &c->nat;
         else if (streq(lvalue, "Wash"))
                 dest = &c->wash;
+        else if (streq(lvalue, "SplitGSO"))
+                dest = &c->split_gso;
         else
                 assert_not_reached();
 
index a947f9cdc7d5f79af9784c47e67894578998a5a6..165a17f53f90be1a74aa4e2f1eaa11ca51e479d3 100644 (file)
@@ -61,6 +61,7 @@ typedef struct CommonApplicationsKeptEnhanced {
 
         /* Other parameters */
         int wash;
+        int split_gso;
 
 } CommonApplicationsKeptEnhanced;
 
index 92c942c7089fa17e43391323448feb1820275cc0..d6efeacd428027d35f230fef4c36eb9008cc0f35 100644 (file)
@@ -477,6 +477,7 @@ NAT=
 PriorityQueueingPreset=
 FirewallMark=
 Wash=
+SplitGSO=
 [TrafficControlQueueingDiscipline]
 Parent=
 NetworkEmulatorDelaySec=