Index: usr.sbin/jail/command.c =================================================================== --- usr.sbin/jail/command.c +++ usr.sbin/jail/command.c @@ -282,7 +282,7 @@ pid_t pid; int argc, bg, clean, consfd, down, fib, i, injail, sjuser, timeout; #if defined(INET) || defined(INET6) - char *addr, *extrap, *p, *val; + char *addr, *extrap, *p, *val, *jid, *cpusets; #endif static char *cleanenv; @@ -574,6 +574,27 @@ } break; + case IP_EXEC_CPUSET: + argv = alloca(6 * sizeof(char *)); + + i = snprintf(NULL, 0, "%d", j->jid); + jid = alloca(i+1); + snprintf(jid, i+1, "%d", j->jid); + + i = snprintf(NULL, 0, "%s", comstring->s); + cpusets = alloca(i+1); + snprintf(cpusets, i+1, "%s", comstring->s); + + if (!down) { + argv[0] = "/usr/bin/cpuset"; + argv[1] = "-j"; + argv[2] = jid; + argv[3] = "-l"; + argv[4] = cpusets; + argv[5] = NULL; + } + break; + case IP_COMMAND: if (j->name != NULL) goto default_command; Index: usr.sbin/jail/config.c =================================================================== --- usr.sbin/jail/config.c +++ usr.sbin/jail/config.c @@ -66,6 +66,7 @@ [IP_EXEC_CLEAN] = {"exec.clean", PF_INTERNAL | PF_BOOL}, [IP_EXEC_CONSOLELOG] = {"exec.consolelog", PF_INTERNAL}, [IP_EXEC_FIB] = {"exec.fib", PF_INTERNAL | PF_INT}, + [IP_EXEC_CPUSET] = {"exec.cpuset", PF_INTERNAL}, [IP_EXEC_JAIL_USER] = {"exec.jail_user", PF_INTERNAL}, [IP_EXEC_POSTSTART] = {"exec.poststart", PF_INTERNAL}, [IP_EXEC_POSTSTOP] = {"exec.poststop", PF_INTERNAL}, Index: usr.sbin/jail/jail.c =================================================================== --- usr.sbin/jail/jail.c +++ usr.sbin/jail/jail.c @@ -96,6 +96,7 @@ IP_MOUNT_PROCFS, IP_EXEC_PRESTART, IP__OP, + IP_EXEC_CPUSET, IP_VNET_INTERFACE, IP_EXEC_START, IP_COMMAND, Index: usr.sbin/jail/jailp.h =================================================================== --- usr.sbin/jail/jailp.h +++ usr.sbin/jail/jailp.h @@ -81,6 +81,7 @@ IP_EXEC_CLEAN, /* Run commands in a clean environment */ IP_EXEC_CONSOLELOG, /* Redirect optput for commands run in jail */ IP_EXEC_FIB, /* Run jailed commands with this FIB */ + IP_EXEC_CPUSET, /* List of CPUs for jail cpuset */ IP_EXEC_JAIL_USER, /* Run jailed commands as this user */ IP_EXEC_POSTSTART, /* Commands run outside jail after creating */ IP_EXEC_POSTSTOP, /* Commands run outside jail after removing */