/* SPDX-License-Identifier: LGPL-2.1-or-later */

#include "macro.h"
#include "networkd-link.h"
#include "networkd-network.h"
#include "qdisc.h"
#include "tc.h"
#include "tclass.h"

int link_request_traffic_control(Link *link) {
        TClass *tclass;
        QDisc *qdisc;
        int r;

        assert(link);
        assert(link->network);

        link->tc_configured = false;

        HASHMAP_FOREACH(qdisc, link->network->qdiscs_by_section) {
                r = link_request_qdisc(link, qdisc);
                if (r < 0)
                        return r;
        }

        HASHMAP_FOREACH(tclass, link->network->tclasses_by_section) {
                r = link_request_tclass(link, tclass);
                if (r < 0)
                        return r;
        }

        if (link->tc_messages == 0) {
                link->tc_configured = true;
                link_check_ready(link);
        } else {
                log_link_debug(link, "Setting traffic control");
                link_set_state(link, LINK_STATE_CONFIGURING);
        }

        return 0;
}
