mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-29 13:59:24 +01:00
netdev: add netdev_get_all_stations
This is a nl80211 dump version of netdev_get_station aimed at AP mode. This will dump all stations, parse into netdev_station_info structs, and call the callback for each individual station found. Once the dump is completed the destroy callback is called.
This commit is contained in:
parent
8620698b66
commit
8e03d56688
26
src/netdev.c
26
src/netdev.c
@ -4240,6 +4240,32 @@ int netdev_get_current_station(struct netdev *netdev,
|
|||||||
user_data, destroy);
|
user_data, destroy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int netdev_get_all_stations(struct netdev *netdev, netdev_get_station_cb_t cb,
|
||||||
|
void *user_data, netdev_destroy_func_t destroy)
|
||||||
|
{
|
||||||
|
struct l_genl_msg *msg;
|
||||||
|
|
||||||
|
if (netdev->get_station_cmd_id)
|
||||||
|
return -EBUSY;
|
||||||
|
|
||||||
|
msg = l_genl_msg_new_sized(NL80211_CMD_GET_STATION, 64);
|
||||||
|
l_genl_msg_append_attr(msg, NL80211_ATTR_IFINDEX, 4, &netdev->index);
|
||||||
|
|
||||||
|
netdev->get_station_cmd_id = l_genl_family_dump(nl80211, msg,
|
||||||
|
netdev_get_station_cb, netdev,
|
||||||
|
netdev_get_station_destroy);
|
||||||
|
if (!netdev->get_station_cmd_id) {
|
||||||
|
l_genl_msg_unref(msg);
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
netdev->get_station_cb = cb;
|
||||||
|
netdev->get_station_data = user_data;
|
||||||
|
netdev->get_station_destroy = destroy;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int netdev_cqm_rssi_update(struct netdev *netdev)
|
static int netdev_cqm_rssi_update(struct netdev *netdev)
|
||||||
{
|
{
|
||||||
struct l_genl_msg *msg;
|
struct l_genl_msg *msg;
|
||||||
|
@ -211,6 +211,8 @@ int netdev_get_station(struct netdev *netdev, const uint8_t *mac,
|
|||||||
int netdev_get_current_station(struct netdev *netdev,
|
int netdev_get_current_station(struct netdev *netdev,
|
||||||
netdev_get_station_cb_t cb, void *user_data,
|
netdev_get_station_cb_t cb, void *user_data,
|
||||||
netdev_destroy_func_t destroy);
|
netdev_destroy_func_t destroy);
|
||||||
|
int netdev_get_all_stations(struct netdev *netdev, netdev_get_station_cb_t cb,
|
||||||
|
void *user_data, netdev_destroy_func_t destroy);
|
||||||
|
|
||||||
void netdev_handshake_failed(struct handshake_state *hs, uint16_t reason_code);
|
void netdev_handshake_failed(struct handshake_state *hs, uint16_t reason_code);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user