Line data Source code
1 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 1 : 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 1 : 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 1 : struct net_if_api iface_api; 59 : 60 : /** Enable or disable the device (in response to admin state change) */ 61 1 : 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 : */ 77 1 : static 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_ */