/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once

#include <inttypes.h>

typedef struct Link Link;
typedef struct Request Request;

typedef enum SetLinkOperation {
        SET_LINK_ADDRESS_GENERATION_MODE, /* Setting IPv6LL address generation mode. */
        SET_LINK_BOND,                    /* Setting bond configs. */
        SET_LINK_BRIDGE,                  /* Setting bridge configs. */
        SET_LINK_BRIDGE_VLAN,             /* Setting bridge VLAN configs. */
        SET_LINK_CAN,                     /* Setting CAN interface configs. */
        SET_LINK_FLAGS,                   /* Setting IFF_NOARP or friends. */
        SET_LINK_GROUP,                   /* Setting interface group. */
        SET_LINK_MAC,                     /* Setting MAC address. */
        SET_LINK_MASTER,                  /* Setting IFLA_MASTER. */
        SET_LINK_MTU,                     /* Setting MTU. */
        _SET_LINK_OPERATION_MAX,
        _SET_LINK_OPERATION_INVALID = -EINVAL,
} SetLinkOperation;

/* SetLinkOperation is casted to int, then stored in void* with INT_TO_PTR(). */
assert_cc(sizeof(SetLinkOperation) <= sizeof(void*));
assert_cc(sizeof(SetLinkOperation) <= sizeof(int));

int link_request_to_set_addrgen_mode(Link *link);
int link_request_to_set_bond(Link *link);
int link_request_to_set_bridge(Link *link);
int link_request_to_set_bridge_vlan(Link *link);
int link_request_to_set_can(Link *link);
int link_request_to_set_flags(Link *link);
int link_request_to_set_group(Link *link);
int link_request_to_set_mac(Link *link, bool allow_retry);
int link_request_to_set_master(Link *link);
int link_request_to_set_mtu(Link *link, uint32_t mtu);

int link_configure_mtu(Link *link);

int request_process_set_link(Request *req);

int link_down(Link *link);

int request_process_activation(Request *req);
int link_request_to_activate(Link *link);

int request_process_link_up_or_down(Request *req);
int link_request_to_bring_up_or_down(Link *link, bool up);
