| /* SPDX-License-Identifier: LGPL-2.1+ */ |
| #pragma once |
| |
| #include "networkd-link.h" |
| |
| typedef enum TrafficControlKind { |
| TC_KIND_QDISC, |
| TC_KIND_TCLASS, |
| TC_KIND_FILTER, |
| _TC_KIND_MAX, |
| _TC_KIND_INVALID = -1, |
| } TrafficControlKind; |
| |
| typedef struct TrafficControl { |
| TrafficControlKind kind; |
| } TrafficControl; |
| |
| /* For casting a tc into the various tc kinds */ |
| #define DEFINE_TC_CAST(UPPERCASE, MixedCase) \ |
| static inline MixedCase* TC_TO_##UPPERCASE(TrafficControl *tc) { \ |
| if (_unlikely_(!tc || tc->kind != TC_KIND_##UPPERCASE)) \ |
| return NULL; \ |
| \ |
| return (MixedCase*) tc; \ |
| } |
| |
| /* For casting the various tc kinds into a tc */ |
| #define TC(tc) (&(tc)->meta) |
| |
| void traffic_control_free(TrafficControl *tc); |
| int traffic_control_configure(Link *link, TrafficControl *tc); |
| int traffic_control_section_verify(TrafficControl *tc, bool *qdisc_has_root, bool *qdisc_has_clsact); |