From: Jean-Marie Lemetayer Date: Fri, 8 Aug 2014 08:45:00 +0000 (+0200) Subject: wext: Add signal_poll callback X-Git-Tag: hostap_2_3~141 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=61157afb1c1dd1e37a0663a0cb28eec99d7458a4;p=thirdparty%2Fhostap.git wext: Add signal_poll callback Add a basic implementation of a signal_poll callback for wext drivers. Signed-off-by: Jean-Marie Lemetayer --- diff --git a/src/drivers/driver_wext.c b/src/drivers/driver_wext.c index a4f9cec7a..459ac4816 100644 --- a/src/drivers/driver_wext.c +++ b/src/drivers/driver_wext.c @@ -2320,6 +2320,37 @@ static const char * wext_get_radio_name(void *priv) } +static int wpa_driver_wext_signal_poll(void *priv, struct wpa_signal_info *si) +{ + struct wpa_driver_wext_data *drv = priv; + struct iw_statistics stats; + struct iwreq iwr; + + os_memset(si, 0, sizeof(*si)); + si->current_signal = -9999; + si->current_noise = 9999; + si->chanwidth = CHAN_WIDTH_UNKNOWN; + + os_memset(&iwr, 0, sizeof(iwr)); + os_strlcpy(iwr.ifr_name, drv->ifname, IFNAMSIZ); + iwr.u.data.pointer = (caddr_t) &stats; + iwr.u.data.length = sizeof(stats); + iwr.u.data.flags = 1; + + if (ioctl(drv->ioctl_sock, SIOCGIWSTATS, &iwr) < 0) { + wpa_printf(MSG_ERROR, "WEXT: SIOCGIWSTATS: %s", + strerror(errno)); + return -1; + } + + si->current_signal = stats.qual.level - + ((stats.qual.updated & IW_QUAL_DBM) ? 0x100 : 0); + si->current_noise = stats.qual.noise - + ((stats.qual.updated & IW_QUAL_DBM) ? 0x100 : 0); + return 0; +} + + const struct wpa_driver_ops wpa_driver_wext_ops = { .name = "wext", .desc = "Linux wireless extensions (generic)", @@ -2339,4 +2370,5 @@ const struct wpa_driver_ops wpa_driver_wext_ops = { .get_capa = wpa_driver_wext_get_capa, .set_operstate = wpa_driver_wext_set_operstate, .get_radio_name = wext_get_radio_name, + .signal_poll = wpa_driver_wext_signal_poll, };