]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: tc/cake: introduce Wash= setting
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 3 Nov 2021 20:32:44 +0000 (05:32 +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 3cc9e8e7788240e17c70816a17e513aefb99fbe6..78c0f6cd57a5b8e52d3dbf9df33829f0db7d405f 100644 (file)
@@ -3669,6 +3669,14 @@ Token=prefixstable:2002:da8:1::</programlisting></para>
         </listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><varname>Wash=</varname></term>
+        <listitem>
+          <para>Takes a boolean value. When true, CAKE clears the DSCP fields, except for ECN bits, of
+          any packet passing through CAKE. Defaults to unset, and the kernel's default is used.</para>
+        </listitem>
+      </varlistentry>
+
     </variablelist>
   </refsect1>
 
index f7866cbc14ca4adcf7b6f030e9c374623fece962..956d7b130e36e7193ce292a5e99514acace5f114 100644 (file)
@@ -394,6 +394,7 @@ CAKE.FlowIsolationMode,                      config_parse_cake_flow_isolation_mo
 CAKE.NAT,                                    config_parse_cake_tristate,                               QDISC_KIND_CAKE,               0
 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
 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 598a019ac2c22ae26a443f93b30547f68bfddeb2..cad36dc2375d066222da1a1754e79b326a43eb0d 100644 (file)
@@ -24,6 +24,7 @@ static int cake_init(QDisc *qdisc) {
         c->flow_isolation_mode = _CAKE_FLOW_ISOLATION_MODE_INVALID;
         c->nat = -1;
         c->preset = _CAKE_PRESET_INVALID;
+        c->wash = -1;
 
         return 0;
 }
@@ -96,6 +97,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_FWMARK attribute: %m");
         }
 
+        if (c->wash >= 0) {
+                r = sd_netlink_message_append_u32(req, TCA_CAKE_WASH, c->wash);
+                if (r < 0)
+                        return log_link_error_errno(link, r, "Could not append TCA_CAKE_WASH 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");
@@ -314,6 +321,8 @@ int config_parse_cake_tristate(
                 dest = &c->autorate;
         else if (streq(lvalue, "NAT"))
                 dest = &c->nat;
+        else if (streq(lvalue, "Wash"))
+                dest = &c->wash;
         else
                 assert_not_reached();
 
index 8743d592ad6f57a6d96e3cc4431a242ce0cfe9da..a947f9cdc7d5f79af9784c47e67894578998a5a6 100644 (file)
@@ -59,6 +59,9 @@ typedef struct CommonApplicationsKeptEnhanced {
         CakePriorityQueueingPreset preset;
         uint32_t fwmark;
 
+        /* Other parameters */
+        int wash;
+
 } CommonApplicationsKeptEnhanced;
 
 DEFINE_QDISC_CAST(CAKE, CommonApplicationsKeptEnhanced);
index de8bec2750d934424e5e301c83c2984232b610a8..92c942c7089fa17e43391323448feb1820275cc0 100644 (file)
@@ -476,6 +476,7 @@ FlowIsolationMode=
 NAT=
 PriorityQueueingPreset=
 FirewallMark=
+Wash=
 [TrafficControlQueueingDiscipline]
 Parent=
 NetworkEmulatorDelaySec=