From: Matteo Croce <matteo.croce@xxxxxxxxxxxxx> Add function that returns whether WoWLAN has been enabled for the device or not. Signed-off-by: Alfonso Sanchez-Beato <alfonso.sanchez-beato@xxxxxxxxxxxxx> --- src/drivers/driver.h | 6 +++++ src/drivers/driver_nl80211.c | 45 ++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/src/drivers/driver.h b/src/drivers/driver.h index 9922962ea..8d9447092 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -3336,6 +3336,12 @@ struct wpa_driver_ops { int (*br_set_net_param)(void *priv, enum drv_br_net_param param, unsigned int val); + /** + * get_wowlan - Get wake-on-wireless status + * @priv: Private driver interface data + */ + int (*get_wowlan)(void *priv); + /** * set_wowlan - Set wake-on-wireless triggers * @priv: Private driver interface data diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index 5cff47fab..f8dee84d4 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -8972,6 +8972,50 @@ static int nl80211_set_qos_map(void *priv, const u8 *qos_map_set, } +static int get_wowlan_handler(struct nl_msg *msg, void *arg) +{ + struct nlattr *tb[NL80211_ATTR_MAX + 1]; + struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg)); + int *wowlan_enabled = arg; + + nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0), + genlmsg_attrlen(gnlh, 0), NULL); + + /* FIXME: don't think I've ever seen "!!" used; cleanup... */ + *wowlan_enabled = !!tb[NL80211_ATTR_WOWLAN_TRIGGERS]; + + return NL_SKIP; +} + + +static int nl80211_get_wowlan(void *priv) +{ + struct i802_bss *bss = priv; + struct wpa_driver_nl80211_data *drv = bss->drv; + struct nl_msg *msg; + int wowlan_enabled; + int ret; + + wpa_printf(MSG_DEBUG, "nl80211: Getting wowlan status"); + + msg = nl80211_drv_msg(drv, 0, NL80211_CMD_GET_WOWLAN); + + ret = send_and_recv_msgs(drv, msg, get_wowlan_handler, &wowlan_enabled); + if (ret) { + wpa_printf(MSG_DEBUG, "nl80211: Getting wowlan status failed"); + return 0; + } + + wpa_printf(MSG_DEBUG, "nl80211: wowlan is %s", + wowlan_enabled ? "enabled" : "disabled"); + + if (wowlan_enabled) + return 1; + else + return 0; +} + + static int nl80211_set_wowlan(void *priv, const struct wowlan_triggers *triggers) { @@ -10658,6 +10702,7 @@ const struct wpa_driver_ops wpa_driver_nl80211_ops = { #endif /* ANDROID */ .vendor_cmd = nl80211_vendor_cmd, .set_qos_map = nl80211_set_qos_map, + .get_wowlan = nl80211_get_wowlan, .set_wowlan = nl80211_set_wowlan, .set_mac_addr = nl80211_set_mac_addr, #ifdef CONFIG_MESH -- 2.17.1 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap