summaryrefslogtreecommitdiffstats
path: root/src/lib/globals
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/globals')
-rw-r--r--src/lib/globals136
1 files changed, 136 insertions, 0 deletions
diff --git a/src/lib/globals b/src/lib/globals
new file mode 100644
index 0000000..491f9d6
--- /dev/null
+++ b/src/lib/globals
@@ -0,0 +1,136 @@
+# /usr/lib/networks/globals
+#
+# All +x files in /usr/lib/network/hooks will be sourced when this file is.
+# Hook files can override any of the utility functions defined here for custom
+# behavior (such as logging error messages to syslog). This lets us keep netcfg
+# simple but gives it the flexibility for users to make modular use of it to do
+# more complex things
+
+
+### Globals
+PROFILE_DIR="/etc/network.d"
+IFACE_DIR="$PROFILE_DIR/interfaces"
+SUBR_DIR="/usr/lib/network"
+HOOKS_DIR="$SUBR_DIR/hooks"
+CONN_DIR="$SUBR_DIR/connections"
+STATE_DIR="/run/network"
+
+
+
+### Logging/Error reporting
+
+function report_err {
+ echo "$*"
+}
+
+function report_notice {
+ echo "$*"
+}
+
+function report_debug {
+ checkyesno "$NETCFG_DEBUG" && echo "DEBUG: $*" >&2
+}
+
+function report_try {
+ # This needs -n and a trailing space.
+ echo -n ":: $* "
+ REPORT_TRYING=1
+}
+
+function report_fail {
+ if [[ -n "$*" ]]; then
+ if (( REPORT_TRYING )); then
+ echo "- $* [fail]"
+ REPORT_TRYING=
+ else
+ echo "$*"
+ fi
+ elif (( REPORT_TRYING )); then
+ echo "[fail]"
+ REPORT_TRYING=
+ fi
+}
+
+function report_success {
+ if [[ -n "$*" ]]; then
+ # This needs -n and a trailing space.
+ echo -n "- $* "
+ fi
+ echo "[done]"
+ REPORT_TRYING=
+}
+
+### For calling scripts only; don't use in library functions
+function exit_stderr { echo "$*" >&2; exit 1; }
+function exit_err { report_err "$*"; exit 1; }
+function exit_fail { report_fail "$*"; exit 1; }
+
+
+### From FreeBSD's /etc/rc.subr
+##
+# checkyesno var
+# Test $1 variable, and warn if not set to YES or NO.
+# Return 0 if it's "yes" (et al), nonzero otherwise.
+# To default to yes, do: "checkyesno ${VAR:-yes}".
+#
+function checkyesno() {
+ local _value="$1"
+ #debug "checkyesno: $1 is set to $_value."
+ case "$_value" in
+
+ # "yes", "true", "on", or "1"
+ [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1)
+ return 0
+ ;;
+
+ # "no", "false", "off", or "0"
+ [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0)
+ return 1
+ ;;
+ *)
+ #warn "\$${1} is not set properly - see rc.conf(5)."
+ return 1
+ ;;
+ esac
+}
+
+## Check if variable is a member of an array
+# $1: the variable to find
+# $2...: the array elements
+function inarray() {
+ local item search="$1"
+ shift
+ for item in "$@"; do
+ if [[ "$item" == "$search" ]]; then
+ return 0
+ fi
+ done
+ return 1
+}
+
+## Waits until a statement succeeds or a timeout occurs
+# $1: timeout in seconds
+# $2...: condition command
+function timeout_wait() {
+ local timeout="$1"
+ (( timeout *= 10 ))
+ shift
+ while ! eval "$*"; do
+ (( timeout-- > 0 )) || return 1
+ sleep 0.1
+ done
+ return 0
+}
+
+
+### Load all +x files in $HOOKS_DIR
+function load_hooks() {
+ local hook
+ for hook in $(find -L "$HOOKS_DIR/" -maxdepth 1 -type f -executable | sort -u); do
+ source "$hook"
+ done
+}
+
+load_hooks
+
+# vim: ft=sh ts=4 et sw=4: