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/nuttx.git

commit ae2ebce42b87c25f5e89fdb9e31dbfede0ad4d2a
Author: liqinhui <[email protected]>
AuthorDate: Tue Jun 11 20:58:51 2024 +0800

    qemuwifi: Support the ioctl SIOCGIWENCODEEXT.
    
    Signed-off-by: liqinhui <[email protected]>
---
 drivers/net/wifi_sim.c | 40 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 39 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wifi_sim.c b/drivers/net/wifi_sim.c
index 188425f4f0..d0ba6c022c 100644
--- a/drivers/net/wifi_sim.c
+++ b/drivers/net/wifi_sim.c
@@ -1686,6 +1686,8 @@ static int wifidriver_set_psk(FAR struct wifi_sim_s 
*wifidev,
         return -ENOSYS;
     }
 
+  wifidev->auth_alg = ext->alg;
+
   switch (wifidev->mode)
     {
       case IW_MODE_INFRA:
@@ -1712,6 +1714,42 @@ static int wifidriver_set_psk(FAR struct wifi_sim_s 
*wifidev,
   return ret ;
 }
 
+static int wifidriver_get_psk(FAR struct wifi_sim_s *wifidev,
+                              FAR struct iwreq *pwrq)
+{
+  FAR struct iw_encode_ext *ext;
+  int ret = OK;
+  int len;
+  int size;
+
+  ext = (FAR struct iw_encode_ext *)pwrq->u.encoding.pointer;
+  len = pwrq->u.encoding.length - sizeof(*ext);
+
+  switch (wifidev->mode)
+    {
+      case IW_MODE_INFRA:
+        size = strnlen(wifidev->password, 64);
+        if (len < size)
+        {
+          return -EINVAL;
+        }
+        else
+        {
+          ext->key_len = size;
+          memcpy(ext->key, wifidev->password, ext->key_len);
+          ext->alg = wifidev->auth_alg;
+        }
+        break;
+
+      case IW_MODE_MASTER:
+      default:
+        ret = -ENOSYS;
+        break;
+    }
+
+  return ret;
+}
+
 /* iw_ops */
 
 static int wifidriver_connect(FAR struct netdev_lowerhalf_s *dev)
@@ -1774,7 +1812,7 @@ static int wifidriver_passwd(FAR struct 
netdev_lowerhalf_s *dev,
     }
   else
     {
-      return -ENOTTY;
+      return wifidriver_get_psk(LOWERDEV2WIFIDEV(dev), iwr);
     }
 }
 

Reply via email to