From f5c219983c0f60a07f1bd52b6f6071e86f35455e Mon Sep 17 00:00:00 2001 From: Robert Günzler Date: Mon, 25 Sep 2023 11:56:34 +0200 Subject: add os config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Robert Günzler --- .../src/net-online/dependencies.d/mount-sysfs | 0 os/etc/s6-rc/src/net-online/dependencies.d/net-lo | 0 os/etc/s6-rc/src/net-online/shell-up | 62 ++++++++++++++++++++++ os/etc/s6-rc/src/net-online/type | 1 + os/etc/s6-rc/src/net-online/up | 2 + 5 files changed, 65 insertions(+) create mode 100644 os/etc/s6-rc/src/net-online/dependencies.d/mount-sysfs create mode 100644 os/etc/s6-rc/src/net-online/dependencies.d/net-lo create mode 100755 os/etc/s6-rc/src/net-online/shell-up create mode 100644 os/etc/s6-rc/src/net-online/type create mode 100644 os/etc/s6-rc/src/net-online/up (limited to 'os/etc/s6-rc/src/net-online') diff --git a/os/etc/s6-rc/src/net-online/dependencies.d/mount-sysfs b/os/etc/s6-rc/src/net-online/dependencies.d/mount-sysfs new file mode 100644 index 0000000..e69de29 diff --git a/os/etc/s6-rc/src/net-online/dependencies.d/net-lo b/os/etc/s6-rc/src/net-online/dependencies.d/net-lo new file mode 100644 index 0000000..e69de29 diff --git a/os/etc/s6-rc/src/net-online/shell-up b/os/etc/s6-rc/src/net-online/shell-up new file mode 100755 index 0000000..b9fa779 --- /dev/null +++ b/os/etc/s6-rc/src/net-online/shell-up @@ -0,0 +1,62 @@ +#!/bin/sh +set -eu + +# check if any interface is plugged in and configured +# then do a ping test to see if we have connectivity + +include_ping_test=1 +ping_test_host=gentoo.org +infinite=false +timeout=10 + +get_interfaces() +{ + local ifname iftype + for ifname in /sys/class/net/*; do + [ -h "${ifname}" ] || continue + read iftype < ${ifname}/type + [ "${iftype}" = "1" ] && printf "%s " ${ifname##*/} + done + return 0 +} + +check_interfaces() +{ + local ifcount=0 + local carriers=0 # plugged in + local configured=0 + for dev in $(get_interfaces); do + : $((ifcount += 1)) + read carrier < /sys/class/net/$dev/carrier 2>/dev/null || carrier="" + [ "${carrier}" = 1 ] && : $((carriers += 1)) + read operstate < /sys/class/net/$dev/operstate 2>/dev/null || operstate="" + [ "${operstate}" = up ] && : $((configured += 1)) + done + #[ $configured -eq $ifcount ] && [ $carriers -ge 1 ] && return 0 + [ $configured -ge 1 ] && [ $carriers -ge 1 ] && return 0 + return 1 +} + +check_online() +{ + local timeout=${timeout:-120} + while $infinite || [ $timeout -gt 0 ] ; do + check_interfaces && break + sleep 1 + : $((timeout -= 1)) + done + #echo 'plugged in' + + if [ "${include_ping_test}" = 1 ] && [ -n "${ping_test_host}" ]; then + local timeout=${timeout:-120} + while $infinite || [ $timeout -gt 0 ] ; do + ping -c 1 $ping_test_host >/dev/null 2>&1 + [ $? -eq 0 ] && break + sleep 1 + : $((timeout -= 1)) + done + fi + #echo 'connected' +} + +check_online diff --git a/os/etc/s6-rc/src/net-online/type b/os/etc/s6-rc/src/net-online/type new file mode 100644 index 0000000..bdd22a1 --- /dev/null +++ b/os/etc/s6-rc/src/net-online/type @@ -0,0 +1 @@ +oneshot diff --git a/os/etc/s6-rc/src/net-online/up b/os/etc/s6-rc/src/net-online/up new file mode 100644 index 0000000..03f0ef3 --- /dev/null +++ b/os/etc/s6-rc/src/net-online/up @@ -0,0 +1,2 @@ +#!/bin/execlineb -P +foreground { sh /etc/s6-rc/src/net-online/shell-up } -- cgit 1.4.1