mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
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>
103 lines
2.8 KiB
C
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 */
|