1 /* SPDX-License-Identifier: LGPL-2.1+
2 * Copyright © 2019 VMware, Inc. */
4 #include <linux/pkt_sched.h>
6 #include "alloc-util.h"
7 #include "conf-parser.h"
8 #include "netlink-util.h"
9 #include "parse-util.h"
12 #include "string-util.h"
14 static int stochastic_fairness_queueing_fill_message(Link
*link
, QDisc
*qdisc
, sd_netlink_message
*req
) {
15 StochasticFairnessQueueing
*sfq
;
16 struct tc_sfq_qopt_v1 opt
= {};
25 opt
.v0
.perturb_period
= sfq
->perturb_period
/ USEC_PER_SEC
;
27 r
= sd_netlink_message_append_data(req
, TCA_OPTIONS
, &opt
, sizeof(struct tc_sfq_qopt_v1
));
29 return log_link_error_errno(link
, r
, "Could not append TCA_OPTIONS attribute: %m");
34 int config_parse_tc_stochastic_fairness_queueing_perturb_period(
39 unsigned section_line
,
46 _cleanup_(qdisc_free_or_set_invalidp
) QDisc
*qdisc
= NULL
;
47 StochasticFairnessQueueing
*sfq
;
48 Network
*network
= data
;
56 r
= qdisc_new_static(QDISC_KIND_SFQ
, network
, filename
, section_line
, &qdisc
);
60 return log_syntax(unit
, LOG_ERR
, filename
, line
, r
,
61 "More than one kind of queueing discipline, ignoring assignment: %m");
65 if (isempty(rvalue
)) {
66 sfq
->perturb_period
= 0;
72 r
= parse_sec(rvalue
, &sfq
->perturb_period
);
74 log_syntax(unit
, LOG_ERR
, filename
, line
, r
,
75 "Failed to parse '%s=', ignoring assignment: %s",
85 const QDiscVTable sfq_vtable
= {
86 .object_size
= sizeof(StochasticFairnessQueueing
),
88 .fill_message
= stochastic_fairness_queueing_fill_message
,