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],