From: Jouni Malinen Date: Fri, 15 Oct 2010 15:56:36 +0000 (+0300) Subject: nl80211: Indicate channel list change events X-Git-Url: http://www.project-moonshot.org/gitweb/?p=libeap.git;a=commitdiff_plain;h=33c5deb816f51d80b7ac6aa44b224e6b699ef85c nl80211: Indicate channel list change events Listen to regulatory event messages from kernel and convert them to internal driver event notifications indicated that the channel list may have changed. --- diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index 8e527a5..352ecd5 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -1305,6 +1305,16 @@ static int process_event(struct nl_msg *msg, void *arg) case NL80211_CMD_NOTIFY_CQM: nl80211_cqm_event(drv, tb); break; + case NL80211_CMD_REG_CHANGE: + wpa_printf(MSG_DEBUG, "nl80211: Regulatory domain change"); + wpa_supplicant_event(drv->ctx, EVENT_CHANNEL_LIST_CHANGED, + NULL); + break; + case NL80211_CMD_REG_BEACON_HINT: + wpa_printf(MSG_DEBUG, "nl80211: Regulatory beacon hint"); + wpa_supplicant_event(drv->ctx, EVENT_CHANNEL_LIST_CHANGED, + NULL); + break; default: wpa_printf(MSG_DEBUG, "nl80211: Ignored unknown event " "(cmd=%d)", gnlh->cmd); @@ -1578,6 +1588,16 @@ static int wpa_driver_nl80211_init_nl(struct wpa_driver_nl80211_data *drv) goto err4; } + ret = nl_get_multicast_id(drv, "nl80211", "regulatory"); + if (ret >= 0) + ret = nl_socket_add_membership(drv->nl_handle_event, ret); + if (ret < 0) { + wpa_printf(MSG_DEBUG, "nl80211: Could not add multicast " + "membership for regulatory events: %d (%s)", + ret, strerror(-ret)); + /* Continue without regulatory events */ + } + eloop_register_read_sock(nl_socket_get_fd(drv->nl_handle_event), wpa_driver_nl80211_event_receive, drv, drv->nl_handle_event);