</scalar>
</collection>
</collection>
+
+ <collection name="spaces" since="0.30.215">
+ <boolean name="pid">
+ <description>Enables pid virtualization for this guest</description>
+ </boolean>
+ <boolean name="net">
+ <description>Enable network virtualization for this guest</description>
+ </boolean>
+ <scalar name="mask">
+ <description>Contains a mask of spaces to clone/enter</description>
+ </collection>
</collection>
</database>
declare -a OPTS_VTAG_CREATE=()
declare -a OPTS_VTAG_ENTER=()
declare -a OPTS_VMEMCTRL=()
+declare -a OPTS_VSPACE=()
declare -a STOPCMD_PREPARE=()
function _generateMemctrlOptions
{
- local vdir="$"
+ local vdir="$1"
local badness
getFileValue badness "$vdir/badness"
OPTS_VMEMCTRL=( --badness "$badness" )
}
+function _generateSpaceOptions
+{
+ local vdir="$1"
+ local d="$vdir"/spaces
+
+ test ! -e "$d"/pid || \
+ OPTS_VSPACE=( "${OPTS_VSPACE[@]}" --pid )
+
+ test ! -e "$d"/net || {
+ OPTS_VSPACE=( "${OPTS_VSPACE[@]}" --net )
+ # network context and namespace don't make much sense
+ _HAVE_CHBIND_OPTIONS=1
+ CHBIND_CMD=()
+ }
+
+ local mask
+ getFileValue mask "$d"/mask || \
+ OPTS_VSPACE=( "${OPTS_VSPACE[@]}" --mask "$mask" )
+}
+
## Usage: prepareInit <vserver-directory>
function prepareInit
{
_generatePersonalityOptions "$1"
_generateTagOptions "$1"
_generateMemctrlOptions "$1"
+ _generateSpaceOptions "$1"
if test -n "$_IS_FAKEINIT"; then
CHCONTEXT_INIT_OPTS=( --disconnect --flag fakeinit )
"${CHBIND_CMD[@]}" \
$_EXEC_ULIMIT "$VSERVER_DIR"/ulimits \
$_VTAG --create "${OPTS_VTAG_CREATE[@]}" --silent -- \
+ $_VSPACE --new "${OPTS_VSPACE[@]}" -- \
$_VCONTEXT --create "${OPTS_VCONTEXT_CREATE[@]}" -- \
${OPTION_STRACE:+$_STRACE -fF -o /tmp/vserver-start.$$} \
${USE_VNAMESPACE:+$_VNAMESPACE --set -- } \
+ $_VSPACE --set "${OPTS_VSPACE[@]}" -- \
$_VLIMIT --dir "$VSERVER_DIR"/rlimits --missingok -- \
$_VSCHED --xid self --force "${OPTS_VSCHED[@]}" -- \
$_VSYSCTL --xid self --dir "$VSERVER_DIR"/sysctl --missingok -- \
elif $_VSERVER_INFO - FEATURE migrate; then
"${NICE_CMD[@]}" \
"${CHBIND_CMD[@]}" \
+ "$_VSPACE" --enter --xid "$S_CONTEXT" "${OPTS_VSPACE[@]}" -- \
"$_VTAG" --migrate "${OPTS_VTAG_ENTER[@]}" --silent -- \
$_VCONTEXT $SILENT_OPT --migrate --chroot --xid "$S_CONTEXT" -- \
"${INITCMD_STOP[@]}" || fail=1
"${CHBIND_CMD[@]}" \
$_EXEC_ULIMIT "$VSERVER_DIR/ulimits" \
${USE_VNAMESPACE:+$_VNAMESPACE --enter "$S_CONTEXT" -- } \
+ $_VSPACE --enter --xid "$S_CONTEXT" "${OPTS_VSPACE[@]}" -- \
$_VTAG --migrate "${OPTS_VTAG_ENTER[@]}" --silent -- \
$_VCONTEXT $SILENT_OPT --migrate --chroot \
--xid "$S_CONTEXT" --uid "$user" "${OPTS_VCONTEXT_ENTER[@]}" -- \
{
pid_t pid;
+ /* optimize default case */
+ if (mask == 0)
+ return;
+
signal(SIGCHLD, SIG_DFL);
#ifdef NDEBUG