]>
Commit | Line | Data |
---|---|---|
4666f63b YW |
1 | /* SPDX-License-Identifier: LGPL-2.1+ |
2 | * Copyright © 2019 VMware, Inc. */ | |
3 | #pragma once | |
4 | ||
5 | #include "conf-parser.h" | |
6 | #include "networkd-link.h" | |
7 | #include "networkd-network.h" | |
8 | #include "networkd-util.h" | |
9 | #include "tc.h" | |
10 | ||
11 | typedef enum TClassKind { | |
ad365c5d | 12 | TCLASS_KIND_DRR, |
4666f63b YW |
13 | TCLASS_KIND_HTB, |
14 | _TCLASS_KIND_MAX, | |
15 | _TCLASS_KIND_INVALID = -1, | |
16 | } TClassKind; | |
17 | ||
18 | typedef struct TClass { | |
19 | TrafficControl meta; | |
20 | ||
21 | NetworkConfigSection *section; | |
22 | Network *network; | |
23 | ||
24 | uint32_t classid; | |
25 | uint32_t parent; | |
26 | ||
27 | TClassKind kind; | |
28 | } TClass; | |
29 | ||
30 | typedef struct TClassVTable { | |
31 | size_t object_size; | |
32 | const char *tca_kind; | |
33 | /* called in tclass_new() */ | |
34 | int (*init)(TClass *tclass); | |
35 | int (*fill_message)(Link *link, TClass *tclass, sd_netlink_message *m); | |
36 | int (*verify)(TClass *tclass); | |
37 | } TClassVTable; | |
38 | ||
39 | extern const TClassVTable * const tclass_vtable[_TCLASS_KIND_MAX]; | |
40 | ||
41 | #define TCLASS_VTABLE(t) ((t)->kind != _TCLASS_KIND_INVALID ? tclass_vtable[(t)->kind] : NULL) | |
42 | ||
43 | /* For casting a tclass into the various tclass kinds */ | |
44 | #define DEFINE_TCLASS_CAST(UPPERCASE, MixedCase) \ | |
45 | static inline MixedCase* TCLASS_TO_##UPPERCASE(TClass *t) { \ | |
46 | if (_unlikely_(!t || t->kind != TCLASS_KIND_##UPPERCASE)) \ | |
47 | return NULL; \ | |
48 | \ | |
49 | return (MixedCase*) t; \ | |
50 | } | |
51 | ||
52 | /* For casting the various tclass kinds into a tclass */ | |
53 | #define TCLASS(t) (&(t)->meta) | |
54 | ||
55 | void tclass_free(TClass *tclass); | |
56 | int tclass_new_static(TClassKind kind, Network *network, const char *filename, unsigned section_line, TClass **ret); | |
57 | ||
58 | int tclass_configure(Link *link, TClass *tclass); | |
59 | int tclass_section_verify(TClass *tclass); | |
60 | ||
61 | DEFINE_NETWORK_SECTION_FUNCTIONS(TClass, tclass_free); | |
62 | ||
63 | DEFINE_TC_CAST(TCLASS, TClass); | |
64 | ||
65 | CONFIG_PARSER_PROTOTYPE(config_parse_tclass_parent); | |
66 | CONFIG_PARSER_PROTOTYPE(config_parse_tclass_classid); | |
67 | ||
ad365c5d | 68 | #include "drr.h" |
4666f63b | 69 | #include "htb.h" |