Proper configuration of 802.11k and 802.11v

No harm in enabling any of these options by themselves.

Here is a DAWN config that works for me with WPA2 - but note that this is just a test setup, and I don't really need the second AP. The test clients are two Linux laptops with Intel AX200 and AX210 cards, and Samsung Galaxy A02 phone. I know that there are lots of options that should better be removed.

And note: this has been tested on the 2.4 GHz only, as band steering inevitably adds latency spikes while in the gray area. I could not get 802.11r to work reliably - sometimes it does roam with FT, sometimes it does a full 4-way handshake.

/etc/config/wireless fragment on Linksys E8450
config wifi-device 'radio0'
	option type 'mac80211'
	option path 'platform/18000000.wmac'
	option band '2g'
	option country 'PH'
	option htmode 'HT40'
	option channel '13'
	option noscan '1'
	option local_pwr_constraint '0'
	option cell_density '1'
	option txpower '20'
	option log_level '1'

config wifi-iface 'wifinet5'
	option device 'radio0'
	option mode 'ap'
	option ssid 'Backbone'
	option encryption 'psk2+ccmp'
	option wds '1'
	option key 'PASSWORD'
	option ieee80211w '2'
	option wpa_disable_eapol_key_retries '1'
	option network 'lan'
	option ieee80211r '1'
	option mobility_domain 'af15'
	option ft_psk_generate_local '0'
	option bss_transition '1'
	option wnm_sleep_mode '1'
	option time_advertisement '2'
	option time_zone 'GMT0'
	option ieee80211k '1'
	option ft_over_ds '0'
	option reassociation_deadline '20000'
/etc/config/wireless fragment on Netgear WAX202 (used as a repeater)
config wifi-device 'radio0'
	option type 'mac80211'
	option path '1e140000.pcie/pci0000:00/0000:00:01.0/0000:02:00.0'
	option band '2g'
	option country 'PH'
	option noscan '1'
	option htmode 'HT40'
	option channel '13'
	option cell_density '1'
	option txpower '20'
	option log_level '1'

config wifi-iface 'wifinet1'
	option device 'radio0'
	option mode 'sta'
	option ssid 'Backbone'
	option bssid 'EA:9F:80:D4:9E:C5'
	option key 'PASSWORD'
	option wds '1'
	option encryption 'psk2+ccmp'
	option ieee80211w '2'
	option network 'lan'

config wifi-iface 'wifinet2'
	option device 'radio0'
	option mode 'ap'
	option ssid 'Backbone'
	option encryption 'psk2+ccmp'
	option wds '1'
	option key 'PASSWORD'
	option ieee80211r '1'
	option mobility_domain 'af15'
	option ft_psk_generate_local '1'
	option ieee80211w '2'
	option wpa_disable_eapol_key_retries '1'
	option network 'lan'
	option bss_transition '1'
	option wnm_sleep_mode '1'
	option time_advertisement '2'
	option time_zone 'GMT0'
	option ieee80211k '1'
	option ft_over_ds '0'
	option reassociation_deadline '20000'
/etc/config/dawn, identical on both devices
config local
	option loglevel '1'

config network
	option broadcast_ip '192.168.10.255'
	option broadcast_port '1025'
	option tcp_port '1026'
	option network_option '2'
	option shared_key 'PASSWORDpassword'
	option iv 'PASSWORDpassword'
	option use_symm_enc '1'
	option collision_domain '-1'
	option bandwidth '-1'

config hostapd
	option hostapd_dir '/var/run/hostapd'

config times
	option con_timeout '60'
	option update_client '10'
	option remove_client '15'
	option remove_probe '30'
	option remove_ap '460'
	option update_hostapd '10'
	option update_tcp_con '10'
	option update_chan_util '5'
	option update_beacon_reports '20'

config metric 'global'
	option min_probe_count '2'
	option bandwidth_threshold '0'
	option kicking_threshold '10'
	option min_number_to_kick '3'
	option use_station_count '0'
	option max_station_diff '1'
	option eval_probe_req '0'
	option eval_auth_req '0'
	option eval_assoc_req '0'
	option deny_auth_reason '1'
	option deny_assoc_reason '17'
	option chan_util_avg_period '3'
	option duration '150'
	option set_hostapd_nr '2'
	option rrm_mode 'apt'
	option kicking '1'

config metric '802_11g'
	option initial_score '70'
	option ht_support '0'
	option vht_support '0'
	option rssi '0'
	option low_rssi_val '-80'
	option low_rssi '-15'
	option chan_util '0'
	option max_chan_util '0'
	option rssi_weight '1'
	option no_ht_support '0'
	option no_vht_support '0'
	option rssi_val '-60'
	option chan_util_val '140'
	option max_chan_util_val '170'
	option rssi_center '-50'

config metric '802_11a'
	option initial_score '100'
	option ht_support '0'
	option vht_support '0'
	option rssi '0'
	option low_rssi_val '-80'
	option low_rssi '-15'
	option chan_util '0'
	option max_chan_util '-15'
	option no_ht_support '0'
	option no_vht_support '0'
	option rssi_val '-60'
	option chan_util_val '140'
	option max_chan_util_val '170'
	option rssi_weight '1'
	option rssi_center '-70'

The key for reliable kicking was to enable active probing.

1 Like