#ifndef LINUX_IEEE80211_NAN_H
#define LINUX_IEEE80211_NAN_H
#define NAN_OP_MODE_PHY_MODE_VHT 0x01
#define NAN_OP_MODE_PHY_MODE_HE 0x10
#define NAN_OP_MODE_PHY_MODE_MASK 0x11
#define NAN_OP_MODE_80P80MHZ 0x02
#define NAN_OP_MODE_160MHZ 0x04
#define NAN_OP_MODE_PNDL_SUPPRTED 0x08
#define NAN_DEV_CAPA_NUM_TX_ANT_POS 0
#define NAN_DEV_CAPA_NUM_TX_ANT_MASK 0x0f
#define NAN_DEV_CAPA_NUM_RX_ANT_POS 4
#define NAN_DEV_CAPA_NUM_RX_ANT_MASK 0xf0
#define NAN_DEV_CAPA_DFS_OWNER 0x01
#define NAN_DEV_CAPA_EXT_KEY_ID_SUPPORTED 0x02
#define NAN_DEV_CAPA_SIM_NDP_RX_SUPPORTED 0x04
#define NAN_DEV_CAPA_NDPE_SUPPORTED 0x08
#define NAN_DEV_CAPA_S3_SUPPORTED 0x10
#define NAN_ATTR_MASTER_INDICATION 0x00
#define NAN_ATTR_CLUSTER_INFO 0x01
struct ieee80211_nan_attr {
u8 attr;
__le16 length;
u8 data[];
} __packed;
struct ieee80211_nan_master_indication {
u8 master_pref;
u8 random_factor;
} __packed;
struct ieee80211_nan_anchor_master_info {
union {
__le64 master_rank;
struct {
u8 master_addr[ETH_ALEN];
u8 random_factor;
u8 master_pref;
} __packed;
} __packed;
u8 hop_count;
__le32 ambtt;
} __packed;
#define for_each_nan_attr(_attr, _data, _datalen) \
for (_attr = (const struct ieee80211_nan_attr *)(_data); \
(const u8 *)(_data) + (_datalen) - (const u8 *)_attr >= \
(int)sizeof(*_attr) && \
(const u8 *)(_data) + (_datalen) - (const u8 *)_attr >= \
(int)sizeof(*_attr) + le16_to_cpu(_attr->length); \
_attr = (const struct ieee80211_nan_attr *) \
(_attr->data + le16_to_cpu(_attr->length)))
#endif