Make get_pri_sec_chan() common
Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com>
This commit is contained in:
parent
514427437a
commit
6d5d098f77
3 changed files with 28 additions and 19 deletions
|
@ -252,25 +252,7 @@ static void ieee80211n_switch_pri_sec(struct hostapd_iface *iface)
|
||||||
static void ieee80211n_get_pri_sec_chan(struct wpa_scan_res *bss,
|
static void ieee80211n_get_pri_sec_chan(struct wpa_scan_res *bss,
|
||||||
int *pri_chan, int *sec_chan)
|
int *pri_chan, int *sec_chan)
|
||||||
{
|
{
|
||||||
struct ieee80211_ht_operation *oper;
|
return get_pri_sec_chan(bss, pri_chan, sec_chan);
|
||||||
struct ieee802_11_elems elems;
|
|
||||||
|
|
||||||
*pri_chan = *sec_chan = 0;
|
|
||||||
|
|
||||||
ieee802_11_parse_elems((u8 *) (bss + 1), bss->ie_len, &elems, 0);
|
|
||||||
if (elems.ht_operation &&
|
|
||||||
elems.ht_operation_len >= sizeof(*oper)) {
|
|
||||||
oper = (struct ieee80211_ht_operation *) elems.ht_operation;
|
|
||||||
*pri_chan = oper->primary_chan;
|
|
||||||
if (oper->ht_param & HT_INFO_HT_PARAM_STA_CHNL_WIDTH) {
|
|
||||||
int sec = oper->ht_param &
|
|
||||||
HT_INFO_HT_PARAM_SECONDARY_CHNL_OFF_MASK;
|
|
||||||
if (sec == HT_INFO_HT_PARAM_SECONDARY_CHNL_ABOVE)
|
|
||||||
*sec_chan = *pri_chan + 4;
|
|
||||||
else if (sec == HT_INFO_HT_PARAM_SECONDARY_CHNL_BELOW)
|
|
||||||
*sec_chan = *pri_chan - 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,8 @@
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "defs.h"
|
#include "defs.h"
|
||||||
|
#include "ieee802_11_defs.h"
|
||||||
|
#include "ieee802_11_common.h"
|
||||||
#include "hw_features_common.h"
|
#include "hw_features_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -140,3 +142,27 @@ int allowed_ht40_channel_pair(struct hostapd_hw_modes *mode, int pri_chan,
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void get_pri_sec_chan(struct wpa_scan_res *bss, int *pri_chan, int *sec_chan)
|
||||||
|
{
|
||||||
|
struct ieee80211_ht_operation *oper;
|
||||||
|
struct ieee802_11_elems elems;
|
||||||
|
|
||||||
|
*pri_chan = *sec_chan = 0;
|
||||||
|
|
||||||
|
ieee802_11_parse_elems((u8 *) (bss + 1), bss->ie_len, &elems, 0);
|
||||||
|
if (elems.ht_operation &&
|
||||||
|
elems.ht_operation_len >= sizeof(*oper)) {
|
||||||
|
oper = (struct ieee80211_ht_operation *) elems.ht_operation;
|
||||||
|
*pri_chan = oper->primary_chan;
|
||||||
|
if (oper->ht_param & HT_INFO_HT_PARAM_STA_CHNL_WIDTH) {
|
||||||
|
int sec = oper->ht_param &
|
||||||
|
HT_INFO_HT_PARAM_SECONDARY_CHNL_OFF_MASK;
|
||||||
|
if (sec == HT_INFO_HT_PARAM_SECONDARY_CHNL_ABOVE)
|
||||||
|
*sec_chan = *pri_chan + 4;
|
||||||
|
else if (sec == HT_INFO_HT_PARAM_SECONDARY_CHNL_BELOW)
|
||||||
|
*sec_chan = *pri_chan - 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -22,5 +22,6 @@ int hw_get_chan(struct hostapd_hw_modes *mode, int freq);
|
||||||
|
|
||||||
int allowed_ht40_channel_pair(struct hostapd_hw_modes *mode, int pri_chan,
|
int allowed_ht40_channel_pair(struct hostapd_hw_modes *mode, int pri_chan,
|
||||||
int sec_chan);
|
int sec_chan);
|
||||||
|
void get_pri_sec_chan(struct wpa_scan_res *bss, int *pri_chan, int *sec_chan);
|
||||||
|
|
||||||
#endif /* HW_FEATURES_COMMON_H */
|
#endif /* HW_FEATURES_COMMON_H */
|
||||||
|
|
Loading…
Reference in a new issue