/* SPDX-License-Identifier: GPL-2.0 */
/*
 * This file is taken from upstream as is for MCTP setup
 *
 * mctp: userspace utility for managing the kernel MCTP stack.
 *
 * Interim definitions for the MCTP kernel interface. While the MCTP kernel
 * API is going through upstream, system toolchains may not yet have the
 * required definitions for mctp tools. This header provides fallback
 * implementations (protected by #ifdef guards) of those new interfaces.
 *
 * Copyright (c) 2021 Code Construct
 * Copyright (c) 2021 Google
 */

#ifndef _MCTP_H
#define _MCTP_H

// #include "config.h"

#if HAVE_LINUX_MCTP_H
#include <linux/mctp.h>
#endif
#include <linux/if_link.h>

#ifndef AF_MCTP
#define AF_MCTP 45
#endif

/* MCTP serial line discipline */
#ifndef N_MCTP
#define N_MCTP 28
#endif

#include <stdint.h>

#ifndef MCTP_NET_ANY

typedef uint8_t mctp_eid_t;

struct mctp_addr
{
    mctp_eid_t s_addr;
};

struct sockaddr_mctp
{
    unsigned short int smctp_family;
    unsigned short __smctp_pad0;
    int smctp_network;
    struct mctp_addr smctp_addr;
    uint8_t smctp_type;
    uint8_t smctp_tag;
    uint8_t __smctp_pad1;
};

#define MCTP_NET_ANY 0
#define MCTP_ADDR_ANY 0xff
#define MCTP_TAG_OWNER 0x08
#define DESTINATION_MCTP_TAG_OWNER 0x09

#endif /* MCTP_NET_ANY */

#ifndef SIOCMCTPALLOCTAG
#define SIOCMCTPALLOCTAG SIOCPROTOPRIVATE
struct mctp_ioc_tag_ctl
{
    mctp_eid_t peer_addr;
    __u8 tag;
    __u16 flags;
};

#endif

#ifndef MAX_ADDR_LEN
#define MAX_ADDR_LEN 32
#endif

/* Added in v5.16 */
#ifndef MCTP_OPT_ADDR_EXT

#define MCTP_OPT_ADDR_EXT 1

struct sockaddr_mctp_ext
{
    struct sockaddr_mctp smctp_base;
    int smctp_ifindex;
    uint8_t smctp_halen;
    uint8_t __smctp_pad0[3];
    unsigned char smctp_haddr[MAX_ADDR_LEN];
};

#endif /* MCTP_OPT_ADDR_EXT */

#ifndef IFLA_MCTP_MAX

/* From if_link.h */
enum
{
    IFLA_MCTP_UNSPEC,
    IFLA_MCTP_NET,
    __IFLA_MCTP_MAX,
};

#define IFLA_MCTP_MAX (__IFLA_MCTP_MAX - 1)

#endif /* IFLA_MCTP_MAX */

/* setsockopt(2) options */
#ifndef SOL_MCTP
#define SOL_MCTP 285
#endif

#ifndef RTNLGRP_MCTP_IFADDR
#define RTNLGRP_MCTP_IFADDR 34
#endif
#endif /* _MCTP_H */
