From 258848ace2bcecf1ae6c3b7b433805b18fbd37d0 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Tue, 17 Jul 2018 18:02:46 +0200 Subject: [PATCH] Add ifdown service Add a service file and helper script to shut down all network interfaces during shutdown or reboot. Signed-off-by: David Oberhollenzer --- .gitignore | 1 + Makefile.am | 2 ++ configure.ac | 1 + scripts/Makemodule.am | 4 ++-- scripts/ifdown.sh | 26 ++++++++++++++++++++++++++ services/Makemodule.am | 2 +- services/ifdown.in | 7 +++++++ 7 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 scripts/ifdown.sh create mode 100644 services/ifdown.in diff --git a/.gitignore b/.gitignore index 44d1ad5..9bdaf3b 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,7 @@ services/procfs services/sysfs services/ifrename services/ifcfg +services/ifdown scripts/devfs.sh scripts/ifrename.sh diff --git a/Makefile.am b/Makefile.am index bdee5cb..ba51643 100644 --- a/Makefile.am +++ b/Makefile.am @@ -37,12 +37,14 @@ install-data-local: $(LN_S) $(TEMPLATEDIR)/vfs $(DESTDIR)$(SVCDIR)/vfs $(LN_S) $(TEMPLATEDIR)/shutdown $(DESTDIR)$(SVCDIR)/shutdown $(LN_S) $(TEMPLATEDIR)/reboot $(DESTDIR)$(SVCDIR)/reboot + $(LN_S) $(TEMPLATEDIR)/ifdown $(DESTDIR)$(SVCDIR)/ifdown@shutdown $(LN_S) $(TEMPLATEDIR)/sync $(DESTDIR)$(SVCDIR)/sync@shutdown $(LN_S) $(TEMPLATEDIR)/sigkill $(DESTDIR)$(SVCDIR)/sigkill@shutdown $(LN_S) $(TEMPLATEDIR)/sigterm $(DESTDIR)$(SVCDIR)/sigterm@shutdown $(LN_S) $(TEMPLATEDIR)/sync $(DESTDIR)$(SVCDIR)/sync@reboot $(LN_S) $(TEMPLATEDIR)/sigkill $(DESTDIR)$(SVCDIR)/sigkill@reboot $(LN_S) $(TEMPLATEDIR)/sigterm $(DESTDIR)$(SVCDIR)/sigterm@reboot + $(LN_S) $(TEMPLATEDIR)/ifdown $(DESTDIR)$(SVCDIR)/ifdown@reboot $(LN_S) $(TEMPLATEDIR)/ifcfg $(DESTDIR)$(SVCDIR)/ifcfg if USYSLOGD $(LN_S) $(TEMPLATEDIR)/usyslogd $(DESTDIR)$(SVCDIR)/usyslogd diff --git a/configure.ac b/configure.ac index 6bdb096..77b8abd 100644 --- a/configure.ac +++ b/configure.ac @@ -64,6 +64,7 @@ AC_CONFIG_FILES([services/devfs]) AC_CONFIG_FILES([services/procfs]) AC_CONFIG_FILES([services/ifrename]) AC_CONFIG_FILES([services/ifcfg]) +AC_CONFIG_FILES([services/ifdown]) AC_CONFIG_FILES([scripts/devfs.sh]) AC_CONFIG_FILES([scripts/ifrename.sh]) AC_CONFIG_FILES([scripts/ifcfg.sh]) diff --git a/scripts/Makemodule.am b/scripts/Makemodule.am index fa0f917..c0e7a82 100644 --- a/scripts/Makemodule.am +++ b/scripts/Makemodule.am @@ -1,4 +1,4 @@ helper_SCRIPTS += scripts/devfs.sh scripts/trymount.sh scripts/ifrename.sh -helper_SCRIPTS += scripts/ifcfg.sh +helper_SCRIPTS += scripts/ifcfg.sh scripts/ifdown.sh -EXTRA_DIST += scripts/trymount.sh +EXTRA_DIST += scripts/trymount.sh scripts/ifdown.sh diff --git a/scripts/ifdown.sh b/scripts/ifdown.sh new file mode 100644 index 0000000..2e2b30e --- /dev/null +++ b/scripts/ifdown.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# +# SPDX-License-Identifier: GPL-3.0-or-later +# +# Copyright (C) 2018 - David Oberhollenzer +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +for IFPATH in /sys/class/net/*; do + [ "$IFPATH" == "/sys/class/net/lo" ] && continue + + IF=`basename $IFPATH` + + ip link set dev "$IF" down +done diff --git a/services/Makemodule.am b/services/Makemodule.am index e9e6ac7..75ab76d 100644 --- a/services/Makemodule.am +++ b/services/Makemodule.am @@ -6,7 +6,7 @@ init_DATA += services/sigterm services/sync services/devfs init_DATA += services/sysfs services/procfs services/tmpfs init_DATA += services/vfs services/ifrename services/ifcfg init_DATA += services/dhcpcd services/dhcpcdmaster services/unbound -init_DATA += services/dnsmasq +init_DATA += services/dnsmasq services/ifdown if USYSLOGD init_DATA += services/usyslogd diff --git a/services/ifdown.in b/services/ifdown.in new file mode 100644 index 0000000..1310098 --- /dev/null +++ b/services/ifdown.in @@ -0,0 +1,7 @@ +description "stop all network interfaces" +type wait +target %0 +after sigkill sigterm +before sync + +exec "@SCRIPTDIR@/ifdown.sh" \ No newline at end of file