| /* SPDX-License-Identifier: LGPL-2.1+ */ |
| |
| #include "macro.h" |
| #include "qdisc.h" |
| #include "tc.h" |
| #include "tclass.h" |
| |
| void traffic_control_free(TrafficControl *tc) { |
| if (!tc) |
| return; |
| |
| switch (tc->kind) { |
| case TC_KIND_QDISC: |
| qdisc_free(TC_TO_QDISC(tc)); |
| break; |
| case TC_KIND_TCLASS: |
| tclass_free(TC_TO_TCLASS(tc)); |
| break; |
| default: |
| assert_not_reached("Invalid traffic control type"); |
| } |
| } |
| |
| int traffic_control_configure(Link *link, TrafficControl *tc) { |
| assert(link); |
| assert(tc); |
| |
| switch(tc->kind) { |
| case TC_KIND_QDISC: |
| return qdisc_configure(link, TC_TO_QDISC(tc)); |
| case TC_KIND_TCLASS: |
| return tclass_configure(link, TC_TO_TCLASS(tc)); |
| default: |
| assert_not_reached("Invalid traffic control type"); |
| } |
| } |
| |
| int traffic_control_section_verify(TrafficControl *tc, bool *qdisc_has_root, bool *qdisc_has_clsact) { |
| assert(tc); |
| |
| switch(tc->kind) { |
| case TC_KIND_QDISC: |
| return qdisc_section_verify(TC_TO_QDISC(tc), qdisc_has_root, qdisc_has_clsact); |
| case TC_KIND_TCLASS: |
| return tclass_section_verify(TC_TO_TCLASS(tc)); |
| default: |
| assert_not_reached("Invalid traffic control type"); |
| } |
| } |