blob: a97deaea3f4f9b7e30a0c2cd3ef52c07a6995979 [file] [log] [blame]
From 7dac751fa9d42920b3b62258bffd7e5dd143f284 Mon Sep 17 00:00:00 2001
From: Yi-Chia Hsieh <yi-chia.hsieh@mediatek.com>
Date: Mon, 13 Mar 2023 05:23:37 +0800
Subject: [PATCH 1/2] mac80211: mtk: track obss color bitmap
Track OBSS BSS color when receive their beacon.
Adding 2 tracepoint for debug, usage:
echo 1 > /sys/kernel/debug/tracing/events/mac80211/bss_color_bitmap/enable
echo 1 > /sys/kernel/debug/tracing/events/mac80211/bss_color_collision/enable
---
include/net/mac80211.h | 5 +++--
net/mac80211/cfg.c | 4 ++--
net/mac80211/rx.c | 9 +++++++--
net/mac80211/trace.h | 21 +++++++++++++++++++++
4 files changed, 33 insertions(+), 6 deletions(-)
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 1de9fad..3cf1745 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -729,6 +729,7 @@ struct ieee80211_bss_conf {
} he_oper;
struct ieee80211_he_obss_pd he_obss_pd;
struct cfg80211_he_bss_color he_bss_color;
+ u64 used_color_bitmap;
struct ieee80211_fils_discovery fils_discovery;
u32 unsol_bcast_probe_resp_interval;
struct cfg80211_bitrate_mask beacon_tx_rate;
@@ -7248,7 +7249,7 @@ ieee80211_get_unsol_bcast_probe_resp_tmpl(struct ieee80211_hw *hw,
struct ieee80211_vif *vif);
/**
- * ieeee80211_obss_color_collision_notify - notify userland about a BSS color
+ * ieee80211_obss_color_collision_notify - notify userland about a BSS color
* collision.
*
* @vif: &struct ieee80211_vif pointer from the add_interface callback.
@@ -7257,7 +7258,7 @@ ieee80211_get_unsol_bcast_probe_resp_tmpl(struct ieee80211_hw *hw,
* @gfp: allocation flags
*/
void
-ieeee80211_obss_color_collision_notify(struct ieee80211_vif *vif,
+ieee80211_obss_color_collision_notify(struct ieee80211_vif *vif,
u64 color_bitmap, gfp_t gfp);
/**
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 3e35433..5c9dda1 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -4698,7 +4698,7 @@ void ieee80211_color_change_finish(struct ieee80211_vif *vif)
EXPORT_SYMBOL_GPL(ieee80211_color_change_finish);
void
-ieeee80211_obss_color_collision_notify(struct ieee80211_vif *vif,
+ieee80211_obss_color_collision_notify(struct ieee80211_vif *vif,
u64 color_bitmap, gfp_t gfp)
{
struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
@@ -4708,7 +4708,7 @@ ieeee80211_obss_color_collision_notify(struct ieee80211_vif *vif,
cfg80211_obss_color_collision_notify(sdata->dev, color_bitmap, gfp);
}
-EXPORT_SYMBOL_GPL(ieeee80211_obss_color_collision_notify);
+EXPORT_SYMBOL_GPL(ieee80211_obss_color_collision_notify);
static int
ieee80211_color_change(struct wiphy *wiphy, struct net_device *dev,
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index e99b8fd..fd2f650 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -3338,9 +3338,14 @@ ieee80211_rx_check_bss_color_collision(struct ieee80211_rx_data *rx)
color = le32_get_bits(he_oper->he_oper_params,
IEEE80211_HE_OPERATION_BSS_COLOR_MASK);
+
+ bss_conf->used_color_bitmap |= BIT_ULL(color);
+
+ trace_bss_color_bitmap(color, bss_conf->used_color_bitmap);
+
if (color == bss_conf->he_bss_color.color)
- ieeee80211_obss_color_collision_notify(&rx->sdata->vif,
- BIT_ULL(color),
+ ieee80211_obss_color_collision_notify(&rx->sdata->vif,
+ bss_conf->used_color_bitmap,
GFP_ATOMIC);
}
}
diff --git a/net/mac80211/trace.h b/net/mac80211/trace.h
index 9f43775..71e312f 100644
--- a/net/mac80211/trace.h
+++ b/net/mac80211/trace.h
@@ -3051,6 +3051,27 @@ TRACE_EVENT(stop_queue,
)
);
+TRACE_EVENT(bss_color_bitmap,
+ TP_PROTO(u8 color,
+ u64 color_bitmap),
+
+ TP_ARGS(color, color_bitmap),
+
+ TP_STRUCT__entry(
+ __field(u8, color)
+ __field(u64, color_bitmap)
+ ),
+
+ TP_fast_assign(
+ __entry->color = color;
+ __entry->color_bitmap = color_bitmap;
+ ),
+
+ TP_printk(
+ "color=%u color_bitmap=0x%llx", __entry->color, __entry->color_bitmap
+ )
+);
+
#endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */
#undef TRACE_INCLUDE_PATH
--
2.39.0