]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/network/tc/tclass.h
network: tc: introduce DRR class
[thirdparty/systemd.git] / src / network / tc / tclass.h
CommitLineData
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
11typedef 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
18typedef 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
30typedef 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
39extern 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
55void tclass_free(TClass *tclass);
56int tclass_new_static(TClassKind kind, Network *network, const char *filename, unsigned section_line, TClass **ret);
57
58int tclass_configure(Link *link, TClass *tclass);
59int tclass_section_verify(TClass *tclass);
60
61DEFINE_NETWORK_SECTION_FUNCTIONS(TClass, tclass_free);
62
63DEFINE_TC_CAST(TCLASS, TClass);
64
65CONFIG_PARSER_PROTOTYPE(config_parse_tclass_parent);
66CONFIG_PARSER_PROTOTYPE(config_parse_tclass_classid);
67
ad365c5d 68#include "drr.h"
4666f63b 69#include "htb.h"