DPP: Add process_conf_obj into TCP connection data struct
This is needed to avoid issues with hostapd not having set this function pointer in dpp_global. Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
This commit is contained in:
parent
7f366fcbdc
commit
c6a760b9c4
4 changed files with 42 additions and 7 deletions
|
@ -29,6 +29,9 @@ static int hostapd_dpp_auth_init_next(struct hostapd_data *hapd);
|
||||||
#ifdef CONFIG_DPP2
|
#ifdef CONFIG_DPP2
|
||||||
static void hostapd_dpp_reconfig_reply_wait_timeout(void *eloop_ctx,
|
static void hostapd_dpp_reconfig_reply_wait_timeout(void *eloop_ctx,
|
||||||
void *timeout_ctx);
|
void *timeout_ctx);
|
||||||
|
static void hostapd_dpp_handle_config_obj(struct hostapd_data *hapd,
|
||||||
|
struct dpp_authentication *auth,
|
||||||
|
struct dpp_config_obj *conf);
|
||||||
#endif /* CONFIG_DPP2 */
|
#endif /* CONFIG_DPP2 */
|
||||||
|
|
||||||
static const u8 broadcast[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
static const u8 broadcast[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
||||||
|
@ -486,6 +489,22 @@ static int hostapd_dpp_auth_init_next(struct hostapd_data *hapd)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CONFIG_DPP2
|
||||||
|
static int hostapd_dpp_process_conf_obj(void *ctx,
|
||||||
|
struct dpp_authentication *auth)
|
||||||
|
{
|
||||||
|
struct hostapd_data *hapd = ctx;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for (i = 0; i < auth->num_conf_obj; i++)
|
||||||
|
hostapd_dpp_handle_config_obj(hapd, auth,
|
||||||
|
&auth->conf_obj[i]);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_DPP2 */
|
||||||
|
|
||||||
|
|
||||||
int hostapd_dpp_auth_init(struct hostapd_data *hapd, const char *cmd)
|
int hostapd_dpp_auth_init(struct hostapd_data *hapd, const char *cmd)
|
||||||
{
|
{
|
||||||
const char *pos;
|
const char *pos;
|
||||||
|
@ -602,7 +621,8 @@ int hostapd_dpp_auth_init(struct hostapd_data *hapd, const char *cmd)
|
||||||
if (tcp)
|
if (tcp)
|
||||||
return dpp_tcp_init(hapd->iface->interfaces->dpp, auth,
|
return dpp_tcp_init(hapd->iface->interfaces->dpp, auth,
|
||||||
&ipaddr, tcp_port, hapd->conf->dpp_name,
|
&ipaddr, tcp_port, hapd->conf->dpp_name,
|
||||||
DPP_NETROLE_AP, hapd->msg_ctx);
|
DPP_NETROLE_AP, hapd->msg_ctx, hapd,
|
||||||
|
hostapd_dpp_process_conf_obj);
|
||||||
#endif /* CONFIG_DPP2 */
|
#endif /* CONFIG_DPP2 */
|
||||||
|
|
||||||
hapd->dpp_auth = auth;
|
hapd->dpp_auth = auth;
|
||||||
|
|
|
@ -673,7 +673,11 @@ void dpp_controller_new_qr_code(struct dpp_global *dpp,
|
||||||
struct dpp_bootstrap_info *bi);
|
struct dpp_bootstrap_info *bi);
|
||||||
int dpp_tcp_init(struct dpp_global *dpp, struct dpp_authentication *auth,
|
int dpp_tcp_init(struct dpp_global *dpp, struct dpp_authentication *auth,
|
||||||
const struct hostapd_ip_addr *addr, int port,
|
const struct hostapd_ip_addr *addr, int port,
|
||||||
const char *name, enum dpp_netrole netrole, void *msg_ctx);
|
const char *name, enum dpp_netrole netrole, void *msg_ctx,
|
||||||
|
void *cb_ctx,
|
||||||
|
int (*process_conf_obj)(void *ctx,
|
||||||
|
struct dpp_authentication *auth));
|
||||||
|
|
||||||
struct wpabuf * dpp_build_presence_announcement(struct dpp_bootstrap_info *bi);
|
struct wpabuf * dpp_build_presence_announcement(struct dpp_bootstrap_info *bi);
|
||||||
|
|
||||||
struct dpp_global_config {
|
struct dpp_global_config {
|
||||||
|
|
|
@ -26,6 +26,8 @@ struct dpp_connection {
|
||||||
struct dpp_global *global;
|
struct dpp_global *global;
|
||||||
struct dpp_authentication *auth;
|
struct dpp_authentication *auth;
|
||||||
void *msg_ctx;
|
void *msg_ctx;
|
||||||
|
void *cb_ctx;
|
||||||
|
int (*process_conf_obj)(void *ctx, struct dpp_authentication *auth);
|
||||||
int sock;
|
int sock;
|
||||||
u8 mac_addr[ETH_ALEN];
|
u8 mac_addr[ETH_ALEN];
|
||||||
unsigned int freq;
|
unsigned int freq;
|
||||||
|
@ -370,6 +372,8 @@ dpp_relay_new_conn(struct dpp_relay_controller *ctrl, const u8 *src,
|
||||||
conn->global = ctrl->global;
|
conn->global = ctrl->global;
|
||||||
conn->relay = ctrl;
|
conn->relay = ctrl;
|
||||||
conn->msg_ctx = ctrl->global->msg_ctx;
|
conn->msg_ctx = ctrl->global->msg_ctx;
|
||||||
|
conn->cb_ctx = ctrl->global->cb_ctx;
|
||||||
|
conn->process_conf_obj = ctrl->global->process_conf_obj;
|
||||||
os_memcpy(conn->mac_addr, src, ETH_ALEN);
|
os_memcpy(conn->mac_addr, src, ETH_ALEN);
|
||||||
conn->freq = freq;
|
conn->freq = freq;
|
||||||
|
|
||||||
|
@ -1213,9 +1217,8 @@ static int dpp_tcp_rx_gas_resp(struct dpp_connection *conn, struct wpabuf *resp)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (conn->global->process_conf_obj)
|
if (conn->process_conf_obj)
|
||||||
res = conn->global->process_conf_obj(conn->global->cb_ctx,
|
res = conn->process_conf_obj(conn->cb_ctx, auth);
|
||||||
auth);
|
|
||||||
else
|
else
|
||||||
res = 0;
|
res = 0;
|
||||||
|
|
||||||
|
@ -1498,6 +1501,8 @@ static void dpp_controller_tcp_cb(int sd, void *eloop_ctx, void *sock_ctx)
|
||||||
conn->global = ctrl->global;
|
conn->global = ctrl->global;
|
||||||
conn->ctrl = ctrl;
|
conn->ctrl = ctrl;
|
||||||
conn->msg_ctx = ctrl->global->msg_ctx;
|
conn->msg_ctx = ctrl->global->msg_ctx;
|
||||||
|
conn->cb_ctx = ctrl->global->cb_ctx;
|
||||||
|
conn->process_conf_obj = ctrl->global->process_conf_obj;
|
||||||
conn->sock = fd;
|
conn->sock = fd;
|
||||||
|
|
||||||
if (fcntl(conn->sock, F_SETFL, O_NONBLOCK) != 0) {
|
if (fcntl(conn->sock, F_SETFL, O_NONBLOCK) != 0) {
|
||||||
|
@ -1524,7 +1529,9 @@ fail:
|
||||||
|
|
||||||
int dpp_tcp_init(struct dpp_global *dpp, struct dpp_authentication *auth,
|
int dpp_tcp_init(struct dpp_global *dpp, struct dpp_authentication *auth,
|
||||||
const struct hostapd_ip_addr *addr, int port, const char *name,
|
const struct hostapd_ip_addr *addr, int port, const char *name,
|
||||||
enum dpp_netrole netrole, void *msg_ctx)
|
enum dpp_netrole netrole, void *msg_ctx, void *cb_ctx,
|
||||||
|
int (*process_conf_obj)(void *ctx,
|
||||||
|
struct dpp_authentication *auth))
|
||||||
{
|
{
|
||||||
struct dpp_connection *conn;
|
struct dpp_connection *conn;
|
||||||
struct sockaddr_storage saddr;
|
struct sockaddr_storage saddr;
|
||||||
|
@ -1547,6 +1554,8 @@ int dpp_tcp_init(struct dpp_global *dpp, struct dpp_authentication *auth,
|
||||||
}
|
}
|
||||||
|
|
||||||
conn->msg_ctx = msg_ctx;
|
conn->msg_ctx = msg_ctx;
|
||||||
|
conn->cb_ctx = cb_ctx;
|
||||||
|
conn->process_conf_obj = process_conf_obj;
|
||||||
conn->name = os_strdup(name ? name : "Test");
|
conn->name = os_strdup(name ? name : "Test");
|
||||||
conn->netrole = netrole;
|
conn->netrole = netrole;
|
||||||
conn->global = dpp;
|
conn->global = dpp;
|
||||||
|
|
|
@ -50,6 +50,8 @@ wpas_dpp_tx_pkex_status(struct wpa_supplicant *wpa_s,
|
||||||
static void wpas_dpp_reconfig_reply_wait_timeout(void *eloop_ctx,
|
static void wpas_dpp_reconfig_reply_wait_timeout(void *eloop_ctx,
|
||||||
void *timeout_ctx);
|
void *timeout_ctx);
|
||||||
static void wpas_dpp_start_gas_client(struct wpa_supplicant *wpa_s);
|
static void wpas_dpp_start_gas_client(struct wpa_supplicant *wpa_s);
|
||||||
|
static int wpas_dpp_process_conf_obj(void *ctx,
|
||||||
|
struct dpp_authentication *auth);
|
||||||
#endif /* CONFIG_DPP2 */
|
#endif /* CONFIG_DPP2 */
|
||||||
|
|
||||||
static const u8 broadcast[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
static const u8 broadcast[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
||||||
|
@ -837,7 +839,7 @@ int wpas_dpp_auth_init(struct wpa_supplicant *wpa_s, const char *cmd)
|
||||||
if (tcp)
|
if (tcp)
|
||||||
return dpp_tcp_init(wpa_s->dpp, auth, &ipaddr, tcp_port,
|
return dpp_tcp_init(wpa_s->dpp, auth, &ipaddr, tcp_port,
|
||||||
wpa_s->conf->dpp_name, DPP_NETROLE_STA,
|
wpa_s->conf->dpp_name, DPP_NETROLE_STA,
|
||||||
wpa_s);
|
wpa_s, wpa_s, wpas_dpp_process_conf_obj);
|
||||||
#endif /* CONFIG_DPP2 */
|
#endif /* CONFIG_DPP2 */
|
||||||
|
|
||||||
wpa_s->dpp_auth = auth;
|
wpa_s->dpp_auth = auth;
|
||||||
|
|
Loading…
Reference in a new issue