【问题标题】:Writing an external program to interface with wpa_supplicant in C++在 C++ 中编写一个与 wpa_supplicant 交互的外部程序
【发布时间】:2014-04-23 16:21:59
【问题描述】:

据我了解,可以简单地将 wpa_ctrl.c 链接到外部程序,然后您就可以使用它的功能来控制和接收来自 wpa_supplicant 的信息。

有人可以提供一个例子,最好是 C++,你会怎么做:

  1. 将外部程序链接到 wpa_ctrl.c 文件。
  2. 执行“扫描”然后打印“scan_results”的代码是什么样的。

我是在嵌入式 linux 平台上编码的新手,在任何地方都没有这样的例子。非常感谢!

【问题讨论】:

    标签: c++ linux arm linux-device-driver android-wifi


    【解决方案1】:

    程序wpa_cli 正是您想要的示例。 wpa_supplicant 项目支持V=1 选项以查看创建此可执行文件所需的内容。这是我的 ARM 构建的结果,

    gcc -c -o wpa_cli.o -MMD -O2 -Wall -g -I src -I src/utils \
      -Iusr_ARM/include/libnl3 \
      -DCONFIG_BACKEND_FILE -DCONFIG_IEEE80211W  -DCONFIG_DRIVER_WEXT \
      -DCONFIG_WIRELESS_EXTENSION  -DCONFIG_DRIVER_NL80211 -DCONFIG_LIBNL20 \
      -DEAP_PSK -DIEEE8021X_EAPOL -DCONFIG_SHA256 -DCONFIG_CTRL_IFACE \
      -DCONFIG_CTRL_IFACE_UNIX  -DCONFIG_SME \
       wpa_cli.c
    
    gcc  -o wpa_cli wpa_cli.o ../src/common/wpa_ctrl.o ../src/utils/wpa_debug.o \
       ../src/utils/common.o ../src/utils/os_unix.o ../src/utils/eloop.o \
       ../src/utils/edit_simple.o -lrt
    

    替换您的路径以获取目标 ARM 设备上使用的 wpa_supplicant 版本的 headers(在第一个命令中)。链接第二个命令中列出的所有 object 文件,并链接 real-time 库(使用-lrt)。您还可以查看您的 wpa_supplicant 版本的 wpa_cli.c,以获取有关如何向请求者进程发送命令的示例。

    对象列表包括wpa_ctrl.o(如您所料)和许多其他的。其中一些可能不需要,具体取决于您使用的功能,但我会从完整列表开始,然后在您有一个正常运行的示例后对其进行修剪。

    许可证是此来源的慷慨 BSD。

    这里是wpa_cli_cmd_scan(),它发送扫描请求,

    static int wpa_cli_cmd_scan(struct wpa_ctrl *ctrl, int argc, char *argv[])
    {
        return wpa_cli_cmd(ctrl, "SCAN", 0, argc, argv);
    }
    

    您可能还想要scan_results;它与wpa_cli_cmd_scan_results() 在同一个文件中。

    API 也是well documented under wpa_supplicant control interface,您可以在其中扩展您的工作示例。确保您获得的源代码与您系统上使用的 wpa_supplicant 版本相匹配。以上命令适用于 eglibc Linux 系统;看起来仿生(Android库)默认提供-lrt。如果您可以运行命令,rm wpa_cli.o; rm wpa_cli; make V=1 在您的设备构建的 wpa_supplicant 目录中,您将看到所需的确切命令。

    您可能不需要 edit_simple.o 文件。但是,当扫描请求完成时,可能需要 eloop 从驱动程序获取未经请求的事件;至少如果您想使用许多不同的 Wifi 芯片。步骤是,

    1. 发送SCAN
    2. 等待
    3. 发送SCAN_RESULTS

    【讨论】:

      猜你喜欢
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多