diff options
author | Christian Breunig <christian@breunig.cc> | 2024-06-15 21:40:04 +0200 |
---|---|---|
committer | Christian Breunig <christian@breunig.cc> | 2024-08-23 08:18:32 +0200 |
commit | 549a16f5b1437d437ccc873ded500b8cecd03c28 (patch) | |
tree | cc3c60cf9e099d541996163e87e788c3a8376361 /src/conf_mode/interfaces_wireless.py | |
parent | de2bdd189ef321a4c0459e98ff20694df6d9eb78 (diff) | |
download | vyos-1x-549a16f5b1437d437ccc873ded500b8cecd03c28.tar.gz vyos-1x-549a16f5b1437d437ccc873ded500b8cecd03c28.zip |
wireless: T6318: move country-code to a system wide configurationmergify/bp/circinus/pr-3656
Wireless devices are subject to regulations issued by authorities. For any
given AP or router, there will most likely be no case where one wireless NIC is
located in one country and another wireless NIC in the same device is located
in another country, resulting in different regulatory domains to apply to the
same box.
Currently, wireless regulatory domains in VyOS need to be configured per-NIC:
set interfaces wireless wlan0 country-code us
This leads to several side-effects:
* When operating multiple WiFi NICs, they all can have different regulatory
domains configured which might offend legislation.
* Some NICs need additional entries to /etc/modprobe.d/cfg80211.conf to apply
regulatory domain settings, such as: "options cfg80211 ieee80211_regdom=US"
This is true for the Compex WLE600VX. This setting cannot be done
per-interface.
Migrate the first found wireless module country-code from the wireless
interface CLI to: "system wireless country-code"
(cherry picked from commit 9e22ab6b2aee48029d3455f65880e45c558cf1da)
Diffstat (limited to 'src/conf_mode/interfaces_wireless.py')
-rwxr-xr-x | src/conf_mode/interfaces_wireless.py | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/conf_mode/interfaces_wireless.py b/src/conf_mode/interfaces_wireless.py index 9488f6797..aa65adc10 100755 --- a/src/conf_mode/interfaces_wireless.py +++ b/src/conf_mode/interfaces_wireless.py @@ -48,6 +48,8 @@ hostapd_conf = '/run/hostapd/{ifname}.conf' hostapd_accept_station_conf = '/run/hostapd/{ifname}_station_accept.conf' hostapd_deny_station_conf = '/run/hostapd/{ifname}_station_deny.conf' +country_code_path = ['system', 'wireless', 'country-code'] + def find_other_stations(conf, base, ifname): """ Only one wireless interface per phy can be in station mode - @@ -82,7 +84,11 @@ def get_config(config=None): conf = Config() base = ['interfaces', 'wireless'] - ifname, wifi = get_interface_dict(conf, base) + _, wifi = get_interface_dict(conf, base) + + # retrieve global Wireless regulatory domain setting + if conf.exists(country_code_path): + wifi['country_code'] = conf.return_value(country_code_path) if 'deleted' not in wifi: # then get_interface_dict provides default keys @@ -149,7 +155,8 @@ def verify(wifi): if wifi['type'] == 'access-point': if 'country_code' not in wifi: - raise ConfigError('Wireless country-code is mandatory') + raise ConfigError(f'Wireless country-code is mandatory, use: '\ + f'"set {" ".join(country_code_path)}"!') if 'channel' not in wifi: raise ConfigError('Wireless channel must be configured!') |