Started to make set_ap_wps_ie() capable of adding multiple IEs
This mechanism can be used to add various IEs to Beacon and Probe Response frames and it should be made clear that it is not reserved only for WPS IE.
This commit is contained in:
parent
f90ceeaabf
commit
b3db190fa2
5 changed files with 28 additions and 13 deletions
|
@ -39,13 +39,20 @@ static int hostapd_sta_flags_to_drv(int flags)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int hostapd_set_ap_wps_ie(struct hostapd_data *hapd,
|
static int hostapd_set_ap_wps_ie(struct hostapd_data *hapd)
|
||||||
const struct wpabuf *beacon,
|
|
||||||
const struct wpabuf *proberesp)
|
|
||||||
{
|
{
|
||||||
|
struct wpabuf *beacon, *proberesp;
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (hapd->driver == NULL || hapd->driver->set_ap_wps_ie == NULL)
|
if (hapd->driver == NULL || hapd->driver->set_ap_wps_ie == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
return hapd->driver->set_ap_wps_ie(hapd->drv_priv, beacon, proberesp);
|
|
||||||
|
beacon = hapd->wps_beacon_ie;
|
||||||
|
proberesp = hapd->wps_probe_resp_ie;
|
||||||
|
|
||||||
|
ret = hapd->driver->set_ap_wps_ie(hapd->drv_priv, beacon, proberesp);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -48,9 +48,7 @@ struct hostapd_frame_info {
|
||||||
|
|
||||||
|
|
||||||
struct hostapd_driver_ops {
|
struct hostapd_driver_ops {
|
||||||
int (*set_ap_wps_ie)(struct hostapd_data *hapd,
|
int (*set_ap_wps_ie)(struct hostapd_data *hapd);
|
||||||
const struct wpabuf *beacon,
|
|
||||||
const struct wpabuf *probe);
|
|
||||||
int (*send_mgmt_frame)(struct hostapd_data *hapd, const void *msg,
|
int (*send_mgmt_frame)(struct hostapd_data *hapd, const void *msg,
|
||||||
size_t len);
|
size_t len);
|
||||||
int (*send_eapol)(struct hostapd_data *hapd, const u8 *addr,
|
int (*send_eapol)(struct hostapd_data *hapd, const u8 *addr,
|
||||||
|
|
|
@ -100,8 +100,7 @@ static int hostapd_wps_set_ie_cb(void *ctx, struct wpabuf *beacon_ie,
|
||||||
wpabuf_free(hapd->wps_probe_resp_ie);
|
wpabuf_free(hapd->wps_probe_resp_ie);
|
||||||
hapd->wps_probe_resp_ie = probe_resp_ie;
|
hapd->wps_probe_resp_ie = probe_resp_ie;
|
||||||
ieee802_11_set_beacon(hapd);
|
ieee802_11_set_beacon(hapd);
|
||||||
return hapd->drv.set_ap_wps_ie(hapd, hapd->wps_beacon_ie,
|
return hapd->drv.set_ap_wps_ie(hapd);
|
||||||
hapd->wps_probe_resp_ie);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -478,7 +477,7 @@ static void hostapd_wps_clear_ies(struct hostapd_data *hapd)
|
||||||
wpabuf_free(hapd->wps_probe_resp_ie);
|
wpabuf_free(hapd->wps_probe_resp_ie);
|
||||||
hapd->wps_probe_resp_ie = NULL;
|
hapd->wps_probe_resp_ie = NULL;
|
||||||
|
|
||||||
hapd->drv.set_ap_wps_ie(hapd, NULL, NULL);
|
hapd->drv.set_ap_wps_ie(hapd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1591,10 +1591,11 @@ struct wpa_driver_ops {
|
||||||
const u8 *ht_oper, size_t ht_oper_len);
|
const u8 *ht_oper, size_t ht_oper_len);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set_ap_wps_ie - Add WPS IE into Beacon/Probe Response frames (AP)
|
* set_ap_wps_ie - Add WPS IE(s) into Beacon/Probe Response frames (AP)
|
||||||
* @priv: Private driver interface data
|
* @priv: Private driver interface data
|
||||||
* @beacon: WPS IE for Beacon frames
|
* @beacon: WPS IE(s) for Beacon frames or %NULL to remove extra IE(s)
|
||||||
* @proberesp: WPS IE for Probe Response frames
|
* @proberesp: WPS IE(s) for Probe Response frames or %NULL to remove
|
||||||
|
* extra IE(s)
|
||||||
* Returns: 0 on success, -1 on failure
|
* Returns: 0 on success, -1 on failure
|
||||||
*
|
*
|
||||||
* This is an optional function to add WPS IE in the kernel driver for
|
* This is an optional function to add WPS IE in the kernel driver for
|
||||||
|
|
|
@ -481,4 +481,14 @@ static inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s,
|
||||||
|
const struct wpabuf *beacon,
|
||||||
|
const struct wpabuf *proberesp)
|
||||||
|
{
|
||||||
|
if (!wpa_s->driver->set_ap_wps_ie)
|
||||||
|
return -1;
|
||||||
|
return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon,
|
||||||
|
proberesp);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* DRIVER_I_H */
|
#endif /* DRIVER_I_H */
|
||||||
|
|
Loading…
Reference in a new issue