DPP2: Close incomplete Relay connections

Add timeout to close incomplete DPP relay connections. This is needed to
avoid getting stuck with old entries that prevent new connections from
getting started.

Signed-off-by: Disha Das <dishad@codeaurora.org>
This commit is contained in:
Disha Das 2021-02-11 14:06:47 +05:30 committed by Jouni Malinen
parent f91680c15f
commit c2d7b027b1

View file

@ -82,6 +82,7 @@ static void dpp_controller_auth_success(struct dpp_connection *conn,
int initiator); int initiator);
static void dpp_tcp_build_csr(void *eloop_ctx, void *timeout_ctx); static void dpp_tcp_build_csr(void *eloop_ctx, void *timeout_ctx);
static void dpp_tcp_gas_query_comeback(void *eloop_ctx, void *timeout_ctx); static void dpp_tcp_gas_query_comeback(void *eloop_ctx, void *timeout_ctx);
static void dpp_relay_conn_timeout(void *eloop_ctx, void *timeout_ctx);
static void dpp_connection_free(struct dpp_connection *conn) static void dpp_connection_free(struct dpp_connection *conn)
@ -97,6 +98,7 @@ static void dpp_connection_free(struct dpp_connection *conn)
conn, NULL); conn, NULL);
eloop_cancel_timeout(dpp_tcp_build_csr, conn, NULL); eloop_cancel_timeout(dpp_tcp_build_csr, conn, NULL);
eloop_cancel_timeout(dpp_tcp_gas_query_comeback, conn, NULL); eloop_cancel_timeout(dpp_tcp_gas_query_comeback, conn, NULL);
eloop_cancel_timeout(dpp_relay_conn_timeout, conn, NULL);
wpabuf_free(conn->msg); wpabuf_free(conn->msg);
wpabuf_free(conn->msg_out); wpabuf_free(conn->msg_out);
dpp_auth_deinit(conn->auth); dpp_auth_deinit(conn->auth);
@ -352,6 +354,16 @@ static int dpp_ipaddr_to_sockaddr(struct sockaddr *addr, socklen_t *addrlen,
} }
static void dpp_relay_conn_timeout(void *eloop_ctx, void *timeout_ctx)
{
struct dpp_connection *conn = eloop_ctx;
wpa_printf(MSG_DEBUG,
"DPP: Timeout while waiting for relayed connection to complete");
dpp_connection_remove(conn);
}
static struct dpp_connection * static struct dpp_connection *
dpp_relay_new_conn(struct dpp_relay_controller *ctrl, const u8 *src, dpp_relay_new_conn(struct dpp_relay_controller *ctrl, const u8 *src,
unsigned int freq) unsigned int freq)
@ -412,8 +424,8 @@ dpp_relay_new_conn(struct dpp_relay_controller *ctrl, const u8 *src,
goto fail; goto fail;
conn->write_eloop = 1; conn->write_eloop = 1;
/* TODO: eloop timeout to clear a connection if it does not complete eloop_cancel_timeout(dpp_relay_conn_timeout, conn, NULL);
* properly */ eloop_register_timeout(20, 0, dpp_relay_conn_timeout, conn, NULL);
dl_list_add(&ctrl->conn, &conn->list); dl_list_add(&ctrl->conn, &conn->list);
return conn; return conn;