mesh: Make NL80211_MESHCONF_RSSI_THRESHOLD configurable
In some practical cases, it is useful to suppress joining to node in the distance. The new field mesh_rssi_threshold could be used as RSSI threshold for joining. Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
This commit is contained in:
parent
481fecefec
commit
31a856a127
7 changed files with 24 additions and 2 deletions
|
@ -1388,6 +1388,7 @@ struct wpa_driver_mesh_bss_params {
|
||||||
#define WPA_DRIVER_MESH_CONF_FLAG_PEER_LINK_TIMEOUT 0x00000002
|
#define WPA_DRIVER_MESH_CONF_FLAG_PEER_LINK_TIMEOUT 0x00000002
|
||||||
#define WPA_DRIVER_MESH_CONF_FLAG_MAX_PEER_LINKS 0x00000004
|
#define WPA_DRIVER_MESH_CONF_FLAG_MAX_PEER_LINKS 0x00000004
|
||||||
#define WPA_DRIVER_MESH_CONF_FLAG_HT_OP_MODE 0x00000008
|
#define WPA_DRIVER_MESH_CONF_FLAG_HT_OP_MODE 0x00000008
|
||||||
|
#define WPA_DRIVER_MESH_CONF_FLAG_RSSI_THRESHOLD 0x00000010
|
||||||
/*
|
/*
|
||||||
* TODO: Other mesh configuration parameters would go here.
|
* TODO: Other mesh configuration parameters would go here.
|
||||||
* See NL80211_MESHCONF_* for all the mesh config parameters.
|
* See NL80211_MESHCONF_* for all the mesh config parameters.
|
||||||
|
@ -1396,6 +1397,7 @@ struct wpa_driver_mesh_bss_params {
|
||||||
int auto_plinks;
|
int auto_plinks;
|
||||||
int peer_link_timeout;
|
int peer_link_timeout;
|
||||||
int max_peer_links;
|
int max_peer_links;
|
||||||
|
int rssi_threshold;
|
||||||
u16 ht_opmode;
|
u16 ht_opmode;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -8870,7 +8870,10 @@ static int nl80211_put_mesh_config(struct nl_msg *msg,
|
||||||
params->auto_plinks)) ||
|
params->auto_plinks)) ||
|
||||||
((params->flags & WPA_DRIVER_MESH_CONF_FLAG_MAX_PEER_LINKS) &&
|
((params->flags & WPA_DRIVER_MESH_CONF_FLAG_MAX_PEER_LINKS) &&
|
||||||
nla_put_u16(msg, NL80211_MESHCONF_MAX_PEER_LINKS,
|
nla_put_u16(msg, NL80211_MESHCONF_MAX_PEER_LINKS,
|
||||||
params->max_peer_links)))
|
params->max_peer_links)) ||
|
||||||
|
((params->flags & WPA_DRIVER_MESH_CONF_FLAG_RSSI_THRESHOLD) &&
|
||||||
|
nla_put_u32(msg, NL80211_MESHCONF_RSSI_THRESHOLD,
|
||||||
|
params->rssi_threshold)))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -2107,6 +2107,7 @@ static const struct parse_data ssid_fields[] = {
|
||||||
#ifdef CONFIG_MESH
|
#ifdef CONFIG_MESH
|
||||||
{ INT_RANGE(mode, 0, 5) },
|
{ INT_RANGE(mode, 0, 5) },
|
||||||
{ INT_RANGE(no_auto_peer, 0, 1) },
|
{ INT_RANGE(no_auto_peer, 0, 1) },
|
||||||
|
{ INT_RANGE(mesh_rssi_threshold, -255, 1) },
|
||||||
#else /* CONFIG_MESH */
|
#else /* CONFIG_MESH */
|
||||||
{ INT_RANGE(mode, 0, 4) },
|
{ INT_RANGE(mode, 0, 4) },
|
||||||
#endif /* CONFIG_MESH */
|
#endif /* CONFIG_MESH */
|
||||||
|
@ -2639,6 +2640,7 @@ void wpa_config_set_network_defaults(struct wpa_ssid *ssid)
|
||||||
ssid->dot11MeshRetryTimeout = DEFAULT_MESH_RETRY_TIMEOUT;
|
ssid->dot11MeshRetryTimeout = DEFAULT_MESH_RETRY_TIMEOUT;
|
||||||
ssid->dot11MeshConfirmTimeout = DEFAULT_MESH_CONFIRM_TIMEOUT;
|
ssid->dot11MeshConfirmTimeout = DEFAULT_MESH_CONFIRM_TIMEOUT;
|
||||||
ssid->dot11MeshHoldingTimeout = DEFAULT_MESH_HOLDING_TIMEOUT;
|
ssid->dot11MeshHoldingTimeout = DEFAULT_MESH_HOLDING_TIMEOUT;
|
||||||
|
ssid->mesh_rssi_threshold = DEFAULT_MESH_RSSI_THRESHOLD;
|
||||||
#endif /* CONFIG_MESH */
|
#endif /* CONFIG_MESH */
|
||||||
#ifdef CONFIG_HT_OVERRIDES
|
#ifdef CONFIG_HT_OVERRIDES
|
||||||
ssid->disable_ht = DEFAULT_DISABLE_HT;
|
ssid->disable_ht = DEFAULT_DISABLE_HT;
|
||||||
|
|
|
@ -783,6 +783,7 @@ static void wpa_config_write_network(FILE *f, struct wpa_ssid *ssid)
|
||||||
#endif /* IEEE8021X_EAPOL */
|
#endif /* IEEE8021X_EAPOL */
|
||||||
INT(mode);
|
INT(mode);
|
||||||
INT(no_auto_peer);
|
INT(no_auto_peer);
|
||||||
|
INT_DEF(mesh_rssi_threshold, DEFAULT_MESH_RSSI_THRESHOLD);
|
||||||
INT(frequency);
|
INT(frequency);
|
||||||
INT(fixed_freq);
|
INT(fixed_freq);
|
||||||
#ifdef CONFIG_ACS
|
#ifdef CONFIG_ACS
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#define DEFAULT_MESH_RETRY_TIMEOUT 40
|
#define DEFAULT_MESH_RETRY_TIMEOUT 40
|
||||||
#define DEFAULT_MESH_CONFIRM_TIMEOUT 40
|
#define DEFAULT_MESH_CONFIRM_TIMEOUT 40
|
||||||
#define DEFAULT_MESH_HOLDING_TIMEOUT 40
|
#define DEFAULT_MESH_HOLDING_TIMEOUT 40
|
||||||
|
#define DEFAULT_MESH_RSSI_THRESHOLD 1 /* no change */
|
||||||
#define DEFAULT_DISABLE_HT 0
|
#define DEFAULT_DISABLE_HT 0
|
||||||
#define DEFAULT_DISABLE_HT40 0
|
#define DEFAULT_DISABLE_HT40 0
|
||||||
#define DEFAULT_DISABLE_SGI 0
|
#define DEFAULT_DISABLE_SGI 0
|
||||||
|
@ -807,6 +808,15 @@ struct wpa_ssid {
|
||||||
*/
|
*/
|
||||||
int no_auto_peer;
|
int no_auto_peer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* mesh_rssi_threshold - Set mesh parameter mesh_rssi_threshold (dBm)
|
||||||
|
*
|
||||||
|
* -255..-1 = threshold value in dBm
|
||||||
|
* 0 = not using RSSI threshold
|
||||||
|
* 1 = do not change driver default
|
||||||
|
*/
|
||||||
|
int mesh_rssi_threshold;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wps_disabled - WPS disabled in AP mode
|
* wps_disabled - WPS disabled in AP mode
|
||||||
*
|
*
|
||||||
|
|
|
@ -413,6 +413,10 @@ int wpa_supplicant_join_mesh(struct wpa_supplicant *wpa_s,
|
||||||
else if (wpa_s->conf->dtim_period > 0)
|
else if (wpa_s->conf->dtim_period > 0)
|
||||||
params.dtim_period = wpa_s->conf->dtim_period;
|
params.dtim_period = wpa_s->conf->dtim_period;
|
||||||
params.conf.max_peer_links = wpa_s->conf->max_peer_links;
|
params.conf.max_peer_links = wpa_s->conf->max_peer_links;
|
||||||
|
if (ssid->mesh_rssi_threshold < DEFAULT_MESH_RSSI_THRESHOLD) {
|
||||||
|
params.conf.rssi_threshold = ssid->mesh_rssi_threshold;
|
||||||
|
params.conf.flags |= WPA_DRIVER_MESH_CONF_FLAG_RSSI_THRESHOLD;
|
||||||
|
}
|
||||||
|
|
||||||
if (ssid->key_mgmt & WPA_KEY_MGMT_SAE) {
|
if (ssid->key_mgmt & WPA_KEY_MGMT_SAE) {
|
||||||
params.flags |= WPA_DRIVER_MESH_FLAG_SAE_AUTH;
|
params.flags |= WPA_DRIVER_MESH_FLAG_SAE_AUTH;
|
||||||
|
|
|
@ -1392,7 +1392,7 @@ static const char *network_fields[] = {
|
||||||
"eap_workaround", "pac_file", "fragment_size", "ocsp",
|
"eap_workaround", "pac_file", "fragment_size", "ocsp",
|
||||||
#endif /* IEEE8021X_EAPOL */
|
#endif /* IEEE8021X_EAPOL */
|
||||||
#ifdef CONFIG_MESH
|
#ifdef CONFIG_MESH
|
||||||
"mode", "no_auto_peer",
|
"mode", "no_auto_peer", "mesh_rssi_threshold",
|
||||||
#else /* CONFIG_MESH */
|
#else /* CONFIG_MESH */
|
||||||
"mode",
|
"mode",
|
||||||
#endif /* CONFIG_MESH */
|
#endif /* CONFIG_MESH */
|
||||||
|
|
Loading…
Reference in a new issue