From: Daniel Hokka Zakrisson Date: Sun, 20 Jan 2008 07:56:23 +0000 (+0000) Subject: Add preliminary support for pid and network namespaces. X-Git-Tag: release-0.30.215~43 X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d72a60793b771339dcabe2e52570f014b114cd26;p=util-vserver.git Add preliminary support for pid and network namespaces. git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@2664 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- diff --git a/doc/configuration.xml b/doc/configuration.xml index 4e998be..7876cbd 100644 --- a/doc/configuration.xml +++ b/doc/configuration.xml @@ -1552,5 +1552,16 @@ Puts the guest in a cpuset. Required entries are name, cpus and mems. + + + + Enables pid virtualization for this guest + + + Enable network virtualization for this guest + + + Contains a mask of spaces to clone/enter + diff --git a/scripts/vserver.functions b/scripts/vserver.functions index 8f9b71e..e6482c6 100644 --- a/scripts/vserver.functions +++ b/scripts/vserver.functions @@ -46,6 +46,7 @@ declare -a OPTS_ENV=() declare -a OPTS_VTAG_CREATE=() declare -a OPTS_VTAG_ENTER=() declare -a OPTS_VMEMCTRL=() +declare -a OPTS_VSPACE=() declare -a STOPCMD_PREPARE=() @@ -692,7 +693,7 @@ function _generateTagOptions function _generateMemctrlOptions { - local vdir="$" + local vdir="$1" local badness getFileValue badness "$vdir/badness" @@ -701,6 +702,26 @@ function _generateMemctrlOptions 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 function prepareInit { @@ -746,6 +767,7 @@ function generateOptions _generatePersonalityOptions "$1" _generateTagOptions "$1" _generateMemctrlOptions "$1" + _generateSpaceOptions "$1" if test -n "$_IS_FAKEINIT"; then CHCONTEXT_INIT_OPTS=( --disconnect --flag fakeinit ) diff --git a/scripts/vserver.start b/scripts/vserver.start index 91a54a4..ff5300b 100644 --- a/scripts/vserver.start +++ b/scripts/vserver.start @@ -137,9 +137,11 @@ if $_VSERVER_INFO - FEATURE migrate; then "${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 -- \ diff --git a/scripts/vserver.stop b/scripts/vserver.stop index 6c877a4..c5ee593 100644 --- a/scripts/vserver.stop +++ b/scripts/vserver.stop @@ -80,6 +80,7 @@ if test -n "$_IS_FAKEINIT" && \ 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 diff --git a/scripts/vserver.suexec b/scripts/vserver.suexec index f249df3..dcb7ebf 100644 --- a/scripts/vserver.suexec +++ b/scripts/vserver.suexec @@ -38,6 +38,7 @@ if $_VSERVER_INFO - FEATURE migrate; then "${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[@]}" -- \ diff --git a/src/vspace.c b/src/vspace.c index 08f1b28..940255f 100644 --- a/src/vspace.c +++ b/src/vspace.c @@ -110,6 +110,10 @@ newSpaces(uint_least64_t mask, const char *cmd) { pid_t pid; + /* optimize default case */ + if (mask == 0) + return; + signal(SIGCHLD, SIG_DFL); #ifdef NDEBUG