1 /* 2 * Copyright (c) 2023 Nordic Semiconductor ASA 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef __SUPP_EVENTS_H__ 8 #define __SUPP_EVENTS_H__ 9 10 #include <zephyr/net/wifi_mgmt.h> 11 12 /* Connectivity Events */ 13 #define NET_MGMT_SUPPLICANT_LAYER NET_MGMT_LAYER_L3 14 #define NET_MGMT_SUPPLICANT_CODE NET_MGMT_LAYER_CODE_HOSTAP 15 #define NET_MGMT_SUPPLICANT_BASE (NET_MGMT_LAYER(NET_MGMT_SUPPLICANT_LAYER) | \ 16 NET_MGMT_LAYER_CODE(NET_MGMT_SUPPLICANT_CODE) | \ 17 NET_MGMT_IFACE_BIT) 18 #define NET_MGMT_SUPPLICANT_EVENT (NET_MGMT_EVENT_BIT | NET_MGMT_SUPPLICANT_BASE) 19 20 enum { 21 NET_EVENT_SUPPLICANT_CMD_READY_VAL, 22 NET_EVENT_SUPPLICANT_CMD_NOT_READY_VAL, 23 NET_EVENT_SUPPLICANT_CMD_IFACE_ADDED_VAL, 24 NET_EVENT_SUPPLICANT_CMD_IFACE_REMOVING_VAL, 25 NET_EVENT_SUPPLICANT_CMD_IFACE_REMOVED_VAL, 26 NET_EVENT_SUPPLICANT_CMD_INT_EVENT_VAL, 27 28 NET_EVENT_SUPPLICANT_CMD_MAX 29 }; 30 31 BUILD_ASSERT(NET_EVENT_SUPPLICANT_CMD_MAX <= NET_MGMT_MAX_COMMANDS, 32 "Number of events in net_event_supplicant_cmd exceeds the limit"); 33 34 enum net_event_supplicant_cmd { 35 NET_MGMT_CMD(NET_EVENT_SUPPLICANT_CMD_READY), 36 NET_MGMT_CMD(NET_EVENT_SUPPLICANT_CMD_NOT_READY), 37 NET_MGMT_CMD(NET_EVENT_SUPPLICANT_CMD_IFACE_ADDED), 38 NET_MGMT_CMD(NET_EVENT_SUPPLICANT_CMD_IFACE_REMOVING), 39 NET_MGMT_CMD(NET_EVENT_SUPPLICANT_CMD_IFACE_REMOVED), 40 NET_MGMT_CMD(NET_EVENT_SUPPLICANT_CMD_INT_EVENT), 41 }; 42 43 #define NET_EVENT_SUPPLICANT_READY \ 44 (NET_MGMT_SUPPLICANT_EVENT | NET_EVENT_SUPPLICANT_CMD_READY) 45 46 #define NET_EVENT_SUPPLICANT_NOT_READY \ 47 (NET_MGMT_SUPPLICANT_EVENT | NET_EVENT_SUPPLICANT_CMD_NOT_READY) 48 49 #define NET_EVENT_SUPPLICANT_IFACE_ADDED \ 50 (NET_MGMT_SUPPLICANT_EVENT | NET_EVENT_SUPPLICANT_CMD_IFACE_ADDED) 51 52 #define NET_EVENT_SUPPLICANT_IFACE_REMOVED \ 53 (NET_MGMT_SUPPLICANT_EVENT | NET_EVENT_SUPPLICANT_CMD_IFACE_REMOVED) 54 55 #define NET_EVENT_SUPPLICANT_IFACE_REMOVING \ 56 (NET_MGMT_SUPPLICANT_EVENT | NET_EVENT_SUPPLICANT_CMD_IFACE_REMOVING) 57 58 #define NET_EVENT_SUPPLICANT_INT_EVENT \ 59 (NET_MGMT_SUPPLICANT_EVENT | NET_EVENT_SUPPLICANT_CMD_INT_EVENT) 60 61 int supplicant_send_wifi_mgmt_event(const char *ifname, 62 enum net_event_wifi_cmd event, 63 void *status, 64 size_t len); 65 int supplicant_generate_state_event(const char *ifname, 66 enum net_event_supplicant_cmd event, 67 int status); 68 int supplicant_send_wifi_mgmt_conn_event(void *ctx, int status_code); 69 int supplicant_send_wifi_mgmt_disc_event(void *ctx, int reason_code); 70 71 #ifdef CONFIG_AP 72 int supplicant_send_wifi_mgmt_ap_status(void *ctx, 73 enum net_event_wifi_cmd event, 74 enum wifi_ap_status); 75 int supplicant_send_wifi_mgmt_ap_sta_event(void *ctx, 76 enum net_event_wifi_cmd event, 77 void *data); 78 #endif /* CONFIG_AP */ 79 80 #define REASON_CODE_LEN 18 81 #define NM_WIFI_EVENT_STR_LEN 64 82 #define ETH_ALEN 6 83 84 union supplicant_event_data { 85 struct supplicant_event_auth_reject { 86 int auth_type; 87 int auth_transaction; 88 int status_code; 89 uint8_t bssid[ETH_ALEN]; 90 } auth_reject; 91 92 struct supplicant_event_connected { 93 uint8_t bssid[ETH_ALEN]; 94 char ssid[WIFI_SSID_MAX_LEN]; 95 int id; 96 } connected; 97 98 struct supplicant_event_disconnected { 99 uint8_t bssid[ETH_ALEN]; 100 int reason_code; 101 int locally_generated; 102 } disconnected; 103 104 struct supplicant_event_assoc_reject { 105 int status_code; 106 int reason_code; 107 } assoc_reject; 108 109 struct supplicant_event_temp_disabled { 110 int id; 111 char ssid[WIFI_SSID_MAX_LEN]; 112 unsigned int auth_failures; 113 unsigned int duration; 114 char reason_code[REASON_CODE_LEN]; 115 } temp_disabled; 116 117 struct supplicant_event_reenabled { 118 int id; 119 char ssid[WIFI_SSID_MAX_LEN]; 120 } reenabled; 121 122 struct supplicant_event_bss_added { 123 unsigned int id; 124 uint8_t bssid[ETH_ALEN]; 125 } bss_added; 126 127 struct supplicant_event_bss_removed { 128 unsigned int id; 129 uint8_t bssid[ETH_ALEN]; 130 } bss_removed; 131 132 struct supplicant_event_network_added { 133 unsigned int id; 134 } network_added; 135 136 struct supplicant_event_network_removed { 137 unsigned int id; 138 } network_removed; 139 140 char supplicant_event_str[NM_WIFI_EVENT_STR_LEN]; 141 }; 142 143 enum supplicant_event_num { 144 SUPPLICANT_EVENT_CONNECTED, 145 SUPPLICANT_EVENT_DISCONNECTED, 146 SUPPLICANT_EVENT_ASSOC_REJECT, 147 SUPPLICANT_EVENT_AUTH_REJECT, 148 SUPPLICANT_EVENT_TERMINATING, 149 SUPPLICANT_EVENT_SSID_TEMP_DISABLED, 150 SUPPLICANT_EVENT_SSID_REENABLED, 151 SUPPLICANT_EVENT_SCAN_STARTED, 152 SUPPLICANT_EVENT_SCAN_RESULTS, 153 SUPPLICANT_EVENT_SCAN_FAILED, 154 SUPPLICANT_EVENT_BSS_ADDED, 155 SUPPLICANT_EVENT_BSS_REMOVED, 156 SUPPLICANT_EVENT_NETWORK_NOT_FOUND, 157 SUPPLICANT_EVENT_NETWORK_ADDED, 158 SUPPLICANT_EVENT_NETWORK_REMOVED, 159 SUPPLICANT_EVENT_DSCP_POLICY, 160 SUPPLICANT_EVENT_REGDOM_CHANGE, 161 }; 162 163 struct supplicant_int_event_data { 164 enum supplicant_event_num event; 165 void *data; 166 size_t data_len; 167 }; 168 169 #endif /* __SUPP_EVENTS_H__ */ 170