examples: improve NetworkManager dispatcher script
When no default route is configured, check each source if it has a route. If the system has multiple network interfaces, this prevents setting local NTP servers to offline when they can still be reached over one of the interfaces.
This commit is contained in:
parent
2b6ea41062
commit
ae82bbbace
1 changed files with 26 additions and 8 deletions
|
@ -1,17 +1,35 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# This is a NetworkManager dispatcher script for chronyd to set its NTP sources
|
# This is a NetworkManager dispatcher script for chronyd to set its NTP sources
|
||||||
# online/offline when a default route is configured/removed on the system.
|
# online or offline when a network interface is configured or removed
|
||||||
|
|
||||||
export LC_ALL=C
|
export LC_ALL=C
|
||||||
|
|
||||||
if [ "$2" = "up" ]; then
|
# Check if there is a default route
|
||||||
/sbin/ip route list dev "$1" | grep -q '^default' &&
|
|
||||||
/usr/bin/chronyc online > /dev/null 2>&1
|
if /sbin/ip route list 2> /dev/null | grep -q '^default'; then
|
||||||
|
chronyc online > /dev/null 2>&1
|
||||||
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$2" = "down" ]; then
|
sources=$(chronyc -c -n sources 2> /dev/null)
|
||||||
/sbin/ip route list | grep -q '^default' ||
|
|
||||||
/usr/bin/chronyc offline > /dev/null 2>&1
|
[ $? -ne 0 ] && exit 0
|
||||||
fi
|
|
||||||
|
# Check each configured source if it has a route
|
||||||
|
|
||||||
|
echo "$sources" | while IFS=, read mode state address rest; do
|
||||||
|
[ "$mode" != '^' ] && [ "$mode" != '=' ] && continue
|
||||||
|
|
||||||
|
/sbin/ip route get "$address" > /dev/null 2>&1 && command="online" || command="offline"
|
||||||
|
|
||||||
|
# Set priority of sources so that the selected source is set as
|
||||||
|
# last if offline to avoid unnecessary reselection
|
||||||
|
[ "$state" != '*' ] && priority=1 || priority=2
|
||||||
|
|
||||||
|
echo "$priority $command $address"
|
||||||
|
|
||||||
|
done | sort | while read priority command address; do
|
||||||
|
echo "$command $address"
|
||||||
|
done | chronyc > /dev/null 2>&1
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|
Loading…
Reference in a new issue