github.com/google/syzkaller@v0.0.0-20240517125934-c0f1611a36d6/sys/linux/socket_netlink_generic_80211.txt (about)

     1  # Copyright 2020 syzkaller project authors. All rights reserved.
     2  # Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
     3  
     4  include <linux/net.h>
     5  include <uapi/linux/netlink.h>
     6  include <uapi/linux/genetlink.h>
     7  include <uapi/linux/nl80211.h>
     8  include <linux/ieee80211.h>
     9  include <net/cfg80211.h>
    10  
    11  resource nl80211_family_id[int16]
    12  resource nl80211_ifindex[int32]
    13  
    14  nl80211_devnames = "wlan0", "wlan1"
    15  
    16  type msg_nl80211_payload[CMD, PAYLOAD] {
    17  	genl_hdr	genlmsghdr_t[CMD]
    18  	payload		PAYLOAD
    19  } [packed, align[4]]
    20  
    21  type msghdr_nl80211[CMD, PAYLOAD, POLICY] msghdr_netlink[netlink_msg_t[nl80211_family_id, msg_nl80211_payload[CMD, PAYLOAD], POLICY]]
    22  # For commands with NL80211_FLAG_NEED_WDEV or NL80211_FLAG_NEED_NETDEV
    23  type msghdr_nl80211_wdev[CMD, POLICY] msghdr_nl80211[CMD, nl80211_wdev_payload, POLICY]
    24  # For commands with NL80211_FLAG_NEED_WIPHY
    25  type msghdr_nl80211_rdev[CMD, POLICY] msghdr_nl80211[CMD, nl80211_rdev_payload, POLICY]
    26  
    27  # Wiphys are created for each wireless device, and they are identified by consequtive numbers (the counter is system-wide).
    28  # TODO: fetch wiphy ids for devices created at executor initialization. Presently we're using small numbers in that hope that syzkaller will hit the right ones.
    29  type nl80211_wiphy int32[0:128]
    30  
    31  syz_genetlink_get_family_id$nl80211(name ptr[in, string["nl80211"]], fd sock_nl_generic) nl80211_family_id
    32  ioctl$sock_SIOCGIFINDEX_80211(fd sock, cmd const[SIOCGIFINDEX], arg ptr[out, ifreq_dev_t[nl80211_devnames, nl80211_ifindex]])
    33  
    34  sendmsg$NL80211_CMD_GET_WIPHY(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_rdev[NL80211_CMD_GET_WIPHY, void]], f flags[send_flags])
    35  sendmsg$NL80211_CMD_SET_WIPHY(fd sock_nl_generic, msg ptr[in, msghdr_nl80211[NL80211_CMD_SET_WIPHY, void, nl80211_policy$wiphy]], f flags[send_flags])
    36  sendmsg$NL80211_CMD_SET_WIPHY_NETNS(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_rdev[NL80211_CMD_SET_WIPHY_NETNS, nl80211_policy$setns]], f flags[send_flags])
    37  sendmsg$NL80211_CMD_GET_INTERFACE(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_GET_INTERFACE, void]], f flags[send_flags])
    38  sendmsg$NL80211_CMD_SET_INTERFACE(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_INTERFACE, nl80211_policy$set_interface]], f flags[send_flags])
    39  sendmsg$NL80211_CMD_NEW_INTERFACE(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_rdev[NL80211_CMD_NEW_INTERFACE, nl80211_policy$new_interface]], f flags[send_flags])
    40  sendmsg$NL80211_CMD_DEL_INTERFACE(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_DEL_INTERFACE, void]], f flags[send_flags])
    41  sendmsg$NL80211_CMD_GET_KEY(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_GET_KEY, nl80211_policy$cmd_key]], f flags[send_flags])
    42  sendmsg$NL80211_CMD_SET_KEY(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_KEY, nl80211_policy$cmd_key]], f flags[send_flags])
    43  sendmsg$NL80211_CMD_NEW_KEY(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_NEW_KEY, nl80211_policy$cmd_key]], f flags[send_flags])
    44  sendmsg$NL80211_CMD_DEL_KEY(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_DEL_KEY, nl80211_policy$cmd_key]], f flags[send_flags])
    45  sendmsg$NL80211_CMD_SET_BEACON(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_BEACON, nl80211_policy$beacon]], f flags[send_flags])
    46  sendmsg$NL80211_CMD_START_AP(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_START_AP, nl80211_policy$start_ap]], f flags[send_flags])
    47  sendmsg$NL80211_CMD_STOP_AP(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_STOP_AP, void]], f flags[send_flags])
    48  sendmsg$NL80211_CMD_GET_STATION(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_GET_STATION, nl80211_policy$station]], f flags[send_flags])
    49  sendmsg$NL80211_CMD_SET_STATION(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_STATION, nl80211_policy$station]], f flags[send_flags])
    50  sendmsg$NL80211_CMD_NEW_STATION(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_NEW_STATION, nl80211_policy$station]], f flags[send_flags])
    51  sendmsg$NL80211_CMD_DEL_STATION(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_DEL_STATION, nl80211_policy$station]], f flags[send_flags])
    52  sendmsg$NL80211_CMD_GET_MPATH(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_GET_MPATH, nl80211_policy$mpath]], f flags[send_flags])
    53  sendmsg$NL80211_CMD_SET_MPATH(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_MPATH, nl80211_policy$mpath]], f flags[send_flags])
    54  sendmsg$NL80211_CMD_NEW_MPATH(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_NEW_MPATH, nl80211_policy$mpath]], f flags[send_flags])
    55  sendmsg$NL80211_CMD_DEL_MPATH(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_DEL_MPATH, nl80211_policy$mpath]], f flags[send_flags])
    56  sendmsg$NL80211_CMD_GET_MPP(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_GET_MPP, nl80211_policy$mpath]], f flags[send_flags])
    57  sendmsg$NL80211_CMD_SET_BSS(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_BSS, nl80211_policy$bss]], f flags[send_flags])
    58  sendmsg$NL80211_CMD_GET_REG(fd sock_nl_generic, msg ptr[in, msghdr_nl80211[NL80211_CMD_GET_REG, void, nl80211_policy$reg]], f flags[send_flags])
    59  sendmsg$NL80211_CMD_SET_REG(fd sock_nl_generic, msg ptr[in, msghdr_nl80211[NL80211_CMD_SET_REG, void, nl80211_policy$reg]], f flags[send_flags])
    60  sendmsg$NL80211_CMD_REQ_SET_REG(fd sock_nl_generic, msg ptr[in, msghdr_nl80211[NL80211_CMD_REQ_SET_REG, void, nl80211_policy$reg]], f flags[send_flags])
    61  sendmsg$NL80211_CMD_GET_MESH_CONFIG(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_GET_MESH_CONFIG, void]], f flags[send_flags])
    62  sendmsg$NL80211_CMD_SET_MESH_CONFIG(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_MESH_CONFIG, nl80211_policy$mesh]], f flags[send_flags])
    63  sendmsg$NL80211_CMD_JOIN_MESH(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_JOIN_MESH, nl80211_policy$join_mesh]], f flags[send_flags])
    64  sendmsg$NL80211_CMD_LEAVE_MESH(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_LEAVE_MESH, void]], f flags[send_flags])
    65  sendmsg$NL80211_CMD_TRIGGER_SCAN(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_TRIGGER_SCAN, nl80211_policy$scan]], f flags[send_flags])
    66  sendmsg$NL80211_CMD_GET_SCAN(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_GET_SCAN, void]], f flags[send_flags])
    67  sendmsg$NL80211_CMD_START_SCHED_SCAN(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_START_SCHED_SCAN, nl80211_policy$scan]], f flags[send_flags])
    68  sendmsg$NL80211_CMD_STOP_SCHED_SCAN(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_STOP_SCHED_SCAN, nl80211_policy$cookie]], f flags[send_flags])
    69  sendmsg$NL80211_CMD_JOIN_IBSS(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_JOIN_IBSS, nl80211_policy$join_ibss]], f flags[send_flags])
    70  sendmsg$NL80211_CMD_LEAVE_IBSS(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_LEAVE_IBSS, void]], f flags[send_flags])
    71  sendmsg$NL80211_CMD_CONNECT(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_CONNECT, nl80211_policy$connect]], f flags[send_flags])
    72  sendmsg$NL80211_CMD_DISCONNECT(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_DISCONNECT, nl80211_policy$disconnect]], f flags[send_flags])
    73  sendmsg$NL80211_CMD_UNEXPECTED_FRAME(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_UNEXPECTED_FRAME, void]], f flags[send_flags])
    74  sendmsg$NL80211_CMD_NOTIFY_RADAR(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_NOTIFY_RADAR, nl80211_policy$chandef_params]], f flags[send_flags])
    75  sendmsg$NL80211_CMD_RADAR_DETECT(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_RADAR_DETECT, nl80211_policy$chandef_params]], f flags[send_flags])
    76  sendmsg$NL80211_CMD_PEER_MEASUREMENT_START(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_PEER_MEASUREMENT_START, nl80211_pmsr_attr_policy]], f flags[send_flags])
    77  sendmsg$NL80211_CMD_UPDATE_OWE_INFO(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_UPDATE_OWE_INFO, nl80211_policy$upd_owe_info]], f flags[send_flags])
    78  sendmsg$NL80211_CMD_GET_SURVEY(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_GET_SURVEY, void]], f flags[send_flags])
    79  sendmsg$NL80211_CMD_GET_COALESCE(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_rdev[NL80211_CMD_GET_COALESCE, void]], f flags[send_flags])
    80  sendmsg$NL80211_CMD_GET_FTM_RESPONDER_STATS(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_GET_FTM_RESPONDER_STATS, void]], f flags[send_flags])
    81  sendmsg$NL80211_CMD_ADD_NAN_FUNCTION(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_ADD_NAN_FUNCTION, nl80211_policy$add_nan_func]], f flags[send_flags])
    82  sendmsg$NL80211_CMD_DEL_NAN_FUNCTION(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_DEL_NAN_FUNCTION, nl80211_policy$del_nan_func]], f flags[send_flags])
    83  sendmsg$NL80211_CMD_START_NAN(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_START_NAN, nl80211_policy$start_nan]], f flags[send_flags])
    84  sendmsg$NL80211_CMD_STOP_NAN(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_STOP_NAN, void]], f flags[send_flags])
    85  sendmsg$NL80211_CMD_CHANGE_NAN_CONFIG(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_CHANGE_NAN_CONFIG, nl80211_policy$start_nan]], f flags[send_flags])
    86  sendmsg$NL80211_CMD_PROBE_CLIENT(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_PROBE_CLIENT, nl80211_policy$probe_client]], f flags[send_flags])
    87  sendmsg$NL80211_CMD_SET_CHANNEL(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_CHANNEL, nl80211_policy$chandef_params]], f flags[send_flags])
    88  sendmsg$NL80211_CMD_SET_COALESCE(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_COALESCE, nl80211_coalesce_policy]], f flags[send_flags])
    89  sendmsg$NL80211_CMD_SET_MAC_ACL(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_MAC_ACL, nl80211_policy$acl]], f flags[send_flags])
    90  sendmsg$NL80211_CMD_SET_MCAST_RATE(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_MCAST_RATE, nl80211_policy$set_mcast_rate]], f flags[send_flags])
    91  sendmsg$NL80211_CMD_SET_MULTICAST_TO_UNICAST(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_MULTICAST_TO_UNICAST, nl80211_policy$set_mcast_to_ucast]], f flags[send_flags])
    92  sendmsg$NL80211_CMD_SET_NOACK_MAP(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_NOACK_MAP, nl80211_policy$set_noack_map]], f flags[send_flags])
    93  sendmsg$NL80211_CMD_SET_PMK(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_PMK, nl80211_policy$set_pmk]], f flags[send_flags])
    94  sendmsg$NL80211_CMD_DEL_PMK(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_DEL_PMK, nl80211_policy$del_pmk]], f flags[send_flags])
    95  sendmsg$NL80211_CMD_SET_PMKSA(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_PMKSA, nl80211_policy$setdel_pmksa]], f flags[send_flags])
    96  sendmsg$NL80211_CMD_DEL_PMKSA(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_DEL_PMKSA, nl80211_policy$setdel_pmksa]], f flags[send_flags])
    97  sendmsg$NL80211_CMD_FLUSH_PMKSA(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_FLUSH_PMKSA, void]], f flags[send_flags])
    98  sendmsg$NL80211_CMD_FRAME_WAIT_CANCEL(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_FRAME_WAIT_CANCEL, nl80211_policy$cookie]], f flags[send_flags])
    99  sendmsg$NL80211_CMD_ABORT_SCAN(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_ABORT_SCAN, void]], f flags[send_flags])
   100  sendmsg$NL80211_CMD_SET_POWER_SAVE(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_POWER_SAVE, nl80211_policy$power_save]], f flags[send_flags])
   101  sendmsg$NL80211_CMD_GET_POWER_SAVE(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_GET_POWER_SAVE, void]], f flags[send_flags])
   102  sendmsg$NL80211_CMD_REMAIN_ON_CHANNEL(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_REMAIN_ON_CHANNEL, nl80211_policy$remain_on_ch]], f flags[send_flags])
   103  sendmsg$NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL, nl80211_policy$cookie]], f flags[send_flags])
   104  sendmsg$NL80211_CMD_UPDATE_FT_IES(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_UPDATE_FT_IES, nl80211_policy$update_ft_ies]], f flags[send_flags])
   105  sendmsg$NL80211_CMD_VENDOR(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_rdev[NL80211_CMD_VENDOR, nl80211_policy$vendor]], f flags[send_flags])
   106  sendmsg$NL80211_CMD_SET_QOS_MAP(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_QOS_MAP, nl80211_policy$set_qos_map]], f flags[send_flags])
   107  sendmsg$NL80211_CMD_SET_CQM(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_CQM, nl80211_policy$cqm]], f flags[send_flags])
   108  sendmsg$NL80211_CMD_RELOAD_REGDB(fd sock_nl_generic, msg ptr[in, msghdr_nl80211[NL80211_CMD_RELOAD_REGDB, void, void]], f flags[send_flags])
   109  sendmsg$NL80211_CMD_LEAVE_OCB(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_LEAVE_OCB, void]], f flags[send_flags])
   110  sendmsg$NL80211_CMD_FRAME(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_FRAME, nl80211_policy$mgmt_frame]], f flags[send_flags])
   111  sendmsg$NL80211_CMD_ADD_TX_TS(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_ADD_TX_TS, nl80211_policy$add_tx_ts]], f flags[send_flags])
   112  sendmsg$NL80211_CMD_DEL_TX_TS(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_DEL_TX_TS, nl80211_policy$del_tx_ts]], f flags[send_flags])
   113  sendmsg$NL80211_CMD_AUTHENTICATE(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_AUTHENTICATE, nl80211_policy$authenticate]], f flags[send_flags])
   114  sendmsg$NL80211_CMD_DEAUTHENTICATE(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_DEAUTHENTICATE, nl80211_policy$de_auth_assoc]], f flags[send_flags])
   115  sendmsg$NL80211_CMD_ASSOCIATE(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_ASSOCIATE, nl80211_policy$associate]], f flags[send_flags])
   116  sendmsg$NL80211_CMD_DISASSOCIATE(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_DISASSOCIATE, nl80211_policy$de_auth_assoc]], f flags[send_flags])
   117  sendmsg$NL80211_CMD_EXTERNAL_AUTH(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_EXTERNAL_AUTH, nl80211_policy$ext_auth]], f flags[send_flags])
   118  sendmsg$NL80211_CMD_SET_REKEY_OFFLOAD(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_REKEY_OFFLOAD, nl80211_policy$rekey_offload]], f flags[send_flags])
   119  sendmsg$NL80211_CMD_GET_PROTOCOL_FEATURES(fd sock_nl_generic, msg ptr[in, msghdr_nl80211[NL80211_CMD_GET_PROTOCOL_FEATURES, void, void]], f flags[send_flags])
   120  sendmsg$NL80211_CMD_SET_WDS_PEER(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_WDS_PEER, nl80211_policy$set_wds_peer]], f flags[send_flags])
   121  sendmsg$NL80211_CMD_SET_TID_CONFIG(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_TID_CONFIG, nl80211_policy$set_tid_config]], f flags[send_flags])
   122  sendmsg$NL80211_CMD_UPDATE_CONNECT_PARAMS(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_UPDATE_CONNECT_PARAMS, nl80211_policy$upd_connect_params]], f flags[send_flags])
   123  sendmsg$NL80211_CMD_TDLS_MGMT(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_TDLS_MGMT, nl80211_policy$tdls_mgmt]], f flags[send_flags])
   124  sendmsg$NL80211_CMD_TDLS_OPER(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_TDLS_OPER, nl80211_policy$tdls_oper]], f flags[send_flags])
   125  sendmsg$NL80211_CMD_JOIN_OCB(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_JOIN_OCB, nl80211_policy$chandef_params]], f flags[send_flags])
   126  sendmsg$NL80211_CMD_CONTROL_PORT_FRAME(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_CONTROL_PORT_FRAME, nl80211_policy$control_port]], f flags[send_flags])
   127  sendmsg$NL80211_CMD_CRIT_PROTOCOL_START(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_CRIT_PROTOCOL_START, nl80211_policy$crit_proto_start]], f flags[send_flags])
   128  sendmsg$NL80211_CMD_CRIT_PROTOCOL_STOP(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_CRIT_PROTOCOL_STOP, void]], f flags[send_flags])
   129  sendmsg$NL80211_CMD_PROBE_MESH_LINK(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_PROBE_MESH_LINK, nl80211_policy$probe_mesh_link]], f flags[send_flags])
   130  sendmsg$NL80211_CMD_REGISTER_BEACONS(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_rdev[NL80211_CMD_REGISTER_BEACONS, void]], f flags[send_flags])
   131  sendmsg$NL80211_CMD_REGISTER_FRAME(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_REGISTER_FRAME, nl80211_policy$register_mgmt]], f flags[send_flags])
   132  sendmsg$NL80211_CMD_TDLS_CHANNEL_SWITCH(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_TDLS_CHANNEL_SWITCH, nl80211_policy$tdls_chsw]], f flags[send_flags])
   133  sendmsg$NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH, nl80211_policy$tdls_chsw_cancel]], f flags[send_flags])
   134  sendmsg$NL80211_CMD_CHANNEL_SWITCH(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_CHANNEL_SWITCH, nl80211_policy$chsw]], f flags[send_flags])
   135  sendmsg$NL80211_CMD_START_P2P_DEVICE(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_START_P2P_DEVICE, void]], f flags[send_flags])
   136  sendmsg$NL80211_CMD_STOP_P2P_DEVICE(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_STOP_P2P_DEVICE, void]], f flags[send_flags])
   137  sendmsg$NL80211_CMD_GET_WOWLAN(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_rdev[NL80211_CMD_GET_WOWLAN, void]], f flags[send_flags])
   138  sendmsg$NL80211_CMD_SET_WOWLAN(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_rdev[NL80211_CMD_SET_WOWLAN, nl80211_policy$set_wowlan]], f flags[send_flags])
   139  sendmsg$NL80211_CMD_TESTMODE(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_TESTMODE, nl80211_policy$testmode]], f flags[send_flags])
   140  sendmsg$NL80211_CMD_SET_TX_BITRATE_MASK(fd sock_nl_generic, msg ptr[in, msghdr_nl80211_wdev[NL80211_CMD_SET_TX_BITRATE_MASK, nl80211_policy$set_tx_bitrate]], f flags[send_flags])
   141  
   142  nl80211_wdev_payload {
   143  	NL80211_ATTR_IFINDEX	optional[nlattr[NL80211_ATTR_IFINDEX, nl80211_ifindex]]
   144  	NL80211_ATTR_WDEV	optional[nlattr[NL80211_ATTR_WDEV, nl80211_wdev]]
   145  } [packed, align[4]]
   146  
   147  nl80211_rdev_payload {
   148  	NL80211_ATTR_WIPHY	optional[nlattr[NL80211_ATTR_WIPHY, nl80211_wiphy]]
   149  	NL80211_ATTR_IFINDEX	optional[nlattr[NL80211_ATTR_IFINDEX, nl80211_ifindex]]
   150  	NL80211_ATTR_WDEV	optional[nlattr[NL80211_ATTR_WDEV, nl80211_wdev]]
   151  } [packed, align[4]]
   152  
   153  nl80211_channel_types = NL80211_CHAN_NO_HT, NL80211_CHAN_HT20, NL80211_CHAN_HT40MINUS, NL80211_CHAN_HT40PLUS
   154  nl80211_channel_widths = NL80211_CHAN_WIDTH_20_NOHT, NL80211_CHAN_WIDTH_20, NL80211_CHAN_WIDTH_40, NL80211_CHAN_WIDTH_80, NL80211_CHAN_WIDTH_80P80, NL80211_CHAN_WIDTH_160, NL80211_CHAN_WIDTH_5, NL80211_CHAN_WIDTH_10
   155  
   156  nl80211_policy$chandef_params [
   157  	NL80211_ATTR_WIPHY_FREQ			nlattr[NL80211_ATTR_WIPHY_FREQ, ieee80211_frequency_mhz[int32]]
   158  	NL80211_ATTR_WIPHY_FREQ_OFFSET		nlattr[NL80211_ATTR_WIPHY_FREQ_OFFSET, int32[0:999]]
   159  	NL80211_ATTR_WIPHY_CHANNEL_TYPE		nlattr[NL80211_ATTR_WIPHY_CHANNEL_TYPE, flags[nl80211_channel_types, int32]]
   160  	NL80211_ATTR_CENTER_FREQ1		nlattr[NL80211_ATTR_CENTER_FREQ1, int32]
   161  	NL80211_ATTR_CENTER_FREQ2		nlattr[NL80211_ATTR_CENTER_FREQ2, int32]
   162  	NL80211_ATTR_CHANNEL_WIDTH		nlattr[NL80211_ATTR_CHANNEL_WIDTH, flags[nl80211_channel_widths, int32]]
   163  	NL80211_ATTR_WIPHY_EDMG_CHANNELS	nlattr[NL80211_ATTR_WIPHY_EDMG_CHANNELS, int8[NL80211_EDMG_CHANNELS_MIN:NL80211_EDMG_CHANNELS_MAX]]
   164  	NL80211_ATTR_WIPHY_EDMG_BW_CONFIG	nlattr[NL80211_ATTR_WIPHY_EDMG_BW_CONFIG, int8[NL80211_EDMG_BW_CONFIG_MIN:NL80211_EDMG_BW_CONFIG_MAX]]
   165  ] [varlen]
   166  
   167  nl80211_wdev {
   168  # TODO: what is this?
   169  	wdev_id	int32
   170  	wiphy	nl80211_wiphy
   171  }
   172  
   173  nl80211_policy$wiphy [
   174  	NL80211_ATTR_WIPHY_NAME			nlattr[NL80211_ATTR_WIPHY_NAME, devname]
   175  	NL80211_ATTR_WIPHY_TXQ_PARAMS		nlnest[NL80211_ATTR_WIPHY_TXQ_PARAMS, array[txq_params_policy]]
   176  	NL80211_ATTR_WIPHY_FREQ			nlattr[NL80211_ATTR_WIPHY_FREQ, ieee80211_frequency_mhz[int32]]
   177  	NL80211_ATTR_WIPHY_RETRY_SHORT		nlattr[NL80211_ATTR_WIPHY_RETRY_SHORT, int8]
   178  	NL80211_ATTR_WIPHY_RETRY_LONG		nlattr[NL80211_ATTR_WIPHY_RETRY_LONG, int8]
   179  	NL80211_ATTR_WIPHY_FRAG_THRESHOLD	nlattr[NL80211_ATTR_WIPHY_FRAG_THRESHOLD, int32]
   180  	NL80211_ATTR_WIPHY_RTS_THRESHOLD	nlattr[NL80211_ATTR_WIPHY_RTS_THRESHOLD, int32]
   181  	NL80211_ATTR_WIPHY_TX_POWER_SETTING	nlattr[NL80211_ATTR_WIPHY_TX_POWER_SETTING, int32]
   182  	NL80211_ATTR_WIPHY_TX_POWER_LEVEL	nlattr[NL80211_ATTR_WIPHY_TX_POWER_LEVEL, int32]
   183  	NL80211_ATTR_WIPHY_ANTENNA_TX		nlattr[NL80211_ATTR_WIPHY_ANTENNA_TX, int32]
   184  	NL80211_ATTR_WIPHY_ANTENNA_RX		nlattr[NL80211_ATTR_WIPHY_ANTENNA_RX, int32]
   185  	NL80211_ATTR_WIPHY_COVERAGE_CLASS	nlattr[NL80211_ATTR_WIPHY_COVERAGE_CLASS, int8]
   186  	NL80211_ATTR_WIPHY_DYN_ACK		nlattr[NL80211_ATTR_WIPHY_DYN_ACK, void]
   187  	NL80211_ATTR_TXQ_LIMIT			nlattr[NL80211_ATTR_TXQ_LIMIT, int32]
   188  	NL80211_ATTR_TXQ_MEMORY_LIMIT		nlattr[NL80211_ATTR_TXQ_MEMORY_LIMIT, int32]
   189  	NL80211_ATTR_TXQ_QUANTUM		nlattr[NL80211_ATTR_TXQ_QUANTUM, int32]
   190  ] [varlen]
   191  
   192  nl80211_policy$setns [
   193  	NL80211_ATTR_WIPHY	nlattr[NL80211_ATTR_WIPHY, nl80211_wiphy]
   194  	NL80211_ATTR_IFINDEX	nlattr[NL80211_ATTR_IFINDEX, nl80211_ifindex]
   195  	NL80211_ATTR_WDEV	nlattr[NL80211_ATTR_WDEV, nl80211_wdev]
   196  	NL80211_ATTR_PID	nlattr[NL80211_ATTR_PID, pid]
   197  	NL80211_ATTR_NETNS_FD	nlattr[NL80211_ATTR_NETNS_FD, fd_namespace]
   198  ] [varlen]
   199  
   200  txq_params_policy [
   201  	NL80211_TXQ_ATTR_QUEUE	nlattr[NL80211_TXQ_ATTR_QUEUE, int8]
   202  	NL80211_TXQ_ATTR_TXOP	nlattr[NL80211_TXQ_ATTR_TXOP, int16]
   203  	NL80211_TXQ_ATTR_CWMIN	nlattr[NL80211_TXQ_ATTR_CWMIN, int16]
   204  	NL80211_TXQ_ATTR_CWMAX	nlattr[NL80211_TXQ_ATTR_CWMAX, int16]
   205  	NL80211_TXQ_ATTR_AIFS	nlattr[NL80211_TXQ_ATTR_AIFS, int8]
   206  ] [varlen]
   207  
   208  nl80211_policy$set_interface [
   209  	mon_options		array[nl80211_policy$mon_options]
   210  	NL80211_ATTR_IFTYPE	nlattr[NL80211_ATTR_IFTYPE, flags[nl80211_iftype, int32]]
   211  	NL80211_ATTR_MESH_ID	nlattr[NL80211_ATTR_MESH_ID, ieee80211_mesh_id]
   212  	NL80211_ATTR_4ADDR	nlattr[NL80211_ATTR_4ADDR, bool8]
   213  ] [varlen]
   214  
   215  nl80211_policy$new_interface [
   216  	mon_options			array[nl80211_policy$mon_options]
   217  	NL80211_ATTR_IFTYPE		nlattr[NL80211_ATTR_IFTYPE, flags[nl80211_iftype, int32]]
   218  	NL80211_ATTR_IFNAME		nlattr[NL80211_ATTR_IFNAME, devname]
   219  	NL80211_ATTR_SOCKET_OWNER	nlattr[NL80211_ATTR_SOCKET_OWNER, void]
   220  	NL80211_ATTR_MESH_ID		nlattr[NL80211_ATTR_MESH_ID, ieee80211_mesh_id]
   221  	NL80211_ATTR_4ADDR		nlattr[NL80211_ATTR_4ADDR, bool8]
   222  ] [varlen]
   223  
   224  mntr_flags_policy [
   225  	NL80211_MNTR_FLAG_FCSFAIL	nlattr[NL80211_MNTR_FLAG_FCSFAIL, void]
   226  	NL80211_MNTR_FLAG_PLCPFAIL	nlattr[NL80211_MNTR_FLAG_PLCPFAIL, void]
   227  	NL80211_MNTR_FLAG_CONTROL	nlattr[NL80211_MNTR_FLAG_CONTROL, void]
   228  	NL80211_MNTR_FLAG_OTHER_BSS	nlattr[NL80211_MNTR_FLAG_OTHER_BSS, void]
   229  	NL80211_MNTR_FLAG_COOK_FRAMES	nlattr[NL80211_MNTR_FLAG_COOK_FRAMES, void]
   230  	NL80211_MNTR_FLAG_ACTIVE	nlattr[NL80211_MNTR_FLAG_ACTIVE, void]
   231  ]
   232  
   233  nl80211_policy$mon_options [
   234  	NL80211_ATTR_MNTR_FLAGS			nlnest[NL80211_ATTR_MNTR_FLAGS, array[mntr_flags_policy]]
   235  	NL80211_ATTR_MU_MIMO_GROUP_DATA		nlattr[NL80211_ATTR_MU_MIMO_GROUP_DATA, array[int8, VHT_MUMIMO_GROUPS_DATA_LEN]]
   236  	NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR	nlattr[NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR, ieee80211_mac_addr]
   237  ] [varlen]
   238  
   239  nl80211_iftype = NL80211_IFTYPE_UNSPECIFIED, NL80211_IFTYPE_ADHOC, NL80211_IFTYPE_STATION, NL80211_IFTYPE_AP, NL80211_IFTYPE_AP_VLAN, NL80211_IFTYPE_WDS, NL80211_IFTYPE_MONITOR, NL80211_IFTYPE_MESH_POINT, NL80211_IFTYPE_P2P_CLIENT, NL80211_IFTYPE_P2P_GO, NL80211_IFTYPE_P2P_DEVICE, NL80211_IFTYPE_OCB, NL80211_IFTYPE_NAN
   240  
   241  nl80211_policy$cmd_key [
   242  	NL80211_ATTR_KEY_IDX		nlattr[NL80211_ATTR_KEY_IDX, int8[0:5]]
   243  	NL80211_ATTR_KEY_TYPE		nlattr[NL80211_ATTR_KEY_TYPE, flags[nl80211_key_type, int32]]
   244  	NL80211_ATTR_KEY_DEFAULT	nlattr[NL80211_ATTR_KEY_DEFAULT, void]
   245  	NL80211_ATTR_KEY_DEFAULT_MGMT	nlattr[NL80211_ATTR_KEY_DEFAULT_MGMT, void]
   246  	NL80211_ATTR_KEY_CIPHER		nlattr[NL80211_ATTR_KEY_CIPHER, flags[nl80211_cipher_suite, int32]]
   247  	NL80211_ATTR_KEY_DATA_WEP40	nlattr[NL80211_ATTR_KEY_DATA, array[int8, WLAN_KEY_LEN_WEP40]]
   248  	NL80211_ATTR_KEY_DATA_WEP104	nlattr[NL80211_ATTR_KEY_DATA, array[int8, WLAN_KEY_LEN_WEP104]]
   249  	NL80211_ATTR_KEY_SEQ		nlattr[NL80211_ATTR_KEY_SEQ, array[int8, 0:16]]
   250  	NL80211_ATTR_MAC		nlattr[NL80211_ATTR_MAC, ieee80211_mac_addr]
   251  	NL80211_ATTR_KEY_DEFAULT_TYPES	nlnest[NL80211_ATTR_KEY_DEFAULT_TYPES, array[nl80211_key_default_policy]]
   252  	NL80211_ATTR_KEY		nlnest[NL80211_ATTR_KEY, array[nl80211_key_policy]]
   253  ] [varlen]
   254  
   255  nl80211_key_default_policy [
   256  	NL80211_KEY_DEFAULT_TYPE_UNICAST	nlattr[NL80211_KEY_DEFAULT_TYPE_UNICAST, void]
   257  	NL80211_KEY_DEFAULT_TYPE_MULTICAST	nlattr[NL80211_KEY_DEFAULT_TYPE_MULTICAST, void]
   258  ] [varlen]
   259  
   260  nl80211_key_policy [
   261  	NL80211_KEY_DATA_WEP40		nlattr[NL80211_KEY_DATA, array[int8, WLAN_KEY_LEN_WEP40]]
   262  	NL80211_KEY_DATA_WEP104		nlattr[NL80211_KEY_DATA, array[int8, WLAN_KEY_LEN_WEP104]]
   263  	NL80211_KEY_IDX			nlattr[NL80211_KEY_IDX, int8[0:5]]
   264  	NL80211_KEY_CIPHER		nlattr[NL80211_KEY_CIPHER, flags[nl80211_cipher_suite, int32]]
   265  	NL80211_KEY_SEQ			nlattr[NL80211_KEY_SEQ, array[int8, 0:16]]
   266  	NL80211_KEY_DEFAULT		nlattr[NL80211_KEY_DEFAULT, void]
   267  	NL80211_KEY_DEFAULT_MGMT	nlattr[NL80211_KEY_DEFAULT_MGMT, void]
   268  	NL80211_KEY_TYPE		nlattr[NL80211_KEY_TYPE, flags[nl80211_key_type, int32]]
   269  	NL80211_KEY_DEFAULT_TYPES	nlnest[NL80211_KEY_DEFAULT_TYPES, array[nl80211_key_default_policy]]
   270  	NL80211_KEY_MODE		nlattr[NL80211_KEY_MODE, int8[0:NL80211_KEY_SET_TX]]
   271  ] [varlen]
   272  
   273  nl80211_key_type = NL80211_KEYTYPE_GROUP, NL80211_KEYTYPE_PAIRWISE, NL80211_KEYTYPE_PEERKEY
   274  nl80211_cipher_suite = WLAN_CIPHER_SUITE_WEP40, WLAN_CIPHER_SUITE_WEP104
   275  
   276  he_obss_pd_policy [
   277  	NL80211_HE_OBSS_PD_ATTR_MIN_OFFSET		nlattr[NL80211_HE_OBSS_PD_ATTR_MIN_OFFSET, int8[1:20]]
   278  	NL80211_HE_OBSS_PD_ATTR_MAX_OFFSET		nlattr[NL80211_HE_OBSS_PD_ATTR_MAX_OFFSET, int8[1:20]]
   279  	NL80211_HE_OBSS_PD_ATTR_NON_SRG_MAX_OFFSET	nlattr[NL80211_HE_OBSS_PD_ATTR_NON_SRG_MAX_OFFSET, int8[1:20]]
   280  	NL80211_HE_OBSS_PD_ATTR_BSS_COLOR_BITMAP	nlattr[NL80211_HE_OBSS_PD_ATTR_BSS_COLOR_BITMAP, array[int8, 8]]
   281  	NL80211_HE_OBSS_PD_ATTR_PARTIAL_BSSID_BITMAP	nlattr[NL80211_HE_OBSS_PD_ATTR_PARTIAL_BSSID_BITMAP, array[int8, 8]]
   282  	NL80211_HE_OBSS_PD_ATTR_SR_CTRL			nlattr[NL80211_HE_OBSS_PD_ATTR_SR_CTRL, int8]
   283  ]
   284  
   285  he_bss_color_policy [
   286  	NL80211_HE_BSS_COLOR_ATTR_COLOR		nlattr[NL80211_HE_BSS_COLOR_ATTR_COLOR, int8[1:63]]
   287  	NL80211_HE_BSS_COLOR_ATTR_DISABLED	nlattr[NL80211_HE_BSS_COLOR_ATTR_DISABLED, void]
   288  	NL80211_HE_BSS_COLOR_ATTR_PARTIAL	nlattr[NL80211_HE_BSS_COLOR_ATTR_PARTIAL, void]
   289  ] [varlen]
   290  
   291  nl80211_policy$start_ap [
   292  	beacon					array[nl80211_policy$beacon]
   293  	chandef_params				array[nl80211_policy$chandef_params]
   294  	crypto_settings				array[nl80211_policy$crypto_settings]
   295  	acl_policy				array[nl80211_policy$acl]
   296  	NL80211_ATTR_BEACON_INTERVAL		nlattr[NL80211_ATTR_BEACON_INTERVAL, ieee80211_beacon_interval[int32]]
   297  	NL80211_ATTR_DTIM_PERIOD		nlattr[NL80211_ATTR_DTIM_PERIOD, int32]
   298  	NL80211_ATTR_SSID			nlattr[NL80211_ATTR_SSID, ieee80211_ssid]
   299  	NL80211_ATTR_HIDDEN_SSID		nlattr[NL80211_ATTR_HIDDEN_SSID, int32[NL80211_HIDDEN_SSID_NOT_IN_USE:NL80211_HIDDEN_SSID_ZERO_CONTENTS]]
   300  	NL80211_ATTR_PRIVACY			nlattr[NL80211_ATTR_PRIVACY, void]
   301  	NL80211_ATTR_AUTH_TYPE			nlattr[NL80211_ATTR_AUTH_TYPE, flags[nl80211_auth_type, int32]]
   302  	NL80211_ATTR_INACTIVITY_TIMEOUT		nlattr[NL80211_ATTR_INACTIVITY_TIMEOUT, int16]
   303  	NL80211_ATTR_P2P_CTWINDOW		nlattr[NL80211_ATTR_P2P_CTWINDOW, int8]
   304  	NL80211_ATTR_P2P_OPPPS			nlattr[NL80211_ATTR_P2P_OPPPS, bool8]
   305  	NL80211_ATTR_TX_RATES			nlnest[NL80211_ATTR_TX_RATES, array[nl80211_tx_rates_policy]]
   306  	NL80211_ATTR_SMPS_MODE			nlattr[NL80211_ATTR_SMPS_MODE, flags[nl80211_smps_mode, int8]]
   307  	NL80211_ATTR_PBSS			nlattr[NL80211_ATTR_PBSS, void]
   308  	NL80211_ATTR_EXTERNAL_AUTH_SUPPORT	nlattr[NL80211_ATTR_EXTERNAL_AUTH_SUPPORT, void]
   309  	NL80211_ATTR_TWT_RESPONDER		nlattr[NL80211_ATTR_TWT_RESPONDER, void]
   310  	NL80211_ATTR_HE_OBSS_PD			nlnest[NL80211_ATTR_HE_OBSS_PD, array[he_obss_pd_policy]]
   311  	NL80211_ATTR_HE_BSS_COLOR		nlnest[NL80211_ATTR_HE_BSS_COLOR, array[he_bss_color_policy]]
   312  ] [varlen]
   313  
   314  nl80211_policy$beacon [
   315  	NL80211_ATTR_BEACON_HEAD	nlattr[NL80211_ATTR_BEACON_HEAD, ieee80211_mgmt_beacon]
   316  	NL80211_ATTR_BEACON_TAIL	nlattr[NL80211_ATTR_BEACON_TAIL, array[ieee80211_ie]]
   317  	NL80211_ATTR_IE			nlattr[NL80211_ATTR_IE, array[ieee80211_ie]]
   318  	NL80211_ATTR_IE_PROBE_RESP	nlattr[NL80211_ATTR_IE_PROBE_RESP, array[ieee80211_ie]]
   319  	NL80211_ATTR_IE_ASSOC_RESP	nlattr[NL80211_ATTR_IE_ASSOC_RESP, array[ieee80211_ie]]
   320  	NL80211_ATTR_PROBE_RESP		nlattr[NL80211_ATTR_PROBE_RESP, array[int8, 0:IEEE80211_MAX_DATA_LEN]]
   321  	NL80211_ATTR_FTM_RESPONDER	nlnest[NL80211_ATTR_FTM_RESPONDER, array[nl80211_ftm_responder_policy]]
   322  ] [varlen]
   323  
   324  nl80211_smps_mode = NL80211_SMPS_OFF, NL80211_SMPS_STATIC, NL80211_SMPS_DYNAMIC
   325  nl80211_auth_type = NL80211_AUTHTYPE_OPEN_SYSTEM, NL80211_AUTHTYPE_SHARED_KEY, NL80211_AUTHTYPE_FT, NL80211_AUTHTYPE_NETWORK_EAP, NL80211_AUTHTYPE_SAE, NL80211_AUTHTYPE_FILS_SK, NL80211_AUTHTYPE_FILS_SK_PFS, NL80211_AUTHTYPE_FILS_PK
   326  nl80211_wpa_versions = NL80211_WPA_VERSION_1, NL80211_WPA_VERSION_2, NL80211_WPA_VERSION_3
   327  
   328  type nl80211_rates array[ieee80211_rate, 0:NL80211_MAX_SUPP_RATES]
   329  
   330  nl80211_tx_rates_policy [
   331  	NL80211_BAND_2GHZ	nlnest[NL80211_BAND_2GHZ, array[nl80211_txattr_policy]]
   332  	NL80211_BAND_5GHZ	nlnest[NL80211_BAND_5GHZ, array[nl80211_txattr_policy]]
   333  	NL80211_BAND_60GHZ	nlnest[NL80211_BAND_60GHZ, array[nl80211_txattr_policy]]
   334  	NL80211_BAND_6GHZ	nlnest[NL80211_BAND_6GHZ, array[nl80211_txattr_policy]]
   335  ] [varlen]
   336  
   337  nl80211_ht_rate {
   338  	rbit	int8:3
   339  	ridx	int8:5[0:IEEE80211_HT_MCS_MASK_LEN]
   340  } [packed]
   341  
   342  nl80211_txattr_policy [
   343  	NL80211_TXRATE_LEGACY	nlattr[NL80211_TXRATE_LEGACY, array[flags[ieee80211_rate_label, int8], 0:NL80211_MAX_SUPP_RATES]]
   344  	NL80211_TXRATE_HT	nlattr[NL80211_TXRATE_HT, array[nl80211_ht_rate, 0:NL80211_MAX_SUPP_HT_RATES]]
   345  	NL80211_TXRATE_VHT	nlattr[NL80211_TXRATE_VHT, nl80211_txrate_vht]
   346  	NL80211_TXRATE_GI	nlattr[NL80211_TXRATE_GI, flags[nl80211_txrate_gi, int8]]
   347  	NL80211_TXRATE_HE	nlattr[NL80211_TXRATE_HE, nl80211_txrate_he]
   348  	NL80211_TXRATE_HE_GI	nlattr[NL80211_TXRATE_HE_GI, int8[NL80211_RATE_INFO_HE_GI_0_8:NL80211_RATE_INFO_HE_GI_3_2]]
   349  	NL80211_TXRATE_HE_LTF	nlattr[NL80211_TXRATE_HE_LTF, int8[NL80211_RATE_INFO_HE_1XLTF:NL80211_RATE_INFO_HE_4XLTF]]
   350  ] [varlen]
   351  
   352  nl80211_txrate_gi = NL80211_TXRATE_DEFAULT_GI, NL80211_TXRATE_FORCE_SGI, NL80211_TXRATE_FORCE_LGI
   353  
   354  nl80211_txrate_he {
   355  	mcs	array[int16, NL80211_HE_NSS_MAX]
   356  }
   357  
   358  nl80211_txrate_vht {
   359  	mcs	array[int16, NL80211_VHT_NSS_MAX]
   360  }
   361  
   362  nl80211_ftm_responder_policy [
   363  	NL80211_FTM_RESP_ATTR_ENABLED	nlattr[NL80211_FTM_RESP_ATTR_ENABLED, void]
   364  	NL80211_FTM_RESP_ATTR_LCI	nlattr[NL80211_FTM_RESP_ATTR_LCI, array[int8]]
   365  	NL80211_FTM_RESP_ATTR_CIVICLOC	nlattr[NL80211_FTM_RESP_ATTR_CIVICLOC, array[int8]]
   366  ] [varlen]
   367  
   368  nl80211_policy$station [
   369  	NL80211_ATTR_MAC			nlattr[NL80211_ATTR_MAC, ieee80211_mac_addr]
   370  	NL80211_ATTR_MGMT_SUBTYPE		nlattr[NL80211_ATTR_MGMT_SUBTYPE, flags[ieee80211_mgmt_subtype, int8]]
   371  	NL80211_ATTR_REASON_CODE		nlattr[NL80211_ATTR_REASON_CODE, int16]
   372  	NL80211_ATTR_STA_AID			nlattr[NL80211_ATTR_STA_AID, int16[1:IEEE80211_MAX_AID]]
   373  	NL80211_ATTR_VLAN_ID			nlattr[NL80211_ATTR_VLAN_ID, int16[1:4]]
   374  	NL80211_ATTR_STA_LISTEN_INTERVAL	nlattr[NL80211_ATTR_STA_LISTEN_INTERVAL, int16]
   375  	NL80211_ATTR_STA_SUPPORT_P2P_PS		nlattr[NL80211_ATTR_STA_SUPPORT_P2P_PS, bool8]
   376  	NL80211_ATTR_STA_SUPPORTED_RATES	nlattr[NL80211_ATTR_STA_SUPPORTED_RATES, nl80211_rates]
   377  	NL80211_ATTR_STA_CAPABILITY		nlattr[NL80211_ATTR_STA_CAPABILITY, int16]
   378  	NL80211_ATTR_STA_EXT_CAPABILITY		nlattr[NL80211_ATTR_STA_EXT_CAPABILITY, array[int8]]
   379  	NL80211_ATTR_STA_FLAGS			nlnest[NL80211_ATTR_STA_FLAGS, array[sta_flags_policy]]
   380  	NL80211_ATTR_STA_FLAGS2			nlattr[NL80211_ATTR_STA_FLAGS2, nl80211_sta_flag_update]
   381  	NL80211_ATTR_STA_PLINK_ACTION		nlattr[NL80211_ATTR_STA_PLINK_ACTION, int8[0:NUM_NL80211_PLINK_ACTIONS_1]]
   382  	NL80211_ATTR_STA_PLINK_STATE		nlattr[NL80211_ATTR_STA_PLINK_STATE, int8[0:NUM_NL80211_PLINK_STATES_1]]
   383  	NL80211_ATTR_LOCAL_MESH_POWER_MODE	nlattr[NL80211_ATTR_LOCAL_MESH_POWER_MODE, int32[1:NL80211_MESH_POWER_MAX]]
   384  	NL80211_ATTR_OPMODE_NOTIF		nlattr[NL80211_ATTR_OPMODE_NOTIF, int8]
   385  	NL80211_ATTR_AIRTIME_WEIGHT		nlattr[NL80211_ATTR_AIRTIME_WEIGHT, int16]
   386  	NL80211_ATTR_STA_TX_POWER_SETTING	nlattr[NL80211_ATTR_STA_TX_POWER_SETTING, int8[NL80211_TX_POWER_AUTOMATIC:NL80211_TX_POWER_FIXED]]
   387  	NL80211_ATTR_STA_TX_POWER		nlattr[NL80211_ATTR_STA_TX_POWER, int16]
   388  	NL80211_ATTR_STA_SUPPORTED_CHANNELS	nlattr[NL80211_ATTR_STA_SUPPORTED_CHANNELS, array[int16]]
   389  	NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES	nlattr[NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES, array[int8, 2:253]]
   390  	NL80211_ATTR_STA_WME			nlattr[NL80211_ATTR_STA_WME, array[nl80211_sta_wme_policy]]
   391  	NL80211_ATTR_PEER_AID			nlattr[NL80211_ATTR_PEER_AID, int16[1:IEEE80211_MAX_AID]]
   392  	NL80211_ATTR_MESH_PEER_AID		nlattr[NL80211_ATTR_MESH_PEER_AID, int16[1:IEEE80211_MAX_AID]]
   393  	NL80211_ATTR_STA_VLAN			nlattr[NL80211_ATTR_STA_VLAN, nl80211_ifindex]
   394  ] [varlen]
   395  
   396  define NUM_NL80211_PLINK_ACTIONS_1	NUM_NL80211_PLINK_ACTIONS - 1
   397  define NUM_NL80211_PLINK_STATES_1	NUM_NL80211_PLINK_STATES - 1
   398  
   399  ieee80211_mgmt_subtype = 0xa, 0xc
   400  
   401  sta_flags_policy [
   402  	NL80211_STA_FLAG_AUTHORIZED	nlattr[NL80211_STA_FLAG_AUTHORIZED, void]
   403  	NL80211_STA_FLAG_SHORT_PREAMBLE	nlattr[NL80211_STA_FLAG_SHORT_PREAMBLE, void]
   404  	NL80211_STA_FLAG_WME		nlattr[NL80211_STA_FLAG_WME, void]
   405  	NL80211_STA_FLAG_MFP		nlattr[NL80211_STA_FLAG_MFP, void]
   406  	NL80211_STA_FLAG_AUTHENTICATED	nlattr[NL80211_STA_FLAG_AUTHENTICATED, void]
   407  	NL80211_STA_FLAG_TDLS_PEER	nlattr[NL80211_STA_FLAG_TDLS_PEER, void]
   408  	NL80211_STA_FLAG_ASSOCIATED	nlattr[NL80211_STA_FLAG_ASSOCIATED, void]
   409  ] [varlen]
   410  
   411  nl80211_sta_flag_update {
   412  	mask	int32
   413  	set	int32
   414  } [packed]
   415  
   416  nl80211_sta_wme_policy [
   417  	NL80211_STA_WME_UAPSD_QUEUES	nlattr[NL80211_STA_WME_UAPSD_QUEUES, int8]
   418  	NL80211_STA_WME_MAX_SP		nlattr[NL80211_STA_WME_MAX_SP, int8]
   419  ] [varlen]
   420  
   421  nl80211_policy$mpath [
   422  	NL80211_ATTR_MAC		nlattr[NL80211_ATTR_MAC, ieee80211_mac_addr]
   423  	NL80211_ATTR_MPATH_NEXT_HOP	nlattr[NL80211_ATTR_MPATH_NEXT_HOP, ieee80211_mac_addr]
   424  ] [varlen]
   425  
   426  nl80211_policy$bss [
   427  	NL80211_ATTR_BSS_CTS_PROT		nlattr[NL80211_ATTR_BSS_CTS_PROT, int8]
   428  	NL80211_ATTR_BSS_SHORT_PREAMBLE		nlattr[NL80211_ATTR_BSS_SHORT_PREAMBLE, int8]
   429  	NL80211_ATTR_BSS_SHORT_SLOT_TIME	nlattr[NL80211_ATTR_BSS_SHORT_SLOT_TIME, int8]
   430  	NL80211_ATTR_BSS_HT_OPMODE		nlattr[NL80211_ATTR_BSS_HT_OPMODE, int16]
   431  	NL80211_ATTR_AP_ISOLATE			nlattr[NL80211_ATTR_AP_ISOLATE, int8]
   432  	NL80211_ATTR_P2P_CTWINDOW		nlattr[NL80211_ATTR_P2P_CTWINDOW, int8]
   433  	NL80211_ATTR_P2P_OPPPS			nlattr[NL80211_ATTR_P2P_OPPPS, bool8]
   434  ] [varlen]
   435  
   436  nl80211_policy$reg [
   437  	NL80211_ATTR_WIPHY		nlattr[NL80211_ATTR_WIPHY, nl80211_wiphy]
   438  	NL80211_ATTR_USER_REG_HINT_TYPE	nlattr[NL80211_ATTR_USER_REG_HINT_TYPE, flags[nl80211_user_reg_hint_type, int32]]
   439  	NL80211_ATTR_SOCKET_OWNER	nlattr[NL80211_ATTR_SOCKET_OWNER, void]
   440  	NL80211_ATTR_REG_ALPHA2		nlattr[NL80211_ATTR_REG_ALPHA2, string[nl80211_reg_alpha2]]
   441  	NL80211_ATTR_REG_RULES		nlnest[NL80211_ATTR_REG_RULES, array[nlnest[0, array[reg_rule_policy]]]]
   442  	NL80211_ATTR_DFS_REGION		nlattr[NL80211_ATTR_DFS_REGION, int8]
   443  ] [varlen]
   444  
   445  nl80211_user_reg_hint_type = NL80211_USER_REG_HINT_USER, NL80211_USER_REG_HINT_CELL_BASE, NL80211_USER_REG_HINT_INDOOR
   446  nl80211_reg_alpha2 = "a", "b", "aa", "bb"
   447  
   448  reg_rule_policy [
   449  	NL80211_ATTR_REG_RULE_FLAGS		nlattr[NL80211_ATTR_REG_RULE_FLAGS, int32]
   450  	NL80211_ATTR_FREQ_RANGE_START		nlattr[NL80211_ATTR_FREQ_RANGE_START, int32]
   451  	NL80211_ATTR_FREQ_RANGE_END		nlattr[NL80211_ATTR_FREQ_RANGE_END, int32]
   452  	NL80211_ATTR_FREQ_RANGE_MAX_BW		nlattr[NL80211_ATTR_FREQ_RANGE_MAX_BW, int32]
   453  	NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN	nlattr[NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN, int32]
   454  	NL80211_ATTR_POWER_RULE_MAX_EIRP	nlattr[NL80211_ATTR_POWER_RULE_MAX_EIRP, int32]
   455  	NL80211_ATTR_DFS_CAC_TIME		nlattr[NL80211_ATTR_DFS_CAC_TIME, int32]
   456  ] [varlen]
   457  
   458  nl80211_policy$mesh [
   459  	NL80211_ATTR_WIPHY		nlattr[NL80211_ATTR_WIPHY, nl80211_wiphy]
   460  	NL80211_ATTR_IFINDEX		nlattr[NL80211_ATTR_IFINDEX, nl80211_ifindex]
   461  	NL80211_ATTR_WDEV		nlattr[NL80211_ATTR_WDEV, nl80211_wdev]
   462  	NL80211_ATTR_MESH_CONFIG	nlnest[NL80211_ATTR_MESH_CONFIG, array[nl80211_meshconf_params_policy]]
   463  ] [varlen]
   464  
   465  nl80211_policy$join_mesh [
   466  	chandef_params				array[nl80211_policy$chandef_params]
   467  	NL80211_ATTR_MESH_CONFIG		nlnest[NL80211_ATTR_MESH_CONFIG, array[nl80211_meshconf_params_policy]]
   468  	NL80211_ATTR_MESH_SETUP			nlattr[NL80211_ATTR_MESH_SETUP, array[nl80211_mesh_setup_params_policy]]
   469  	NL80211_ATTR_MESH_ID			nlattr[NL80211_ATTR_MESH_ID, ieee80211_mesh_id]
   470  	NL80211_ATTR_MCAST_RATE			nlattr[NL80211_ATTR_MCAST_RATE, int32]
   471  	NL80211_ATTR_BEACON_INTERVAL		nlattr[NL80211_ATTR_BEACON_INTERVAL, ieee80211_beacon_interval[int32]]
   472  	NL80211_ATTR_DTIM_PERIOD		nlattr[NL80211_ATTR_DTIM_PERIOD, int32]
   473  	NL80211_ATTR_BSS_BASIC_RATES		nlattr[NL80211_ATTR_BSS_BASIC_RATES, nl80211_rates]
   474  	NL80211_ATTR_TX_RATES			nlnest[NL80211_ATTR_TX_RATES, array[nl80211_tx_rates_policy]]
   475  	NL80211_ATTR_SOCKET_OWNER		nlattr[NL80211_ATTR_SOCKET_OWNER, void]
   476  	NL80211_ATTR_HANDLE_DFS			nlattr[NL80211_ATTR_HANDLE_DFS, void]
   477  	NL80211_ATTR_CONTROL_PORT_OVER_NL80211	nlattr[NL80211_ATTR_CONTROL_PORT_OVER_NL80211, void]
   478  ] [varlen]
   479  
   480  nl80211_meshconf_params_policy [
   481  	NL80211_MESHCONF_RETRY_TIMEOUT			nlattr[NL80211_MESHCONF_RETRY_TIMEOUT, int16[1:255]]
   482  	NL80211_MESHCONF_CONFIRM_TIMEOUT		nlattr[NL80211_MESHCONF_CONFIRM_TIMEOUT, int16[1:255]]
   483  	NL80211_MESHCONF_HOLDING_TIMEOUT		nlattr[NL80211_MESHCONF_HOLDING_TIMEOUT, int16[1:255]]
   484  	NL80211_MESHCONF_MAX_PEER_LINKS			nlattr[NL80211_MESHCONF_MAX_PEER_LINKS, int16[0:255]]
   485  	NL80211_MESHCONF_MAX_RETRIES			nlattr[NL80211_MESHCONF_MAX_RETRIES, int8[0:16]]
   486  	NL80211_MESHCONF_TTL				nlattr[NL80211_MESHCONF_TTL, int8]
   487  	NL80211_MESHCONF_ELEMENT_TTL			nlattr[NL80211_MESHCONF_ELEMENT_TTL, int8]
   488  	NL80211_MESHCONF_AUTO_OPEN_PLINKS		nlattr[NL80211_MESHCONF_AUTO_OPEN_PLINKS, int8]
   489  	NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR	nlattr[NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR, int32[1:255]]
   490  	NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES		nlattr[NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES, int8]
   491  	NL80211_MESHCONF_PATH_REFRESH_TIME		nlattr[NL80211_MESHCONF_PATH_REFRESH_TIME, int32]
   492  	NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT		nlattr[NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT, int16]
   493  	NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT	nlattr[NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT, int32]
   494  	NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL		nlattr[NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL, int16]
   495  	NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL		nlattr[NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL, int16]
   496  	NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME	nlattr[NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME, int16]
   497  	NL80211_MESHCONF_HWMP_ROOTMODE			nlattr[NL80211_MESHCONF_HWMP_ROOTMODE, int8[0:4]]
   498  	NL80211_MESHCONF_HWMP_RANN_INTERVAL		nlattr[NL80211_MESHCONF_HWMP_RANN_INTERVAL, int16]
   499  	NL80211_MESHCONF_GATE_ANNOUNCEMENTS		nlattr[NL80211_MESHCONF_GATE_ANNOUNCEMENTS, bool8]
   500  	NL80211_MESHCONF_FORWARDING			nlattr[NL80211_MESHCONF_FORWARDING, bool8]
   501  	NL80211_MESHCONF_RSSI_THRESHOLD			nlattr[NL80211_MESHCONF_RSSI_THRESHOLD, int32[-255:0]]
   502  	NL80211_MESHCONF_HT_OPMODE			nlattr[NL80211_MESHCONF_HT_OPMODE, flags[ieee80211_op_mode, int16]]
   503  	NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT	nlattr[NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT, int32]
   504  	NL80211_MESHCONF_HWMP_ROOT_INTERVAL		nlattr[NL80211_MESHCONF_HWMP_ROOT_INTERVAL, int16]
   505  	NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL	nlattr[NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL, int16]
   506  	NL80211_MESHCONF_POWER_MODE			nlattr[NL80211_MESHCONF_POWER_MODE, int32[NL80211_MESH_POWER_ACTIVE:NL80211_MESH_POWER_MAX]]
   507  	NL80211_MESHCONF_AWAKE_WINDOW			nlattr[NL80211_MESHCONF_AWAKE_WINDOW, int16]
   508  	NL80211_MESHCONF_PLINK_TIMEOUT			nlattr[NL80211_MESHCONF_PLINK_TIMEOUT, int32]
   509  	NL80211_MESHCONF_CONNECTED_TO_GATE		nlattr[NL80211_MESHCONF_CONNECTED_TO_GATE, bool8]
   510  	NL80211_MESHCONF_NOLEARN			nlattr[NL80211_MESHCONF_NOLEARN, bool8]
   511  	NL80211_MESHCONF_CONNECTED_TO_AS		nlattr[NL80211_MESHCONF_CONNECTED_TO_AS, bool8]
   512  ] [varlen]
   513  
   514  ieee80211_op_mode = IEEE80211_HT_OP_MODE_PROTECTION, IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT, IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT
   515  
   516  nl80211_mesh_setup_params_policy [
   517  	NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC		nlattr[NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC, bool8]
   518  	NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL	nlattr[NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL, bool8]
   519  	NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC		nlattr[NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC, bool8]
   520  	NL80211_MESH_SETUP_USERSPACE_AUTH		nlattr[NL80211_MESH_SETUP_USERSPACE_AUTH, void]
   521  	NL80211_MESH_SETUP_AUTH_PROTOCOL		nlattr[NL80211_MESH_SETUP_AUTH_PROTOCOL, int8]
   522  	NL80211_MESH_SETUP_USERSPACE_MPM		nlattr[NL80211_MESH_SETUP_USERSPACE_MPM, void]
   523  	NL80211_MESH_SETUP_IE				nlattr[NL80211_MESH_SETUP_IE, array[int8]]
   524  	NL80211_MESH_SETUP_USERSPACE_AMPE		nlattr[NL80211_MESH_SETUP_USERSPACE_AMPE, void]
   525  ] [varlen]
   526  
   527  nl80211_scan_flags = NL80211_SCAN_FLAG_LOW_PRIORITY, NL80211_SCAN_FLAG_FLUSH, NL80211_SCAN_FLAG_AP, NL80211_SCAN_FLAG_RANDOM_ADDR, NL80211_SCAN_FLAG_FILS_MAX_CHANNEL_TIME, NL80211_SCAN_FLAG_ACCEPT_BCAST_PROBE_RESP, NL80211_SCAN_FLAG_OCE_PROBE_REQ_HIGH_TX_RATE, NL80211_SCAN_FLAG_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION, NL80211_SCAN_FLAG_LOW_SPAN, NL80211_SCAN_FLAG_LOW_POWER, NL80211_SCAN_FLAG_HIGH_ACCURACY, NL80211_SCAN_FLAG_RANDOM_SN, NL80211_SCAN_FLAG_MIN_PREQ_CONTENT, NL80211_SCAN_FLAG_FREQ_KHZ
   528  
   529  nl80211_policy$scan [
   530  	NL80211_ATTR_MAC				nlattr[NL80211_ATTR_MAC, ieee80211_mac_addr]
   531  	NL80211_ATTR_IE					nlattr[NL80211_ATTR_IE, array[ieee80211_ie]]
   532  	NL80211_ATTR_SCAN_FREQUENCIES			nlnest[NL80211_ATTR_SCAN_FREQUENCIES, array[nlattr[0, int32]]]
   533  	NL80211_ATTR_SCAN_SSIDS				nlnest[NL80211_ATTR_SCAN_SSIDS, array[nlattr[0, ieee80211_ssid]]]
   534  	NL80211_ATTR_SCHED_SCAN_INTERVAL		nlattr[NL80211_ATTR_SCHED_SCAN_INTERVAL, int32]
   535  	NL80211_ATTR_BG_SCAN_PERIOD			nlattr[NL80211_ATTR_BG_SCAN_PERIOD, int16]
   536  	NL80211_ATTR_SCHED_SCAN_DELAY			nlattr[NL80211_ATTR_SCHED_SCAN_DELAY, int32]
   537  	NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI		nlattr[NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI, int8]
   538  	NL80211_ATTR_MEASUREMENT_DURATION		nlattr[NL80211_ATTR_MEASUREMENT_DURATION, int16]
   539  	NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY	nlattr[NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY, void]
   540  	NL80211_ATTR_SCHED_SCAN_MULTI			nlattr[NL80211_ATTR_SCHED_SCAN_MULTI, void]
   541  	NL80211_ATTR_TX_NO_CCK_RATE			nlattr[NL80211_ATTR_TX_NO_CCK_RATE, void]
   542  	NL80211_ATTR_BSSID				nlattr[NL80211_ATTR_BSSID, ieee80211_bssid]
   543  	NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST		nlattr[NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST, nl80211_bss_select_rssi_adjust]
   544  	NL80211_ATTR_SCAN_SUPP_RATES			nlnest[NL80211_ATTR_SCAN_SUPP_RATES, array[nl80211_rates_policy]]
   545  	NL80211_ATTR_SCHED_SCAN_MATCH			nlnest[NL80211_ATTR_SCHED_SCAN_MATCH, array[nl80211_match_policy]]
   546  	NL80211_ATTR_SCAN_FLAGS				nlattr[NL80211_ATTR_SCAN_FLAGS, flags[nl80211_scan_flags, int32]]
   547  ] [varlen]
   548  
   549  nl80211_bss_select_rssi_adjust {
   550  	band	flags[nl80211_bands, int8]
   551  	delta	int8
   552  } [packed]
   553  
   554  nl80211_rates_policy [
   555  	NL80211_BAND_2GHZ	nlattr[NL80211_BAND_2GHZ, array[int8]]
   556  	NL80211_BAND_5GHZ	nlattr[NL80211_BAND_5GHZ, array[int8]]
   557  	NL80211_BAND_60GHZ	nlattr[NL80211_BAND_60GHZ, array[int8]]
   558  	NL80211_BAND_6GHZ	nlattr[NL80211_BAND_6GHZ, array[int8]]
   559  ] [varlen]
   560  
   561  nl80211_match_policy [
   562  	NL80211_SCHED_SCAN_MATCH_ATTR_SSID	nlattr[NL80211_SCHED_SCAN_MATCH_ATTR_SSID, ieee80211_ssid]
   563  	NL80211_SCHED_SCAN_MATCH_ATTR_BSSID	nlattr[NL80211_SCHED_SCAN_MATCH_ATTR_BSSID, ieee80211_bssid]
   564  	NL80211_SCHED_SCAN_MATCH_ATTR_RSSI	nlattr[NL80211_SCHED_SCAN_MATCH_ATTR_RSSI, int32]
   565  	NL80211_SCHED_SCAN_MATCH_PER_BAND_RSSI	nlnest[NL80211_SCHED_SCAN_MATCH_PER_BAND_RSSI, array[nl80211_match_band_rssi_policy]]
   566  ] [varlen]
   567  
   568  nl80211_match_band_rssi_policy [
   569  	NL80211_BAND_2GHZ	nlattr[NL80211_BAND_2GHZ, int32]
   570  	NL80211_BAND_5GHZ	nlattr[NL80211_BAND_5GHZ, int32]
   571  	NL80211_BAND_6GHZ	nlattr[NL80211_BAND_6GHZ, int32]
   572  	NL80211_BAND_60GHZ	nlattr[NL80211_BAND_60GHZ, int32]
   573  	NL80211_BAND_LC		nlattr[NL80211_BAND_LC, int32]
   574  ] [varlen]
   575  
   576  nl80211_policy$join_ibss [
   577  	chandef_params				array[nl80211_policy$chandef_params]
   578  	NL80211_ATTR_SSID			nlattr[NL80211_ATTR_SSID, ieee80211_ssid]
   579  	NL80211_ATTR_HIDDEN_SSID		nlattr[NL80211_ATTR_HIDDEN_SSID, ieee80211_ssid]
   580  	NL80211_ATTR_BEACON_INTERVAL		nlattr[NL80211_ATTR_BEACON_INTERVAL, ieee80211_beacon_interval[int32]]
   581  	NL80211_ATTR_MAC			nlattr[NL80211_ATTR_MAC, ieee80211_bssid]
   582  	NL80211_ATTR_IE				nlattr[NL80211_ATTR_IE, array[ieee80211_ie]]
   583  	NL80211_ATTR_FREQ_FIXED			nlattr[NL80211_ATTR_FREQ_FIXED, void]
   584  	NL80211_ATTR_PRIVACY			nlattr[NL80211_ATTR_PRIVACY, void]
   585  	NL80211_ATTR_BSS_BASIC_RATES		nlattr[NL80211_ATTR_BSS_BASIC_RATES, nl80211_rates]
   586  	NL80211_ATTR_HT_CAPABILITY		nlattr[NL80211_ATTR_HT_CAPABILITY, ieee80211_ht_cap]
   587  	NL80211_ATTR_HT_CAPABILITY_MASK		nlattr[NL80211_ATTR_HT_CAPABILITY_MASK, ieee80211_ht_cap]
   588  	NL80211_ATTR_MCAST_RATE			nlattr[NL80211_ATTR_MCAST_RATE, int32]
   589  	NL80211_ATTR_KEYS			nlnest[NL80211_ATTR_KEYS, array[nlnest[0, array[nl80211_key_policy]]]]
   590  	NL80211_ATTR_CONTROL_PORT		nlattr[NL80211_ATTR_CONTROL_PORT, void]
   591  	NL80211_ATTR_SOCKET_OWNER		nlattr[NL80211_ATTR_SOCKET_OWNER, void]
   592  	NL80211_ATTR_CONTROL_PORT_OVER_NL80211	nlattr[NL80211_ATTR_CONTROL_PORT_OVER_NL80211, void]
   593  	NL80211_ATTR_HANDLE_DFS			nlattr[NL80211_ATTR_HANDLE_DFS, void]
   594  	NL80211_ATTR_MESH_CONFIG		nlnest[NL80211_ATTR_MESH_CONFIG, array[nl80211_meshconf_params_policy]]
   595  ] [varlen]
   596  
   597  nl80211_mfp_flags = NL80211_MFP_NO, NL80211_MFP_REQUIRED, NL80211_MFP_OPTIONAL
   598  
   599  nl80211_bss_select_policy [
   600  	NL80211_BSS_SELECT_ATTR_RSSI		nlattr[NL80211_BSS_SELECT_ATTR_RSSI, void]
   601  	NL80211_BSS_SELECT_ATTR_BAND_PREF	nlattr[NL80211_BSS_SELECT_ATTR_BAND_PREF, int32]
   602  	NL80211_BSS_SELECT_ATTR_RSSI_ADJUST	nlattr[NL80211_BSS_SELECT_ATTR_RSSI_ADJUST, nl80211_bss_select_rssi_adjust]
   603  ] [varlen]
   604  
   605  nl80211_policy$fils_params [
   606  	NL80211_ATTR_FILS_ERP_USERNAME		nlattr[NL80211_ATTR_FILS_ERP_USERNAME, array[int8, 0:FILS_ERP_MAX_USERNAME_LEN]]
   607  	NL80211_ATTR_FILS_ERP_REALM		nlattr[NL80211_ATTR_FILS_ERP_REALM, array[int8]]
   608  	NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM	nlattr[NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM, int16]
   609  	NL80211_ATTR_FILS_ERP_RRK		nlattr[NL80211_ATTR_FILS_ERP_RRK, array[int8]]
   610  ] [varlen]
   611  
   612  nl80211_policy$crypto_settings [
   613  	NL80211_ATTR_CONTROL_PORT		nlattr[NL80211_ATTR_CONTROL_PORT, void]
   614  	NL80211_ATTR_CONTROL_PORT_ETHERTYPE	nlattr[NL80211_ATTR_CONTROL_PORT_ETHERTYPE, flags[ether_types, int16]]
   615  	NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT	nlattr[NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT, void]
   616  	NL80211_ATTR_CONTROL_PORT_OVER_NL80211	nlattr[NL80211_ATTR_CONTROL_PORT_OVER_NL80211, void]
   617  	NL80211_ATTR_SOCKET_OWNER		nlattr[NL80211_ATTR_SOCKET_OWNER, void]
   618  	NL80211_ATTR_CONTROL_PORT_NO_PREAUTH	nlattr[NL80211_ATTR_CONTROL_PORT_NO_PREAUTH, void]
   619  	NL80211_ATTR_CIPHER_SUITES_PAIRWISE	nlattr[NL80211_ATTR_CIPHER_SUITES_PAIRWISE, array[flags[ieee80211_cipher_suites, int32], 0:NL80211_MAX_NR_CIPHER_SUITES]]
   620  	NL80211_ATTR_CIPHER_SUITE_GROUP		nlattr[NL80211_ATTR_CIPHER_SUITE_GROUP, flags[ieee80211_cipher_suites, int32]]
   621  	NL80211_ATTR_WPA_VERSIONS		nlattr[NL80211_ATTR_WPA_VERSIONS, flags[nl80211_wpa_versions, int32]]
   622  	NL80211_ATTR_AKM_SUITES			nlattr[NL80211_ATTR_AKM_SUITES, array[flags[ieee80211_akm_suites, int32]]]
   623  	NL80211_ATTR_PMK			nlattr[NL80211_ATTR_PMK, array[int8, 0:PMK_MAX_LEN]]
   624  	NL80211_ATTR_SAE_PASSWORD		nlattr[NL80211_ATTR_SAE_PASSWORD, array[int8, 0:SAE_PASSWORD_MAX_LEN]]
   625  ] [varlen]
   626  
   627  nl80211_policy$connect [
   628  	chandef_params				array[nl80211_policy$chandef_params]
   629  	fils_params				array[nl80211_policy$fils_params]
   630  	crypto_settings				array[nl80211_policy$crypto_settings]
   631  	NL80211_ATTR_WIPHY_FREQ_HINT		nlattr[NL80211_ATTR_WIPHY_FREQ_HINT, ieee80211_frequency_mhz[int32]]
   632  	NL80211_ATTR_SSID			nlattr[NL80211_ATTR_SSID, ieee80211_ssid]
   633  	NL80211_ATTR_AUTH_TYPE			nlattr[NL80211_ATTR_AUTH_TYPE, flags[nl80211_auth_type, int32]]
   634  	NL80211_ATTR_PRIVACY			nlattr[NL80211_ATTR_PRIVACY, void]
   635  	NL80211_ATTR_WANT_1X_4WAY_HS		nlattr[NL80211_ATTR_WANT_1X_4WAY_HS, void]
   636  	NL80211_ATTR_BG_SCAN_PERIOD		nlattr[NL80211_ATTR_BG_SCAN_PERIOD, int16]
   637  	NL80211_ATTR_MAC			nlattr[NL80211_ATTR_MAC, ieee80211_bssid]
   638  	NL80211_ATTR_MAC_HINT			nlattr[NL80211_ATTR_MAC_HINT, ieee80211_bssid]
   639  	NL80211_ATTR_IE				nlattr[NL80211_ATTR_IE, array[ieee80211_ie]]
   640  	NL80211_ATTR_USE_MFP			nlattr[NL80211_ATTR_USE_MFP, flags[nl80211_mfp_flags, int32]]
   641  	NL80211_ATTR_PREV_BSSID			nlattr[NL80211_ATTR_PREV_BSSID, ieee80211_bssid]
   642  	NL80211_ATTR_WIPHY_EDMG_CHANNELS	nlattr[NL80211_ATTR_WIPHY_EDMG_CHANNELS, int8[NL80211_EDMG_CHANNELS_MIN:NL80211_EDMG_CHANNELS_MAX]]
   643  	NL80211_ATTR_WIPHY_EDMG_BW_CONFIG	nlattr[NL80211_ATTR_WIPHY_EDMG_BW_CONFIG, int8[NL80211_EDMG_BW_CONFIG_MIN:NL80211_EDMG_BW_CONFIG_MAX]]
   644  	NL80211_ATTR_KEYS			nlnest[NL80211_ATTR_KEYS, array[nlnest[0, array[nl80211_key_policy]]]]
   645  	NL80211_ATTR_DISABLE_HT			nlattr[NL80211_ATTR_DISABLE_HT, void]
   646  	NL80211_ATTR_HT_CAPABILITY		nlattr[NL80211_ATTR_HT_CAPABILITY, ieee80211_ht_cap]
   647  	NL80211_ATTR_HT_CAPABILITY_MASK		nlattr[NL80211_ATTR_HT_CAPABILITY_MASK, ieee80211_ht_cap]
   648  	NL80211_ATTR_DISABLE_VHT		nlattr[NL80211_ATTR_DISABLE_VHT, void]
   649  	NL80211_ATTR_VHT_CAPABILITY		nlattr[NL80211_ATTR_VHT_CAPABILITY, ieee80211_vht_cap]
   650  	NL80211_ATTR_VHT_CAPABILITY_MASK	nlattr[NL80211_ATTR_VHT_CAPABILITY_MASK, ieee80211_vht_cap]
   651  	NL80211_ATTR_USE_RRM			nlattr[NL80211_ATTR_USE_RRM, void]
   652  	NL80211_ATTR_PBSS			nlattr[NL80211_ATTR_PBSS, void]
   653  	NL80211_ATTR_BSS_SELECT			nlnest[NL80211_ATTR_BSS_SELECT, array[nl80211_bss_select_policy]]
   654  	NL80211_ATTR_EXTERNAL_AUTH_SUPPORT	nlattr[NL80211_ATTR_EXTERNAL_AUTH_SUPPORT, void]
   655  	NL80211_ATTR_SOCKET_OWNER		nlattr[NL80211_ATTR_SOCKET_OWNER, void]
   656  ] [varlen]
   657  
   658  nl80211_policy$disconnect [
   659  	NL80211_ATTR_REASON_CODE	nlattr[NL80211_ATTR_REASON_CODE, ieee80211_reason_code[int16]]
   660  ] [varlen]
   661  
   662  nl80211_preamble_types = NL80211_PREAMBLE_LEGACY, NL80211_PREAMBLE_HT, NL80211_PREAMBLE_VHT, NL80211_PREAMBLE_DMG, NL80211_PREAMBLE_HE
   663  
   664  nl80211_pmsr_ftm_req_attr_policy [
   665  	NL80211_PMSR_FTM_REQ_ATTR_ASAP			nlattr[NL80211_PMSR_FTM_REQ_ATTR_ASAP, void]
   666  	NL80211_PMSR_FTM_REQ_ATTR_PREAMBLE		nlattr[NL80211_PMSR_FTM_REQ_ATTR_PREAMBLE, flags[nl80211_preamble_types, int32]]
   667  	NL80211_PMSR_FTM_REQ_ATTR_NUM_BURSTS_EXP	nlattr[NL80211_PMSR_FTM_REQ_ATTR_NUM_BURSTS_EXP, int8[0:15]]
   668  	NL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD		nlattr[NL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD, int16]
   669  	NL80211_PMSR_FTM_REQ_ATTR_BURST_DURATION	nlattr[NL80211_PMSR_FTM_REQ_ATTR_BURST_DURATION, int8[0:15]]
   670  	NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST	nlattr[NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST, int8[0:31]]
   671  	NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES	nlattr[NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES, int8]
   672  	NL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI		nlattr[NL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI, void]
   673  	NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC	nlattr[NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC, void]
   674  	NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED		nlattr[NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED, void]
   675  	NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED	nlattr[NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED, void]
   676  	NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK		nlattr[NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK, void]
   677  ] [varlen]
   678  
   679  nl80211_pmsr_req_data_policy [
   680  	NL80211_PMSR_TYPE_FTM	nlnest[NL80211_PMSR_TYPE_FTM, array[nl80211_pmsr_ftm_req_attr_policy]]
   681  ] [varlen]
   682  
   683  nl80211_pmsr_req_attr_policy [
   684  	NL80211_PMSR_REQ_ATTR_DATA		nlnest[NL80211_PMSR_REQ_ATTR_DATA, array[nl80211_pmsr_req_data_policy]]
   685  	NL80211_PMSR_REQ_ATTR_GET_AP_TSF	nlattr[NL80211_PMSR_REQ_ATTR_GET_AP_TSF, void]
   686  ] [varlen]
   687  
   688  nl80211_pmsr_peer_attr_policy [
   689  	NL80211_PMSR_PEER_ATTR_ADDR	nlattr[NL80211_PMSR_PEER_ATTR_ADDR, ieee80211_mac_addr]
   690  	NL80211_PMSR_PEER_ATTR_CHAN	nlnest[NL80211_PMSR_PEER_ATTR_CHAN, array[nl80211_policy$chandef_params]]
   691  	NL80211_PMSR_PEER_ATTR_REQ	nlnest[NL80211_PMSR_PEER_ATTR_REQ, array[nl80211_pmsr_req_attr_policy]]
   692  ] [varlen]
   693  
   694  nl80211_pmsr_attr_policy [
   695  	NL80211_PMSR_ATTR_PEERS	nlnest[NL80211_PMSR_ATTR_PEERS, array[nlnest[0, array[nl80211_pmsr_peer_attr_policy]]]]
   696  ] [varlen]
   697  
   698  nl80211_policy$upd_owe_info [
   699  	NL80211_ATTR_MAC		nlattr[NL80211_ATTR_MAC, ieee80211_mac_addr]
   700  	NL80211_ATTR_STATUS_CODE	nlattr[NL80211_ATTR_STATUS_CODE, ieee80211_status_code[int16]]
   701  	NL80211_ATTR_IE			nlattr[NL80211_ATTR_IE, array[ieee80211_ie]]
   702  ] [varlen]
   703  
   704  # TODO: consider adding a pseudo system call that receives a response and takes a cookie from there
   705  type nl80211_cookie int64[0:128]
   706  
   707  nl80211_policy$del_nan_func [
   708  	NL80211_ATTR_COOKIE	nlattr[NL80211_ATTR_COOKIE, nl80211_cookie]
   709  ]
   710  
   711  define NL80211_BAND_2GHZ_BIT	1 << NL80211_BAND_2GHZ
   712  define NL80211_BAND_5GHZ_BIT	1 << NL80211_BAND_5GHZ
   713  define NL80211_BAND_60GHZ_BIT	1 << NL80211_BAND_60GHZ
   714  define NL80211_BAND_6GHZ_BIT	1 << NL80211_BAND_6GHZ
   715  
   716  nl80211_bands = NL80211_BAND_2GHZ_BIT, NL80211_BAND_5GHZ_BIT, NL80211_BAND_60GHZ_BIT, NL80211_BAND_6GHZ_BIT
   717  
   718  # Same for NL80211_CMD_CHANGE_NAN_CONFIG and NL80211_CMD_START_NAN
   719  nl80211_policy$start_nan [
   720  	NL80211_ATTR_NAN_MASTER_PREF	nlattr[NL80211_ATTR_NAN_MASTER_PREF, int8]
   721  	NL80211_ATTR_BANDS		nlattr[NL80211_ATTR_BANDS, flags[nl80211_bands, int32]]
   722  ] [varlen]
   723  
   724  nl80211_nan_func_types = NL80211_NAN_FUNC_PUBLISH, NL80211_NAN_FUNC_SUBSCRIBE, NL80211_NAN_FUNC_FOLLOW_UP
   725  
   726  nl80211_nan_srf_policy [
   727  	NL80211_NAN_SRF_INCLUDE		nlattr[NL80211_NAN_SRF_INCLUDE, void]
   728  	NL80211_NAN_SRF_BF		nlattr[NL80211_NAN_SRF_BF, array[int8, NL80211_NAN_FUNC_SRF_MAX_LEN]]
   729  	NL80211_NAN_SRF_BF_IDX		nlattr[NL80211_NAN_SRF_BF_IDX, int8]
   730  	NL80211_NAN_SRF_MAC_ADDRS	nlnest[NL80211_NAN_SRF_MAC_ADDRS, array[nlattr[NL80211_ATTR_MAC, ieee80211_mac_addr]]]
   731  ] [varlen]
   732  
   733  nl80211_nan_func_policy [
   734  	NL80211_NAN_FUNC_TYPE			nlattr[NL80211_NAN_FUNC_TYPE, flags[nl80211_nan_func_types, int8]]
   735  	NL80211_NAN_FUNC_SERVICE_ID		nlattr[NL80211_NAN_FUNC_SERVICE_ID, array[int8, NL80211_NAN_FUNC_SERVICE_ID_LEN]]
   736  	NL80211_NAN_FUNC_CLOSE_RANGE		nlattr[NL80211_NAN_FUNC_CLOSE_RANGE, void]
   737  	NL80211_NAN_FUNC_SERVICE_INFO		nlattr[NL80211_NAN_FUNC_SERVICE_INFO, array[int8, 0:NL80211_NAN_FUNC_SERVICE_SPEC_INFO_MAX_LEN]]
   738  	NL80211_NAN_FUNC_TTL			nlattr[NL80211_NAN_FUNC_TTL, int32]
   739  	NL80211_NAN_FUNC_PUBLISH_TYPE		nlattr[NL80211_NAN_FUNC_PUBLISH_TYPE, int8]
   740  	NL80211_NAN_FUNC_PUBLISH_BCAST		nlattr[NL80211_NAN_FUNC_PUBLISH_BCAST, void]
   741  	NL80211_NAN_FUNC_SUBSCRIBE_ACTIVE	nlattr[NL80211_NAN_FUNC_SUBSCRIBE_ACTIVE, void]
   742  	NL80211_NAN_FUNC_FOLLOW_UP_ID		nlattr[NL80211_NAN_FUNC_FOLLOW_UP_ID, int8]
   743  	NL80211_NAN_FUNC_FOLLOW_UP_REQ_ID	nlattr[NL80211_NAN_FUNC_FOLLOW_UP_REQ_ID, int8]
   744  	NL80211_NAN_FUNC_FOLLOW_UP_DEST		nlattr[NL80211_NAN_FUNC_FOLLOW_UP_DEST, ieee80211_mac_addr]
   745  	NL80211_NAN_FUNC_SRF			nlnest[NL80211_NAN_FUNC_SRF, array[nl80211_nan_srf_policy]]
   746  	NL80211_NAN_FUNC_TX_MATCH_FILTER	nlnest[NL80211_NAN_FUNC_TX_MATCH_FILTER, array[nlattr[0, array[int8]]]]
   747  	NL80211_NAN_FUNC_RX_MATCH_FILTER	nlnest[NL80211_NAN_FUNC_RX_MATCH_FILTER, array[nlattr[0, array[int8]]]]
   748  	NL80211_NAN_FUNC_INSTANCE_ID		nlattr[NL80211_NAN_FUNC_INSTANCE_ID, int8]
   749  	NL80211_NAN_FUNC_TERM_REASON		nlattr[NL80211_NAN_FUNC_TERM_REASON, int8]
   750  ] [varlen]
   751  
   752  nl80211_policy$add_nan_func [
   753  	NL80211_ATTR_NAN_FUNC	nlnest[NL80211_ATTR_NAN_FUNC, array[nl80211_nan_func_policy]]
   754  ] [varlen]
   755  
   756  nl80211_policy$probe_client [
   757  	NL80211_ATTR_MAC	nlattr[NL80211_ATTR_MAC, ieee80211_mac_addr]
   758  ]
   759  
   760  nl80211_packet_pattern_policy [
   761  # TODO: lengths of NL80211_PKTPAT_MASK and NL80211_PKTPAT_PATTERN are related. Currently, syzlang does not provide means to specify this.
   762  	NL80211_PKTPAT_MASK	nlattr[NL80211_PKTPAT_MASK, array[int8]]
   763  	NL80211_PKTPAT_PATTERN	nlattr[NL80211_PKTPAT_PATTERN, array[int8]]
   764  	NL80211_PKTPAT_OFFSET	nlattr[NL80211_PKTPAT_OFFSET, int32]
   765  ] [varlen]
   766  
   767  nl80211_coalesce_policy [
   768  	NL80211_ATTR_COALESCE_RULE_DELAY	nlattr[NL80211_ATTR_COALESCE_RULE_DELAY, int32]
   769  	NL80211_ATTR_COALESCE_RULE_CONDITION	nlattr[NL80211_ATTR_COALESCE_RULE_CONDITION, int32[NL80211_COALESCE_CONDITION_MATCH:NL80211_COALESCE_CONDITION_NO_MATCH]]
   770  	NL80211_ATTR_COALESCE_RULE_PKT_PATTERN	nlnest[NL80211_ATTR_COALESCE_RULE_PKT_PATTERN, array[nlnest[0, nl80211_packet_pattern_policy], 0:MAX_NL80211_PKTPAT]]
   771  ] [varlen]
   772  
   773  nl80211_acl_policies = NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED, NL80211_ACL_POLICY_DENY_UNLESS_LISTED
   774  
   775  nl80211_policy$acl [
   776  	NL80211_ATTR_ACL_POLICY	nlattr[NL80211_ATTR_ACL_POLICY, flags[nl80211_acl_policies, int32]]
   777  	NL80211_ATTR_MAC_ADDRS	nlnest[NL80211_ATTR_MAC_ADDRS, array[nlattr[NL80211_ATTR_MAC, ieee80211_mac_addr]]]
   778  ] [varlen]
   779  
   780  nl80211_policy$set_mcast_rate [
   781  	NL80211_ATTR_MCAST_RATE	nlattr[NL80211_ATTR_MCAST_RATE, flags[ieee80211_raw_rates, int32]]
   782  ]
   783  
   784  nl80211_policy$set_mcast_to_ucast [
   785  	NL80211_ATTR_MULTICAST_TO_UNICAST_ENABLED	nlattr[NL80211_ATTR_MULTICAST_TO_UNICAST_ENABLED, void]
   786  ]
   787  
   788  nl80211_policy$set_noack_map [
   789  	NL80211_ATTR_NOACK_MAP	nlattr[NL80211_ATTR_NOACK_MAP, int16]
   790  ]
   791  
   792  nl80211_policy$set_pmk [
   793  	NL80211_ATTR_MAC	nlattr[NL80211_ATTR_MAC, ieee80211_mac_addr]
   794  	NL80211_ATTR_PMK	nlattr[NL80211_ATTR_PMK, array[int8, WLAN_PMKID_LEN]]
   795  	NL80211_ATTR_PMKR0_NAME	nlattr[NL80211_ATTR_PMKR0_NAME, array[int8, WLAN_PMK_NAME_LEN]]
   796  ] [varlen]
   797  
   798  nl80211_policy$del_pmk [
   799  	NL80211_ATTR_MAC	nlattr[NL80211_ATTR_MAC, ieee80211_mac_addr]
   800  ]
   801  
   802  nl80211_policy$setdel_pmksa [
   803  	NL80211_ATTR_MAC			nlattr[NL80211_ATTR_MAC, ieee80211_bssid]
   804  	NL80211_ATTR_PMK			nlattr[NL80211_ATTR_PMK, array[int8, WLAN_PMKID_LEN]]
   805  	NL80211_ATTR_PMKID			nlattr[NL80211_ATTR_PMKID, array[int8, WLAN_PMKID_LEN]]
   806  	NL80211_ATTR_SSID			nlattr[NL80211_ATTR_SSID, ieee80211_ssid]
   807  	NL80211_ATTR_FILS_CACHE_ID		nlattr[NL80211_ATTR_FILS_CACHE_ID, int16]
   808  	NL80211_ATTR_PMK_LIFETIME		nlattr[NL80211_ATTR_PMK_LIFETIME, int32]
   809  	NL80211_ATTR_PMK_REAUTH_THRESHOLD	nlattr[NL80211_ATTR_PMK_REAUTH_THRESHOLD, int8[1:100]]
   810  ] [varlen]
   811  
   812  nl80211_policy$cookie [
   813  	NL80211_ATTR_COOKIE	nlattr[NL80211_ATTR_COOKIE, nl80211_cookie]
   814  ]
   815  
   816  nl80211_powersave_states = NL80211_PS_DISABLED, NL80211_PS_ENABLED
   817  
   818  nl80211_policy$power_save [
   819  	NL80211_ATTR_PS_STATE	nlattr[NL80211_ATTR_PS_STATE, flags[nl80211_powersave_states, int32]]
   820  ]
   821  
   822  nl80211_policy$remain_on_ch [
   823  	chandef_params		array[nl80211_policy$chandef_params]
   824  	NL80211_ATTR_DURATION	nlattr[NL80211_ATTR_DURATION, int32]
   825  ] [varlen]
   826  
   827  nl80211_policy$update_ft_ies [
   828  	NL80211_ATTR_MDID	nlattr[NL80211_ATTR_MDID, int16]
   829  	NL80211_ATTR_IE		nlattr[NL80211_ATTR_IE, array[ieee80211_ie]]
   830  ] [varlen]
   831  
   832  nl80211_policy$vendor [
   833  	NL80211_ATTR_VENDOR_ID		nlattr[NL80211_ATTR_VENDOR_ID, int32]
   834  	NL80211_ATTR_VENDOR_SUBCMD	nlattr[NL80211_ATTR_VENDOR_SUBCMD, int32]
   835  	NL80211_ATTR_VENDOR_DATA	nlattr[NL80211_ATTR_VENDOR_DATA, array[int8]]
   836  ] [varlen]
   837  
   838  nl80211_qos_map_dscp_exception {
   839  	dscp	int8
   840  	up	int8[0:7]
   841  } [packed]
   842  
   843  nl80211_qos_map {
   844  	dscp_exceptions	array[nl80211_qos_map_dscp_exception, 0:IEEE80211_QOS_MAP_MAX_EX]
   845  	up		array[int8, 8]
   846  } [packed]
   847  
   848  nl80211_policy$set_qos_map [
   849  	NL80211_ATTR_QOS_MAP	nlattr[NL80211_ATTR_QOS_MAP, nl80211_qos_map]
   850  ] [varlen]
   851  
   852  nl80211_attr_cqm_policy [
   853  	NL80211_ATTR_CQM_RSSI_THOLD		nlattr[NL80211_ATTR_CQM_RSSI_THOLD, array[int32]]
   854  	NL80211_ATTR_CQM_RSSI_HYST		nlattr[NL80211_ATTR_CQM_RSSI_HYST, int32]
   855  	NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT	nlattr[NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT, int32]
   856  	NL80211_ATTR_CQM_TXE_RATE		nlattr[NL80211_ATTR_CQM_TXE_RATE, int32[0:100]]
   857  	NL80211_ATTR_CQM_TXE_PKTS		nlattr[NL80211_ATTR_CQM_TXE_PKTS, int32]
   858  	NL80211_ATTR_CQM_TXE_INTVL		nlattr[NL80211_ATTR_CQM_TXE_INTVL, int32[0:NL80211_CQM_TXE_MAX_INTVL]]
   859  	NL80211_ATTR_CQM_RSSI_LEVEL		nlattr[NL80211_ATTR_CQM_RSSI_LEVEL, int32]
   860  ] [varlen]
   861  
   862  nl80211_policy$cqm [
   863  	NL80211_ATTR_CQM	nlnest[NL80211_ATTR_CQM, array[nl80211_attr_cqm_policy]]
   864  ] [varlen]
   865  
   866  nl80211_policy$mgmt_frame [
   867  	chandef_params			array[nl80211_policy$chandef_params]
   868  	NL80211_ATTR_DONT_WAIT_FOR_ACK	nlattr[NL80211_ATTR_DONT_WAIT_FOR_ACK, void]
   869  	NL80211_ATTR_FRAME		nlattr[NL80211_ATTR_FRAME, ieee80211_mgmt_frame]
   870  	NL80211_ATTR_DURATION		nlattr[NL80211_ATTR_DURATION, int32[NL80211_MIN_REMAIN_ON_CHANNEL_TIME:5000]]
   871  	NL80211_ATTR_OFFCHANNEL_TX_OK	nlattr[NL80211_ATTR_OFFCHANNEL_TX_OK, void]
   872  	NL80211_ATTR_TX_NO_CCK_RATE	nlattr[NL80211_ATTR_TX_NO_CCK_RATE, void]
   873  	NL80211_ATTR_CSA_C_OFFSETS_TX	nlattr[NL80211_ATTR_CSA_C_OFFSETS_TX, array[int16]]
   874  ] [varlen]
   875  
   876  define IEEE80211_MAX_TID	IEEE80211_NUM_TIDS - 1
   877  define IEEE80211_MAX_UP	IEEE80211_NUM_UPS - 1
   878  
   879  nl80211_policy$add_tx_ts [
   880  	NL80211_ATTR_TSID		nlattr[NL80211_ATTR_TSID, int8[0:IEEE80211_MAX_TID]]
   881  	NL80211_ATTR_MAC		nlattr[NL80211_ATTR_MAC, ieee80211_mac_addr]
   882  	NL80211_ATTR_ADMITTED_TIME	nlattr[NL80211_ATTR_ADMITTED_TIME, int16]
   883  	NL80211_ATTR_USER_PRIO		nlattr[NL80211_ATTR_USER_PRIO, int8[0:IEEE80211_MAX_UP]]
   884  ] [varlen]
   885  
   886  nl80211_policy$del_tx_ts [
   887  	NL80211_ATTR_TSID	nlattr[NL80211_ATTR_TSID, int8[0:IEEE80211_MAX_TID]]
   888  	NL80211_ATTR_MAC	nlattr[NL80211_ATTR_MAC, ieee80211_mac_addr]
   889  ] [varlen]
   890  
   891  nl80211_policy$authenticate [
   892  	chandef_params		array[nl80211_policy$chandef_params]
   893  	key_params		array[nl80211_policy$cmd_key]
   894  	NL80211_ATTR_MAC	nlattr[NL80211_ATTR_MAC, ieee80211_bssid]
   895  	NL80211_ATTR_AUTH_TYPE	nlattr[NL80211_ATTR_AUTH_TYPE, flags[nl80211_auth_type, int32]]
   896  	NL80211_ATTR_SSID	nlattr[NL80211_ATTR_SSID, ieee80211_ssid]
   897  ] [varlen]
   898  
   899  nl80211_policy$de_auth_assoc [
   900  	NL80211_ATTR_MAC		nlattr[NL80211_ATTR_MAC, ieee80211_bssid]
   901  	NL80211_ATTR_SSID		nlattr[NL80211_ATTR_SSID, ieee80211_ssid]
   902  	NL80211_ATTR_REASON_CODE	nlattr[NL80211_ATTR_REASON_CODE, int16]
   903  	NL80211_ATTR_IE			nlattr[NL80211_ATTR_IE, array[ieee80211_ie]]
   904  	NL80211_ATTR_LOCAL_STATE_CHANGE	nlattr[NL80211_ATTR_LOCAL_STATE_CHANGE, void]
   905  ] [varlen]
   906  
   907  nl80211_policy$associate [
   908  	chandef_params				array[nl80211_policy$chandef_params]
   909  	crypto_settings				array[nl80211_policy$crypto_settings]
   910  	NL80211_ATTR_MAC			nlattr[NL80211_ATTR_MAC, ieee80211_bssid]
   911  	NL80211_ATTR_SSID			nlattr[NL80211_ATTR_SSID, ieee80211_ssid]
   912  	NL80211_ATTR_IE				nlattr[NL80211_ATTR_IE, array[ieee80211_ie]]
   913  	NL80211_ATTR_USE_MFP			nlattr[NL80211_ATTR_USE_MFP, flags[nl80211_mfp_flags, int32]]
   914  	NL80211_ATTR_PREV_BSSID			nlattr[NL80211_ATTR_PREV_BSSID, ieee80211_bssid]
   915  	NL80211_ATTR_DISABLE_HT			nlattr[NL80211_ATTR_DISABLE_HT, void]
   916  	NL80211_ATTR_HT_CAPABILITY		nlattr[NL80211_ATTR_HT_CAPABILITY, ieee80211_ht_cap]
   917  	NL80211_ATTR_HT_CAPABILITY_MASK		nlattr[NL80211_ATTR_HT_CAPABILITY_MASK, ieee80211_ht_cap]
   918  	NL80211_ATTR_DISABLE_VHT		nlattr[NL80211_ATTR_DISABLE_VHT, void]
   919  	NL80211_ATTR_VHT_CAPABILITY		nlattr[NL80211_ATTR_VHT_CAPABILITY, ieee80211_vht_cap]
   920  	NL80211_ATTR_VHT_CAPABILITY_MASK	nlattr[NL80211_ATTR_VHT_CAPABILITY_MASK, ieee80211_vht_cap]
   921  	NL80211_ATTR_USE_RRM			nlattr[NL80211_ATTR_USE_RRM, void]
   922  	NL80211_ATTR_FILS_KEK			nlattr[NL80211_ATTR_FILS_KEK, array[int8, 0:FILS_MAX_KEK_LEN]]
   923  	NL80211_ATTR_FILS_NONCES		nlattr[NL80211_ATTR_FILS_NONCES, array[int16, FILS_NONCE_LEN]]
   924  ] [varlen]
   925  
   926  nl80211_policy$ext_auth [
   927  	NL80211_ATTR_BSSID		nlattr[NL80211_ATTR_BSSID, ieee80211_bssid]
   928  	NL80211_ATTR_SSID		nlattr[NL80211_ATTR_SSID, ieee80211_ssid]
   929  	NL80211_ATTR_STATUS_CODE	nlattr[NL80211_ATTR_STATUS_CODE, ieee80211_status_code[int16]]
   930  	NL80211_ATTR_PMKID		nlattr[NL80211_ATTR_PMKID, array[int8, WLAN_PMKID_LEN]]
   931  ] [varlen]
   932  
   933  nl80211_kek [
   934  	kek	array[int8, NL80211_KEK_LEN]
   935  	kek_ext	array[int8, NL80211_KEK_EXT_LEN]
   936  ] [varlen]
   937  
   938  nl80211_kck [
   939  	kck	array[int8, NL80211_KCK_LEN]
   940  	kck_ext	array[int8, NL80211_KCK_EXT_LEN]
   941  ] [varlen]
   942  
   943  nl80211_rekey_policy [
   944  	NL80211_REKEY_DATA_KEK		nlattr[NL80211_REKEY_DATA_KEK, nl80211_kek]
   945  	NL80211_REKEY_DATA_KCK		nlattr[NL80211_REKEY_DATA_KCK, nl80211_kck]
   946  	NL80211_REKEY_DATA_REPLAY_CTR	nlattr[NL80211_REKEY_DATA_REPLAY_CTR, array[int8, NL80211_REPLAY_CTR_LEN]]
   947  	NL80211_REKEY_DATA_AKM		nlattr[NL80211_REKEY_DATA_AKM, int32]
   948  ] [varlen]
   949  
   950  nl80211_policy$rekey_offload [
   951  	NL80211_ATTR_REKEY_DATA	nlnest[NL80211_ATTR_REKEY_DATA, array[nl80211_rekey_policy]]
   952  ] [varlen]
   953  
   954  nl80211_policy$set_wds_peer [
   955  	NL80211_ATTR_MAC	nlattr[NL80211_ATTR_MAC, ieee80211_bssid]
   956  ]
   957  
   958  nl80211_tx_rate_setting = NL80211_TX_RATE_AUTOMATIC, NL80211_TX_RATE_LIMITED, NL80211_TX_RATE_FIXED
   959  
   960  nl80211_tid_config_attr_policy [
   961  	NL80211_TID_CONFIG_ATTR_VIF_SUPP	nlattr[NL80211_TID_CONFIG_ATTR_VIF_SUPP, int64]
   962  	NL80211_TID_CONFIG_ATTR_PEER_SUPP	nlattr[NL80211_TID_CONFIG_ATTR_PEER_SUPP, int64]
   963  	NL80211_TID_CONFIG_ATTR_OVERRIDE	nlattr[NL80211_TID_CONFIG_ATTR_OVERRIDE, void]
   964  	NL80211_TID_CONFIG_ATTR_TIDS		nlattr[NL80211_TID_CONFIG_ATTR_TIDS, int16[0x1:0xff]]
   965  	NL80211_TID_CONFIG_ATTR_NOACK		nlattr[NL80211_TID_CONFIG_ATTR_NOACK, int8[0:NL80211_TID_CONFIG_DISABLE]]
   966  	NL80211_TID_CONFIG_ATTR_RETRY_SHORT	nlattr[NL80211_TID_CONFIG_ATTR_RETRY_SHORT, int8[1:255]]
   967  	NL80211_TID_CONFIG_ATTR_RETRY_LONG	nlattr[NL80211_TID_CONFIG_ATTR_RETRY_LONG, int8[1:255]]
   968  	NL80211_TID_CONFIG_ATTR_AMPDU_CTRL	nlattr[NL80211_TID_CONFIG_ATTR_AMPDU_CTRL, int8[0:NL80211_TID_CONFIG_DISABLE]]
   969  	NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL	nlattr[NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL, int8[0:NL80211_TID_CONFIG_DISABLE]]
   970  	NL80211_TID_CONFIG_ATTR_AMSDU_CTRL	nlattr[NL80211_TID_CONFIG_ATTR_AMSDU_CTRL, int8[0:NL80211_TID_CONFIG_DISABLE]]
   971  	NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE	nlattr[NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE, flags[nl80211_tx_rate_setting, int8]]
   972  	NL80211_TID_CONFIG_ATTR_TX_RATE		nlnest[NL80211_TID_CONFIG_ATTR_TX_RATE, array[nl80211_tx_rates_policy]]
   973  ] [varlen]
   974  
   975  nl80211_policy$set_tid_config [
   976  	NL80211_ATTR_TID_CONFIG	nlnest[NL80211_ATTR_TID_CONFIG, array[nlnest[0, array[nl80211_tid_config_attr_policy]]]]
   977  ] [varlen]
   978  
   979  nl80211_policy$upd_connect_params [
   980  	fils_params	array[nl80211_policy$fils_params]
   981  	NL80211_ATTR_IE	nlattr[NL80211_ATTR_IE, array[ieee80211_ie]]
   982  ] [varlen]
   983  
   984  nl80211_policy$tdls_mgmt [
   985  	NL80211_ATTR_TDLS_ACTION		nlattr[NL80211_ATTR_TDLS_ACTION, flags[ieee80211_tdls_action_codes, int8]]
   986  	NL80211_ATTR_MAC			nlattr[NL80211_ATTR_MAC, ieee80211_mac_addr]
   987  	NL80211_ATTR_STATUS_CODE		nlattr[NL80211_ATTR_STATUS_CODE, ieee80211_status_code[int16]]
   988  	NL80211_ATTR_TDLS_DIALOG_TOKEN		nlattr[NL80211_ATTR_TDLS_DIALOG_TOKEN, int8]
   989  	NL80211_ATTR_IE				nlattr[NL80211_ATTR_IE, array[ieee80211_ie]]
   990  	NL80211_ATTR_TDLS_INITIATOR		nlattr[NL80211_ATTR_TDLS_INITIATOR, void]
   991  	NL80211_ATTR_TDLS_PEER_CAPABILITY	nlattr[NL80211_ATTR_TDLS_PEER_CAPABILITY, int32]
   992  ] [varlen]
   993  
   994  nl80211_tdls_operations = NL80211_TDLS_DISCOVERY_REQ, NL80211_TDLS_SETUP, NL80211_TDLS_TEARDOWN, NL80211_TDLS_ENABLE_LINK, NL80211_TDLS_DISABLE_LINK
   995  
   996  nl80211_policy$tdls_oper [
   997  	NL80211_ATTR_TDLS_OPERATION	nlattr[NL80211_ATTR_TDLS_OPERATION, flags[nl80211_tdls_operations, int8]]
   998  	NL80211_ATTR_MAC		nlattr[NL80211_ATTR_MAC, ieee80211_mac_addr]
   999  ] [varlen]
  1000  
  1001  nl80211_policy$control_port [
  1002  	NL80211_ATTR_FRAME			nlattr[NL80211_ATTR_FRAME, ieee80211_frame]
  1003  	NL80211_ATTR_MAC			nlattr[NL80211_ATTR_MAC, ieee80211_mac_addr]
  1004  	NL80211_ATTR_CONTROL_PORT_ETHERTYPE	nlattr[NL80211_ATTR_CONTROL_PORT_ETHERTYPE, flags[ether_types, int16]]
  1005  	NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT	nlattr[NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT, void]
  1006  ] [varlen]
  1007  
  1008  nl80211_crit_proto_ids = NL80211_CRIT_PROTO_UNSPEC, NL80211_CRIT_PROTO_DHCP, NL80211_CRIT_PROTO_EAPOL, NL80211_CRIT_PROTO_APIPA
  1009  
  1010  nl80211_policy$crit_proto_start [
  1011  	NL80211_ATTR_CRIT_PROT_ID		nlattr[NL80211_ATTR_CRIT_PROT_ID, flags[nl80211_crit_proto_ids, int16]]
  1012  	NL80211_ATTR_MAX_CRIT_PROT_DURATION	nlattr[NL80211_ATTR_MAX_CRIT_PROT_DURATION, int16[0:NL80211_CRIT_PROTO_MAX_DURATION]]
  1013  ] [varlen]
  1014  
  1015  nl80211_policy$probe_mesh_link [
  1016  	NL80211_ATTR_FRAME	nlattr[NL80211_ATTR_FRAME, ieee80211_frame]
  1017  	NL80211_ATTR_MAC	nlattr[NL80211_ATTR_MAC, ieee80211_mac_addr]
  1018  ] [varlen]
  1019  
  1020  nl80211_policy$register_mgmt [
  1021  	NL80211_ATTR_FRAME_TYPE		nlattr[NL80211_ATTR_FRAME_TYPE, int16]
  1022  	NL80211_ATTR_FRAME_MATCH	nlattr[NL80211_ATTR_FRAME_MATCH, array[int8]]
  1023  ] [varlen]
  1024  
  1025  nl80211_policy$tdls_chsw [
  1026  	chandef_params		array[nl80211_policy$chandef_params]
  1027  	NL80211_ATTR_MAC	nlattr[NL80211_ATTR_MAC, ieee80211_mac_addr]
  1028  	NL80211_ATTR_OPER_CLASS	nlattr[NL80211_ATTR_OPER_CLASS, int8]
  1029  ] [varlen]
  1030  
  1031  nl80211_policy$tdls_chsw_cancel [
  1032  	NL80211_ATTR_MAC	nlattr[NL80211_ATTR_MAC, ieee80211_mac_addr]
  1033  ] [varlen]
  1034  
  1035  nl80211_policy$csa [
  1036  	beacon_params			array[nl80211_policy$beacon]
  1037  	NL80211_ATTR_CSA_C_OFF_BEACON	nlattr[NL80211_ATTR_CSA_C_OFF_BEACON, array[int16]]
  1038  	NL80211_ATTR_CSA_C_OFF_PRESP	nlattr[NL80211_ATTR_CSA_C_OFF_PRESP, array[int16]]
  1039  ] [varlen]
  1040  
  1041  nl80211_policy$chsw [
  1042  	chandef_params			array[nl80211_policy$chandef_params]
  1043  	NL80211_ATTR_CSA_IES		nlnest[NL80211_ATTR_CSA_IES, array[nl80211_policy$csa]]
  1044  	NL80211_ATTR_CH_SWITCH_COUNT	nlattr[NL80211_ATTR_CH_SWITCH_COUNT, int32[0:255]]
  1045  	NL80211_ATTR_CH_SWITCH_BLOCK_TX	nlattr[NL80211_ATTR_CH_SWITCH_BLOCK_TX, void]
  1046  ] [varlen]
  1047  
  1048  nl80211_wowlan_tcp_data_seq {
  1049  	start	int32
  1050  	offset	int32
  1051  	len	int32
  1052  } [packed]
  1053  
  1054  nl80211_wowlan_tcp_data_token {
  1055  	offset		int32
  1056  	len		int32
  1057  	token_stream	array[int8]
  1058  } [packed]
  1059  
  1060  nl80211_wowlan_tcp_policy [
  1061  	NL80211_WOWLAN_TCP_SRC_IPV4		nlattr[NL80211_WOWLAN_TCP_SRC_IPV4, ipv4_addr]
  1062  	NL80211_WOWLAN_TCP_DST_IPV4		nlattr[NL80211_WOWLAN_TCP_DST_IPV4, ipv4_addr]
  1063  	NL80211_WOWLAN_TCP_DST_MAC		nlattr[NL80211_WOWLAN_TCP_DST_MAC, ieee80211_mac_addr]
  1064  	NL80211_WOWLAN_TCP_SRC_PORT		nlattr[NL80211_WOWLAN_TCP_SRC_PORT, int16]
  1065  	NL80211_WOWLAN_TCP_DST_PORT		nlattr[NL80211_WOWLAN_TCP_DST_PORT, int16]
  1066  	NL80211_WOWLAN_TCP_DATA_PAYLOAD		nlattr[NL80211_WOWLAN_TCP_DATA_PAYLOAD, array[int8]]
  1067  	NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ	nlattr[NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ, nl80211_wowlan_tcp_data_seq]
  1068  	NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN	nlattr[NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN, nl80211_wowlan_tcp_data_token]
  1069  	NL80211_WOWLAN_TCP_DATA_INTERVAL	nlattr[NL80211_WOWLAN_TCP_DATA_INTERVAL, int32]
  1070  # TODO: lengths of NL80211_WOWLAN_TCP_WAKE_PAYLOAD and NL80211_WOWLAN_TCP_WAKE_MASK are related. Currently, syzlang does not provide means to specify this.
  1071  	NL80211_WOWLAN_TCP_WAKE_PAYLOAD		nlattr[NL80211_WOWLAN_TCP_WAKE_PAYLOAD, array[int8]]
  1072  	NL80211_WOWLAN_TCP_WAKE_MASK		nlattr[NL80211_WOWLAN_TCP_WAKE_MASK, array[int8]]
  1073  ] [varlen]
  1074  
  1075  nl80211_wowlan_policy [
  1076  	NL80211_WOWLAN_TRIG_ANY			nlattr[NL80211_WOWLAN_TRIG_ANY, void]
  1077  	NL80211_WOWLAN_TRIG_DISCONNECT		nlattr[NL80211_WOWLAN_TRIG_DISCONNECT, void]
  1078  	NL80211_WOWLAN_TRIG_MAGIC_PKT		nlattr[NL80211_WOWLAN_TRIG_MAGIC_PKT, void]
  1079  	NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE	nlattr[NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE, void]
  1080  	NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST	nlattr[NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST, void]
  1081  	NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE	nlattr[NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE, void]
  1082  	NL80211_WOWLAN_TRIG_RFKILL_RELEASE	nlattr[NL80211_WOWLAN_TRIG_RFKILL_RELEASE, void]
  1083  	NL80211_WOWLAN_TRIG_PKT_PATTERN		nlnest[NL80211_WOWLAN_TRIG_PKT_PATTERN, array[nlnest[0, array[nl80211_packet_pattern_policy]]]]
  1084  	NL80211_WOWLAN_TRIG_TCP_CONNECTION	nlnest[NL80211_WOWLAN_TRIG_TCP_CONNECTION, array[nl80211_wowlan_tcp_policy]]
  1085  	NL80211_WOWLAN_TRIG_NET_DETECT		nlnest[NL80211_WOWLAN_TRIG_NET_DETECT, array[nl80211_policy$scan]]
  1086  ] [varlen]
  1087  
  1088  nl80211_policy$set_wowlan [
  1089  	NL80211_ATTR_WOWLAN_TRIGGERS	nlnest[NL80211_ATTR_WOWLAN_TRIGGERS, array[nl80211_wowlan_policy]]
  1090  ] [varlen]
  1091  
  1092  nl80211_policy$testmode [
  1093  	NL80211_ATTR_TESTDATA	nlattr[NL80211_ATTR_TESTDATA, array[int8]]
  1094  ] [varlen]
  1095  
  1096  nl80211_policy$set_tx_bitrate [
  1097  	NL80211_ATTR_TX_RATES	nlnest[NL80211_ATTR_TX_RATES, array[nl80211_tx_rates_policy]]
  1098  ] [varlen]