X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fscripts%2Fvserver.functions;h=c1c9c70edded2b1cd90cd1dd8ee1108497a4d539;hb=95cf3519da76f335389cd7a18d0090b59f81f2e7;hp=5cebb5bb98fb36b4760f315f36f6291fa0921367;hpb=c69398d688f10b676e19ad471bf1d7e332e6813e;p=util-vserver.git diff --git a/util-vserver/scripts/vserver.functions b/util-vserver/scripts/vserver.functions index 5cebb5b..c1c9c70 100644 --- a/util-vserver/scripts/vserver.functions +++ b/util-vserver/scripts/vserver.functions @@ -455,11 +455,13 @@ function _processSingleInterface echo $"The 'only_ip' flag for interface '$iface' is deprecated; use 'nodev' instead of" >&2 unset dev } - test ! -e "$iface"/nodev || unset dev test ! -e "$iface"/down || up= - if test "$dev"; then + while test "$dev"; do _transformMask2Prefix prefix "$prefix" "$mask" + INTERFACES=( "${INTERFACES[@]}" "$ip${prefix:+/$prefix}" ) + + test ! -e "$iface"/nodev || break case "$dev" in (*.*) @@ -483,15 +485,16 @@ function _processSingleInterface echo $"Using 'dummy' (indirect) for interface '$dev' requires a fixed context number; dynamic ctx are not supported" >&2 return 1 else - test "$mac" || _generateMac mac "$(basename '$iface')" "$ctx" || return 1 - _addInterfaceCmd MODPROBE -o "dummy${ctx}" dummy - _addInterfaceCmd IP_LINK dev "dummy${ctx}" address "$mac" + test "$mac" || _generateMac mac "$(basename $iface)" "$ctx" || return 1 + _addInterfaceCmd MODPROBE dummy "$dev" + _addInterfaceCmd IP_LINK dev dummy0 address "$mac" _addInterfaceCmd NAMEIF "$dev" "$mac" - _addInterfaceCmd IP_ADDR "$ip${prefix:+/$prefix}" ${name:+label "$dev:$name"} dev "$dev" - test -z "$extip" || _addInterfaceCmd IPTABLES "$ip${prefix:+/$prefix}" "$ctx" "$extip" + _addInterfaceCmd IP_ADDR "$ip${prefix:+/$prefix}" dev "$dev" + test -z "$extip" || _addInterfaceCmd IPTABLES "$ip${prefix:+/$prefix}" ${name:+label "$dev:$name"} "$ctx" "$extip" fi - INTERFACES=( "${INTERFACES[@]}" "$ip${prefix:+/$prefix}" ) - fi + + break + done } ## Usage: _generateInterfaceOptions @@ -500,7 +503,7 @@ function _generateInterfaceOptions local iface local ctx - test ! -e "$1"/context || read ctx <"$vdir"/context + test ! -e "$1"/context || read ctx <"$1"/context for iface in "$1/interfaces/"*; do test -d "$iface" || continue @@ -516,24 +519,35 @@ function enableInterfaces local i=0 declare -a var + lock "$LOCKDIR"/vserver.interfaces + while test $i -lt $INTERFACE_CMDS_IDX; do eval var='( "${INTERFACE_CMDS_'$i'[@]}" )' local type=${var[0]} unset var[0] - + + set -- "${var[@]}" case "$type" in IPTABLES) ;; ## TODO - MODPROBE) $_MODPROBE "${var[@]}";; - NAMEIF) $_NAMEIF "${var[@]}";; - VCONFIG) $_VCONFIG add "${var[@]}";; - IP_ADDR) $_IP addr add "${var[@]}";; - IP_LINK) $_IP link set "${var[@]}";; - IP_ROUTE) $_IP route add "${var[@]}";; - *) echo "Unknown interface-command type '$type'" >&2; false;; + MODPROBE) + local mod=$1 + local name=$2 + shift 2 + $_MODPROBE ${name:+-o "$name"} "$mod" "$@" + ;; + NAMEIF) $_NAMEIF "$@";; + VCONFIG) $_VCONFIG add "$@";; + IP_ADDR) $_IP addr add "$@";; + IP_ADDR_FLUSH) $_IP addr flush "$@";; + IP_LINK) $_IP link set "$@";; + IP_ROUTE) $_IP route add "$@";; + *) echo "Unknown interface-command type '$type'" >&2; false;; esac let ++i done + + unlock 1 } function disableInterfaces @@ -543,6 +557,8 @@ function disableInterfaces local i=$INTERFACE_CMDS_IDX declare -a var + lock "$LOCKDIR"/vserver.interfaces + while test $i -gt 0; do let --i || : @@ -550,17 +566,21 @@ function disableInterfaces local type=${var[0]} unset var[0] + set -- "${var[@]}" case "$type" in - IPTABLES) ;; ## TODO - MODPROBE) $_RMMOD "${var[@]}";; - NAMEIF) ;; - VCONFIG) $_VCONFIG rem "${var[@]}";; - IP_ADDR) $_IP addr del "${var[@]}";; - IP_LINK) ;; ## Ignore the link-down command for now - IP_ROUTE) $_IP route del "${var[@]}";; - *) echo "Unknown interface-command type '$type'" >&2; false;; + IPTABLES) ;; ## TODO + MODPROBE) $_RMMOD "${2:-$1}";; + NAMEIF) ;; + VCONFIG) $_VCONFIG rem "$@";; + IP_ADDR) $_IP addr del "$@";; + IP_ADDR_FLUSH) ;; + IP_LINK) ;; ## Ignore the link-down command for now + IP_ROUTE) $_IP route del "$@";; + *) echo "Unknown interface-command type '$type'" >&2; false;; esac done + + unlock 1 } ## Usage: prepareInit @@ -590,6 +610,7 @@ function generateOptions if test "$_IS_FAKEINIT"; then CHCONTEXT_INIT_OPTS=( --disconnect --flag fakeinit ) + OPTS_VATTRIBUTE=( "${OPTS_VATTRIBUTE[@]}" --flag fakeinit ) OPTS_VCONTEXT_MIGRATE=( "${OPTS_VCONTEXT_MIGRATE[@]}" --fakeinit --disconnect ) fi } @@ -702,22 +723,30 @@ will be killed nevertheless..." function _sourceWrap { - local vdir name flavor start i + local vdir name flavor start i already_handled base . "$@" } ## Usage: execScriptlets function execScriptlets { - local vdir=$1 - local name=$2 - local flavor=$3 - local start= - local i + declare -r vdir=$1 + declare -r name=$2 + declare -r flavor=$3 + local base i + + for base in "$vdir"/scripts "$CONFDIR"/.defaults/scripts; do + local DONT_SKIP_DEFAULTS= + local already_handled= + + for i in "$base/$flavor" "$base/$flavor.d"/*; do + test -f "$i" -a -r "$i" || continue + already_handled=1 + local start= + test -x "$i" || start=_sourceWrap + $start "$i" "$flavor" "$name" + done - for i in "$vdir/scripts/$flavor" "$vdir/scripts/$flavor.d"/*; do - test -f "$i" -a -r "$i" || continue - test -x "$i" || start=_sourceWrap - $start "$i" "$flavor" "$name" + test -z "$already_handled" -o "$DONT_SKIP_DEFAULTS" || break done }