我使用以下代码触发扫描
struct nl_msg *msg = nlmsg_alloc();
struct nlmsghdr *hdr;
struct genlmsghdr cmd = { .cmd = NL80211_CMD_TRIGGER_SCAN };
struct nl_sock *sock = nl_socket_alloc();
int dev = if_nametoindex("wlan0");
nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev);
hdr = nlmsg_put(msg, NL_AUTO_PID, NL_AUTO_SEQ, NLMSG_NOOP, 0, 0);
memcpy(nlmsg_data(hdr), &cmd, sizeof(cmd));
nl_send_auto(sock, msg);
现在,我应该怎么知道扫描何时完成,我该怎么办呢?在我到目前为止搜索过的所有地方,都有"你将收到NL80211_CMD_NEW_SCANS通知"扫描"多播组",我该如何订阅它?我注册了我的回调,试过
nl_socket_add_memberships(sock, RTN_MULTICAST);
然后用
监听消息while (1)
nl_recvmsgs_default(sock);
但没有任何反应,所以:如果你有足够的耐心来阅读这一点,请帮我解决2个问题
1)我如何知道扫描何时完成(如何订阅此通知或阅读它们等)。
2)如何在收到通知后阅读消息(我在下面理解的方法)
要读取扫描数据,我需要发送类似于触发扫描的消息,但消息为NL80211_CMD_GET_SCAN,之后数据将存储在nl_socket的有效负载中,我是对的吗?
答案 0 :(得分:0)
发送NL80211_CMD_TRIGGER_SCAN以开始扫描。 (一个接一个会失败) 发送完毕后,当您收到NL80211_CMD_NEW_SCAN_RESULTS时,请先监听扫描完成情况。 请求结果的NL80211_CMD_GET_SCAN命令。 对于找到的每个站点,您将收到一条消息,因此请准备好处理多条消息。