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 2026/01/14 01:23:02 UTC
(nuttx) 02/03: wifi: Support the wifi operations based on the bss file.
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 3843f7b4fe6906914a4b1546f8c35c481908ed76
Author: liqinhui <li...@xiaomi.com>
AuthorDate: Wed Apr 2 16:41:01 2025 +0800
wifi: Support the wifi operations based on the bss file.
Add support for BSS file-based WiFi simulation.
Signed-off-by: liqinhui <li...@xiaomi.com>
---
arch/sim/Kconfig | 24 +++++++++++++++++++++++-
arch/sim/src/Makefile | 2 +-
arch/sim/src/sim/CMakeLists.txt | 2 +-
arch/sim/src/sim/sim_netdriver.c | 18 +++++++++++++++++-
drivers/net/wifi_sim.c | 22 ++++++++++++++++++++++
include/nuttx/net/wifi_sim.h | 1 +
6 files changed, 65 insertions(+), 4 deletions(-)
diff --git a/arch/sim/Kconfig b/arch/sim/Kconfig
index 944a12c6c7e..c545404454a 100644
--- a/arch/sim/Kconfig
+++ b/arch/sim/Kconfig
@@ -284,16 +284,38 @@ config SIM_NETDEV_NUMBER
Note that only one network device will be brought up by netinit automatically,
others will be kept in DOWN state by default.
+if SIM_NETDEV && DRIVERS_IEEE80211 && NETDEV_WIRELESS_HANDLER
+
config SIM_WIFIDEV_NUMBER
int "Number of Simulated WiFi Device"
default 0
range 0 SIM_NETDEV_NUMBER
- depends on SIM_NETDEV && DRIVERS_IEEE80211 && NETDEV_WIRELESS_HANDLER
---help---
The number of simulated wifi network devices.
Note that only one network device will be brought up by netinit automatically,
others will be kept in DOWN state by default.
+
+choice
+ prompt "Select SimWiFi Platform"
+ depends on SIM_WIFIDEV_NUMBER != 0
+ default SIM_WIFIDEV_HOST
+
+config SIM_WIFIDEV_HOST
+ bool "Use the host Wi-Fi interfaces"
+ ---help---
+ Use the host Wi-Fi interfaces, which are either simulated by
+ hwsim or the real wireless network cards.
+
+config SIM_WIFIDEV_PSEUDO
+ bool "Use the Simulated Wi-Fi devices"
+ depends on DRIVERS_WIFI_SIM
+ ---help---
+ Use the the Simulated Wi-Fi devices, which are supported by the bss file.
+endchoice
+
+endif
+
endif
config SIM_NETDEV_VPNKIT_PATH
diff --git a/arch/sim/src/Makefile b/arch/sim/src/Makefile
index a84649acbd6..9c4b42e8e76 100644
--- a/arch/sim/src/Makefile
+++ b/arch/sim/src/Makefile
@@ -209,7 +209,7 @@ ifeq ($(CONFIG_FS_FAT),y)
STDLIBS += -lz
endif
-ifneq ($(CONFIG_SIM_WIFIDEV_NUMBER),0)
+ifeq ($(CONFIG_SIM_WIFIDEV_HOST),y)
CFLAGS += -DTOPDIR=\"$(TOPDIR)\"
CSRCS += sim_wifihost.c
endif
diff --git a/arch/sim/src/sim/CMakeLists.txt b/arch/sim/src/sim/CMakeLists.txt
index 875040d5ef0..a0b26bb3017 100644
--- a/arch/sim/src/sim/CMakeLists.txt
+++ b/arch/sim/src/sim/CMakeLists.txt
@@ -213,7 +213,7 @@ if(CONFIG_SIM_X11FB)
endif()
endif()
-if(NOT ${CONFIG_SIM_WIFIDEV_NUMBER} EQUAL 0)
+if(CONFIG_SIM_WIFIDEV_HOST)
add_compile_options(-DTOPDIR=$(TOPDIR))
list(APPEND SRCS sim_wifihost.c)
endif()
diff --git a/arch/sim/src/sim/sim_netdriver.c b/arch/sim/src/sim/sim_netdriver.c
index 9a893b53b64..6ad654b3014 100644
--- a/arch/sim/src/sim/sim_netdriver.c
+++ b/arch/sim/src/sim/sim_netdriver.c
@@ -70,6 +70,7 @@
#include <nuttx/net/net.h>
#include <nuttx/net/netdev_lowerhalf.h>
#include <nuttx/net/pkt.h>
+#include <nuttx/net/wifi_sim.h>
#include "sim_internal.h"
#include "sim_wifihost.h"
@@ -99,8 +100,10 @@
struct sim_netdev_s
{
-#if CONFIG_SIM_WIFIDEV_NUMBER != 0
+#if defined(CONFIG_SIM_WIFIDEV_HOST)
struct sim_wifihost_lowerhalf_s dev;
+#elif defined(CONFIG_SIM_WIFIDEV_PSEUDO)
+ struct wifi_sim_lowerhalf_s dev;
#else
struct netdev_lowerhalf_s dev;
#endif
@@ -214,7 +217,11 @@ static int netdriver_ifup(struct netdev_lowerhalf_s *dev)
#if CONFIG_SIM_WIFIDEV_NUMBER != 0
if (DEVIDX(dev) < CONFIG_SIM_WIFIDEV_NUMBER)
{
+# if defined(CONFIG_SIM_WIFIDEV_HOST)
if (sim_wifihost_connected((struct sim_wifihost_lowerhalf_s *)dev))
+# elif defined(CONFIG_SIM_WIFIDEV_PSEUDO)
+ if (wifi_sim_connected((struct wifi_sim_lowerhalf_s *)dev))
+# endif
{
netdev_lower_carrier_on(dev);
}
@@ -303,8 +310,17 @@ int sim_netdriver_init(void)
#if CONFIG_SIM_WIFIDEV_NUMBER != 0
if (devidx < CONFIG_SIM_WIFIDEV_NUMBER)
{
+ int ret =
+# if defined(CONFIG_SIM_WIFIDEV_HOST)
sim_wifihost_init((struct sim_wifihost_lowerhalf_s *)dev,
devidx);
+# elif defined(CONFIG_SIM_WIFIDEV_PSEUDO)
+ wifi_sim_init((struct wifi_sim_lowerhalf_s *)dev);
+# endif
+ if (ret < 0)
+ {
+ return ret;
+ }
}
#endif
diff --git a/drivers/net/wifi_sim.c b/drivers/net/wifi_sim.c
index 12ae4de51e1..70ef054593b 100644
--- a/drivers/net/wifi_sim.c
+++ b/drivers/net/wifi_sim.c
@@ -1977,6 +1977,8 @@ int wifi_sim_init(FAR struct wifi_sim_lowerhalf_s *netdev)
priv->lower = &netdev->lower;
netdev->wifi = priv;
+ priv->mode = IW_MODE_AUTO;
+
return OK;
}
@@ -1996,3 +1998,23 @@ void wifi_sim_remove(FAR struct wifi_sim_lowerhalf_s *netdev)
kmm_free(netdev->wifi);
}
+/****************************************************************************
+ * Name: wifi_sim_connected
+ ****************************************************************************/
+
+bool wifi_sim_connected(FAR struct wifi_sim_lowerhalf_s *dev)
+{
+ FAR struct wifi_sim_s *wifidev = (FAR struct wifi_sim_s *)dev->wifi;
+
+ if (wifidev->mode == IW_MODE_MASTER)
+ {
+ return true;
+ }
+ else if (wifidev->mode == IW_MODE_INFRA)
+ {
+ return wifidev->state == WLAN_STA_STATE_CONNECTED;
+ }
+
+ return false;
+}
+
diff --git a/include/nuttx/net/wifi_sim.h b/include/nuttx/net/wifi_sim.h
index 1b3d473a6e6..8fb707bbe28 100644
--- a/include/nuttx/net/wifi_sim.h
+++ b/include/nuttx/net/wifi_sim.h
@@ -64,6 +64,7 @@ struct wifi_sim_lowerhalf_s
int wifi_sim_init(FAR struct wifi_sim_lowerhalf_s *netdev);
void wifi_sim_remove(FAR struct wifi_sim_lowerhalf_s *netdev);
+bool wifi_sim_connected(FAR struct wifi_sim_lowerhalf_s *dev);
#undef EXTERN
#ifdef __cplusplus