]> git.proxmox.com Git - mirror_frr.git/commit - tools/frr.service
tools: fix systemd dependency graph
authorQuentin Young <qlyoung@cumulusnetworks.com>
Wed, 6 Feb 2019 19:40:55 +0000 (19:40 +0000)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Wed, 6 Feb 2019 19:47:43 +0000 (19:47 +0000)
commitefbf903d61180abd5e1d53fc1a73b87f5039ff30
tree75d9bad2a072dfc030a432474f5f3e443e760992
parentab66f55556a2fb76e69991768000ee45c04b19ae
tools: fix systemd dependency graph

Currently our systemd dependencies look something like this (example
from vanilla Debian 9):

$ systemctl list-dependencies frr
frr.service
● ├─system.slice
● └─sysinit.target
  ...

$ systemctl list-dependencies --reverse frr
frr.service
● └─network-online.target
●   └─apt-daily.service

Note that sysinit.target does not depend on any network* service or
target.

In other words, unless there is a service that requires
network-online.service, even if FRR is enabled it will not be started.
Therefore network-online.target is the wrong unit to have in WantedBy=,
as it is not always started.

This patch updates our service file so that it is properly started by
the system when enabled, delayed until networking is up, and if possible
delayed until after NetworkManager, systemd-networkd or any other
networking configuration manager has finished performing its tasks -
i.e. after network-online.target.

After these changes our new dependency graph looks like this:

$ systemctl list-dependencies frr
frr.service
● ├─system.slice
● │ └─networking.service
● ├─network.target
● └─sysinit.target
  ...

$ systemctl list-dependencies --reverse frr
frr.service
● └─multi-user.target
●   └─graphical.target

This way, FRR will be started by multi-user.target (just like most
applications), but delayed until after networking has been configured.

In the same stroke, this should also fix issues on systems that do not
provide "networking.service" (such as CentOS 7).

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
Signed-off-by: David Lamparter <equinox@diac24.net>
redhat/frr.service
tools/frr.service