Make NM/systemd integration more robust

This fixed the following dependency loop that could occur when the
system was booting up:

1. NetworkManager configures a network interface and fires off the clatd
   dispatcher script.
2. The dispatcher scripts tries to restart `clatd.service`.
3. However, `clatd.service` cannot be (re)started at this point because
   its dependency `network-online.target` has not yet been reached.
4. Therefore, the `systemctl restart clatd.service` command in the
   dispatcher script blocks, waiting for `network-online.target` to be
   reached.
5. But that won't happen until the dispatcher scripts finishes...

Adding `--no-block` allows the dispatcher script to finish immediately
without waiting for the restart to complete (instead, systemd will do it
in the background once `network-online.target` has been reached).

Furthermore, since `clatd.service` may end up being restarted several
times during a boot process (especially on a system with many network
interfaces handled by NetworkManager), it is also at risk of
inadvertently triggering the restart rate-limiting feature in systemd,
so disable that while we're at it.

Closes #22. Thanks to @patrakov for the report!
This commit is contained in:
Tore Anderson
2023-03-05 10:58:29 +01:00
parent 4583c592d8
commit a416278570
2 changed files with 2 additions and 1 deletions

View File

@@ -27,7 +27,7 @@
# systemd-based distros # systemd-based distros
if which systemctl &> /dev/null; then if which systemctl &> /dev/null; then
systemctl restart clatd.service systemctl --no-block restart clatd.service
fi fi
# upstart-based distros # upstart-based distros

View File

@@ -12,6 +12,7 @@
Description=464XLAT CLAT daemon Description=464XLAT CLAT daemon
Documentation=man:clatd(8) Documentation=man:clatd(8)
After=network-online.target After=network-online.target
StartLimitIntervalSec=0
[Service] [Service]
Type=simple Type=simple