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 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 struct wifi_nm_mgd_iface { 47 /** Wi-Fi interface type */ 48 unsigned char type; 49 /** Managed net interfaces */ 50 struct net_if *iface; 51 }; 52 53 /** 54 * @brief WiFi Network manager instance 55 */ 56 struct wifi_nm_instance { 57 /** Name of the Network manager instance */ 58 const char *name; 59 /** Wi-Fi Management operations */ 60 const struct wifi_mgmt_ops *ops; 61 /** List of Managed interfaces */ 62 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 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 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 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 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 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 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 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 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_ */ 168