diff options
| author | Viacheslav Hletenko <v.gletenko@vyos.io> | 2024-04-26 14:50:22 +0000 | 
|---|---|---|
| committer | Viacheslav Hletenko <v.gletenko@vyos.io> | 2024-04-30 05:48:58 +0000 | 
| commit | 09c302d7e57a0fdb6c51ae8f61d5ad6371a30b67 (patch) | |
| tree | 5c723fa4dca7c3f5e1550c57486a9c77c412a691 /src | |
| parent | aa15f74818ca2cb35696315cc5cb0c57335f6911 (diff) | |
| download | vyos-1x-09c302d7e57a0fdb6c51ae8f61d5ad6371a30b67.tar.gz vyos-1x-09c302d7e57a0fdb6c51ae8f61d5ad6371a30b67.zip | |
T6267: Check interface wireless module before apply config
Check if the wireless device/modem exists in the system and the
module `ieee802111` was loaded
In cases where we do not have wireless devices, it prevents the
unexpected traceback
```
set interfaces wireless wlan0 address 192.0.2.5/32
commit
Traceback (most recent call last):
  File "/usr/libexec/vyos/conf_mode/interfaces_wireless.py", line 269, in <modu>
    c = get_config()
        ^^^^^^^^^^^^
  File "/usr/libexec/vyos/conf_mode/interfaces_wireless.py", line 104, in get_cg
    tmp = find_other_stations(conf, base, wifi['ifname'])
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/libexec/vyos/conf_mode/interfaces_wireless.py", line 54, in find_os
    for phy in os.listdir('/sys/class/ieee80211'):
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/sys/class/ieee80211'
```
Diffstat (limited to 'src')
| -rwxr-xr-x | src/conf_mode/interfaces_wireless.py | 10 | 
1 files changed, 8 insertions, 2 deletions
| diff --git a/src/conf_mode/interfaces_wireless.py b/src/conf_mode/interfaces_wireless.py index 02b4a2500..c0a17c0bc 100755 --- a/src/conf_mode/interfaces_wireless.py +++ b/src/conf_mode/interfaces_wireless.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2019-2020 VyOS maintainers and contributors +# Copyright (C) 2019-2024 VyOS maintainers and contributors  #  # This program is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License version 2 or later as @@ -31,8 +31,9 @@ from vyos.configverify import verify_vrf  from vyos.configverify import verify_bond_bridge_member  from vyos.ifconfig import WiFiIf  from vyos.template import render -from vyos.utils.process import call  from vyos.utils.dict import dict_search +from vyos.utils.kernel import check_kmod +from vyos.utils.process import call  from vyos import ConfigError  from vyos import airbag  airbag.enable() @@ -118,6 +119,10 @@ def verify(wifi):      if 'physical_device' not in wifi:          raise ConfigError('You must specify a physical-device "phy"') +    physical_device = wifi['physical_device'] +    if not os.path.exists(f'/sys/class/ieee80211/{physical_device}'): +        raise ConfigError(f'Wirelss interface PHY "{physical_device}" does not exist!') +      if 'type' not in wifi:          raise ConfigError('You must specify a WiFi mode') @@ -266,6 +271,7 @@ def apply(wifi):  if __name__ == '__main__':      try: +        check_kmod('mac80211')          c = get_config()          verify(c)          generate(c) | 
