Get rid of direct hostapd_for_each_interface() calls

src/ap/*.c must not call functions in hostapd or wpa_supplicant
directories directly, so avoid this by using a callback function
pointer.
This commit is contained in:
Jouni Malinen 2009-12-25 20:12:26 +02:00
parent 70db2ab308
commit 1b56c26c40
5 changed files with 15 additions and 27 deletions

View file

@ -43,7 +43,7 @@ struct hapd_interfaces {
}; };
int hostapd_for_each_interface(struct hapd_interfaces *interfaces, static int hostapd_for_each_interface(struct hapd_interfaces *interfaces,
int (*cb)(struct hostapd_iface *iface, int (*cb)(struct hostapd_iface *iface,
void *ctx), void *ctx) void *ctx), void *ctx)
{ {
@ -190,6 +190,7 @@ static struct hostapd_iface * hostapd_init(const char *config_file)
goto fail; goto fail;
hapd_iface->ctrl_iface_init = hostapd_ctrl_iface_init; hapd_iface->ctrl_iface_init = hostapd_ctrl_iface_init;
hapd_iface->ctrl_iface_deinit = hostapd_ctrl_iface_deinit; hapd_iface->ctrl_iface_deinit = hostapd_ctrl_iface_deinit;
hapd_iface->for_each_interface = hostapd_for_each_interface;
conf = hostapd_config_read(hapd_iface->config_fname); conf = hostapd_config_read(hapd_iface->config_fname);
if (conf == NULL) if (conf == NULL)

View file

@ -228,6 +228,10 @@ struct hostapd_iface {
int (*ctrl_iface_init)(struct hostapd_data *hapd); int (*ctrl_iface_init)(struct hostapd_data *hapd);
void (*ctrl_iface_deinit)(struct hostapd_data *hapd); void (*ctrl_iface_deinit)(struct hostapd_data *hapd);
int (*for_each_interface)(struct hapd_interfaces *interfaces,
int (*cb)(struct hostapd_iface *iface,
void *ctx), void *ctx);
}; };
/* hostapd.c */ /* hostapd.c */
@ -242,11 +246,6 @@ void hostapd_interface_deinit(struct hostapd_iface *iface);
void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta, void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta,
int reassoc); int reassoc);
/* main.c */
int hostapd_for_each_interface(struct hapd_interfaces *interfaces,
int (*cb)(struct hostapd_iface *iface,
void *ctx), void *ctx);
/* utils.c */ /* utils.c */
int hostapd_register_probereq_cb(struct hostapd_data *hapd, int hostapd_register_probereq_cb(struct hostapd_data *hapd,
void (*cb)(void *ctx, const u8 *sa, void (*cb)(void *ctx, const u8 *sa,

View file

@ -82,6 +82,7 @@ void hostapd_prune_associations(struct hostapd_data *hapd, const u8 *addr)
struct prune_data data; struct prune_data data;
data.hapd = hapd; data.hapd = hapd;
data.addr = addr; data.addr = addr;
hostapd_for_each_interface(hapd->iface->interfaces, if (hapd->iface->for_each_interface)
hapd->iface->for_each_interface(hapd->iface->interfaces,
prune_associations, &data); prune_associations, &data);
} }

View file

@ -281,9 +281,11 @@ static int hostapd_wpa_auth_for_each_auth(
{ {
struct hostapd_data *hapd = ctx; struct hostapd_data *hapd = ctx;
struct wpa_auth_iface_iter_data data; struct wpa_auth_iface_iter_data data;
if (hapd->iface->for_each_interface == NULL)
return -1;
data.cb = cb; data.cb = cb;
data.cb_ctx = cb_ctx; data.cb_ctx = cb_ctx;
return hostapd_for_each_interface(hapd->iface->interfaces, return hapd->iface->for_each_interface(hapd->iface->interfaces,
wpa_auth_iface_iter, &data); wpa_auth_iface_iter, &data);
} }

View file

@ -34,21 +34,6 @@
#include "ap.h" #include "ap.h"
struct hapd_interfaces {
size_t count;
struct hostapd_iface **iface;
};
int hostapd_for_each_interface(struct hapd_interfaces *interfaces,
int (*cb)(struct hostapd_iface *iface,
void *ctx), void *ctx)
{
/* TODO */
return 0;
}
static int wpa_supplicant_conf_ap(struct wpa_supplicant *wpa_s, static int wpa_supplicant_conf_ap(struct wpa_supplicant *wpa_s,
struct wpa_ssid *ssid, struct wpa_ssid *ssid,
struct hostapd_config *conf) struct hostapd_config *conf)