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
(*.*)
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 <vserver-directory>
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
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
local i=$INTERFACE_CMDS_IDX
declare -a var
+ lock "$LOCKDIR"/vserver.interfaces
+
while test $i -gt 0; do
let --i || :
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 <vserver-directory>
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
}
function _sourceWrap
{
- local vdir name flavor start i
+ local vdir name flavor start i already_handled base
. "$@"
}
## Usage: execScriptlets <vserver-cfgdir> <vserver-name> <script-flavor>
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
}