Changeset 2589
- Timestamp:
- 08/16/07 05:06:50 (1 year ago)
- Files:
-
- trunk/compat.h (modified) (1 diff)
- trunk/configure.ac (modified) (1 diff)
- trunk/contrib/manifest.dat.pathsubst (modified) (1 diff)
- trunk/ensc_wrappers/wrappers-vserver.hc (modified) (3 diffs)
- trunk/kernel/switch.h (modified) (4 diffs)
- trunk/kernel/tag_cmd.h (added)
- trunk/lib/Makefile-files (modified) (3 diffs)
- trunk/lib/getvserverbyctx-compat.hc (modified) (1 diff)
- trunk/lib/getvserverbyctx-v13.hc (modified) (1 diff)
- trunk/lib/getvserverctx.c (modified) (3 diffs)
- trunk/lib/issupported.c (modified) (2 diffs)
- trunk/lib/issupportedstring.c (modified) (1 diff)
- trunk/lib/nidopt2nid.c (modified) (2 diffs)
- trunk/lib/syscall_getvci-v21.hc (modified) (1 diff)
- trunk/lib/syscall_getvci.c (modified) (1 diff)
- trunk/lib/syscall_tagcreate.c (added)
- trunk/lib/syscall_tagmigrate-v23.hc (added)
- trunk/lib/syscall_tagmigrate.c (added)
- trunk/lib/syscall_tasktag-v23.hc (added)
- trunk/lib/syscall_tasktag.c (added)
- trunk/lib/tagopt2tag.c (added)
- trunk/lib/virtual.h (modified) (1 diff)
- trunk/lib/vserver-internal.h (modified) (3 diffs)
- trunk/lib/vserver.h (modified) (8 diffs)
- trunk/lib/xidopt2xid.c (modified) (1 diff)
- trunk/scripts/chcontext (modified) (2 diffs)
- trunk/scripts/util-vserver-vars.pathsubst (modified) (1 diff)
- trunk/scripts/vserver.functions (modified) (3 diffs)
- trunk/scripts/vserver.start (modified) (1 diff)
- trunk/scripts/vserver.suexec (modified) (2 diffs)
- trunk/src/Makefile-files (modified) (3 diffs)
- trunk/src/vserver-info.c (modified) (7 diffs)
- trunk/src/vtag.c (added)
- trunk/vserver-start/main.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/compat.h
r2283 r2589 88 88 #endif 89 89 90 #ifndef HAVE_TAG_T 91 #include <stdint.h> 92 typedef uint32_t tag_t; 93 #endif 94 90 95 91 96 #if defined(__dietlibc__) trunk/configure.ac
r2578 r2589 296 296 AC_CHECK_TYPES(xid_t,,,[#include <sys/types.h>]) 297 297 AC_CHECK_TYPES(nid_t,,,[#include <sys/types.h>]) 298 AC_CHECK_TYPES(tag_t,,,[#include <sys/types.h>]) 298 299 299 300 AC_CHECK_HEADERS([sys/capability.h]) trunk/contrib/manifest.dat.pathsubst
r2558 r2589 122 122 base @SBINDIR@/vserver-stat 123 123 base @SBINDIR@/vsomething 124 core @SBINDIR@/vtag 124 125 base @SBINDIR@/vtop 125 126 core @SBINDIR@/vuname trunk/ensc_wrappers/wrappers-vserver.hc
r2578 r2589 65 65 } 66 66 67 inline static WRAPPER_DECL tag_t 68 Evc_tag_create(tag_t tag) 69 { 70 register tag_t res = vc_tag_create(tag); 71 FatalErrnoError(res==VC_NOCTX, "vc_tag_create()"); 72 return res; 73 } 74 67 75 inline static WRAPPER_DECL void 68 76 Evc_ctx_migrate(xid_t xid, uint_least64_t flags) … … 75 83 { 76 84 FatalErrnoError(vc_net_migrate(nid)==-1, "vc_net_migrate()"); 85 } 86 87 inline static WRAPPER_DECL void 88 Evc_tag_migrate(tag_t tag) 89 { 90 FatalErrnoError(vc_tag_migrate(tag)==-1, "vc_tag_migrate()"); 77 91 } 78 92 … … 181 195 return rc; 182 196 } 197 198 inline static WRAPPER_DECL tag_t 199 Evc_tagopt2tag(char const *id, bool honor_static) 200 { 201 char const * err; 202 tag_t rc = vc_tagopt2tag(id, honor_static, &err); 203 if (__builtin_expect(rc==VC_NOCTX,0)) { 204 ENSC_DETAIL1(msg, "vc_tagopt2tag", id, 1); 205 FatalErrnoErrorFail(msg); 206 } 207 return rc; 208 } trunk/kernel/switch.h
r2427 r2589 9 9 #define VC_VERSION(c) ((c) & 0xFFF) 10 10 11 #define VC_CMD(c, i,v) ((((VC_CAT_ ## c) & 0x3F) << 24) \11 #define VC_CMD(c, i, v) ((((VC_CAT_ ## c) & 0x3F) << 24) \ 12 12 | (((i) & 0xFF) << 16) | ((v) & 0xFFF)) 13 13 … … 32 32 | 24| 25| 26| 27| 28| 29| | 30| 31| 33 33 -------+-------+-------+-------+-------+-------+-------+ +-------+-------+ 34 DISK | | | | |DLIMIT | | |INODE | |34 DISK | | | |TAGMIG |DLIMIT | | |INODE | | 35 35 VFS | 32| 33| 34| 35| 36| 37| | 38| 39| 36 36 -------+-------+-------+-------+-------+-------+-------+ +-------+-------+ … … 66 66 #define VC_CAT_NETCTRL 28 67 67 68 #define VC_CAT_TAGMIG 35 68 69 #define VC_CAT_DLIMIT 36 69 70 #define VC_CAT_INODE 38 … … 80 81 #define VC_CAT_COMPAT 63 81 82 82 /* interface version */83 84 #define VCI_VERSION 0x0002010285 #define VCI_LEGACY_VERSION 0x000100FF86 87 83 /* query version */ 88 84 trunk/lib/Makefile-files
r2578 r2589 35 35 lib/getvservervdir.c \ 36 36 lib/xidopt2xid.c \ 37 lib/nidopt2nid.c 37 lib/nidopt2nid.c \ 38 lib/tagopt2tag.c 38 39 lib_v11_SRCS = lib/syscall_rlimit.c \ 39 40 lib/syscall_rlimit-v11.hc \ … … 146 147 lib/syscall_netremove-netv2.hc 147 148 149 lib_v23_SRCS = lib/syscall_tagmigrate-v23.hc \ 150 lib/syscall_tagmigrate.c \ 151 lib/syscall_tagcreate.c \ 152 lib/syscall_tasktag-v23.hc \ 153 lib/syscall_tasktag.c 154 148 155 if ENSC_HAVE_C99_COMPILER 149 156 lib_v13_SRCS += lib/syscall_adddlimit-v13.hc \ … … 193 200 $(lib_v22_SRCS) \ 194 201 $(lib_netv2_SRCS) \ 202 $(lib_v23_SRCS) \ 195 203 $(ensc_fmt_SRCS) 196 204 trunk/lib/getvserverbyctx-compat.hc
r2182 r2589 97 97 // request) 98 98 if (validate_result && 99 vc_getVserverCtx(path, vcCFG_RECENT_FULL, false, 0 )!=ctx) return 0;99 vc_getVserverCtx(path, vcCFG_RECENT_FULL, false, 0, vcCTX_XID)!=ctx) return 0; 100 100 101 101 if (style) *style = vcCFG_RECENT_FULL; trunk/lib/getvserverbyctx-v13.hc
r2182 r2589 29 29 if (vc_get_vhi_name(ctx, vcVHI_CONTEXT, buf, sizeof buf)!=-1 && 30 30 (!validate_result || 31 vc_getVserverCtx(buf, vcCFG_RECENT_FULL, false, 0 )==ctx)) {31 vc_getVserverCtx(buf, vcCFG_RECENT_FULL, false, 0, vcCTX_XID)==ctx)) { 32 32 if (style) *style = vcCFG_RECENT_FULL; 33 33 return strdup(buf); trunk/lib/getvserverctx.c
r2210 r2589 121 121 122 122 xid_t 123 vc_getVserverCtx(char const *id, vcCfgStyle style, bool honor_static, bool *is_running) 123 vc_getVserverCtx(char const *id, vcCfgStyle style, bool honor_static, bool *is_running, 124 vcCtxType type) 124 125 { 125 126 size_t l1 = strlen(id); 126 char buf[sizeof(CONFDIR "//") + l1 + sizeof("/ context")];127 char buf[sizeof(CONFDIR "//") + l1 + sizeof("/ncontext")]; 127 128 128 129 if (style==vcCFG_NONE || style==vcCFG_AUTO) … … 152 153 // it belongs to a running vserver and the both vservers are 153 154 // identically 154 if (res!=VC_NOCTX ) {155 if (res!=VC_NOCTX && type == vcCTX_XID) { 155 156 char *cur_name; 156 157 struct vc_vx_info info; … … 181 182 182 183 if (res==VC_NOCTX && honor_static) { 183 memcpy(buf+idx, "/context", 9); // appends '\0' too 184 switch (type) { 185 case vcCTX_XID: 186 memcpy(buf+idx, "/context", 9); // appends '\0' too 187 break; 188 case vcCTX_NID: 189 memcpy(buf+idx, "/ncontext", 10); 190 break; 191 case vcCTX_TAG: 192 memcpy(buf+idx, "/tag", 5); 193 break; 194 } 184 195 185 196 res = getCtxFromFile(buf); trunk/lib/issupported.c
r2449 r2589 27 27 vc_isSupported(vcFeatureSet feature) 28 28 { 29 int ver = vc_get_version(); 29 int ver = vc_get_version(); 30 vc_vci_t conf = vc_get_vci(); 30 31 if (ver==-1) return false; 32 if (conf==(vc_vci_t)-1) conf = 0; 31 33 32 34 switch (feature) { … … 45 47 case vcFEATURE_VNET : return ver >= 0x00020001; 46 48 case vcFEATURE_VSTAT : return ver >= 0x00020103; 49 case vcFEATURE_PPTAG : return conf & VC_VCI_PPTAG; 47 50 default : assert(false); 48 51 } trunk/lib/issupportedstring.c
r2449 r2589 35 35 DECL(MIGRATE), DECL(NAMESPACE), DECL(SCHED), DECL(VINFO), 36 36 DECL(VHI), DECL(VSHELPER0), DECL(VSHELPER), DECL(VWAIT), 37 DECL(VNET), DECL(VSTAT), 37 DECL(VNET), DECL(VSTAT), DECL(PPTAG), 38 38 }; 39 39 trunk/lib/nidopt2nid.c
r2384 r2589 25 25 #include <stdlib.h> 26 26 27 static nid_t 28 getVserverNid(char const *id, bool honor_static, char const **err) 29 { 30 *err = "vc_getVserverCtx"; 31 return vc_getVserverCtx(id, vcCFG_AUTO, honor_static, 0, vcCTX_NID); 32 } 33 27 34 nid_t 28 35 vc_nidopt2nid(char const *str, bool honor_static, char const **err_info) … … 33 40 err = "vc_get_task_nid()"; 34 41 if (strcmp(str,"self")==0) res = vc_get_task_nid(0); 35 else res = vc_xidopt2xid(str, honor_static, &err); 42 else if (str[0]==':') res = getVserverNid(str+1, honor_static, &err); 43 else { 44 char * endptr; 45 nid_t nid = strtol(str, &endptr, 10); 46 47 if (endptr!=str && (*endptr=='\0' || *endptr=='\n')) 48 res = nid; 49 else 50 res = getVserverNid(str, honor_static, &err); 51 } 36 52 37 53 if (res==VC_NOCTX && err_info) *err_info = err; trunk/lib/syscall_getvci-v21.hc
r2415 r2589 21 21 #endif 22 22 23 static inline ALWAYSINLINE int23 static inline ALWAYSINLINE vc_vci_t 24 24 vc_get_vci_v21(int UNUSED tmp) 25 25 { trunk/lib/syscall_getvci.c
r2415 r2589 31 31 #if defined(VC_ENABLE_API_V21) 32 32 33 int33 vc_vci_t 34 34 vc_get_vci() 35 35 { trunk/lib/virtual.h
r2427 r2589 32 32 #include <kernel/signal_cmd.h> 33 33 #include <kernel/device_cmd.h> 34 #include <kernel/tag_cmd.h> 34 35 35 36 #include <kernel/legacy.h> trunk/lib/vserver-internal.h
r2578 r2589 51 51 do { \ 52 52 int ver = utilvserver_checkCompatVersion(); \ 53 uint_least32_t UNUSED conf = utilvserver_checkCompatConfig(); \53 vc_vci_t UNUSED conf = utilvserver_checkCompatConfig(); \ 54 54 if (ver==-1) return -1; \ 55 55 VC_SUFFIX, __VA_ARGS__, VC_PREFIX; \ … … 121 121 #endif 122 122 123 #if defined(VC_ENABLE_API_V23) 124 # define CALL_VC_TAG(F,...) CALL_VC_GENERAL_CONFIG(VC_VCI_PPTAG, tag, F, __VA_ARGS__) 125 #else 126 # define CALL_VC_TAG(F,...) CALL_VC_NOOP 127 #endif 128 123 129 #ifdef VC_ENABLE_API_V22 124 130 # define CALL_VC_V22(F,...) CALL_VC_GENERAL(0x00020200, v22, F, __VA_ARGS__) … … 177 183 # define CTX_USER2KERNEL(X) (X) 178 184 # define CTX_KERNEL2USER(X) (X) 185 #endif 186 187 #if 1 188 # define TAG_KERNEL2USER(X) (((X)==(uint32_t)(-1)) ? VC_NOCTX : \ 189 ((X)==(uint32_t)(-2)) ? VC_SAMECTX : \ 190 (tag_t)(X)) 191 192 # define TAG_USER2KERNEL(X) (((X)==VC_DYNAMIC_XID) ? (uint32_t)(-1) : \ 193 ((X)==VC_SAMECTX) ? (uint32_t)(-2) : \ 194 (uint32_t)(X)) 195 #else 196 # define TAG_USER2KERNEL(X) (X) 197 # define TAG_KERNEL2USER(X) (X) 179 198 #endif 180 199 trunk/lib/vserver.h
r2585 r2589 268 268 #define VC_VCI_SPACES (1 << 10) 269 269 #define VC_VCI_NETV2 (1 << 11) 270 #define VC_VCI_PPTAG (1 << 28) 270 271 271 272 … … 324 325 typedef an_unsigned_integer_type xid_t; 325 326 typedef an_unsigned_integer_type nid_t; 327 typedef an_unsigned_integer_type tag_t; 326 328 #endif 327 329 … … 350 352 int vc_get_version(); 351 353 354 typedef uint64_t vc_vci_t; 352 355 /** \brief Returns the kernel configuration bits 353 356 * \ingroup syscalls 354 357 * \returns The kernel configuration bits 355 358 */ 356 intvc_get_vci();359 vc_vci_t vc_get_vci(); 357 360 358 361 /** \brief Moves current process into a context … … 770 773 struct vc_ctx_dlimit *limits) VC_ATTR_NONNULL((1)); 771 774 775 /** Get the filesystem tag for a process. */ 776 tag_t vc_get_task_tag(pid_t pid); 777 778 /** Create a new filesystem tag space. */ 779 int vc_tag_create(tag_t tag); 780 781 /** Migrate to an existing filesystem tag space. */ 782 int vc_tag_migrate(tag_t tag); 783 772 784 /* scheduler related syscalls */ 773 785 struct vc_set_sched { … … 932 944 vcFEATURE_SCHED, vcFEATURE_VINFO, vcFEATURE_VHI, 933 945 vcFEATURE_VSHELPER0, vcFEATURE_VSHELPER, vcFEATURE_VWAIT, 934 vcFEATURE_VNET, vcFEATURE_VSTAT }946 vcFEATURE_VNET, vcFEATURE_VSTAT, vcFEATURE_PPTAG, } 935 947 vcFeatureSet; 936 948 … … 963 975 /** Maps a nid given at '--nid' options to a nid_t */ 964 976 nid_t vc_nidopt2nid(char const *, bool honor_static, char const **err_info); 977 /** Maps a tag given at '--tag' options to a tag_t */ 978 tag_t vc_tagopt2tag(char const *, bool honor_static, char const **err_info); 965 979 966 980 vcCfgStyle vc_getVserverCfgStyle(char const *id); … … 985 999 char * vc_getVserverVdir(char const *id, vcCfgStyle style, bool physical); 986 1000 1001 typedef enum { vcCTX_XID = 1, 1002 vcCTX_NID, 1003 vcCTX_TAG, 1004 } vcCtxType; 1005 987 1006 /** Returns the ctx of the given vserver. When vserver is not running and 988 1007 * 'honor_static' is false, VC_NOCTX will be returned. Else, when … … 993 1012 * assigned to this variable. */ 994 1013 xid_t vc_getVserverCtx(char const *id, vcCfgStyle style, 995 bool honor_static, bool /*@null@*/ *is_running); 1014 bool honor_static, bool /*@null@*/ *is_running, 1015 vcCtxType type); 996 1016 997 1017 /** Resolves the cfg-path of the vserver owning the given ctx. 'revdir' will trunk/lib/xidopt2xid.c
r1656 r2589 29 29 { 30 30 *err = "vc_getVserverCtx"; 31 return vc_getVserverCtx(id, vcCFG_AUTO, honor_static, 0 );31 return vc_getVserverCtx(id, vcCFG_AUTO, honor_static, 0, vcCTX_XID); 32 32 } 33 33 trunk/scripts/chcontext
r2383 r2589 135 135 done 136 136 137 create_cmd=( $_VCONTEXT --create --silentexist 137 create_cmd=( ${OPT_CTX:+$_VTAG --create --tag "$OPT_CTX" --silentexist --} 138 $_VCONTEXT --create --silentexist 138 139 ${OPT_SILENT:+--silent} 139 140 ${OPT_CTX:+--xid "$OPT_CTX"} ) … … 158 159 ${OPT_FLAGS:+--flag "${OPT_FLAGS[*]}"} ) 159 160 160 migrate_cmd=( $_VCONTEXT 161 migrate_cmd=( $_VTAG --migrate --tag "$OPT_CTX" 162 -- 163 $_VCONTEXT 161 164 ${OPT_SILENT:+--silent} 162 165 ${OPT_DISCONNECT:+--disconnect} trunk/scripts/util-vserver-vars.pathsubst
r2567 r2589 100 100 _VSOMETHING="$__SBINDIR/vsomething" 101 101 _VSYSCTL="$__PKGLIBDIR/vsysctl" 102 _VTAG="$__SBINDIR/vtag" 102 103 _VWAIT="$__SBINDIR/vwait" 103 104 _VUNAME="$__SBINDIR/vuname" trunk/scripts/vserver.functions
r2566 r2589 44 44 declare -a OPTS_VSCHED=() 45 45 declare -a OPTS_ENV=() 46 declare -a OPTS_VTAG_CREATE=() 47 declare -a OPTS_VTAG_ENTER=() 46 48 47 49 declare -a STOPCMD_PREPARE=() … … 600 602 } 601 603 604 function _generateTagOptions 605 { 606 local vdir="$1" 607 local tag 608 609 getFileValue tag "$vdir/tag" "$vdir/context" || return 0 610 611 OPTS_VTAG_CREATE=( --tag "$tag" ) 612 OPTS_VTAG_ENTER=( --tag "$tag" ) 613 } 614 602 615 function enableInterfaces 603 616 { … … 713 726 _generateScheduleOptions "$1" 714 727 _generatePersonalityOptions "$1" 728 _generateTagOptions "$1" 715 729 716 730 if test -n "$_IS_FAKEINIT"; then trunk/scripts/vserver.start
r2566 r2589 133 133 $_CHBIND "${CHBIND_OPTS[@]}" -- \ 134 134 $_EXEC_ULIMIT "$VSERVER_DIR"/ulimits \ 135 $_VTAG --create "${OPTS_VTAG_CREATE[@]}" -- \ 135 136 $_VCONTEXT --create "${OPTS_VCONTEXT_CREATE[@]}" -- \ 136 137 ${OPTION_STRACE:+$_STRACE -fF -o /tmp/vserver-start.$$} \ trunk/scripts/vserver.suexec
r2481 r2589 38 38 $_EXEC_ULIMIT "$VSERVER_DIR/ulimits" \ 39 39 ${USE_VNAMESPACE:+$_VNAMESPACE --enter "$S_CONTEXT" -- } \ 40 $_VTAG --migrate "${OPTS_VTAG_ENTER[@]}" -- \ 40 41 $_VCONTEXT $SILENT_OPT --migrate --chroot \ 41 42 --xid "$S_CONTEXT" --uid "$user" "${OPTS_VCONTEXT_ENTER[@]}" -- \ … … 45 46 $_CHBIND "${CHBIND_OPTS[@]}" \ 46 47 $_EXEC_ULIMIT "$VSERVER_DIR/ulimits" \ 48 $_VTAG --migrate "${OPTS_VTAG_ENTER[@]}" -- \ 47 49 $_VCONTEXT --create "${OPTS_VCONTEXT_CREATE[@]}" -- \ 48 50 $_VUNAME --xid self --dir "$VSERVER_DIR"/uts --missingok -- \ trunk/src/Makefile-files
r2558 r2589 82 82 src/vsysctl \ 83 83 src/vclone \ 84 src/h2ext 84 src/h2ext \ 85 src/vtag 85 86 86 87 if ENSC_CAN_BEECRYPT_WITH_DIETLIBC … … 162 163 src/naddress \ 163 164 src/vdevmap \ 165 src/vtag \ 164 166 $(src_sbin_CXX_X_PROGS) 165 167 … … 343 345 src_h2ext_LDFLAGS = $(VSERVER_LDFLGS) 344 346 347 src_vtag_SOURCES = src/vtag.c 348 src_vtag_LDADD = $(VSERVER_LDADDS) 349 src_vtag_LDFLAGS = $(VSERVER_LDADDS) 350 345 351 EXTRA_PROGRAMS += $(src_sbin_CXX_PROGS) $(src_pkglib_CXX_PROGS) 346 352 trunk/src/vserver-info.c
r2403 r2589 54 54 tgFEATURE, tgCANONIFY, 55 55 tgVERIFYCAP, tgXIDTYPE, tgVERIFYPROC, 56 tgNID, tgTAG, 56 57 } VserverTag; 57 58 … … 83 84 { "VERIFYPROC", tgVERIFYPROC, "test if /proc can be read by contexts!=0" }, 84 85 { "XIDTYPE", tgXIDTYPE, "returns the type of the given XID" }, 86 { "NID", tgNID, "outputs the network context-id of the given pid" }, 87 { "TAG", tgTAG, "outputs the filesystem tag of the given pid" }, 85 88 }; 86 89 … … 231 234 } 232 235 233 static char *234 get Xid(char *buf, char const *pid_str)236 static inline char * 237 getCtxId(char *buf, const char *pid_str, xid_t (*get_id)(pid_t pid), const char *err_str) 235 238 { 236 239 pid_t pid = atoi(pid_str); 237 xid_t xid = vc_get_task_xid(pid);238 239 if (xid==VC_NOCTX) perror( "vc_get_task_xid()");240 xid_t xid = get_id(pid); 241 242 if (xid==VC_NOCTX) perror(err_str); 240 243 else { 241 244 utilvserver_fmt_long(buf, xid); … … 244 247 245 248 return 0; 249 } 250 251 static char * 252 getXid(char *buf, char const *pid_str) 253 { 254 return getCtxId(buf, pid_str, vc_get_task_xid, "vc_get_task_xid()"); 255 } 256 257 static char * 258 getNid(char *buf, const char *pid_str) 259 { 260 return getCtxId(buf, pid_str, vc_get_task_nid, "vc_get_task_nid()"); 261 } 262 263 static char * 264 getTag(char *buf, const char *pid_str) 265 { 266 return getCtxId(buf, pid_str, vc_get_task_tag, "vc_get_task_tag()"); 246 267 } 247 268 … … 435 456 { 436 457 xid_t xid = vc_getVserverCtx(vserver, vcCFG_AUTO, 437 allow_only_static, 0 );458 allow_only_static, 0, vcCTX_XID); 438 459 if (xid==VC_NOCTX) return 0; 439 460 … … 503 524 res = (vc_get_vx_info(xid, &info)==-1) ? 0 : "1"; 504 525 else 505 res = (vc_getVserverCtx(vserver, vcCFG_AUTO, false, 0 )==VC_NOCTX) ? 0 : "1";526 res = (vc_getVserverCtx(vserver, vcCFG_AUTO, false, 0, vcCTX_XID)==VC_NOCTX) ? 0 : "1"; 506 527 507 528 break; … … 523 544 case tgVERIFYCAP : return verifyCap() ? 0 : 1; break; 524 545 case tgVERIFYPROC : return verifyProc() ? 0 : 1; break; 546 case tgNID : res = getNid(buf, vserver); break; 547 case tgTAG : res = getTag(buf, vserver); break; 525 548 526 549 trunk/vserver-start/main.c
r2578 r2589 116 116 117 117 xid = vc_getVserverCtx(opts.VSERVER_DIR, vcCFG_RECENT_FULL, 118 true, &is_running );118 true, &is_running, vcCTX_XID); 119 119 120 120 if (xid!=VC_NOCTX && vc_get_vx_info(xid, &info)!=-1) {
