| /* |
| * |
| * Wireless daemon for Linux |
| * |
| * Copyright (C) 2020 Intel Corporation. All rights reserved. |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| * |
| */ |
| |
| struct ap_state; |
| struct iovec; |
| enum mpdu_management_subtype; |
| |
| enum ap_event_type { |
| AP_EVENT_START_FAILED, |
| AP_EVENT_STARTED, |
| AP_EVENT_STOPPING, |
| AP_EVENT_STATION_ADDED, |
| AP_EVENT_STATION_REMOVED, |
| AP_EVENT_REGISTRATION_START, |
| AP_EVENT_REGISTRATION_SUCCESS, |
| AP_EVENT_PBC_MODE_EXIT, |
| AP_EVENT_DHCP_NEW_LEASE, |
| AP_EVENT_DHCP_LEASE_EXPIRED, |
| }; |
| |
| struct ap_event_start_failed_data { |
| int error; |
| }; |
| |
| struct ap_event_station_added_data { |
| const uint8_t *mac; |
| const uint8_t *assoc_ies; |
| size_t assoc_ies_len; |
| }; |
| |
| struct ap_event_station_removed_data { |
| const uint8_t *mac; |
| enum mmpdu_reason_code reason; |
| }; |
| |
| struct ap_event_registration_start_data { |
| const uint8_t *mac; |
| const uint8_t *assoc_ies; |
| size_t assoc_ies_len; |
| }; |
| |
| struct ap_event_registration_success_data { |
| const uint8_t *mac; |
| }; |
| |
| typedef void (*ap_stopped_func_t)(void *user_data); |
| |
| struct ap_ops { |
| void (*handle_event)(enum ap_event_type type, const void *event_data, |
| void *user_data); |
| /* |
| * If .write_extra_ies is provided, this callback must return an upper |
| * bound on the buffer space needed for the extra IEs to be sent in |
| * the frame of given type and, if it's not a beacon frame, in |
| * response to a given client frame. |
| */ |
| size_t (*get_extra_ies_len)(enum mpdu_management_subtype type, |
| const struct mmpdu_header *client_frame, |
| size_t client_frame_len, |
| void *user_data); |
| /* |
| * If not null, writes extra IEs to be added to the outgoing frame of |
| * given type and, if it's not a beacon frame, in response to a given |
| * client frame. May also react to the extra IEs in that frame. |
| * Returns the number of bytes written which must be less than or |
| * equal to the number returned by .get_extra_ies_len when called |
| * with the same parameters. |
| */ |
| size_t (*write_extra_ies)(enum mpdu_management_subtype type, |
| const struct mmpdu_header *client_frame, |
| size_t client_frame_len, |
| uint8_t *out_buf, void *user_data); |
| }; |
| |
| struct ap_state *ap_start(struct netdev *netdev, struct l_settings *config, |
| const struct ap_ops *ops, int *err, |
| void *user_data); |
| void ap_shutdown(struct ap_state *ap, ap_stopped_func_t stopped_func, |
| void *user_data); |
| void ap_free(struct ap_state *ap); |
| |
| bool ap_station_disconnect(struct ap_state *ap, const uint8_t *mac, |
| enum mmpdu_reason_code reason); |
| |
| bool ap_push_button(struct ap_state *ap); |
| void ap_update_beacon(struct ap_state *ap); |