From: Michael Tremer Date: Sun, 29 Jan 2023 22:24:53 +0000 (+0000) Subject: networkd: Register SIGTERM/SIGINT/SIGHUP X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=025f60f1f2f22db43edd4bb52b6cff48ceb718a0;p=network.git networkd: Register SIGTERM/SIGINT/SIGHUP Signed-off-by: Michael Tremer --- diff --git a/src/networkd/daemon.c b/src/networkd/daemon.c index 4d21bb66..483252dc 100644 --- a/src/networkd/daemon.c +++ b/src/networkd/daemon.c @@ -18,7 +18,9 @@ # # #############################################################################*/ +#include #include +#include #include @@ -32,20 +34,60 @@ struct nw_daemon { sd_event* loop; }; +static int nw_daemon_terminate(sd_event_source* source, const struct signalfd_siginfo* si, + void* data) { + DEBUG("Received signal to terminate...\n"); + + return sd_event_exit(sd_event_source_get_event(source), 0); +} + +static int nw_daemon_reload(sd_event_source* source, const struct signalfd_siginfo* si, + void* data) { + DEBUG("Received signal to reload...\n"); + + // TODO + + return 0; +} + static int nw_daemon_setup_loop(struct nw_daemon* daemon) { int r; // Fetch a reference to the default event loop r = sd_event_default(&daemon->loop); if (r < 0) { - ERROR("Could not setup event loop: %m\n"); + ERROR("Could not setup event loop: %s\n", strerror(-r)); return 1; } // Enable the watchdog r = sd_event_set_watchdog(daemon->loop, 1); if (r < 0) { - ERROR("Could not activate watchdog: %m\n"); + ERROR("Could not activate watchdog: %s\n", strerror(-r)); + return 1; + } + + // Listen for SIGTERM + r = sd_event_add_signal(daemon->loop, NULL, SIGTERM|SD_EVENT_SIGNAL_PROCMASK, + nw_daemon_terminate, daemon); + if (r < 0) { + ERROR("Could not register handling SIGTERM: %s\n", strerror(-r)); + return 1; + } + + // Listen for SIGINT + r = sd_event_add_signal(daemon->loop, NULL, SIGINT|SD_EVENT_SIGNAL_PROCMASK, + nw_daemon_terminate, daemon); + if (r < 0) { + ERROR("Could not register handling SIGINT: %s\n", strerror(-r)); + return 1; + } + + // Listen for SIGHUP + r = sd_event_add_signal(daemon->loop, NULL, SIGHUP|SD_EVENT_SIGNAL_PROCMASK, + nw_daemon_reload, daemon); + if (r < 0) { + ERROR("Could not register handling SIGHUP: %s\n", strerror(-r)); return 1; }