<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 &lt;<a href="mailto:guy@wizery.com"><font color="#0000FF"><u>bartosz.</u></font><font color="#0000FF"><u>markowski@tieto.com</u></font></a>&gt;</div>
<div><font face="Calibri, sans-serif" size="2">---</font></div>
<div><font face="Calibri, sans-serif" size="2"> src/drivers/driver.h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; 11 &#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;</font></div>
<div><font face="Calibri, sans-serif" size="2"> src/drivers/driver_nl80211.c |&nbsp;&nbsp; 42 &#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;</font></div>
<div><font face="Calibri, sans-serif" size="2"> wpa_supplicant/driver_i.h&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 9 &#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;</font></div>
<div><font face="Calibri, sans-serif" size="2"> 3 files changed, 62 insertions(&#43;), 0 deletions(-)</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;</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">&#43;&#43;&#43; b/src/drivers/driver.h</font></div>
<div><font face="Calibri, sans-serif" size="2">@@ -1219,6 &#43;1219,17 @@ struct wpa_driver_ops {</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int (*set_country)(void *priv, const char *alpha2);</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * get_country - Get country</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @priv: Private driver interface data</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @alpha2: pointer to country code</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * Returns: 0 on success, -1 on failure</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * This function is for drivers which support some form</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * of setting a regulatory domain.</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int (*get_country)(void *priv, char *alpha2);</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * global_init - Global driver initialization</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * Returns: Pointer to private data (global), %NULL on failure</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *</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">&#43;&#43;&#43; b/src/drivers/driver_nl80211.c</font></div>
<div><font face="Calibri, sans-serif" size="2">@@ -1626,6 &#43;1626,47 @@ nla_put_failure:</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -EINVAL;</font></div>
<div><font face="Calibri, sans-serif" size="2"> }</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;static int get_country_handler(struct nl_msg *msg, void *arg)</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;{</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct nlattr *tb[NL80211_ATTR_MAX &#43; 1];</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *cc;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; genlmsg_attrlen(gnlh, 0), NULL);</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!tb[NL80211_ATTR_REG_ALPHA2]) {</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;No alpha2\n&quot;);</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return NL_SKIP;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp; }</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cc = nla_data(tb[NL80211_ATTR_REG_ALPHA2]);</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; os_memcpy(arg, cc, 2);</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return NL_OK;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;}</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;static int wpa_driver_nl80211_get_country(void *priv, char *alpha2)</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;{</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct i802_bss *bss = priv;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct wpa_driver_nl80211_data *drv = bss-&gt;drv;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct nl_msg *msg;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msg = nlmsg_alloc();</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!msg)</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -ENOMEM;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; genlmsg_put(msg, 0, 0, genl_family_get_id(drv-&gt;nl80211), 0,</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0, NL80211_CMD_GET_REG, 0);</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, drv-&gt;ifindex);</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return send_and_recv_msgs(drv, msg, get_country_handler, alpha2);</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;nla_put_failure:</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nlmsg_free(msg);</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -ENOBUFS;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;}</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;</font></div>
<div><font face="Calibri, sans-serif" size="2"> struct wiphy_info_data {</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int max_scan_ssids;</font></div>
<div><font face="Calibri, sans-serif" size="2">@@ -6806,6 &#43;6847,7 @@ const struct wpa_driver_ops wpa_driver_nl80211_ops = {</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .set_operstate = wpa_driver_nl80211_set_operstate,</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .set_supp_port = wpa_driver_nl80211_set_supp_port,</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .set_country = wpa_driver_nl80211_set_country,</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .get_country = wpa_driver_nl80211_get_country,</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .set_beacon = wpa_driver_nl80211_set_beacon,</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .if_add = wpa_driver_nl80211_if_add,</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .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">&#43;&#43;&#43; b/wpa_supplicant/driver_i.h</font></div>
<div><font face="Calibri, sans-serif" size="2">@@ -273,6 &#43;273,15 @@ static inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s,</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;</font></div>
<div><font face="Calibri, sans-serif" size="2"> }</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;static inline int wpa_drv_get_country(struct wpa_supplicant *wpa_s,</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *alpha2)</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;{</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (wpa_s-&gt;driver-&gt;get_country)</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return wpa_s-&gt;driver-&gt;get_country(wpa_s-&gt;drv_priv, alpha2);</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;}</font></div>
<div><font face="Calibri, sans-serif" size="2">&#43;</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">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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">&nbsp;</font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;</font></div>
<div><font face="Calibri, sans-serif" size="2"> </font></div>
<div><font face="Calibri, sans-serif" size="2">&nbsp;</font></div>
</font>
</body>
</html>