mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2026-02-01 14:02:24 +01:00
Add support for source and source-directory keywords in network configuration by use ifquery from ifupdown-ng. Use a fallback for busybox ifupdown in case ifquery is not available. Run the `make check` to run unit tests in openrc. Also add some unit tests for the find_ifaces and find_running_ifaces functions in networking.initd. fixes #11562
89 lines
1.7 KiB
Plaintext
89 lines
1.7 KiB
Plaintext
#!/sbin/openrc-run
|
|
|
|
# note that the spoofprotect, syncoockies and ip_forward options are set in
|
|
# /etc/sysctl.conf
|
|
|
|
: ${cfgfile:="/etc/network/interfaces"}
|
|
: ${ifquery:="ifquery"}
|
|
: ${ifstate:="/run/ifstate"}
|
|
|
|
single_iface="${RC_SVCNAME#*.}"
|
|
if [ "$single_iface" = "$RC_SVCNAME" ]; then
|
|
single_iface=
|
|
fi
|
|
|
|
depend() {
|
|
need localmount
|
|
want dev-settle
|
|
after bootmisc hwdrivers modules
|
|
provide net
|
|
keyword -jail -prefix -vserver -docker
|
|
}
|
|
|
|
# find interfaces we want to start
|
|
find_ifaces() {
|
|
if [ -n "$single_iface" ]; then
|
|
echo $single_iface
|
|
return 0
|
|
fi
|
|
|
|
if command -v "$ifquery" >/dev/null; then
|
|
$ifquery -i "$cfgfile" --list --auto
|
|
return
|
|
fi
|
|
|
|
# fallback in case ifquery does not exist
|
|
awk '$1 == "auto" {for (i = 2; i <= NF; i = i + 1) printf("%s ", $i)}' "$cfgfile"
|
|
}
|
|
|
|
# return the list of interfaces we should try stop
|
|
find_running_ifaces() {
|
|
if [ -n "$single_iface" ]; then
|
|
echo $single_iface
|
|
return 0
|
|
fi
|
|
|
|
if command -v "$ifquery" >/dev/null; then
|
|
$ifquery --state-file $ifstate -i "$cfgfile" --running
|
|
return
|
|
fi
|
|
|
|
# fallback
|
|
awk -F= '{print $2}' $ifstate
|
|
}
|
|
|
|
start() {
|
|
local iface= ret=1
|
|
ebegin "Starting networking"
|
|
eindent
|
|
for iface in $(find_ifaces); do
|
|
local r=0
|
|
ebegin "$iface"
|
|
if ! ifup -i "$cfgfile" $iface >/dev/null; then
|
|
ifdown -i "$cfgfile" $iface >/dev/null 2>&1
|
|
r=1
|
|
fi
|
|
# atleast one interface needs to be started for action
|
|
# to be success
|
|
eend $r && ret=0
|
|
done
|
|
eoutdent
|
|
return $ret
|
|
}
|
|
|
|
stop() {
|
|
local iface=
|
|
# Don't stop the network at shutdown.
|
|
yesno ${keep_network:-YES} && yesno $RC_GOINGDOWN && return 0
|
|
|
|
ebegin "Stopping networking"
|
|
eindent
|
|
for iface in $(find_running_ifaces); do
|
|
ebegin "$iface"
|
|
ifdown -i "$cfgfile" -f $iface >/dev/null
|
|
eend $?
|
|
done
|
|
eoutdent
|
|
return 0
|
|
}
|