The number of nlctrl name resolution calls required to connect to a WPA2-PSK AP is 12. And each nlctrl name resolution call spends 55 micro sec on lower spec CPU like Intel Atom N270. This patch reduces the number of nctrl name resolution calls from 12 to 1 by caching the results of nctrl name resolution calls on int size memory and little bit speeds up the connection process. Signed-off-by: Masashi Honma <masashi.honma@xxxxxxxxx> --- src/drivers/driver_nl80211.c | 8 +++++++- src/drivers/driver_nl80211.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index 49b2f8664..c77ea91b6 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -604,7 +604,7 @@ static int nl_get_multicast_id(struct nl80211_global *global, msg = nlmsg_alloc(); if (!msg) return -ENOMEM; - if (!genlmsg_put(msg, 0, 0, genl_ctrl_resolve(global->nl, "nlctrl"), + if (!genlmsg_put(msg, 0, 0, global->nlctrl_id, 0, 0, CTRL_CMD_GETFAMILY, 0) || nla_put_string(msg, CTRL_ATTR_FAMILY_NAME, family)) { nlmsg_free(msg); @@ -1883,6 +1883,12 @@ static int wpa_driver_nl80211_init_nl_global(struct nl80211_global *global) goto err; } + global->nlctrl_id = genl_ctrl_resolve(global->nl, "nlctrl"); + if (global->nlctrl_id < 0) { + wpa_printf(MSG_ERROR, "nl80211: 'nlctrl' generic netlink not found"); + goto err; + } + global->nl_event = nl_create_handle(global->nl_cb, "event"); if (global->nl_event == NULL) goto err; diff --git a/src/drivers/driver_nl80211.h b/src/drivers/driver_nl80211.h index 9d61c1d69..80d456472 100644 --- a/src/drivers/driver_nl80211.h +++ b/src/drivers/driver_nl80211.h @@ -32,6 +32,7 @@ struct nl80211_global { struct nl_cb *nl_cb; struct nl_sock *nl; int nl80211_id; + int nlctrl_id; int ioctl_sock; /* socket for ioctl() use */ struct nl_sock *nl_event; -- 2.25.1 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap