]>
Commit | Line | Data |
---|---|---|
db9ecf05 | 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later |
0f5bd7fe SS |
2 | * Copyright © 2019 VMware, Inc. */ |
3 | #pragma once | |
4 | ||
5 | #include "conf-parser.h" | |
737f1405 | 6 | #include "networkd-util.h" |
3a67b8bb YW |
7 | |
8 | typedef struct Link Link; | |
9 | typedef struct Manager Manager; | |
10 | typedef struct Network Network; | |
e8c17dc0 YW |
11 | |
12 | typedef enum QDiscKind { | |
c853f594 | 13 | QDISC_KIND_BFIFO, |
ad8352f4 | 14 | QDISC_KIND_CAKE, |
a9a5d632 | 15 | QDISC_KIND_CODEL, |
f5fc0441 | 16 | QDISC_KIND_DRR, |
d474aa51 | 17 | QDISC_KIND_ETS, |
7234b915 | 18 | QDISC_KIND_FQ, |
e8c17dc0 | 19 | QDISC_KIND_FQ_CODEL, |
8f6b6d70 | 20 | QDISC_KIND_FQ_PIE, |
609e8340 | 21 | QDISC_KIND_GRED, |
7f224020 | 22 | QDISC_KIND_HHF, |
b934ac3d | 23 | QDISC_KIND_HTB, |
e8c17dc0 | 24 | QDISC_KIND_NETEM, |
a7476065 | 25 | QDISC_KIND_PFIFO, |
1a95964b | 26 | QDISC_KIND_PFIFO_FAST, |
053a2ddb | 27 | QDISC_KIND_PFIFO_HEAD_DROP, |
bde4ae88 | 28 | QDISC_KIND_PIE, |
b12aaee5 | 29 | QDISC_KIND_QFQ, |
982998b0 | 30 | QDISC_KIND_SFB, |
e8c17dc0 YW |
31 | QDISC_KIND_SFQ, |
32 | QDISC_KIND_TBF, | |
9b749c11 | 33 | QDISC_KIND_TEQL, |
e8c17dc0 | 34 | _QDISC_KIND_MAX, |
2d93c20e | 35 | _QDISC_KIND_INVALID = -EINVAL, |
e8c17dc0 | 36 | } QDiscKind; |
0f5bd7fe | 37 | |
edc54f2f | 38 | typedef struct QDisc { |
828a81a9 | 39 | Link *link; |
0f5bd7fe | 40 | Network *network; |
828a81a9 YW |
41 | ConfigSection *section; |
42 | NetworkConfigSource source; | |
43 | NetworkConfigState state; | |
0f5bd7fe | 44 | |
0f5bd7fe SS |
45 | uint32_t handle; |
46 | uint32_t parent; | |
47 | ||
d8081020 | 48 | char *tca_kind; |
e8c17dc0 | 49 | QDiscKind kind; |
edc54f2f | 50 | } QDisc; |
0f5bd7fe | 51 | |
e8c17dc0 YW |
52 | typedef struct QDiscVTable { |
53 | size_t object_size; | |
54 | const char *tca_kind; | |
ac810b75 YW |
55 | /* called in qdisc_new() */ |
56 | int (*init)(QDisc *qdisc); | |
e8c17dc0 YW |
57 | int (*fill_message)(Link *link, QDisc *qdisc, sd_netlink_message *m); |
58 | int (*verify)(QDisc *qdisc); | |
21261ea2 | 59 | int (*is_ready)(QDisc *qdisc, Link *link); |
e8c17dc0 YW |
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 | ||
828a81a9 YW |
75 | DEFINE_NETWORK_CONFIG_STATE_FUNCTIONS(QDisc, qdisc); |
76 | ||
75db809a | 77 | QDisc* qdisc_free(QDisc *qdisc); |
e8c17dc0 | 78 | int qdisc_new_static(QDiscKind kind, Network *network, const char *filename, unsigned section_line, QDisc **ret); |
0f5bd7fe | 79 | |
be8e9339 YW |
80 | QDisc* qdisc_drop(QDisc *qdisc); |
81 | ||
9e4d8716 | 82 | int link_find_qdisc(Link *link, uint32_t handle, const char *kind, QDisc **qdisc); |
7ec18462 | 83 | |
1dec9d81 | 84 | int link_request_qdisc(Link *link, QDisc *qdisc); |
3a67b8bb YW |
85 | |
86 | void network_drop_invalid_qdisc(Network *network); | |
8efb93f0 | 87 | |
828a81a9 YW |
88 | int manager_rtnl_process_qdisc(sd_netlink *rtnl, sd_netlink_message *message, Manager *m); |
89 | ||
307fe3cd | 90 | DEFINE_SECTION_CLEANUP_FUNCTIONS(QDisc, qdisc_free); |
0f5bd7fe | 91 | |
18de0969 | 92 | CONFIG_PARSER_PROTOTYPE(config_parse_qdisc_parent); |
d8b2396d | 93 | CONFIG_PARSER_PROTOTYPE(config_parse_qdisc_handle); |
e8c17dc0 | 94 | |
ad8352f4 | 95 | #include "cake.h" |
a9a5d632 | 96 | #include "codel.h" |
d474aa51 | 97 | #include "ets.h" |
a7476065 | 98 | #include "fifo.h" |
e8c17dc0 | 99 | #include "fq-codel.h" |
8f6b6d70 | 100 | #include "fq-pie.h" |
7234b915 | 101 | #include "fq.h" |
609e8340 | 102 | #include "gred.h" |
7f224020 | 103 | #include "hhf.h" |
b934ac3d | 104 | #include "htb.h" |
bde4ae88 | 105 | #include "pie.h" |
b12aaee5 | 106 | #include "qfq.h" |
e8c17dc0 | 107 | #include "netem.h" |
f5fc0441 | 108 | #include "drr.h" |
982998b0 | 109 | #include "sfb.h" |
e8c17dc0 YW |
110 | #include "sfq.h" |
111 | #include "tbf.h" | |
9b749c11 | 112 | #include "teql.h" |