| #!/bin/sh |
| # This is a NetworkManager dispatcher script for chronyd to set its NTP sources |
| # online or offline when a network interface is configured or removed |
| |
| export LC_ALL=C |
| |
| [ "$2" != "up" ] && [ "$2" != "down" ] && exit 0 |
| |
| # Check if there is a default route |
| |
| if /sbin/ip route list 2> /dev/null | grep -q '^default'; then |
| chronyc online > /dev/null 2>&1 |
| exit 0 |
| fi |
| |
| sources=$(chronyc -c -n sources 2> /dev/null) |
| |
| [ $? -ne 0 ] && exit 0 |
| |
| # 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 |