Search Linux Wireless

Re: [PATCH] wifi: mac80211_hwsim: add control to skip beacons

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 1/29/2024 11:00 AM, Johannes Berg wrote:
> From: Johannes Berg <johannes.berg@xxxxxxxxx>
> 
> To test certain beacon loss scenarios it can be useful to
> simply not send a couple of beacons. Add a simple debugfs
> file (per vif) to skip sending the beacons. They're still
> fully prepared etc. so their DTIM count etc. will appear
> as if they were simply corrupt over the air or otherwise
> not received.
> 
> Signed-off-by: Johannes Berg <johannes.berg@xxxxxxxxx>

Reviewed-by: Jeff Johnson <quic_jjohnson@xxxxxxxxxxx>

> ---
>  drivers/net/wireless/virtual/mac80211_hwsim.c | 28 ++++++++++++++++++-
>  1 file changed, 27 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/wireless/virtual/mac80211_hwsim.c b/drivers/net/wireless/virtual/mac80211_hwsim.c
> index 62a5839f5385..59ec6aa5ac26 100644
> --- a/drivers/net/wireless/virtual/mac80211_hwsim.c
> +++ b/drivers/net/wireless/virtual/mac80211_hwsim.c
> @@ -213,6 +213,7 @@ static const struct ieee80211_regdomain *hwsim_world_regdom_custom[] = {
>  
>  struct hwsim_vif_priv {
>  	u32 magic;
> +	u32 skip_beacons;
>  	u8 bssid[ETH_ALEN];
>  	bool assoc;
>  	bool bcn_en;
> @@ -2128,6 +2129,16 @@ static int mac80211_hwsim_add_interface(struct ieee80211_hw *hw,
>  	return 0;
>  }
>  
> +#ifdef CONFIG_MAC80211_DEBUGFS
> +static void mac80211_hwsim_vif_add_debugfs(struct ieee80211_hw *hw,
> +					   struct ieee80211_vif *vif)
> +{
> +	struct hwsim_vif_priv *vp = (void *)vif->drv_priv;
> +
> +	debugfs_create_u32("skip_beacons", 0600, vif->debugfs_dir,
> +			   &vp->skip_beacons);
> +}
> +#endif
>  
>  static int mac80211_hwsim_change_interface(struct ieee80211_hw *hw,
>  					   struct ieee80211_vif *vif,
> @@ -2193,12 +2204,19 @@ static void __mac80211_hwsim_beacon_tx(struct ieee80211_bss_conf *link_conf,
>  				       struct ieee80211_vif *vif,
>  				       struct sk_buff *skb)
>  {
> +	struct hwsim_vif_priv *vp = (void *)vif->drv_priv;
>  	struct ieee80211_tx_info *info;
>  	struct ieee80211_rate *txrate;
>  	struct ieee80211_mgmt *mgmt;
>  	/* TODO: get MCS */
>  	int bitrate = 100;
>  
> +	if (vp->skip_beacons) {
> +		vp->skip_beacons--;
> +		dev_kfree_skb(skb);
> +		return;
> +	}
> +
>  	info = IEEE80211_SKB_CB(skb);
>  	if (ieee80211_hw_check(hw, SUPPORTS_RC_TABLE))
>  		ieee80211_get_tx_rates(vif, NULL, skb,
> @@ -3857,6 +3875,13 @@ static int hwsim_pmsr_report_nl(struct sk_buff *msg, struct genl_info *info)
>  	return err;
>  }
>  
> +#ifdef CONFIG_MAC80211_DEBUGFS
> +#define HWSIM_DEBUGFS_OPS					\
> +	.vif_add_debugfs = mac80211_hwsim_vif_add_debugfs,
> +#else
> +#define HWSIM_DEBUGFS_OPS
> +#endif
> +
>  #define HWSIM_COMMON_OPS					\
>  	.tx = mac80211_hwsim_tx,				\
>  	.wake_tx_queue = ieee80211_handle_wake_tx_queue,	\
> @@ -3881,7 +3906,8 @@ static int hwsim_pmsr_report_nl(struct sk_buff *msg, struct genl_info *info)
>  	.get_et_stats = mac80211_hwsim_get_et_stats,		\
>  	.get_et_strings = mac80211_hwsim_get_et_strings,	\
>  	.start_pmsr = mac80211_hwsim_start_pmsr,		\
> -	.abort_pmsr = mac80211_hwsim_abort_pmsr,
> +	.abort_pmsr = mac80211_hwsim_abort_pmsr,		\
> +	HWSIM_DEBUGFS_OPS
>  
>  #define HWSIM_NON_MLO_OPS					\
>  	.sta_add = mac80211_hwsim_sta_add,			\





[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux