summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/vyos/utils/wwan.py18
1 files changed, 13 insertions, 5 deletions
diff --git a/python/vyos/utils/wwan.py b/python/vyos/utils/wwan.py
index af719571d..8ee6a5a9a 100644
--- a/python/vyos/utils/wwan.py
+++ b/python/vyos/utils/wwan.py
@@ -59,17 +59,25 @@ def _modem_owning_port(ifname: str):
from json import loads
try:
- modem_list = loads(cmdl(['mmcli', '--list-modems', '--output-json'])).get(
- 'modem-list', []
- )
- except OSError:
+ data = loads(cmdl(['mmcli', '--list-modems', '--output-json']))
+ except (OSError, ValueError):
+ # ValueError also catches json.JSONDecodeError - mmcli can return
+ # empty or malformed output while ModemManager is still starting
+ # (T6604), and that must retry under wait=True, not abort it.
+ return None
+
+ # Well-formed JSON of an unexpected shape is treated like no modems at all
+ modem_list = []
+ if isinstance(data, dict) and 'modem-list' in data:
+ modem_list = data['modem-list']
+ if not isinstance(modem_list, list):
return None
for modem_path in modem_list:
idx = modem_path.rsplit('/', 1)[-1]
try:
detail = loads(cmdl(['mmcli', '--modem', idx, '--output-json']))
- except OSError:
+ except (OSError, ValueError):
continue
ports = dict_search('modem.generic.ports', detail) or []
if any(port.split(' ')[0] == ifname for port in ports):