From 5b9f46df0e19111a64c6036df59076f879777988 Mon Sep 17 00:00:00 2001 From: Peng Xu Date: Wed, 22 Feb 2017 14:05:35 -0800 Subject: [PATCH] hostapd: Get channel number from frequency based on other modes as well When getting the channel number from a frequency, all supported modes should be checked rather than just the current mode. This is needed when hostapd switches to a channel in different band. Signed-off-by: Jouni Malinen --- src/ap/hw_features.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/ap/hw_features.c b/src/ap/hw_features.c index 2d6cef1af..93d923af5 100644 --- a/src/ap/hw_features.c +++ b/src/ap/hw_features.c @@ -909,5 +909,19 @@ int hostapd_hw_get_freq(struct hostapd_data *hapd, int chan) int hostapd_hw_get_channel(struct hostapd_data *hapd, int freq) { - return hw_get_chan(hapd->iface->current_mode, freq); + int i, channel; + struct hostapd_hw_modes *mode; + + channel = hw_get_chan(hapd->iface->current_mode, freq); + if (channel) + return channel; + /* Check other available modes since the channel list for the current + * mode did not include the specified frequency. */ + for (i = 0; i < hapd->iface->num_hw_features; i++) { + mode = &hapd->iface->hw_features[i]; + channel = hw_get_chan(mode, freq); + if (channel) + return channel; + } + return 0; }