diff options
| author | Christian Breunig <christian@breunig.cc> | 2026-05-21 07:42:32 +0200 |
|---|---|---|
| committer | Christian Breunig <christian@breunig.cc> | 2026-05-21 08:11:55 +0200 |
| commit | 87cb7ec09799047f71b22ede4f3c5ef241930c15 (patch) | |
| tree | 80ef3aef80250a6472edcee40fd2ea7bf099e830 /src | |
| parent | d3a26fceb0369fb78875ffff87036bfc4cc18a78 (diff) | |
| download | vyos-1x-87cb7ec09799047f71b22ede4f3c5ef241930c15.tar.gz vyos-1x-87cb7ec09799047f71b22ede4f3c5ef241930c15.zip | |
wireless: mt7915e: de-nest code for firmware configuration file
Generation of the firmware configuration file can be made contitional only if
the card is present/driver is loaded. The firmware configuration file itself
must not be explicitly set to be owned as root as the default is user root and
group vyattacfg.
Diffstat (limited to 'src')
| -rwxr-xr-x | src/conf_mode/interfaces_wireless.py | 83 |
1 files changed, 40 insertions, 43 deletions
diff --git a/src/conf_mode/interfaces_wireless.py b/src/conf_mode/interfaces_wireless.py index c8a6c8dd7..68aa71474 100755 --- a/src/conf_mode/interfaces_wireless.py +++ b/src/conf_mode/interfaces_wireless.py @@ -54,6 +54,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' +mt7915e_conf = f'/etc/modprobe.d/mt7915e.conf' + country_code_path = ['system', 'wireless', 'country-code'] def find_other_stations(conf, base, ifname): @@ -335,49 +337,44 @@ def apply(wifi): # the 2.4GHz phy is configured last, which would overwrite the module # parameter definition. Only the Wi-Fi configuration for the 5/6GHz phy # must write the file! - # op_modes as configured in interfaces_wireless.xml.in - five_ghz_op_modes_vht = ['0', '1', '2', '3'] - six_ghz_op_modes_he = ['131', '132', '133', '134', '135'] - # Make sure to act only when VHT or HE modes are used - module_options = None - if 'capabilities' in wifi: - if 'he' in wifi['capabilities']: - if 'channel_set_width' in wifi['capabilities']['he']: - if wifi['capabilities']['he']['channel_set_width'] in six_ghz_op_modes_he: - # 6GHz band required (802.11ax, WiFi-6e) - module_options = 'options mt7915e enable_6ghz=1' - if 'vht' in wifi['capabilities']: - if 'channel_set_width' in wifi['capabilities']['vht']: - if wifi['capabilities']['vht']['channel_set_width'] in five_ghz_op_modes_vht: - # 5GHz band required... - module_options = 'options mt7915e enable_6ghz=0' - if module_options: - # Only if the mt7915e module is loaded (card present)... - if is_module_loaded('mt7915e'): - tmp = None - try: - tmp = read_file(f'/etc/modprobe.d/mt7915e.conf') - except FileNotFoundError: - # Module config does not exist yet. - # Fail silently as it is written later in any case. - pass - finally: - # Write the module config in any case, so that there always is a - # valid module config which is mandatory to load the mt7916 firmware. - write_file( - f'/etc/modprobe.d/mt7915e.conf', - module_options, - user='root', - group='root', - mode=0o644 - ) - # Issue a warning if module options have changed. - # A warning is necessary even if this is the first time - # this module is configured. The firmware must be reloaded. - if tmp != module_options: - Warning( - 'Change to firmware 5GHz/6GHz configuration detected. The system must be rebooted to correctly reload the mt7916 firmware. The card will not work otherwise!' - ) + # + # Only if the mt7915e module is loaded (card present)... + if is_module_loaded('mt7915e'): + # op_modes as configured in interfaces_wireless.xml.in + five_ghz_op_modes_vht = ['0', '1', '2', '3'] + six_ghz_op_modes_he = ['131', '132', '133', '134', '135'] + # Make sure to act only when VHT or HE modes are used + module_options = '' + if 'capabilities' in wifi: + mt7915e_options_string = 'options mt7915e' + if 'he' in wifi['capabilities']: + if 'channel_set_width' in wifi['capabilities']['he']: + if wifi['capabilities']['he']['channel_set_width'] in six_ghz_op_modes_he: + # 6GHz band required (802.11ax, WiFi-6e) + module_options = f'{mt7915e_options_string} enable_6ghz=1' + if 'vht' in wifi['capabilities']: + if 'channel_set_width' in wifi['capabilities']['vht']: + if wifi['capabilities']['vht']['channel_set_width'] in five_ghz_op_modes_vht: + # 5GHz band required... + module_options = f'{mt7915e_options_string} enable_6ghz=0' + + tmp = None + if os.path.isfile(mt7915e_conf): + tmp = read_file(mt7915e_conf) + + # Write the module config, so that there always is a valid module + # config which is mandatory to load the mt7916 firmware. + write_file(mt7915e_conf, module_options, mode=0o644) + # Issue warning if module options have changed. Warning is necessary + # even if this is the first time this module is configured, + # firmware must be reloaded. + if tmp != module_options: + Warning('Change to firmware 5GHz/6GHz configuration detected. '\ + 'The system must be rebooted to correctly reload the ' \ + 'mt7916 firmware. The card will not work otherwise!') + # Instead of reboot - can we unload and re-load the driver? + elif os.path.isfile(mt7915e_conf): + os.remove(mt7915e_conf) # Enable/Disable interface - interface is always placed in # administrative down state in WiFiIf class |
