1

我触发与下面的代码如何知道什么时候扫描完成

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

发送一个NL80211_CMD_TRIGGER_SCAN开始扫描关闭。 (一个接一个会失败) 发送后,当您收到NL80211_CMD_NEW_SCAN_RESULTS时,请听完扫描完成。 NL80211_CMD_GET_SCAN命令询问结果。 你会得到一个消息找到每个站,所以准备好处理多个消息。

  • NL80211_CMD_TRIGGER_SCAN扫描过
  • 听NL80211_CMD_NEW_SCAN_RESULTS
  • NL80211_CMD_GET_SCAN命令,要求结果
  • 应该得到一个消息回来,每站发现
相关问题