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

typedef struct VxLan VxLan;

#include <linux/if_link.h>

#include "in-addr-util.h"
#include "netdev.h"

#define VXLAN_VID_MAX (1u << 24) - 1
#define VXLAN_FLOW_LABEL_MAX_MASK 0xFFFFFU

typedef enum VxLanDF {
        NETDEV_VXLAN_DF_NO = VXLAN_DF_UNSET,
        NETDEV_VXLAN_DF_YES = VXLAN_DF_SET,
        NETDEV_VXLAN_DF_INHERIT = VXLAN_DF_INHERIT,
        _NETDEV_VXLAN_DF_MAX,
        _NETDEV_VXLAN_DF_INVALID = -EINVAL,
} VxLanDF;

struct VxLan {
        NetDev meta;

        uint32_t vni;

        int remote_family;
        int local_family;
        int group_family;

        VxLanDF df;

        union in_addr_union remote;
        union in_addr_union local;
        union in_addr_union group;

        unsigned tos;
        unsigned ttl;
        unsigned max_fdb;
        unsigned flow_label;

        uint16_t dest_port;

        usec_t fdb_ageing;

        bool learning;
        bool arp_proxy;
        bool route_short_circuit;
        bool l2miss;
        bool l3miss;
        bool udpcsum;
        bool udp6zerocsumtx;
        bool udp6zerocsumrx;
        bool remote_csum_tx;
        bool remote_csum_rx;
        bool group_policy;
        bool generic_protocol_extension;
        bool inherit;
        bool independent;

        struct ifla_vxlan_port_range port_range;
};

DEFINE_NETDEV_CAST(VXLAN, VxLan);
extern const NetDevVTable vxlan_vtable;

const char *df_to_string(VxLanDF d) _const_;
VxLanDF df_from_string(const char *d) _pure_;

CONFIG_PARSER_PROTOTYPE(config_parse_vxlan_address);
CONFIG_PARSER_PROTOTYPE(config_parse_port_range);
CONFIG_PARSER_PROTOTYPE(config_parse_flow_label);
CONFIG_PARSER_PROTOTYPE(config_parse_df);
CONFIG_PARSER_PROTOTYPE(config_parse_vxlan_ttl);
