次のコードでスキャンをトリガーします
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 でメッセージをリッスンします
while (1)
nl_recvmsgs_default(sock);
しかし、何も起こらなかったので、ここまで読むのに十分な忍耐力があれば、2 つの質問に答えてください。
1) スキャンがいつ終了したかを知るにはどうすればよいですか (この通知を購読する方法、またはそれらを読む方法など)
2)通知を受け取った後にメッセージを読むにはどうすればよいですか(以下で理解している方法)
スキャンされたデータを読み取るには、スキャンをトリガーするメッセージと同様のメッセージを送信する必要がありますが、メッセージ NL80211_CMD_GET_SCAN を送信すると、その後、データは nl_socket のペイロードに格納されます。よろしいですか?