| /* |
| * Operating Channel Validation (OCV) |
| * Copyright (c) 2018, Mathy Vanhoef |
| * |
| * This software may be distributed under the terms of the BSD license. |
| * See README for more details. |
| */ |
| |
| #ifndef OCV_H |
| #define OCV_H |
| |
| struct wpa_channel_info; |
| |
| struct oci_info { |
| /* Values in the OCI element */ |
| u8 op_class; |
| u8 channel; |
| u8 seg1_idx; |
| |
| /* Derived values for easier verification */ |
| int freq; |
| int sec_channel; |
| int chanwidth; |
| }; |
| |
| #define OCV_OCI_LEN 3 |
| #define OCV_OCI_EXTENDED_LEN (3 + OCV_OCI_LEN) |
| #define OCV_OCI_KDE_LEN (2 + RSN_SELECTOR_LEN + OCV_OCI_LEN) |
| |
| enum oci_verify_result { |
| OCI_SUCCESS, OCI_NOT_FOUND, OCI_INVALID_LENGTH, OCI_PARSE_ERROR, |
| OCI_PRIMARY_FREQ_MISMATCH, OCI_CHANNEL_WIDTH_MISMATCH, |
| OCI_SECONDARY_FREQ_MISMATCH, OCI_SEG_1_INDEX_MISMATCH |
| }; |
| |
| extern char ocv_errorstr[256]; |
| |
| int ocv_derive_all_parameters(struct oci_info *oci); |
| int ocv_insert_oci(struct wpa_channel_info *ci, u8 **argpos); |
| int ocv_insert_oci_kde(struct wpa_channel_info *ci, u8 **argpos); |
| int ocv_insert_extended_oci(struct wpa_channel_info *ci, u8 *pos); |
| enum oci_verify_result |
| ocv_verify_tx_params(const u8 *oci_ie, size_t oci_ie_len, |
| struct wpa_channel_info *ci, int tx_chanwidth, |
| int tx_seg1_idx); |
| |
| #endif /* OCV_H */ |