<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<font face="Consolas, monospace" size="2">
<div>Signed-off-by: Bartosz Markowski <<a href="mailto:guy@wizery.com"><font color="#0000FF"><u>bartosz.</u></font><font color="#0000FF"><u>markowski@tieto.com</u></font></a>></div>
<div><font face="Calibri, sans-serif" size="2">---</font></div>
<div><font face="Calibri, sans-serif" size="2"> src/drivers/driver.h | 11 +++++++++++</font></div>
<div><font face="Calibri, sans-serif" size="2"> src/drivers/driver_nl80211.c | 42 ++++++++++++++++++++++++++++++++++++++++++</font></div>
<div><font face="Calibri, sans-serif" size="2"> wpa_supplicant/driver_i.h | 9 +++++++++</font></div>
<div><font face="Calibri, sans-serif" size="2"> 3 files changed, 62 insertions(+), 0 deletions(-)</font></div>
<div><font face="Calibri, sans-serif" size="2"> </font></div>
<div><font face="Calibri, sans-serif" size="2">diff --git a/src/drivers/driver.h b/src/drivers/driver.h</font></div>
<div><font face="Calibri, sans-serif" size="2">index 92951ae..968022f 100644</font></div>
<div><font face="Calibri, sans-serif" size="2">--- a/src/drivers/driver.h</font></div>
<div><font face="Calibri, sans-serif" size="2">+++ b/src/drivers/driver.h</font></div>
<div><font face="Calibri, sans-serif" size="2">@@ -1219,6 +1219,17 @@ struct wpa_driver_ops {</font></div>
<div><font face="Calibri, sans-serif" size="2"> int (*set_country)(void *priv, const char *alpha2);</font></div>
<div><font face="Calibri, sans-serif" size="2"> </font></div>
<div><font face="Calibri, sans-serif" size="2"> /**</font></div>
<div><font face="Calibri, sans-serif" size="2">+ * get_country - Get country</font></div>
<div><font face="Calibri, sans-serif" size="2">+ * @priv: Private driver interface data</font></div>
<div><font face="Calibri, sans-serif" size="2">+ * @alpha2: pointer to country code</font></div>
<div><font face="Calibri, sans-serif" size="2">+ * Returns: 0 on success, -1 on failure</font></div>
<div><font face="Calibri, sans-serif" size="2">+ *</font></div>
<div><font face="Calibri, sans-serif" size="2">+ * This function is for drivers which support some form</font></div>
<div><font face="Calibri, sans-serif" size="2">+ * of setting a regulatory domain.</font></div>
<div><font face="Calibri, sans-serif" size="2">+ */</font></div>
<div><font face="Calibri, sans-serif" size="2">+ int (*get_country)(void *priv, char *alpha2);</font></div>
<div><font face="Calibri, sans-serif" size="2">+</font></div>
<div><font face="Calibri, sans-serif" size="2">+ /**</font></div>
<div><font face="Calibri, sans-serif" size="2"> * global_init - Global driver initialization</font></div>
<div><font face="Calibri, sans-serif" size="2"> * Returns: Pointer to private data (global), %NULL on failure</font></div>
<div><font face="Calibri, sans-serif" size="2"> *</font></div>
<div><font face="Calibri, sans-serif" size="2">diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c</font></div>
<div><font face="Calibri, sans-serif" size="2">index 87d474e..dd435cb 100644</font></div>
<div><font face="Calibri, sans-serif" size="2">--- a/src/drivers/driver_nl80211.c</font></div>
<div><font face="Calibri, sans-serif" size="2">+++ b/src/drivers/driver_nl80211.c</font></div>
<div><font face="Calibri, sans-serif" size="2">@@ -1626,6 +1626,47 @@ nla_put_failure:</font></div>
<div><font face="Calibri, sans-serif" size="2"> return -EINVAL;</font></div>
<div><font face="Calibri, sans-serif" size="2"> }</font></div>
<div><font face="Calibri, sans-serif" size="2"> </font></div>
<div><font face="Calibri, sans-serif" size="2">+static int get_country_handler(struct nl_msg *msg, void *arg)</font></div>
<div><font face="Calibri, sans-serif" size="2">+{</font></div>
<div><font face="Calibri, sans-serif" size="2">+ struct nlattr *tb[NL80211_ATTR_MAX + 1];</font></div>
<div><font face="Calibri, sans-serif" size="2">+ struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));</font></div>
<div><font face="Calibri, sans-serif" size="2">+ char *cc;</font></div>
<div><font face="Calibri, sans-serif" size="2">+</font></div>
<div><font face="Calibri, sans-serif" size="2">+ nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),</font></div>
<div><font face="Calibri, sans-serif" size="2">+ genlmsg_attrlen(gnlh, 0), NULL);</font></div>
<div><font face="Calibri, sans-serif" size="2">+</font></div>
<div><font face="Calibri, sans-serif" size="2">+ if (!tb[NL80211_ATTR_REG_ALPHA2]) {</font></div>
<div><font face="Calibri, sans-serif" size="2">+ printf("No alpha2\n");</font></div>
<div><font face="Calibri, sans-serif" size="2">+ return NL_SKIP;</font></div>
<div><font face="Calibri, sans-serif" size="2">+ }</font></div>
<div><font face="Calibri, sans-serif" size="2">+</font></div>
<div><font face="Calibri, sans-serif" size="2">+ cc = nla_data(tb[NL80211_ATTR_REG_ALPHA2]);</font></div>
<div><font face="Calibri, sans-serif" size="2">+ os_memcpy(arg, cc, 2);</font></div>
<div><font face="Calibri, sans-serif" size="2">+</font></div>
<div><font face="Calibri, sans-serif" size="2">+ return NL_OK;</font></div>
<div><font face="Calibri, sans-serif" size="2">+}</font></div>
<div><font face="Calibri, sans-serif" size="2">+</font></div>
<div><font face="Calibri, sans-serif" size="2">+static int wpa_driver_nl80211_get_country(void *priv, char *alpha2)</font></div>
<div><font face="Calibri, sans-serif" size="2">+{</font></div>
<div><font face="Calibri, sans-serif" size="2">+ struct i802_bss *bss = priv;</font></div>
<div><font face="Calibri, sans-serif" size="2">+ struct wpa_driver_nl80211_data *drv = bss->drv;</font></div>
<div><font face="Calibri, sans-serif" size="2">+ struct nl_msg *msg;</font></div>
<div><font face="Calibri, sans-serif" size="2">+</font></div>
<div><font face="Calibri, sans-serif" size="2">+ msg = nlmsg_alloc();</font></div>
<div><font face="Calibri, sans-serif" size="2">+ if (!msg)</font></div>
<div><font face="Calibri, sans-serif" size="2">+ return -ENOMEM;</font></div>
<div><font face="Calibri, sans-serif" size="2">+</font></div>
<div><font face="Calibri, sans-serif" size="2">+ genlmsg_put(msg, 0, 0, genl_family_get_id(drv->nl80211), 0,</font></div>
<div><font face="Calibri, sans-serif" size="2">+ 0, NL80211_CMD_GET_REG, 0);</font></div>
<div><font face="Calibri, sans-serif" size="2">+</font></div>
<div><font face="Calibri, sans-serif" size="2">+ NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, drv->ifindex);</font></div>
<div><font face="Calibri, sans-serif" size="2">+</font></div>
<div><font face="Calibri, sans-serif" size="2">+ return send_and_recv_msgs(drv, msg, get_country_handler, alpha2);</font></div>
<div><font face="Calibri, sans-serif" size="2">+</font></div>
<div><font face="Calibri, sans-serif" size="2">+nla_put_failure:</font></div>
<div><font face="Calibri, sans-serif" size="2">+ nlmsg_free(msg);</font></div>
<div><font face="Calibri, sans-serif" size="2">+ return -ENOBUFS;</font></div>
<div><font face="Calibri, sans-serif" size="2">+}</font></div>
<div><font face="Calibri, sans-serif" size="2"> </font></div>
<div><font face="Calibri, sans-serif" size="2"> struct wiphy_info_data {</font></div>
<div><font face="Calibri, sans-serif" size="2"> int max_scan_ssids;</font></div>
<div><font face="Calibri, sans-serif" size="2">@@ -6806,6 +6847,7 @@ const struct wpa_driver_ops wpa_driver_nl80211_ops = {</font></div>
<div><font face="Calibri, sans-serif" size="2"> .set_operstate = wpa_driver_nl80211_set_operstate,</font></div>
<div><font face="Calibri, sans-serif" size="2"> .set_supp_port = wpa_driver_nl80211_set_supp_port,</font></div>
<div><font face="Calibri, sans-serif" size="2"> .set_country = wpa_driver_nl80211_set_country,</font></div>
<div><font face="Calibri, sans-serif" size="2">+ .get_country = wpa_driver_nl80211_get_country,</font></div>
<div><font face="Calibri, sans-serif" size="2"> .set_beacon = wpa_driver_nl80211_set_beacon,</font></div>
<div><font face="Calibri, sans-serif" size="2"> .if_add = wpa_driver_nl80211_if_add,</font></div>
<div><font face="Calibri, sans-serif" size="2"> .if_remove = wpa_driver_nl80211_if_remove,</font></div>
<div><font face="Calibri, sans-serif" size="2">diff --git a/wpa_supplicant/driver_i.h b/wpa_supplicant/driver_i.h</font></div>
<div><font face="Calibri, sans-serif" size="2">index 8637754..5947814 100644</font></div>
<div><font face="Calibri, sans-serif" size="2">--- a/wpa_supplicant/driver_i.h</font></div>
<div><font face="Calibri, sans-serif" size="2">+++ b/wpa_supplicant/driver_i.h</font></div>
<div><font face="Calibri, sans-serif" size="2">@@ -273,6 +273,15 @@ static inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s,</font></div>
<div><font face="Calibri, sans-serif" size="2"> return 0;</font></div>
<div><font face="Calibri, sans-serif" size="2"> }</font></div>
<div><font face="Calibri, sans-serif" size="2"> </font></div>
<div><font face="Calibri, sans-serif" size="2">+static inline int wpa_drv_get_country(struct wpa_supplicant *wpa_s,</font></div>
<div><font face="Calibri, sans-serif" size="2">+ char *alpha2)</font></div>
<div><font face="Calibri, sans-serif" size="2">+{</font></div>
<div><font face="Calibri, sans-serif" size="2">+ if (wpa_s->driver->get_country)</font></div>
<div><font face="Calibri, sans-serif" size="2">+ return wpa_s->driver->get_country(wpa_s->drv_priv, alpha2);</font></div>
<div><font face="Calibri, sans-serif" size="2">+</font></div>
<div><font face="Calibri, sans-serif" size="2">+ return 0;</font></div>
<div><font face="Calibri, sans-serif" size="2">+}</font></div>
<div><font face="Calibri, sans-serif" size="2">+</font></div>
<div><font face="Calibri, sans-serif" size="2"> static inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s,</font></div>
<div><font face="Calibri, sans-serif" size="2"> const u8 *data, size_t data_len)</font></div>
<div><font face="Calibri, sans-serif" size="2"> {</font></div>
<div><font face="Calibri, sans-serif" size="2">-- </font></div>
<div><font face="Calibri, sans-serif" size="2">1.7.0.4</font></div>
<div><font face="Calibri, sans-serif" size="2"> </font></div>
<div><font face="Calibri, sans-serif" size="2"> </font></div>
<div><font face="Calibri, sans-serif" size="2"> </font></div>
<div><font face="Calibri, sans-serif" size="2"> </font></div>
</font>
</body>
</html>