Store entire CS freq_params and not only freq
authorAndrei Otcheretianski <andrei.otcheretianski@intel.com>
Sun, 15 Dec 2013 08:47:41 +0000 (10:47 +0200)
committerJouni Malinen <j@w1.fi>
Tue, 24 Dec 2013 06:23:40 +0000 (08:23 +0200)
When CSA flow starts, store the entire struct hostapd_freq_params and
not only CS frequency as it was before. The additional freq_params are
required to advertise CS supplementary IEs such as secondary channel,
wide bandwidth CS, etc.

Signed-hostap: Andrei Otcheretianski <andrei.otcheretianski@intel.com>

src/ap/beacon.c
src/ap/drv_callbacks.c
src/ap/hostapd.c
src/ap/hostapd.h

index cdee579..ca5f90e 100644 (file)
@@ -206,10 +206,10 @@ static u8 * hostapd_eid_csa(struct hostapd_data *hapd, u8 *eid)
 {
        u8 chan;
 
-       if (!hapd->iface->cs_freq)
+       if (!hapd->iface->cs_freq_params.freq)
                return eid;
 
-       if (ieee80211_freq_to_chan(hapd->iface->cs_freq, &chan) ==
+       if (ieee80211_freq_to_chan(hapd->iface->cs_freq_params.freq, &chan) ==
            NUM_HOSTAPD_MODES)
                return eid;
 
index b066bff..d0b2c1f 100644 (file)
@@ -439,7 +439,8 @@ void hostapd_event_ch_switch(struct hostapd_data *hapd, int freq, int ht,
        hapd->iconf->vht_oper_centr_freq_seg0_idx = seg0_idx;
        hapd->iconf->vht_oper_centr_freq_seg1_idx = seg1_idx;
 
-       if (hapd->iface->csa_in_progress && freq == hapd->iface->cs_freq) {
+       if (hapd->iface->csa_in_progress &&
+           freq == hapd->iface->cs_freq_params.freq) {
                hostapd_cleanup_cs_params(hapd);
 
                wpa_msg(hapd->msg_ctx, MSG_INFO, AP_CSA_FINISHED "freq=%d",
index 4c59372..0d669f9 100644 (file)
@@ -2199,7 +2199,7 @@ static int hostapd_fill_csa_settings(struct hostapd_iface *iface,
                return ret;
 
        /* set channel switch parameters for csa ie */
-       iface->cs_freq = settings->freq_params.freq;
+       iface->cs_freq_params = settings->freq_params;
        iface->cs_count = settings->cs_count;
        iface->cs_block_tx = settings->block_tx;
 
@@ -2218,7 +2218,8 @@ static int hostapd_fill_csa_settings(struct hostapd_iface *iface,
 
 void hostapd_cleanup_cs_params(struct hostapd_data *hapd)
 {
-       hapd->iface->cs_freq = 0;
+       os_memset(&hapd->iface->cs_freq_params, 0,
+                 sizeof(hapd->iface->cs_freq_params));
        hapd->iface->cs_count = 0;
        hapd->iface->cs_block_tx = 0;
        hapd->iface->cs_c_off_beacon = 0;
index 88b56e3..d4f275e 100644 (file)
@@ -334,7 +334,7 @@ struct hostapd_iface {
        s8 lowest_nf;
 
        /* channel switch parameters */
-       int cs_freq;
+       struct hostapd_freq_params cs_freq_params;
        u8 cs_count;
        int cs_block_tx;
        unsigned int cs_c_off_beacon;