linux/drivers/net/wireless/virtual/mac80211_hwsim_nan.h
Daniel Gabay 2c8ec5a9b1 wifi: mac80211_hwsim: add NAN data path TX/RX support
Implement TX and RX path handling for NAN Data Path (NDP) frames,
enabling data communication between NAN peers during scheduled
availability windows.

TX path:
- Select TX channel based on current time slot: use DW channel
  during Discovery Windows, or FAW channel from local
  schedule during Further Availability Windows.
- Verify peer availability before transmission by checking committed
  DW schedule or FAW of the peer schedule.

RX path:
- Extend NAN receive filtering to handle NAN_DATA interface frames.
- Accept incoming frames during FAW slots when channel matches local
  schedule.

Signed-off-by: Daniel Gabay <daniel.gabay@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20260506064301.155252ebc72b.Ic210f6c095c6ff372941bc8c77ee9c8c37d0356c@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
2026-05-06 11:41:51 +02:00

103 lines
2.8 KiB
C

// SPDX-License-Identifier: GPL-2.0-only
/*
* mac80211_hwsim_nan - NAN software simulation for mac80211_hwsim
* Copyright (C) 2025-2026 Intel Corporation
*/
#ifndef __MAC80211_HWSIM_NAN_H
#define __MAC80211_HWSIM_NAN_H
enum mac80211_hwsim_nan_phase {
MAC80211_HWSIM_NAN_PHASE_SCAN,
MAC80211_HWSIM_NAN_PHASE_WARMUP,
MAC80211_HWSIM_NAN_PHASE_UP,
};
enum mac80211_hwsim_nan_role {
MAC80211_HWSIM_NAN_ROLE_MASTER,
MAC80211_HWSIM_NAN_ROLE_SYNC,
MAC80211_HWSIM_NAN_ROLE_NON_SYNC,
};
struct mac80211_hwsim_nan_data {
struct ieee80211_vif *device_vif;
u8 bands;
struct hrtimer slot_timer;
struct hrtimer resume_txqs_timer;
bool notify_dw;
struct hrtimer discovery_beacon_timer;
/* Later members are protected by this lock */
spinlock_t state_lock;
u8 master_pref;
u8 random_factor;
u8 random_factor_valid_dwst;
enum mac80211_hwsim_nan_phase phase;
enum mac80211_hwsim_nan_role role;
u8 cluster_id[ETH_ALEN];
struct ieee80211_nan_anchor_master_info current_ami;
struct ieee80211_nan_anchor_master_info last_ami;
/* Wi-Fi Aware version 4.0, section 3.3.6.1 and 3.3.6.2 */
int master_transition_score;
/* Wi-Fi Aware version 4.0, section 3.3.6.3 and 3.3.6.4 */
int sync_transition_score;
bool tsf_adjusted;
bool tsf_discontinuity;
/*
* Local schedule - stores channel definition for each 16TU slot.
* Derived from NMI vif->cfg.nan_schedule. chan == NULL means not
* available in that slot (except DW which is implicit).
*/
struct cfg80211_chan_def local_sched[CFG80211_NAN_SCHED_NUM_TIME_SLOTS];
};
enum hrtimer_restart
mac80211_hwsim_nan_slot_timer(struct hrtimer *timer);
enum hrtimer_restart
mac80211_hwsim_nan_resume_txqs_timer(struct hrtimer *timer);
enum hrtimer_restart
mac80211_hwsim_nan_discovery_beacon_timer(struct hrtimer *timer);
int mac80211_hwsim_nan_start(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct cfg80211_nan_conf *conf);
int mac80211_hwsim_nan_stop(struct ieee80211_hw *hw,
struct ieee80211_vif *vif);
int mac80211_hwsim_nan_change_config(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct cfg80211_nan_conf *conf,
u32 changes);
int mac80211_hwsim_nan_peer_sched_changed(struct ieee80211_hw *hw,
struct ieee80211_sta *sta);
bool mac80211_hwsim_nan_txq_transmitting(struct ieee80211_hw *hw,
struct ieee80211_txq *txq);
void mac80211_hwsim_nan_get_tx_chandef(struct ieee80211_hw *hw,
struct cfg80211_chan_def *chandef);
bool mac80211_hwsim_nan_receive(struct ieee80211_hw *hw,
struct ieee80211_channel *channel,
struct ieee80211_rx_status *rx_status);
void mac80211_hwsim_nan_rx(struct ieee80211_hw *hw,
struct sk_buff *skb);
void mac80211_hwsim_nan_local_sched_changed(struct ieee80211_hw *hw,
struct ieee80211_vif *vif);
#endif /* __MAC80211_HWSIM_NAN_H */