Line data Source code
1 1 : /** @file 2 : * @brief Wi-Fi Network manager API 3 : * 4 : * This file contains the Wi-Fi network manager API. These APIs are used by the 5 : * any network management application to register as a Wi-Fi network manager. 6 : */ 7 : 8 : /* 9 : * Copyright (c) 2023 Nordic Semiconductor ASA. 10 : * 11 : * SPDX-License-Identifier: Apache-2.0 12 : */ 13 : 14 : #ifndef ZEPHYR_INCLUDE_ZEPHYR_NET_WIFI_NM_H_ 15 : #define ZEPHYR_INCLUDE_ZEPHYR_NET_WIFI_NM_H_ 16 : 17 : #include <zephyr/kernel.h> 18 : #include <zephyr/types.h> 19 : #include <zephyr/sys/iterable_sections.h> 20 : #include <zephyr/net/net_if.h> 21 : #include <zephyr/net/wifi_mgmt.h> 22 : /** 23 : * @brief Wi-Fi Network manager API 24 : * @defgroup wifi_nm Wi-Fi Network Manager API 25 : * @since 3.5 26 : * @version 0.8.0 27 : * @ingroup networking 28 : * @{ 29 : */ 30 : 31 : #ifdef __cplusplus 32 : extern "C" { 33 : #endif 34 : 35 : /** Types of Wi-Fi interface */ 36 1 : enum wifi_nm_iface_type { 37 : /** IEEE 802.11 Wi-Fi Station */ 38 : WIFI_TYPE_STA = 0, 39 : /** IEEE 802.11 Wi-Fi Soft AP */ 40 : WIFI_TYPE_SAP, 41 : }; 42 : 43 : /** 44 : * @brief WiFi Network Managed interfaces 45 : */ 46 1 : struct wifi_nm_mgd_iface { 47 : /** Wi-Fi interface type */ 48 1 : unsigned char type; 49 : /** Managed net interfaces */ 50 1 : struct net_if *iface; 51 : }; 52 : 53 : /** 54 : * @brief WiFi Network manager instance 55 : */ 56 1 : struct wifi_nm_instance { 57 : /** Name of the Network manager instance */ 58 1 : const char *name; 59 : /** Wi-Fi Management operations */ 60 1 : const struct wifi_mgmt_ops *ops; 61 : /** List of Managed interfaces */ 62 1 : struct wifi_nm_mgd_iface mgd_ifaces[CONFIG_WIFI_NM_MAX_MANAGED_INTERFACES]; 63 : }; 64 : 65 : /** @cond INTERNAL_HIDDEN */ 66 : 67 : #define WIFI_NM_NAME(name) wifi_nm_##name 68 : 69 : #define DEFINE_WIFI_NM_INSTANCE(_name, _ops) \ 70 : static STRUCT_SECTION_ITERABLE(wifi_nm_instance, WIFI_NM_NAME(_name)) = { \ 71 : .name = STRINGIFY(_name), \ 72 : .ops = _ops, \ 73 : .mgd_ifaces = {}, \ 74 : } 75 : 76 : /** @endcond */ 77 : 78 : /** 79 : * @brief Get a Network manager instance for a given name 80 : * 81 : * @param name Name of the Network manager instance 82 : * 83 : */ 84 1 : struct wifi_nm_instance *wifi_nm_get_instance(const char *name); 85 : 86 : /** 87 : * @brief Get a Network manager instance for a given interface 88 : * 89 : * @param iface Interface 90 : * 91 : */ 92 1 : struct wifi_nm_instance *wifi_nm_get_instance_iface(struct net_if *iface); 93 : 94 : /** 95 : * @brief Get a Wi-Fi type for a given interface 96 : * 97 : * @param iface Interface 98 : * 99 : */ 100 1 : unsigned char wifi_nm_get_type_iface(struct net_if *iface); 101 : 102 : /** 103 : * @brief Check if the interface is a Wi-Fi station interface 104 : * 105 : * @param iface Interface 106 : * 107 : * @retval true If the interface is a Wi-Fi station interface. 108 : * 109 : */ 110 1 : bool wifi_nm_iface_is_sta(struct net_if *iface); 111 : 112 : /** 113 : * @brief Check if the interface is a Wi-Fi Soft AP interface 114 : * 115 : * @param iface Interface 116 : * 117 : * @retval true If the interface is a Wi-Fi Soft AP interface. 118 : * 119 : */ 120 1 : bool wifi_nm_iface_is_sap(struct net_if *iface); 121 : 122 : /** 123 : * @brief Register a managed interface 124 : * 125 : * @param nm Pointer to Network manager instance 126 : * @param iface Managed interface 127 : * 128 : * @retval 0 If successful. 129 : * @retval -EINVAL If invalid parameters were passed. 130 : * @retval -ENOTSUP If the interface is not a Wi-Fi interface. 131 : * @retval -ENOMEM If the maximum number of managed interfaces has been reached. 132 : */ 133 1 : int wifi_nm_register_mgd_iface(struct wifi_nm_instance *nm, struct net_if *iface); 134 : 135 : /** 136 : * @brief Register a managed interface 137 : * 138 : * @param nm Pointer to Network manager instance 139 : * @param type Wi-Fi type 140 : * @param iface Managed interface 141 : * 142 : * @retval 0 If successful. 143 : * @retval -EINVAL If invalid parameters were passed. 144 : * @retval -ENOTSUP If the interface is not a Wi-Fi interface. 145 : * @retval -ENOMEM If the maximum number of managed interfaces has been reached. 146 : */ 147 1 : int wifi_nm_register_mgd_type_iface(struct wifi_nm_instance *nm, 148 : enum wifi_nm_iface_type type, struct net_if *iface); 149 : 150 : /** 151 : * @brief Unregister managed interface 152 : * 153 : * @param nm Pointer to Network manager instance 154 : * @param iface Interface 155 : * @return int 0 for OK; -EINVAL for invalid parameters; -ENOENT if interface is not registered 156 : * with the Network manager. 157 : */ 158 1 : int wifi_nm_unregister_mgd_iface(struct wifi_nm_instance *nm, struct net_if *iface); 159 : 160 : /** 161 : * @} 162 : */ 163 : 164 : #ifdef __cplusplus 165 : } 166 : #endif 167 : #endif /* ZEPHYR_INCLUDE_ZEPHYR_NET_WIFI_NM_H_ */