| /* SPDX-License-Identifier: GPL-2.0-only */ | |
| /* | |
| * IEEE 802.11 mesh definitions | |
| * | |
| * Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen | |
| * <jkmaline@cc.hut.fi> | |
| * Copyright (c) 2002-2003, Jouni Malinen <jkmaline@cc.hut.fi> | |
| * Copyright (c) 2005, Devicescape Software, Inc. | |
| * Copyright (c) 2006, Michael Wu <flamingice@sourmilk.net> | |
| * Copyright (c) 2013 - 2014 Intel Mobile Communications GmbH | |
| * Copyright (c) 2016 - 2017 Intel Deutschland GmbH | |
| * Copyright (c) 2018 - 2025 Intel Corporation | |
| */ | |
| #ifndef LINUX_IEEE80211_MESH_H | |
| #define LINUX_IEEE80211_MESH_H | |
| #include <linux/types.h> | |
| #include <linux/if_ether.h> | |
| #define IEEE80211_MAX_MESH_ID_LEN 32 | |
| struct ieee80211s_hdr { | |
| u8 flags; | |
| u8 ttl; | |
| __le32 seqnum; | |
| u8 eaddr1[ETH_ALEN]; | |
| u8 eaddr2[ETH_ALEN]; | |
| } __packed __aligned(2); | |
| /* Mesh flags */ | |
| #define MESH_FLAGS_AE_A4 0x1 | |
| #define MESH_FLAGS_AE_A5_A6 0x2 | |
| #define MESH_FLAGS_AE 0x3 | |
| #define MESH_FLAGS_PS_DEEP 0x4 | |
| /** | |
| * enum ieee80211_preq_flags - mesh PREQ element flags | |
| * | |
| * @IEEE80211_PREQ_PROACTIVE_PREP_FLAG: proactive PREP subfield | |
| */ | |
| enum ieee80211_preq_flags { | |
| IEEE80211_PREQ_PROACTIVE_PREP_FLAG = 1<<2, | |
| }; | |
| /** | |
| * enum ieee80211_preq_target_flags - mesh PREQ element per target flags | |
| * | |
| * @IEEE80211_PREQ_TO_FLAG: target only subfield | |
| * @IEEE80211_PREQ_USN_FLAG: unknown target HWMP sequence number subfield | |
| */ | |
| enum ieee80211_preq_target_flags { | |
| IEEE80211_PREQ_TO_FLAG = 1<<0, | |
| IEEE80211_PREQ_USN_FLAG = 1<<2, | |
| }; | |
| /** | |
| * struct ieee80211_mesh_chansw_params_ie - mesh channel switch parameters IE | |
| * @mesh_ttl: Time To Live | |
| * @mesh_flags: Flags | |
| * @mesh_reason: Reason Code | |
| * @mesh_pre_value: Precedence Value | |
| * | |
| * This structure represents the payload of the "Mesh Channel Switch | |
| * Parameters element" as described in IEEE Std 802.11-2020 section | |
| * 9.4.2.102. | |
| */ | |
| struct ieee80211_mesh_chansw_params_ie { | |
| u8 mesh_ttl; | |
| u8 mesh_flags; | |
| __le16 mesh_reason; | |
| __le16 mesh_pre_value; | |
| } __packed; | |
| /** | |
| * struct ieee80211_meshconf_ie - Mesh Configuration element | |
| * @meshconf_psel: Active Path Selection Protocol Identifier | |
| * @meshconf_pmetric: Active Path Selection Metric Identifier | |
| * @meshconf_congest: Congestion Control Mode Identifier | |
| * @meshconf_synch: Synchronization Method Identifier | |
| * @meshconf_auth: Authentication Protocol Identifier | |
| * @meshconf_form: Mesh Formation Info | |
| * @meshconf_cap: Mesh Capability (see &enum mesh_config_capab_flags) | |
| * | |
| * This structure represents the payload of the "Mesh Configuration | |
| * element" as described in IEEE Std 802.11-2020 section 9.4.2.97. | |
| */ | |
| struct ieee80211_meshconf_ie { | |
| u8 meshconf_psel; | |
| u8 meshconf_pmetric; | |
| u8 meshconf_congest; | |
| u8 meshconf_synch; | |
| u8 meshconf_auth; | |
| u8 meshconf_form; | |
| u8 meshconf_cap; | |
| } __packed; | |
| /** | |
| * enum mesh_config_capab_flags - Mesh Configuration IE capability field flags | |
| * | |
| * @IEEE80211_MESHCONF_CAPAB_ACCEPT_PLINKS: STA is willing to establish | |
| * additional mesh peerings with other mesh STAs | |
| * @IEEE80211_MESHCONF_CAPAB_FORWARDING: the STA forwards MSDUs | |
| * @IEEE80211_MESHCONF_CAPAB_TBTT_ADJUSTING: TBTT adjustment procedure | |
| * is ongoing | |
| * @IEEE80211_MESHCONF_CAPAB_POWER_SAVE_LEVEL: STA is in deep sleep mode or has | |
| * neighbors in deep sleep mode | |
| * | |
| * Enumerates the "Mesh Capability" as described in IEEE Std | |
| * 802.11-2020 section 9.4.2.97.7. | |
| */ | |
| enum mesh_config_capab_flags { | |
| IEEE80211_MESHCONF_CAPAB_ACCEPT_PLINKS = 0x01, | |
| IEEE80211_MESHCONF_CAPAB_FORWARDING = 0x08, | |
| IEEE80211_MESHCONF_CAPAB_TBTT_ADJUSTING = 0x20, | |
| IEEE80211_MESHCONF_CAPAB_POWER_SAVE_LEVEL = 0x40, | |
| }; | |
| #define IEEE80211_MESHCONF_FORM_CONNECTED_TO_GATE 0x1 | |
| /* | |
| * mesh channel switch parameters element's flag indicator | |
| * | |
| */ | |
| #define WLAN_EID_CHAN_SWITCH_PARAM_TX_RESTRICT BIT(0) | |
| #define WLAN_EID_CHAN_SWITCH_PARAM_INITIATOR BIT(1) | |
| #define WLAN_EID_CHAN_SWITCH_PARAM_REASON BIT(2) | |
| /** | |
| * struct ieee80211_rann_ie - RANN (root announcement) element | |
| * @rann_flags: Flags | |
| * @rann_hopcount: Hop Count | |
| * @rann_ttl: Element TTL | |
| * @rann_addr: Root Mesh STA Address | |
| * @rann_seq: HWMP Sequence Number | |
| * @rann_interval: Interval | |
| * @rann_metric: Metric | |
| * | |
| * This structure represents the payload of the "RANN element" as | |
| * described in IEEE Std 802.11-2020 section 9.4.2.111. | |
| */ | |
| struct ieee80211_rann_ie { | |
| u8 rann_flags; | |
| u8 rann_hopcount; | |
| u8 rann_ttl; | |
| u8 rann_addr[ETH_ALEN]; | |
| __le32 rann_seq; | |
| __le32 rann_interval; | |
| __le32 rann_metric; | |
| } __packed; | |
| enum ieee80211_rann_flags { | |
| RANN_FLAG_IS_GATE = 1 << 0, | |
| }; | |
| /* Mesh action codes */ | |
| enum ieee80211_mesh_actioncode { | |
| WLAN_MESH_ACTION_LINK_METRIC_REPORT, | |
| WLAN_MESH_ACTION_HWMP_PATH_SELECTION, | |
| WLAN_MESH_ACTION_GATE_ANNOUNCEMENT, | |
| WLAN_MESH_ACTION_CONGESTION_CONTROL_NOTIFICATION, | |
| WLAN_MESH_ACTION_MCCA_SETUP_REQUEST, | |
| WLAN_MESH_ACTION_MCCA_SETUP_REPLY, | |
| WLAN_MESH_ACTION_MCCA_ADVERTISEMENT_REQUEST, | |
| WLAN_MESH_ACTION_MCCA_ADVERTISEMENT, | |
| WLAN_MESH_ACTION_MCCA_TEARDOWN, | |
| WLAN_MESH_ACTION_TBTT_ADJUSTMENT_REQUEST, | |
| WLAN_MESH_ACTION_TBTT_ADJUSTMENT_RESPONSE, | |
| }; | |
| /** | |
| * enum ieee80211_mesh_sync_method - mesh synchronization method identifier | |
| * | |
| * @IEEE80211_SYNC_METHOD_NEIGHBOR_OFFSET: the default synchronization method | |
| * @IEEE80211_SYNC_METHOD_VENDOR: a vendor specific synchronization method | |
| * that will be specified in a vendor specific information element | |
| */ | |
| enum ieee80211_mesh_sync_method { | |
| IEEE80211_SYNC_METHOD_NEIGHBOR_OFFSET = 1, | |
| IEEE80211_SYNC_METHOD_VENDOR = 255, | |
| }; | |
| /** | |
| * enum ieee80211_mesh_path_protocol - mesh path selection protocol identifier | |
| * | |
| * @IEEE80211_PATH_PROTOCOL_HWMP: the default path selection protocol | |
| * @IEEE80211_PATH_PROTOCOL_VENDOR: a vendor specific protocol that will | |
| * be specified in a vendor specific information element | |
| */ | |
| enum ieee80211_mesh_path_protocol { | |
| IEEE80211_PATH_PROTOCOL_HWMP = 1, | |
| IEEE80211_PATH_PROTOCOL_VENDOR = 255, | |
| }; | |
| /** | |
| * enum ieee80211_mesh_path_metric - mesh path selection metric identifier | |
| * | |
| * @IEEE80211_PATH_METRIC_AIRTIME: the default path selection metric | |
| * @IEEE80211_PATH_METRIC_VENDOR: a vendor specific metric that will be | |
| * specified in a vendor specific information element | |
| */ | |
| enum ieee80211_mesh_path_metric { | |
| IEEE80211_PATH_METRIC_AIRTIME = 1, | |
| IEEE80211_PATH_METRIC_VENDOR = 255, | |
| }; | |
| /** | |
| * enum ieee80211_root_mode_identifier - root mesh STA mode identifier | |
| * | |
| * These attribute are used by dot11MeshHWMPRootMode to set root mesh STA mode | |
| * | |
| * @IEEE80211_ROOTMODE_NO_ROOT: the mesh STA is not a root mesh STA (default) | |
| * @IEEE80211_ROOTMODE_ROOT: the mesh STA is a root mesh STA if greater than | |
| * this value | |
| * @IEEE80211_PROACTIVE_PREQ_NO_PREP: the mesh STA is a root mesh STA supports | |
| * the proactive PREQ with proactive PREP subfield set to 0 | |
| * @IEEE80211_PROACTIVE_PREQ_WITH_PREP: the mesh STA is a root mesh STA | |
| * supports the proactive PREQ with proactive PREP subfield set to 1 | |
| * @IEEE80211_PROACTIVE_RANN: the mesh STA is a root mesh STA supports | |
| * the proactive RANN | |
| */ | |
| enum ieee80211_root_mode_identifier { | |
| IEEE80211_ROOTMODE_NO_ROOT = 0, | |
| IEEE80211_ROOTMODE_ROOT = 1, | |
| IEEE80211_PROACTIVE_PREQ_NO_PREP = 2, | |
| IEEE80211_PROACTIVE_PREQ_WITH_PREP = 3, | |
| IEEE80211_PROACTIVE_RANN = 4, | |
| }; | |
| #endif /* LINUX_IEEE80211_MESH_H */ |