From: Yu Watanabe Date: Wed, 3 Nov 2021 20:38:13 +0000 (+0900) Subject: network: tc/cake: introduce SplitGSO= setting X-Git-Tag: v250-rc1~330^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=35896db4895f68050c3edd2c58b913dcba4e0fd8;p=thirdparty%2Fsystemd.git network: tc/cake: introduce SplitGSO= setting --- diff --git a/man/systemd.network.xml b/man/systemd.network.xml index 78c0f6cd57a..d844b205d44 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -3677,6 +3677,15 @@ Token=prefixstable:2002:da8:1:: + + SplitGSO= + + 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. + + + diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index 956d7b130e3..33a2f296d6f 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -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 diff --git a/src/network/tc/cake.c b/src/network/tc/cake.c index cad36dc2375..34e89c847b0 100644 --- a/src/network/tc/cake.c +++ b/src/network/tc/cake.c @@ -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(); diff --git a/src/network/tc/cake.h b/src/network/tc/cake.h index a947f9cdc7d..165a17f53f9 100644 --- a/src/network/tc/cake.h +++ b/src/network/tc/cake.h @@ -61,6 +61,7 @@ typedef struct CommonApplicationsKeptEnhanced { /* Other parameters */ int wash; + int split_gso; } CommonApplicationsKeptEnhanced; diff --git a/test/fuzz/fuzz-network-parser/directives.network b/test/fuzz/fuzz-network-parser/directives.network index 92c942c7089..d6efeacd428 100644 --- a/test/fuzz/fuzz-network-parser/directives.network +++ b/test/fuzz/fuzz-network-parser/directives.network @@ -477,6 +477,7 @@ NAT= PriorityQueueingPreset= FirewallMark= Wash= +SplitGSO= [TrafficControlQueueingDiscipline] Parent= NetworkEmulatorDelaySec=