[RFC 32/34] nl80211: Support updating NAN configuration
Andrei Otcheretianski
andrei.otcheretianski at intel.com
Wed Aug 13 10:39:16 PDT 2025
From: Ilan Peer <ilan.peer at intel.com>
Add support for updating NAN cluster configuration.
Signed-off-by: Ilan Peer <ilan.peer at intel.com>
---
src/drivers/driver_nl80211.c | 69 +++++++++++++++++++++++++-----------
1 file changed, 49 insertions(+), 20 deletions(-)
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 09517629f7..f46c8f3b0a 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -15049,23 +15049,14 @@ wpa_driver_get_multi_hw_info(void *priv, unsigned int *num_multi_hws)
#ifdef CONFIG_NAN
-static int wpa_driver_nl80211_nan_start(void *priv,
- struct nan_cluster_config *params)
+static int nl80211_nan_config(struct i802_bss *bss,
+ struct wpa_driver_nl80211_data *drv,
+ struct nan_cluster_config *params,
+ enum nl80211_commands cmd)
{
- struct i802_bss *bss = priv;
- struct wpa_driver_nl80211_data *drv = bss->drv;
struct nl_msg *msg;
struct nlattr *conf;
u32 bands = 0;
- int ret;
-
- if (drv->nlmode != NL80211_IFTYPE_NAN)
- return -EOPNOTSUPP;
-
- if (drv->nan_started)
- return -EALREADY;
-
- wpa_printf(MSG_DEBUG, "nl80211: Start/Join NAN cluster");
if (params->dual_band > 1)
return -EINVAL;
@@ -15078,16 +15069,16 @@ static int wpa_driver_nl80211_nan_start(void *priv,
bands |= BIT(NL80211_BAND_5GHZ);
} else {
wpa_printf(MSG_DEBUG,
- "nl80211: Driver doesn't support NAN dual band operation");
+ "nl80211: NAN: No support for dual band");
return -EINVAL;
}
}
- msg = nl80211_cmd_msg(bss, 0, NL80211_CMD_START_NAN);
+ msg = nl80211_cmd_msg(bss, 0, cmd);
if (!msg || nla_put_u8(msg, NL80211_ATTR_NAN_MASTER_PREF,
params->master_pref) ||
(bands && nla_put_u32(msg, NL80211_ATTR_BANDS, bands))) {
- wpa_printf(MSG_ERROR, "Failed to build start NAN command");
+ wpa_printf(MSG_ERROR, "nl80211: NAN: Failed to build command");
goto fail;
}
@@ -15110,16 +15101,53 @@ static int wpa_driver_nl80211_nan_start(void *priv,
/* TODO: Set more attributes */
nla_nest_end(msg, conf);
- ret = send_and_recv_resp(drv, msg, NULL, NULL);
+ return send_and_recv_resp(drv, msg, NULL, NULL);
+fail:
+ nlmsg_free(msg);
+ return -1;
+}
+
+static int wpa_driver_nl80211_nan_start(void *priv,
+ struct nan_cluster_config *params)
+{
+ struct i802_bss *bss = priv;
+ struct wpa_driver_nl80211_data *drv = bss->drv;
+ int ret;
+
+ if (drv->nlmode != NL80211_IFTYPE_NAN)
+ return -EOPNOTSUPP;
+
+ if (drv->nan_started)
+ return -EALREADY;
+
+ wpa_printf(MSG_DEBUG, "nl80211: Start/Join NAN cluster");
+ ret = nl80211_nan_config(bss, drv, params, NL80211_CMD_START_NAN);
if (!ret)
drv->nan_started = 1;
return ret;
-fail:
- nlmsg_free(msg);
- return -1;
}
+
+static int
+wpa_driver_nl80211_nan_change_config(void *priv,
+ struct nan_cluster_config *params)
+{
+ struct i802_bss *bss = priv;
+ struct wpa_driver_nl80211_data *drv = bss->drv;
+
+ if (drv->nlmode != NL80211_IFTYPE_NAN)
+ return -EOPNOTSUPP;
+
+ if (!drv->nan_started)
+ return -EINVAL;
+
+ wpa_printf(MSG_DEBUG, "nl80211: Update NAN configuration");
+ return nl80211_nan_config(bss, drv, params,
+ NL80211_CMD_CHANGE_NAN_CONFIG);
+}
+
+
static void wpa_driver_nl80211_nan_stop(void *priv)
{
struct i802_bss *bss = priv;
@@ -15317,5 +15345,6 @@ const struct wpa_driver_ops wpa_driver_nl80211_ops = {
#ifdef CONFIG_NAN
.nan_start = wpa_driver_nl80211_nan_start,
.nan_stop = wpa_driver_nl80211_nan_stop,
+ .nan_change_config = wpa_driver_nl80211_nan_change_config,
#endif /*CONFIG_NAN */
};
--
2.49.0
More information about the Hostap
mailing list