]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/network/tc/tc.c
ethtool: add several new link modes
[thirdparty/systemd.git] / src / network / tc / tc.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2
3 #include "macro.h"
4 #include "qdisc.h"
5 #include "tc.h"
6 #include "tclass.h"
7
8 void traffic_control_free(TrafficControl *tc) {
9 if (!tc)
10 return;
11
12 switch (tc->kind) {
13 case TC_KIND_QDISC:
14 qdisc_free(TC_TO_QDISC(tc));
15 break;
16 case TC_KIND_TCLASS:
17 tclass_free(TC_TO_TCLASS(tc));
18 break;
19 default:
20 assert_not_reached("Invalid traffic control type");
21 }
22 }
23
24 int traffic_control_configure(Link *link, TrafficControl *tc) {
25 assert(link);
26 assert(tc);
27
28 switch(tc->kind) {
29 case TC_KIND_QDISC:
30 return qdisc_configure(link, TC_TO_QDISC(tc));
31 case TC_KIND_TCLASS:
32 return tclass_configure(link, TC_TO_TCLASS(tc));
33 default:
34 assert_not_reached("Invalid traffic control type");
35 }
36 }
37
38 int traffic_control_section_verify(TrafficControl *tc, bool *qdisc_has_root, bool *qdisc_has_clsact) {
39 assert(tc);
40
41 switch(tc->kind) {
42 case TC_KIND_QDISC:
43 return qdisc_section_verify(TC_TO_QDISC(tc), qdisc_has_root, qdisc_has_clsact);
44 case TC_KIND_TCLASS:
45 return tclass_section_verify(TC_TO_TCLASS(tc));
46 default:
47 assert_not_reached("Invalid traffic control type");
48 }
49 }