diff mbox

[1/1] wext: Add signal_poll callback

Message ID 1407487500-3726-1-git-send-email-jeanmarie.lemetayer@gmail.com
State Accepted
Headers show

Commit Message

Jean-Marie Lemetayer Aug. 8, 2014, 8:45 a.m. UTC
Add a basic implementation of a signal_poll callback for wext drivers.

Signed-off-by: Jean-Marie Lemetayer <jeanmarie.lemetayer@gmail.com>
---
 src/drivers/driver_wext.c | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

Comments

Jean-Marie Lemetayer Aug. 8, 2014, 8:47 a.m. UTC | #1
Hi,

Sorry for the first email, the indentation was not well renderred.
This time it should be ok.

Regards,
JML

2014-08-08 10:45 GMT+02:00 Jean-Marie Lemetayer <jeanmarie.lemetayer@gmail.com>:
> Add a basic implementation of a signal_poll callback for wext drivers.
>
> Signed-off-by: Jean-Marie Lemetayer <jeanmarie.lemetayer@gmail.com>
> ---
>  src/drivers/driver_wext.c | 31 +++++++++++++++++++++++++++++++
>  1 file changed, 31 insertions(+)
>
> diff --git a/src/drivers/driver_wext.c b/src/drivers/driver_wext.c
> index a4f9cec..105d15e 100644
> --- a/src/drivers/driver_wext.c
> +++ b/src/drivers/driver_wext.c
> @@ -2319,6 +2319,36 @@ static const char * wext_get_radio_name(void *priv)
>         return drv->phyname;
>  }
>
> +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",
> @@ -2339,4 +2369,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,
>  };
> --
> 1.9.1
>
Jouni Malinen Aug. 10, 2014, 9:29 a.m. UTC | #2
On Fri, Aug 08, 2014 at 10:45:00AM +0200, Jean-Marie Lemetayer wrote:
> Add a basic implementation of a signal_poll callback for wext drivers.

Thanks, applied.
diff mbox

Patch

diff --git a/src/drivers/driver_wext.c b/src/drivers/driver_wext.c
index a4f9cec..105d15e 100644
--- a/src/drivers/driver_wext.c
+++ b/src/drivers/driver_wext.c
@@ -2319,6 +2319,36 @@  static const char * wext_get_radio_name(void *priv)
 	return drv->phyname;
 }
 
+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",
@@ -2339,4 +2369,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,
 };