I'm using a netlink socket to detect link and address events on a wifi interface. I have a socket setup as follows:
void open_netlink(int *sock_ptr)
{
int sock = socket(AF_NETLINK,SOCK_RAW,NETLINK_ROUTE);
struct sockaddr_nl addr;
memset((void *)&addr, 0, sizeof(addr));
if (sock<0)
{
return;
}
addr.nl_family = AF_NETLINK;
addr.nl_pid = (unsigned int)getpid();
addr.nl_groups = RTMGRP_LINK|RTMGRP_IPV4_IFADDR|RTMGRP_IPV6_IFADDR;
if (bind(sock,(struct sockaddr *)&addr,sizeof(addr))<0)
{
syslog(LOG_CRIT, "Could not bind to netlink socket!\n");
return;
}
*sock_ptr = sock;
}
For some reason, when I perform a scan using wpa_cli, I receive a NEWLINK event from the netlink socket:
-sh-4.4# wpa_cli
wpa_cli v2.10
Copyright (c) 2004-2022, Jouni Malinen <[email protected]> and contributors
This software may be distributed under the terms of the BSD license.
See README for more details.
Selected interface 'wlan0'
Interactive mode
> scan
OK
<3>CTRL-EVENT-SCAN-STARTED
<3>CTRL-EVENT-SCAN-RESULTS
In my daemon:
msg_handler: RTM_NEWLINK : wlan0
Does wpa_supplicant create some kind of ephemeral interface for scanning APs that would trigger a NEWLINK event in the kernel?