/** @file
 * @brief Offloaded network device iface API
 *
 * This is not to be included by the application.
 */

/*
 * Copyright (c) 2022 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef ZEPHYR_INCLUDE_OFFLOADED_NETDEV_H_
#define ZEPHYR_INCLUDE_OFFLOADED_NETDEV_H_

#include <zephyr/kernel.h>
#include <zephyr/types.h>
#include <stdbool.h>
#include <zephyr/net/net_if.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief Offloaded Net Devices
 * @defgroup offloaded_netdev Offloaded Net Devices
 * @ingroup networking
 * @{
 */

/** Types of offloaded netdev L2 */
enum offloaded_net_if_types {
	/** Unknown, device hasn't register a type */
	L2_OFFLOADED_NET_IF_TYPE_UNKNOWN,

	/** Ethernet devices */
	L2_OFFLOADED_NET_IF_TYPE_ETHERNET,

	/** Modem */
	L2_OFFLOADED_NET_IF_TYPE_MODEM,

	/** IEEE 802.11 Wi-Fi */
	L2_OFFLOADED_NET_IF_TYPE_WIFI,
};

/**
 * @brief Extended net_if_api for offloaded ifaces/network devices, allowing handling of
 *	  admin up/down state changes
 */
struct offloaded_if_api {
	/**
	 * The net_if_api must be placed in first position in this
	 * struct so that we are compatible with network interface API.
	 */
	struct net_if_api iface_api;

	/** Enable or disable the device (in response to admin state change) */
	int (*enable)(const struct net_if *iface, bool state);

	/* Types of offloaded net device */
	enum offloaded_net_if_types (*get_type)(void);
};

/* Ensure offloaded_if_api is compatible with net_if_api */
BUILD_ASSERT(offsetof(struct offloaded_if_api, iface_api) == 0);

/**
 * @brief Check if the offloaded network interface supports Wi-Fi.
 *
 * @param iface Pointer to network interface
 *
 * @return True if interface supports Wi-Fi, False otherwise.
 */
static inline bool net_off_is_wifi_offloaded(struct net_if *iface)
{
	const struct offloaded_if_api *api = (const struct offloaded_if_api *)
		net_if_get_device(iface)->api;

	return api->get_type && api->get_type() == L2_OFFLOADED_NET_IF_TYPE_WIFI;
}

/**
 * @}
 */

#ifdef __cplusplus
}
#endif

#endif /* ZEPHYR_INCLUDE_OFFLOADED_NETDEV_H_ */
