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) Как я могу читать сообщения после NOTIF (метод, как я понимаю ниже)

Для чтения отсканированных данных мне нужно отправить сообщение, подобное тому, которое запускает сканирование, но с сообщением NL80211_CMD_GET_SCAN, и после этого данные будут сохранены в полезной нагрузке nl_socket, верно?

ответ

0

отправьте NL80211_CMD_TRIGGER_SCAN, чтобы начать сканирование. (один за другим сбой) После отправки затем прослушайте проверку, когда вы получите NL80211_CMD_NEW_SCAN_RESULTS. a Команда NL80211_CMD_GET_SCAN, чтобы запросить результаты. Вы получите одно сообщение для каждой найденной станции, поэтому будьте готовы к обработке нескольких сообщений.

  • NL80211_CMD_TRIGGER_SCAN для сканирования от
  • слушать NL80211_CMD_NEW_SCAN_RESULTS
  • NL80211_CMD_GET_SCAN команды, чтобы попросить результаты
  • должны получить одно сообщение назад для каждой станции найдено