You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2020/09/19 11:20:55 UTC
[incubator-nuttx-apps] branch master updated: wireless/wapi: add
option to associate with bssid
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx-apps.git
The following commit(s) were added to refs/heads/master by this push:
new 3061dbf wireless/wapi: add option to associate with bssid
3061dbf is described below
commit 3061dbf2f8949a6e47e60f68b16a91e61689e7f1
Author: chao.an <an...@xiaomi.com>
AuthorDate: Wed Sep 2 10:49:52 2020 +0800
wireless/wapi: add option to associate with bssid
Change-Id: I68ef42edfc50ef5baf0f02a570d0e7f79669659f
Signed-off-by: chao.an <an...@xiaomi.com>
---
include/wireless/wapi.h | 1 +
netutils/netinit/netinit_associate.c | 1 +
wireless/wapi/src/driver_wext.c | 13 +++++++++++--
wireless/wapi/src/util.c | 10 ++++++++++
wireless/wapi/src/wapi.c | 9 +++++++++
5 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/include/wireless/wapi.h b/include/wireless/wapi.h
index 90817f4..92c017d 100644
--- a/include/wireless/wapi.h
+++ b/include/wireless/wapi.h
@@ -262,6 +262,7 @@ struct wpa_wconfig_s
uint8_t phraselen; /* Length of the passphrase */
FAR const char *ifname; /* E.g., "wlan0" */
FAR const char *ssid; /* E.g., "myApSSID" */
+ FAR const char *bssid; /* Options to associate with bssid */
FAR const char *passphrase; /* E.g., "mySSIDpassphrase" */
};
diff --git a/netutils/netinit/netinit_associate.c b/netutils/netinit/netinit_associate.c
index 1250109..2b4c330 100644
--- a/netutils/netinit/netinit_associate.c
+++ b/netutils/netinit/netinit_associate.c
@@ -76,6 +76,7 @@ int netinit_associate(FAR const char *ifname)
conf.passphrase = CONFIG_NETINIT_WAPI_PASSPHRASE;
conf.ssidlen = strlen(conf.ssid);
conf.phraselen = strlen(conf.passphrase);
+ conf.bssid = NULL;
}
if (conf.ssidlen > 0)
diff --git a/wireless/wapi/src/driver_wext.c b/wireless/wapi/src/driver_wext.c
index c4fbe14..8e5b786 100644
--- a/wireless/wapi/src/driver_wext.c
+++ b/wireless/wapi/src/driver_wext.c
@@ -292,8 +292,17 @@ int wpa_driver_wext_associate(FAR struct wpa_wconfig_s *wconfig)
}
}
- ret = wapi_set_essid(sockfd, wconfig->ifname, wconfig->ssid,
- WAPI_ESSID_ON);
+ if (wconfig->bssid)
+ {
+ ret = wapi_set_ap(sockfd, wconfig->ifname,
+ (FAR const struct ether_addr *)wconfig->bssid);
+ }
+ else
+ {
+ ret = wapi_set_essid(sockfd, wconfig->ifname, wconfig->ssid,
+ WAPI_ESSID_ON);
+ }
+
if (ret < 0)
{
nerr("ERROR: Fail set ssid: %d\n", ret);
diff --git a/wireless/wapi/src/util.c b/wireless/wapi/src/util.c
index 33008cc..48140dd 100644
--- a/wireless/wapi/src/util.c
+++ b/wireless/wapi/src/util.c
@@ -376,6 +376,14 @@ FAR void *wapi_load_config(FAR const char *ifname,
conf->ssid = (FAR const char *)obj->valuestring;
+ obj = cJSON_GetObjectItem(ifobj, "bssid");
+ if (!obj || !obj->valuestring)
+ {
+ goto errout;
+ }
+
+ conf->bssid = (FAR const char *)obj->valuestring;
+
obj = cJSON_GetObjectItem(ifobj, "psk");
if (!obj || !obj->valuestring)
{
@@ -460,6 +468,8 @@ int wapi_save_config(FAR const char *ifname,
(FAR void *)(intptr_t)conf->alg, true);
update |= wapi_json_update(ifobj, "ssid",
(FAR void *)conf->ssid, false);
+ update |= wapi_json_update(ifobj, "bssid",
+ (FAR void *)conf->bssid, false);
update |= wapi_json_update(ifobj, "psk",
(FAR void *)conf->passphrase, false);
diff --git a/wireless/wapi/src/wapi.c b/wireless/wapi/src/wapi.c
index 6b6b24e..5417a80 100644
--- a/wireless/wapi/src/wapi.c
+++ b/wireless/wapi/src/wapi.c
@@ -782,6 +782,7 @@ static int wapi_save_config_cmd(int sock, int argc, FAR char **argv)
char essid[WAPI_ESSID_MAX_SIZE + 1];
enum wapi_essid_flag_e essid_flag;
struct wpa_wconfig_s conf;
+ struct ether_addr ap;
uint8_t if_flags;
uint32_t value;
size_t psk_len;
@@ -818,6 +819,14 @@ static int wapi_save_config_cmd(int sock, int argc, FAR char **argv)
conf.ssid = essid;
conf.ssidlen = strnlen(essid, sizeof(essid));
+ ret = wapi_get_ap(sock, argv[0], &ap);
+ if (ret < 0)
+ {
+ return ret;
+ }
+
+ conf.bssid = (FAR const char *)ap.ether_addr_octet;
+
memset(psk, 0, sizeof(psk));
ret = wpa_driver_wext_get_key_ext(sock,
argv[0],