From 05a2f4c4f81decb7c8f5fb4489e1301ed68ad334 Mon Sep 17 00:00:00 2001 From: Chenming Huang Date: Thu, 23 Mar 2023 16:04:45 +0800 Subject: [PATCH] EHT: Process puncturing bitmap from channel select driver event for ACS Retrieve the puncturing bitmap sent by the driver in channel select events for ACS when using the QCA vendor specific event. Signed-off-by: Jouni Malinen --- src/ap/drv_callbacks.c | 3 +++ src/drivers/driver.h | 1 + src/drivers/driver_nl80211_event.c | 8 ++++++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/ap/drv_callbacks.c b/src/ap/drv_callbacks.c index 9732c8e83..4d765dcb1 100644 --- a/src/ap/drv_callbacks.c +++ b/src/ap/drv_callbacks.c @@ -1202,6 +1202,9 @@ void hostapd_acs_channel_selected(struct hostapd_data *hapd, hapd->iconf, acs_res->vht_seg1_center_ch); hostapd_set_oper_centr_freq_seg1_idx(hapd->iconf, 0); } + + if (hapd->iface->conf->ieee80211be && acs_res->puncture_bitmap) + hapd->iconf->punct_bitmap = acs_res->puncture_bitmap; #endif /* CONFIG_IEEE80211BE */ out: diff --git a/src/drivers/driver.h b/src/drivers/driver.h index b6171dde3..8e462c8b7 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -6540,6 +6540,7 @@ union wpa_event_data { u8 vht_seg1_center_ch; u16 ch_width; enum hostapd_hw_mode hw_mode; + u16 puncture_bitmap; } acs_selected_channels; /** diff --git a/src/drivers/driver_nl80211_event.c b/src/drivers/driver_nl80211_event.c index 34e74da7f..e7aff260d 100644 --- a/src/drivers/driver_nl80211_event.c +++ b/src/drivers/driver_nl80211_event.c @@ -2652,15 +2652,19 @@ static void qca_nl80211_acs_select_ch(struct wpa_driver_nl80211_data *drv, if (tb[QCA_WLAN_VENDOR_ATTR_ACS_CHWIDTH]) event.acs_selected_channels.ch_width = nla_get_u16(tb[QCA_WLAN_VENDOR_ATTR_ACS_CHWIDTH]); + if (tb[QCA_WLAN_VENDOR_ATTR_ACS_PUNCTURE_BITMAP]) + event.acs_selected_channels.puncture_bitmap = + nla_get_u16(tb[QCA_WLAN_VENDOR_ATTR_ACS_PUNCTURE_BITMAP]); wpa_printf(MSG_INFO, - "nl80211: ACS Results: PFreq: %d SFreq: %d BW: %d VHT0: %d VHT1: %d HW_MODE: %d EDMGCH: %d", + "nl80211: ACS Results: PFreq: %d SFreq: %d BW: %d VHT0: %d VHT1: %d HW_MODE: %d EDMGCH: %d PUNCBITMAP: 0x%x", event.acs_selected_channels.pri_freq, event.acs_selected_channels.sec_freq, event.acs_selected_channels.ch_width, event.acs_selected_channels.vht_seg0_center_ch, event.acs_selected_channels.vht_seg1_center_ch, event.acs_selected_channels.hw_mode, - event.acs_selected_channels.edmg_channel); + event.acs_selected_channels.edmg_channel, + event.acs_selected_channels.puncture_bitmap); /* Ignore ACS channel list check for backwards compatibility */