1 /** @file 2 * @brief Offloaded network device iface API 3 * 4 * This is not to be included by the application. 5 */ 6 7 /* 8 * Copyright (c) 2022 Nordic Semiconductor ASA 9 * 10 * SPDX-License-Identifier: Apache-2.0 11 */ 12 13 #ifndef ZEPHYR_INCLUDE_OFFLOADED_NETDEV_H_ 14 #define ZEPHYR_INCLUDE_OFFLOADED_NETDEV_H_ 15 16 #include <zephyr/kernel.h> 17 #include <zephyr/types.h> 18 #include <stdbool.h> 19 #include <zephyr/net/net_if.h> 20 21 #ifdef __cplusplus 22 extern "C" { 23 #endif 24 25 /** 26 * @brief Offloaded Net Devices 27 * @defgroup offloaded_netdev Offloaded Net Devices 28 * @since 3.4 29 * @version 0.8.0 30 * @ingroup networking 31 * @{ 32 */ 33 34 /** Types of offloaded netdev L2 */ 35 enum offloaded_net_if_types { 36 /** Unknown, device hasn't register a type */ 37 L2_OFFLOADED_NET_IF_TYPE_UNKNOWN, 38 39 /** Ethernet devices */ 40 L2_OFFLOADED_NET_IF_TYPE_ETHERNET, 41 42 /** Modem */ 43 L2_OFFLOADED_NET_IF_TYPE_MODEM, 44 45 /** IEEE 802.11 Wi-Fi */ 46 L2_OFFLOADED_NET_IF_TYPE_WIFI, 47 }; 48 49 /** 50 * @brief Extended net_if_api for offloaded ifaces/network devices, allowing handling of 51 * admin up/down state changes 52 */ 53 struct offloaded_if_api { 54 /** 55 * The net_if_api must be placed in first position in this 56 * struct so that we are compatible with network interface API. 57 */ 58 struct net_if_api iface_api; 59 60 /** Enable or disable the device (in response to admin state change) */ 61 int (*enable)(const struct net_if *iface, bool state); 62 63 /** Types of offloaded net device */ 64 enum offloaded_net_if_types (*get_type)(void); 65 }; 66 67 /* Ensure offloaded_if_api is compatible with net_if_api */ 68 BUILD_ASSERT(offsetof(struct offloaded_if_api, iface_api) == 0); 69 70 /** 71 * @brief Check if the offloaded network interface supports Wi-Fi. 72 * 73 * @param iface Pointer to network interface 74 * 75 * @return True if interface supports Wi-Fi, False otherwise. 76 */ net_off_is_wifi_offloaded(struct net_if * iface)77static inline bool net_off_is_wifi_offloaded(struct net_if *iface) 78 { 79 const struct offloaded_if_api *api = (const struct offloaded_if_api *) 80 net_if_get_device(iface)->api; 81 82 return api->get_type && api->get_type() == L2_OFFLOADED_NET_IF_TYPE_WIFI; 83 } 84 85 /** 86 * @} 87 */ 88 89 #ifdef __cplusplus 90 } 91 #endif 92 93 #endif /* ZEPHYR_INCLUDE_OFFLOADED_NETDEV_H_ */ 94