summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2022-04-02 14:39:09 +0200
committerChristian Poessinger <christian@poessinger.com>2022-04-03 09:19:30 +0200
commit8d310eb3f83bafc03ff35a99bd2157fe8d23ac5e (patch)
tree5525300f523b998a3b0f56c9d1e82adc1a3cbb77 /src
parent7091d0b54f21caf85ea86d2542d9bec4b5fd1afb (diff)
downloadvyos-1x-8d310eb3f83bafc03ff35a99bd2157fe8d23ac5e.tar.gz
vyos-1x-8d310eb3f83bafc03ff35a99bd2157fe8d23ac5e.zip
wwan: T4324: properly start/stop ModemManager and cron helper on interface add/removal
(cherry picked from commit c58a03ad76b2a0680a33fcfec3ab7a3545374abb)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/conf_mode/interfaces-wwan.py22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/conf_mode/interfaces-wwan.py b/src/conf_mode/interfaces-wwan.py
index a4b033374..57acb866c 100755
--- a/src/conf_mode/interfaces-wwan.py
+++ b/src/conf_mode/interfaces-wwan.py
@@ -36,7 +36,7 @@ from vyos import airbag
airbag.enable()
service_name = 'ModemManager.service'
-cron_script = '/etc/cron.d/wwan'
+cron_script = '/etc/cron.d/vyos-wwan'
def get_config(config=None):
"""
@@ -57,8 +57,8 @@ def get_config(config=None):
get_first_key=True,
no_tag_node_value_mangle=True)
- # This if-clause is just to be sure - it will always evaluate to true
ifname = wwan['ifname']
+ # This if-clause is just to be sure - it will always evaluate to true
if ifname in wwan['other_interfaces']:
del wwan['other_interfaces'][ifname]
if len(wwan['other_interfaces']) == 0:
@@ -82,13 +82,25 @@ def verify(wwan):
def generate(wwan):
if 'deleted' in wwan:
+ # We are the last WWAN interface - there are no other ones remaining
+ # thus the cronjob needs to go away, too
+ if 'other_interfaces' not in wwan:
+ if os.path.exists(cron_script):
+ os.unlink(cron_script)
return None
+ # Install cron triggered helper script to re-dial WWAN interfaces on
+ # disconnect - e.g. happens during RF signal loss. The script watches every
+ # WWAN interface - so there is only one instance.
if not os.path.exists(cron_script):
write_file(cron_script, '*/5 * * * * root /usr/libexec/vyos/vyos-check-wwan.py')
+
return None
def apply(wwan):
+ # ModemManager is required to dial WWAN connections - one instance is
+ # required to serve all modems. Activate ModemManager on first invocation
+ # of any WWAN interface.
if not is_systemd_service_active(service_name):
cmd(f'systemctl start {service_name}')
@@ -111,7 +123,8 @@ def apply(wwan):
if 'deleted' in wwan or 'disable' in wwan:
w.remove()
- # There are no other WWAN interfaces - stop the daemon
+ # We are the last WWAN interface - there are no other WWAN interfaces
+ # remaining, thus we can stop ModemManager and free resources.
if 'other_interfaces' not in wwan:
cmd(f'systemctl stop {service_name}')
# Clean CRON helper script which is used for to re-connect when
@@ -139,9 +152,6 @@ def apply(wwan):
call(command, stdout=DEVNULL)
w.update(wwan)
- if 'other_interfaces' not in wwan and 'deleted' in wwan:
- cmd(f'systemctl start {service_name}')
-
return None
if __name__ == '__main__':