Changeset 129
- Timestamp:
- 03/04/06 11:19:15 (3 years ago)
- Files:
-
- branches/1.0.4/scripts/lib/vps.sh (modified) (9 diffs)
- branches/1.0.4/src/libinternal/Makefile.am (modified) (1 diff)
- branches/1.0.4/src/libinternal/bcaps-list.c (added)
- branches/1.0.4/src/libinternal/ccaps-list.c (added)
- branches/1.0.4/src/libinternal/cflags-list.c (added)
- branches/1.0.4/src/libinternal/iattr-list.c (added)
- branches/1.0.4/src/libinternal/list.c (added)
- branches/1.0.4/src/libinternal/mflags-list.c (added)
- branches/1.0.4/src/libinternal/nflags-list.c (added)
- branches/1.0.4/src/libinternal/rlimit-list.c (added)
- branches/1.0.4/src/libinternal/sched-list.c (added)
- branches/1.0.4/src/libinternal/sys.h (added)
- branches/1.0.4/src/libinternal/sys_clone.c (added)
- branches/1.0.4/src/libinternal/syscall.h (added)
- branches/1.0.4/src/libinternal/vhi-list.c (added)
- branches/1.0.4/src/libinternal/vlist.h (added)
- branches/1.0.4/src/libvconfig/main.c (modified) (1 diff)
- branches/1.0.4/src/tools/lockfile.c (modified) (4 diffs)
- branches/1.0.4/src/tools/tools.h (modified) (3 diffs)
- branches/1.0.4/src/tools/vattr.c (modified) (11 diffs)
- branches/1.0.4/src/tools/vconfig.c (modified) (6 diffs)
- branches/1.0.4/src/tools/vcontext.c (modified) (5 diffs)
- branches/1.0.4/src/tools/vdlimit.c (modified) (8 diffs)
- branches/1.0.4/src/tools/vexec.c (modified) (9 diffs)
- branches/1.0.4/src/tools/vflags.c (modified) (8 diffs)
- branches/1.0.4/src/tools/vinfo.c (modified) (4 diffs)
- branches/1.0.4/src/tools/vkill.c (modified) (4 diffs)
- branches/1.0.4/src/tools/vlimit.c (modified) (7 diffs)
- branches/1.0.4/src/tools/vlogin.c (modified) (5 diffs)
- branches/1.0.4/src/tools/vmount.c (modified) (16 diffs)
- branches/1.0.4/src/tools/vnamespace.c (modified) (6 diffs)
- branches/1.0.4/src/tools/vncontext.c (modified) (9 diffs)
- branches/1.0.4/src/tools/vnflags.c (modified) (6 diffs)
- branches/1.0.4/src/tools/vps.c (modified) (6 diffs)
- branches/1.0.4/src/tools/vrsetup.c (modified) (6 diffs)
- branches/1.0.4/src/tools/vsched.c (modified) (7 diffs)
- branches/1.0.4/src/tools/vuname.c (modified) (7 diffs)
- branches/1.0.4/src/tools/vwait.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/1.0.4/scripts/lib/vps.sh
r115 r129 101 101 case ${subcmd} in 102 102 setup) 103 ${_VNCONTEXT} -C -n ${VX_XID} -f PERSISTANT,INIT_SET 104 ${_VCONTEXT} -C -x ${VX_XID} -f PERSISTANT,INIT_SET 103 ${_VNCONTEXT} -C -n ${VX_XID} -f PERSISTANT,STATE_SETUP 104 ${_VNFLAGS} -G -m -n ${VX_XID} 105 ${_VCONTEXT} -C -x ${VX_XID} -f PERSISTANT,STATE_SETUP 106 ${_VFLAGS} -G -m -x ${VX_XID} 105 107 ;; 106 108 … … 127 129 ${_VNCONTEXT} -A -n ${VX_XID} -a ${i} 128 130 done 131 ${_VNFLAGS} -G -m -n ${VX_XID} 129 132 ;; 130 133 … … 144 147 new) 145 148 ${_VNAMESPACE} -N -x ${VX_XID} 149 ${_VFLAGS} -G -m -x ${VX_XID} 146 150 ;; 147 151 … … 149 153 [ -z "$1" ] && util.error "vps.namespace: missing argument <command>" 150 154 ${_VNAMESPACE} -E -x ${VX_XID} -- "$@" 155 ${_VFLAGS} -G -m -x ${VX_XID} 151 156 ;; 152 157 … … 234 239 ${_VFLAGS} -S -b $(util.array_to_list ${VX_BCAPS[@]}) -x ${VX_XID} 235 240 fi 236 241 ${_VFLAGS} -G -m -x ${VX_XID} 237 242 if [ ! -z "${VX_CCAPS}" ]; then 238 243 ${_VFLAGS} -S -c $(util.array_to_list ${VX_CCAPS[@]}) -x ${VX_XID} 239 244 fi 240 245 ${_VFLAGS} -G -m -x ${VX_XID} 241 246 if [ ! -z "${VX_FLAGS}" ]; then 242 ${_VFLAGS} -S -f $(util.array_to_list ${VX_FLAGS[@]}) -x ${VX_XID}247 ${_VFLAGS} -S -f $(util.array_to_list ${VX_FLAGS[@]}),STATE_SETUP -x ${VX_XID} 243 248 fi 249 ${_VFLAGS} -G -m -x ${VX_XID} 244 250 ;; 245 251 … … 255 261 256 262 pushd ${VDIR} >/dev/null 257 263 ${_VFLAGS} -G -m -x ${VX_XID} 264 ${_VNFLAGS} -G -m -n ${VX_XID} 258 265 case ${VX_INIT} in 259 266 sysvinit|init|plain) … … 285 292 ;; 286 293 esac 287 294 ${_VFLAGS} -G -m -x ${VX_XID} 295 ${_VNFLAGS} -G -m -n ${VX_XID} 288 296 popd >/dev/null 289 297 } … … 393 401 popd >/dev/null 394 402 fi 395 403 ${_VFLAGS} -G -m -x ${VX_XID} 396 404 return 0 397 405 } … … 412 420 ${_VNAMESPACE} -E -x ${VX_XID} -- \ 413 421 ${_VMOUNT} -U -f ${fstab} -m etc/mtab 414 422 ${_VFLAGS} -G -m -x ${VX_XID} 415 423 popd >/dev/null 416 424 } branches/1.0.4/src/libinternal/Makefile.am
r78 r129 20 20 -I$(top_builddir)/src 21 21 22 noinst_HEADERS = printf.h 22 noinst_HEADERS = printf.h vlist.h syscall.h sys.h 23 23 24 24 noinst_LIBRARIES = libinternal.a 25 25 26 libinternal_a_SOURCES = printf.c 26 libinternal_a_SOURCES = printf.c list.c sys_clone.c \ 27 bcaps-list.c cflags-list.c nflags-list.c \ 28 sched-list.c ccaps-list.c iattr-list.c \ 29 rlimit-list.c vhi-list.c mflags-list.c 30 branches/1.0.4/src/libvconfig/main.c
r78 r129 26 26 #include <stdlib.h> 27 27 #include <stdio.h> 28 29 #include <linux/vserver/cvirt_cmd.h>30 28 31 29 #include "printf.h" branches/1.0.4/src/tools/lockfile.c
r115 r129 47 47 48 48 struct options { 49 GLOBAL_OPTS; 49 50 char *lockfile; 50 51 char *syncpipe; … … 54 55 /* init program data */ 55 56 struct options opts = { 57 GLOBAL_OPTS_INIT, 56 58 .lockfile = NULL, 57 59 .syncpipe = NULL, … … 65 67 "\n" 66 68 "Available options:\n" 69 GLOBAL_HELP 67 70 " -l <file> Lock file\n" 68 71 " -s <fifo> Sync pipe\n" … … 94 97 int c; 95 98 99 DEBUGF("%s: starting ...\n", NAME); 100 96 101 /* parse command line */ 97 102 while (1) { branches/1.0.4/src/tools/tools.h
r78 r129 19 19 ***************************************************************************/ 20 20 21 #define GLOBAL_CMDS "hV" 21 #define GLOBAL_CMDS "hVv" 22 23 #define GLOBAL_OPTS bool verbose 24 25 #define GLOBAL_OPTS_INIT .verbose = false 22 26 23 27 #define GLOBAL_CMDS_GETOPT \ … … 29 33 CMD_VERSION(NAME, DESCR); \ 30 34 break; \ 35 \ 36 case 'v': \ 37 opts.verbose = true; \ 38 break; \ 39 40 #define GLOBAL_HELP " -h Display this help message\n" \ 41 " -V Display vserver-utils version\n" \ 42 " -v Enable verbose output\n" 31 43 32 44 #define DEFAULT_GETOPT \ … … 59 71 #define EXIT_OPTS 3 60 72 73 #define VPRINTF(opts, fmt, ...) if ((opts)->verbose) vu_printf(fmt , __VA_ARGS__ ) 74 #ifdef DEBUG 75 #define DEBUGF(fmt, ...) vu_printf("DEBUG: " fmt , __VA_ARGS__ ) 76 #else 77 #define DEBUGF(fmt, ...) 78 #endif 79 61 80 #define EXIT(MSG,RC) { \ 62 81 vu_printf(MSG"; try '%s -h' for more information\n", argv[0]); \ branches/1.0.4/src/tools/vattr.c
r115 r129 37 37 #include <vserver.h> 38 38 39 #include <linux/vserver/inode.h>40 41 39 #include "printf.h" 42 40 #include "tools.h" 41 #include "vlist.h" 43 42 44 43 #define NAME "vattr" … … 47 46 #define SHORT_OPTS "SGacdf:lrx:" 48 47 49 struct commands { 50 bool set; 51 bool get; 52 }; 48 typedef enum { VATTR_NONE, VATTR_GET, VATTR_SET } command_t; 53 49 54 50 struct options { 51 GLOBAL_OPTS; 52 command_t cmd; 55 53 bool all; 56 54 bool cross; … … 64 62 65 63 /* init program data */ 66 struct commands cmds = {67 .get = false,68 .set = false,69 };70 71 /* init program data */72 64 struct options opts = { 65 GLOBAL_OPTS_INIT, 66 .cmd = VATTR_NONE, 73 67 .all = false, 74 68 .cross = false, … … 93 87 "\n" 94 88 "Available options:\n" 89 GLOBAL_HELP 95 90 " -a Process entries starting with a dot\n" 96 91 " -c Do not cross filesystems\n" … … 125 120 iattr.filename = file; 126 121 127 if ( cmds.set) {122 if (opts.cmd == VATTR_SET) { 128 123 const char clmod = '~'; // clear flag modifier 129 124 … … 157 152 158 153 if (opts.xid != 0) { 159 iattr.flags |= IATTR_ XID;160 iattr.mask |= IATTR_ XID;154 iattr.flags |= IATTR_TAG; 155 iattr.mask |= IATTR_TAG; 161 156 } 162 157 … … 211 206 } 212 207 213 if (iattr.mask & IATTR_ XID)208 if (iattr.mask & IATTR_TAG) 214 209 vu_snprintf(ptr, 7, " %5d", iattr.xid); 215 210 else … … 365 360 } 366 361 367 if (opts.dirent || !S_ISDIR(st.st_mode || cmds.set)) {362 if (opts.dirent || !S_ISDIR(st.st_mode || opts.cmd == VATTR_SET)) { 368 363 /* First operate on the file/folder itself if either: 369 364 * - It's not a directory … … 382 377 // If we need to recurse, do it 383 378 if (S_ISDIR(st.st_mode) && 384 (( cmds.set && opts.recurse) || (!cmds.set&& !opts.dirent))) {379 ((opts.cmd == VATTR_SET && opts.recurse) || (!opts.cmd == VATTR_GET && !opts.dirent))) { 385 380 rc = walk_tree(path, 0); 386 381 } … … 398 393 const char delim = ','; // list delimiter 399 394 395 DEBUGF("%s: starting ...\n", NAME); 396 400 397 /* parse command line */ 401 398 while (1) { … … 407 404 408 405 case 'S': 409 cmds.set = true; 406 if (opts.cmd != VATTR_NONE) 407 cmd_help(); 408 else 409 opts.cmd = VATTR_SET; 410 410 break; 411 411 412 412 case 'G': 413 cmds.get = true; 413 if (opts.cmd != VATTR_NONE) 414 cmd_help(); 415 else 416 opts.cmd = VATTR_GET; 414 417 break; 415 418 branches/1.0.4/src/tools/vconfig.c
r115 r129 39 39 #define SHORT_OPTS "GLSk:n:" 40 40 41 struct commands { 42 bool get; 43 bool list; 44 bool set; 45 }; 41 typedef enum { VCFG_NONE, VCFG_LIST, VCFG_GET, VCFG_SET } command_t; 46 42 47 43 struct options { 44 GLOBAL_OPTS; 45 command_t cmd; 48 46 char *name; 49 47 char *key; … … 61 59 "\n" 62 60 "Available options:\n" 61 GLOBAL_HELP 63 62 " -n <name> VServer name\n" 64 63 " -k <key> Configuration key\n" … … 70 69 int main(int argc, char *argv[]) 71 70 { 72 /* init program data */73 struct commands cmds = {74 .get = false,75 .list = false,76 .set = false,77 };78 79 71 struct options opts = { 72 GLOBAL_OPTS_INIT, 73 .cmd = VCFG_NONE, 80 74 .name = NULL, 81 75 .key = NULL, … … 83 77 84 78 int c; 79 80 DEBUGF("%s: starting ...\n", NAME); 85 81 86 82 /* parse command line */ … … 93 89 94 90 case 'G': 95 cmds.get = true; 91 if (opts.cmd != VCFG_NONE) 92 cmd_help(); 93 else 94 opts.cmd = VCFG_GET; 96 95 break; 97 96 98 97 case 'L': 99 cmds.list = true; 98 if (opts.cmd != VCFG_NONE) 99 cmd_help(); 100 else 101 opts.cmd = VCFG_LIST; 100 102 break; 101 103 102 104 case 'S': 103 cmds.set = true; 105 if (opts.cmd != VCFG_NONE) 106 cmd_help(); 107 else 108 opts.cmd = VCFG_SET; 104 109 break; 105 110 … … 116 121 } 117 122 118 if (cmds.get) { 119 if (opts.name == NULL) 120 EXIT("<name> missing", EXIT_USAGE); 123 switch (opts.cmd) { 124 case VCFG_GET: { 125 if (opts.name == NULL) 126 EXIT("<name> missing", EXIT_USAGE); 121 127 122 if (opts.key == NULL)123 EXIT("<key> missing", EXIT_USAGE);128 if (opts.key == NULL) 129 EXIT("<key> missing", EXIT_USAGE); 124 130 125 if (vconfig_isbool(opts.key) == 0) {126 int buf = vconfig_get_bool(opts.name, opts.key);131 if (vconfig_isbool(opts.key) == 0) { 132 int buf = vconfig_get_bool(opts.name, opts.key); 127 133 128 if (buf != -1) { 129 if (buf == 1) 130 vu_printf("true\n"); 131 else 132 vu_printf("false\n"); 134 if (buf != -1) { 135 if (buf == 1) 136 vu_printf("true\n"); 137 else 138 vu_printf("false\n"); 139 } 133 140 } 141 142 if (vconfig_isint(opts.key) == 0) { 143 int buf = vconfig_get_int(opts.name, opts.key); 144 if (buf != -1) 145 vu_printf("%d\n", buf); 146 } 147 148 if (vconfig_isstr(opts.key) == 0) { 149 char *buf = vconfig_get_str(opts.name, opts.key); 150 151 if (buf != NULL) { 152 vu_printf("%s\n", buf); 153 free(buf); 154 } 155 } 156 157 if (vconfig_islist(opts.key) == 0) { 158 char *buf = vconfig_get_list(opts.name, opts.key); 159 160 if (buf != NULL) { 161 vu_printf("%s\n", buf); 162 free(buf); 163 } 164 } 165 break; 134 166 } 135 136 if (vconfig_isint(opts.key) == 0) { 137 int buf = vconfig_get_int(opts.name, opts.key); 138 if (buf != -1) 139 vu_printf("%d\n", buf); 167 case VCFG_LIST: { 168 vconfig_print_nodes(); 169 break; 140 170 } 141 142 if (vconfig_isstr(opts.key) == 0) { 143 char *buf = vconfig_get_str(opts.name, opts.key); 144 145 if (buf != NULL) { 146 vu_printf("%s\n", buf); 147 free(buf); 148 } 171 case VCFG_SET: { 172 vu_printf("SET command not implemented\n"); 173 return -1; 174 break; 149 175 } 150 151 if (vconfig_islist(opts.key) == 0) { 152 char *buf = vconfig_get_list(opts.name, opts.key); 153 154 if (buf != NULL) { 155 vu_printf("%s\n", buf); 156 free(buf); 157 } 158 } 159 } 160 161 if (cmds.list) { 162 vconfig_print_nodes(); 163 } 164 165 if (cmds.set) { 166 return -1; 176 default: 177 cmd_help(); 167 178 } 168 179 branches/1.0.4/src/tools/vcontext.c
r78 r129 32 32 #include "printf.h" 33 33 #include "tools.h" 34 #include "vlist.h" 34 35 35 36 #define NAME "vcontext" 36 37 #define DESCR "Context Manager" 37 38 38 #define SHORT_OPTS "CIMx:f:" 39 40 struct commands { 41 bool create; 42 bool info; 43 bool migrate; 44 }; 39 #define SHORT_OPTS "CIMx:f:c:b:m" 40 41 typedef enum { VCTX_NONE, VCTX_CREATE, VCTX_INFO, VCTX_MIGRATE } command_t; 45 42 46 43 struct options { 44 GLOBAL_OPTS; 45 command_t cmd; 47 46 xid_t xid; 48 47 list_t *flags; 48 list_t *bcaps; 49 list_t *ccaps; 50 list_t *mflags; 49 51 }; 50 52 … … 60 62 "\n" 61 63 "Available options:\n" 64 GLOBAL_HELP 62 65 " -x <xid> Context ID\n" 63 66 " -f <list> Set flags described in <list>\n" 67 " -b <list> Set bcaps described in <list>\n" 68 " -c <list> Set ccaps described in <list>\n" 69 /* " -m <list> Set migration flags described in <list>\n" */ 64 70 "\n" 65 71 "Flag list format string:\n" … … 74 80 int main(int argc, char *argv[]) 75 81 { 76 /* init program data */77 struct commands cmds = {78 .create = false,79 .info = false,80 .migrate = false,81 };82 83 82 struct options opts = { 83 GLOBAL_OPTS_INIT, 84 .cmd = VCTX_NONE, 84 85 .xid = (~0U), 85 86 .flags = 0, 86 87 }; 87 88 88 /* init syscall data */89 struct vx_create_flags create_flags = {90 .flags = 0,91 };92 93 89 struct vx_info info; 94 95 /* init flags list */96 list_t *cp = cflags_list_init();97 90 98 91 int c; 99 92 const char delim = ','; // list delimiter 100 93 const char clmod = '~'; // clear flag modifier 94 95 DEBUGF("%s: starting ...\n", NAME); 101 96 102 97 /* parse command line */ … … 109 104 110 105 case 'C': 111 cmds.create = true; 106 if (opts.cmd != VCTX_NONE) 107 cmd_help(); 108 else 109 opts.cmd = VCTX_CREATE; 112 110 break; 113 111 114 112 case 'I': 115 cmds.info = true; 113 if (opts.cmd != VCTX_NONE) 114 cmd_help(); 115 else 116 opts.cmd = VCTX_INFO; 116 117 break; 117 118 118 119 case 'M': 119 cmds.migrate = true; 120 if (opts.cmd != VCTX_NONE) 121 cmd_help(); 122 else 123 opts.cmd = VCTX_MIGRATE; 120 124 break; 121 125 … … 128 132 break; 129 133 134 case 'c': 135 opts.ccaps = list_parse_list(optarg, delim); 136 break; 137 138 case 'b': 139 opts.bcaps = list_parse_list(optarg, delim); 140 break; 141 142 case 'm': 143 opts.mflags = list_parse_list(optarg, delim); 144 break; 145 130 146 DEFAULT_GETOPT 131 147 } 132 148 } 133 134 if (cmds.create) { 135 if (opts.flags == 0) 136 goto create; 149 150 switch (opts.cmd) { 151 case VCTX_CREATE: { 152 struct vx_create_flags create_flags = { 153 .flags = VXF_STATE_SETUP, 154 }; 155 if (opts.flags) { 156 /* init flags list */ 157 list_t *cp = cflags_list_init(); 158 159 list_link_t link = { 160 .p = cp, 161 .d = opts.flags, 162 }; 163 uint64_t fmask = 0; 164 165 /* validate descending list */ 166 if (list_validate_flag(&link, clmod) == -1) 167 PEXIT("List validation failed", EXIT_USAGE); 168 169 /* convert given descending list to flags using the pristine copy */ 170 list_list2flags(&link, clmod, &create_flags.flags, &fmask); 171 create_flags.flags |= VXF_STATE_SETUP; 172 } 173 174 /* syscall */ 175 if (vx_create(opts.xid, &create_flags) == -1) 176 PEXIT("Failed to create context", EXIT_COMMAND); 177 178 /* Set as default values those used by util-vserver */ 179 if (opts.ccaps == NULL) opts.ccaps = list_parse_list("SET_UTSNAME,RAW_ICMP", delim); 180 if (opts.bcaps == NULL) opts.bcaps = list_parse_list("CHOWN,DAC_OVERRIDE,DAC_READ_SEARCH," 181 "FOWNER,FSETID,FS_MASK,KILL,SETGID,SETUID,NET_BIND_SERVICE,SYS_CHROOT," 182 "SYS_PTRACE,SYS_BOOT,SYS_TTY_CONFIG,LEASE,SYS_ADMIN", delim); 183 if (opts.ccaps || opts.bcaps) { 184 struct vx_caps caps = { 185 .bcaps = 0, 186 .ccaps = 0, 187 .cmask = 0, 188 }; 189 list_t *bp = bcaps_list_init(); 190 list_t *cp = ccaps_list_init(); 191 192 list_link_t link = { 193 .p = bp, 194 .d = opts.bcaps, 195 }; 196 197 /* validate descending list */ 198 if (list_validate_flag(&link, clmod) == -1) 199 PEXIT("List validation failed", EXIT_USAGE); 200 /* convert given descending list to flags using the pristine copy */ 201 list_list2flags(&link, clmod, &caps.bcaps, &caps.cmask); 202 203 link.p = cp; 204 link.d = opts.ccaps; 205 /* validate descending list */ 206 if (list_validate_flag(&link, clmod) == -1) 207 PEXIT("List validation failed", EXIT_USAGE); 208 /* convert given descending list to flags using the pristine copy */ 209 list_list2flags(&link, clmod, &caps.ccaps, &caps.cmask); 210 211 /* Finally set the caps */ 212 if (vx_set_caps(opts.xid, &caps) == -1) 213 PEXIT("Failed to set context capabilities", EXIT_COMMAND); 214 } 215 if (argc > optind) { 216 struct vx_flags flags = { 217 .flags = 0, 218 .mask = VXF_STATE_SETUP, 219 }; 220 if (vx_set_flags(opts.xid, &flags) == -1) 221 PEXIT("Failed to set context flags", EXIT_COMMAND); 222 } 223 break; 224 } 225 case VCTX_MIGRATE: { 226 struct vx_migrate_flags migrate_flags = { 227 .flags = 0, 228 }; 229 230 if (opts.mflags) { 231 /* init flags list */ 232 list_t *mp = mflags_list_init(); 233 234 list_link_t link = { 235 .p = mp, 236 .d = opts.mflags, 237 }; 238 uint64_t fmask = 0; 239 240 /* validate descending list */ 241 if (list_validate_flag(&link, clmod) == -1) 242 PEXIT("List validation failed", EXIT_USAGE); 243 244 /* convert given descending list to flags using the pristine copy */ 245 list_list2flags(&link, clmod, &migrate_flags.flags, &fmask); 246 } 247 /* syscall */ 248 if (vx_migrate(opts.xid, &migrate_flags) == -1) 249 PEXIT("Failed to migrate to context", EXIT_COMMAND); 250 break; 251 } 252 case VCTX_INFO: { 253 /* syscall */ 254 if (vx_get_info(opts.xid, &info) == -1) 255 PEXIT("Failed to get context information", EXIT_COMMAND); 137 256 138 list_link_t link = { 139 .p = cp, 140 .d = opts.flags, 141 }; 257 vu_printf("Context ID: %d\n", info.xid); 258 vu_printf("Init PID: %d\n", info.initpid); 142 259 143 /* validate descending list */ 144 if (list_validate_flag(&link, clmod) == -1) 145 PEXIT("List validation failed", EXIT_USAGE); 146 147 /* vx_create_flags has no mask member 148 * so we create a dumb one */ 149 uint64_t mask = 0; 150 151 /* convert given descending list to flags using the pristine copy */ 152 list_list2flags(&link, clmod, &create_flags.flags, &mask); 153 154 create: 155 /* syscall */ 156 if (vx_create(opts.xid, &create_flags) == -1) 157 PEXIT("Failed to create context", EXIT_COMMAND); 158 159 goto load; 260 goto out; 261 } 262 default: 263 cmd_help(); 160 264 } 161 265 162 if (cmds.migrate) {163 /* syscall */164 if (vx_migrate(opts.xid) == -1)165 PEXIT("Failed to migrate to context", EXIT_COMMAND);166 167 goto load;168 }169 170 if (cmds.info) {171 /* syscall */172 if (vx_get_info(opts.xid, &info) == -1)173 PEXIT("Failed to get context information", EXIT_COMMAND);174 175 vu_printf("Context ID: %d\n", info.xid);176 vu_printf("Init PID: %d\n", info.initpid);177 178 &
