Add preliminary support for pid and network namespaces.
authorDaniel Hokka Zakrisson <daniel@hozac.com>
Sun, 20 Jan 2008 07:56:23 +0000 (07:56 +0000)
committerDaniel Hokka Zakrisson <daniel@hozac.com>
Sun, 20 Jan 2008 07:56:23 +0000 (07:56 +0000)
git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@2664 94cd875c-1c1d-0410-91d2-eb244daf1a30

doc/configuration.xml
scripts/vserver.functions
scripts/vserver.start
scripts/vserver.stop
scripts/vserver.suexec
src/vspace.c

index 4e998be..7876cbd 100644 (file)
@@ -1552,5 +1552,16 @@ Puts the guest in a cpuset. Required entries are name, cpus and mems.
         </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>
index 8f9b71e..e6482c6 100644 (file)
@@ -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 <vserver-directory>
 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 )
index 91a54a4..ff5300b 100644 (file)
@@ -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 -- \
index 6c877a4..c5ee593 100644 (file)
@@ -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
index f249df3..dcb7ebf 100644 (file)
@@ -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[@]}" -- \
index 08f1b28..940255f 100644 (file)
@@ -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