/** @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 #include #include #include #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_ */