From: Johannes Berg <johannes.berg@xxxxxxxxx> Add a new function to (blockingly) read and process a single netlink event, to be used in driver_nl80211. Signed-off-by: Johannes Berg <johannes.berg@xxxxxxxxx> --- src/drivers/netlink.c | 21 ++++++++++++++++----- src/drivers/netlink.h | 1 + 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/drivers/netlink.c b/src/drivers/netlink.c index 7780479c3e91..a7a5c9dd8d1d 100644 --- a/src/drivers/netlink.c +++ b/src/drivers/netlink.c @@ -32,20 +32,19 @@ static void netlink_receive_link(struct netlink_data *netlink, NLMSG_PAYLOAD(h, sizeof(struct ifinfomsg))); } - -static void netlink_receive(int sock, void *eloop_ctx, void *sock_ctx) +static void _netlink_process_one_event(struct netlink_data *netlink, int wait_single) { - struct netlink_data *netlink = eloop_ctx; char buf[8192]; int left; struct sockaddr_nl from; socklen_t fromlen; struct nlmsghdr *h; - int max_events = 10; + int max_events = wait_single ? 1 : 10; try_again: fromlen = sizeof(from); - left = recvfrom(sock, buf, sizeof(buf), MSG_DONTWAIT, + left = recvfrom(netlink->sock, buf, sizeof(buf), + wait_single ? 0 : MSG_DONTWAIT, (struct sockaddr *) &from, &fromlen); if (left < 0) { if (errno != EINTR && errno != EAGAIN) @@ -88,6 +87,18 @@ try_again: } +void netlink_process_one_event(struct netlink_data *netlink) +{ + _netlink_process_one_event(netlink, 1); +} + + +static void netlink_receive(int sock, void *eloop_ctx, void *sock_ctx) +{ + _netlink_process_one_event(eloop_ctx, 0); +} + + struct netlink_data * netlink_init(struct netlink_config *cfg) { struct netlink_data *netlink; diff --git a/src/drivers/netlink.h b/src/drivers/netlink.h index 3a7340e51534..1e9d62c516ad 100644 --- a/src/drivers/netlink.h +++ b/src/drivers/netlink.h @@ -21,6 +21,7 @@ struct netlink_config { }; struct netlink_data * netlink_init(struct netlink_config *cfg); +void netlink_process_one_event(struct netlink_data *netlink); void netlink_deinit(struct netlink_data *netlink); int netlink_send_oper_ifla(struct netlink_data *netlink, int ifindex, int linkmode, int operstate); -- 2.41.0 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap