]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/network/tc/qdisc.h
Merge pull request #23893 from yuwata/core-mount-re-read-mountinfo
[thirdparty/systemd.git] / src / network / tc / qdisc.h
1 /* SPDX-License-Identifier: LGPL-2.1-or-later
2 * Copyright © 2019 VMware, Inc. */
3 #pragma once
4
5 #include "conf-parser.h"
6 #include "networkd-util.h"
7
8 typedef struct Link Link;
9 typedef struct Manager Manager;
10 typedef struct Network Network;
11
12 typedef enum QDiscKind {
13 QDISC_KIND_BFIFO,
14 QDISC_KIND_CAKE,
15 QDISC_KIND_CODEL,
16 QDISC_KIND_DRR,
17 QDISC_KIND_ETS,
18 QDISC_KIND_FQ,
19 QDISC_KIND_FQ_CODEL,
20 QDISC_KIND_FQ_PIE,
21 QDISC_KIND_GRED,
22 QDISC_KIND_HHF,
23 QDISC_KIND_HTB,
24 QDISC_KIND_NETEM,
25 QDISC_KIND_PFIFO,
26 QDISC_KIND_PFIFO_FAST,
27 QDISC_KIND_PFIFO_HEAD_DROP,
28 QDISC_KIND_PIE,
29 QDISC_KIND_QFQ,
30 QDISC_KIND_SFB,
31 QDISC_KIND_SFQ,
32 QDISC_KIND_TBF,
33 QDISC_KIND_TEQL,
34 _QDISC_KIND_MAX,
35 _QDISC_KIND_INVALID = -EINVAL,
36 } QDiscKind;
37
38 typedef struct QDisc {
39 Link *link;
40 Network *network;
41 ConfigSection *section;
42 NetworkConfigSource source;
43 NetworkConfigState state;
44
45 uint32_t handle;
46 uint32_t parent;
47
48 char *tca_kind;
49 QDiscKind kind;
50 } QDisc;
51
52 typedef struct QDiscVTable {
53 size_t object_size;
54 const char *tca_kind;
55 /* called in qdisc_new() */
56 int (*init)(QDisc *qdisc);
57 int (*fill_message)(Link *link, QDisc *qdisc, sd_netlink_message *m);
58 int (*verify)(QDisc *qdisc);
59 int (*is_ready)(QDisc *qdisc, Link *link);
60 } QDiscVTable;
61
62 extern const QDiscVTable * const qdisc_vtable[_QDISC_KIND_MAX];
63
64 #define QDISC_VTABLE(q) ((q)->kind != _QDISC_KIND_INVALID ? qdisc_vtable[(q)->kind] : NULL)
65
66 /* For casting a qdisc into the various qdisc kinds */
67 #define DEFINE_QDISC_CAST(UPPERCASE, MixedCase) \
68 static inline MixedCase* UPPERCASE(QDisc *q) { \
69 if (_unlikely_(!q || q->kind != QDISC_KIND_##UPPERCASE)) \
70 return NULL; \
71 \
72 return (MixedCase*) q; \
73 }
74
75 DEFINE_NETWORK_CONFIG_STATE_FUNCTIONS(QDisc, qdisc);
76
77 QDisc* qdisc_free(QDisc *qdisc);
78 int qdisc_new_static(QDiscKind kind, Network *network, const char *filename, unsigned section_line, QDisc **ret);
79
80 int link_find_qdisc(Link *link, uint32_t handle, uint32_t parent, const char *kind, QDisc **qdisc);
81
82 int link_request_qdisc(Link *link, QDisc *qdisc);
83
84 void network_drop_invalid_qdisc(Network *network);
85
86 int manager_rtnl_process_qdisc(sd_netlink *rtnl, sd_netlink_message *message, Manager *m);
87
88 DEFINE_SECTION_CLEANUP_FUNCTIONS(QDisc, qdisc_free);
89
90 CONFIG_PARSER_PROTOTYPE(config_parse_qdisc_parent);
91 CONFIG_PARSER_PROTOTYPE(config_parse_qdisc_handle);
92
93 #include "cake.h"
94 #include "codel.h"
95 #include "ets.h"
96 #include "fifo.h"
97 #include "fq-codel.h"
98 #include "fq-pie.h"
99 #include "fq.h"
100 #include "gred.h"
101 #include "hhf.h"
102 #include "htb.h"
103 #include "pie.h"
104 #include "qfq.h"
105 #include "netem.h"
106 #include "drr.h"
107 #include "sfb.h"
108 #include "sfq.h"
109 #include "tbf.h"
110 #include "teql.h"