From db88feae30e27b1f5062ca842cfe09db749a734e Mon Sep 17 00:00:00 2001 From: Daniel Hokka Zakrisson Date: Mon, 13 Nov 2006 21:53:45 +0000 Subject: [PATCH] Add the VLIMITs. Add RLIMIT_MSGQUEUE, define it ourselves if not present (like on 2.4). git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@2377 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- doc/configuration.xml | 3 ++- lib/vserver.h | 10 ++++++++++ src/vlimit.c | 50 ++++++++++++++++++++++++++++++++++---------------- 3 files changed, 46 insertions(+), 17 deletions(-) diff --git a/doc/configuration.xml b/doc/configuration.xml index d9f7c55..98b04ec 100644 --- a/doc/configuration.xml +++ b/doc/configuration.xml @@ -1226,7 +1226,8 @@ line. The special keyword 'inf' is recognized. A directory with resource limits. Possible resources are cpu, fsize, -data, stack, core, rss, nproc, nofile, memlock, as and locks. This +data, stack, core, rss, nproc, nofile, memlock, as, locks, msgqueue, +nsock, openfd, anon, shmem, semary, nsems and dentry. This configuration will be honored for kernel 2.6 only. diff --git a/lib/vserver.h b/lib/vserver.h index 105c0df..bc5eb2a 100644 --- a/lib/vserver.h +++ b/lib/vserver.h @@ -238,6 +238,16 @@ #define VC_NXF_PERSISTENT (1ULL<<38) +// the vserver specific limits +#define VC_VLIMIT_NSOCK 16 +#define VC_VLIMIT_OPENFD 17 +#define VC_VLIMIT_ANON 18 +#define VC_VLIMIT_SHMEM 19 +#define VC_VLIMIT_SEMARY 20 +#define VC_VLIMIT_NSEMS 21 +#define VC_VLIMIT_DENTRY 22 + + #define VC_BAD_PERSONALITY ((uint_least32_t)(-1)) diff --git a/src/vlimit.c b/src/vlimit.c index 27c0a77..71b3aa7 100644 --- a/src/vlimit.c +++ b/src/vlimit.c @@ -59,10 +59,16 @@ int wrapper_exit_code = 255; +#ifndef RLIMIT_MSGQUEUE +# define RLIMIT_MSGQUEUE 12 +#endif + #define NUMLIM(X) \ { #X, required_argument, 0, 2048|X } #define OPT_RESLIM(RES,V) \ { #RES, required_argument, 0, 2048|RLIMIT_##V } +#define OPT_VLIMIT(RES,V) \ + { #RES, required_argument, 0, 2048|VC_VLIMIT_##V } static struct option const CMDLINE_OPTIONS[] = { @@ -80,25 +86,36 @@ CMDLINE_OPTIONS[] = { NUMLIM(20), NUMLIM(21), NUMLIM(22), NUMLIM(23), NUMLIM(24), NUMLIM(25), NUMLIM(26), NUMLIM(27), NUMLIM(28), NUMLIM(29), NUMLIM(30), NUMLIM(31), - OPT_RESLIM(cpu, CPU), - OPT_RESLIM(fsize, FSIZE), - OPT_RESLIM(data, DATA), - OPT_RESLIM(stack, STACK), - OPT_RESLIM(core, CORE), - OPT_RESLIM(rss, RSS), - OPT_RESLIM(nproc, NPROC), - OPT_RESLIM(nofile, NOFILE), - OPT_RESLIM(memlock, MEMLOCK), - OPT_RESLIM(as, AS), - OPT_RESLIM(locks, LOCKS), + OPT_RESLIM(cpu, CPU), + OPT_RESLIM(fsize, FSIZE), + OPT_RESLIM(data, DATA), + OPT_RESLIM(stack, STACK), + OPT_RESLIM(core, CORE), + OPT_RESLIM(rss, RSS), + OPT_RESLIM(nproc, NPROC), + OPT_RESLIM(nofile, NOFILE), + OPT_RESLIM(memlock, MEMLOCK), + OPT_RESLIM(as, AS), + OPT_RESLIM(locks, LOCKS), + OPT_RESLIM(msgqueue, MSGQUEUE), + OPT_VLIMIT(nsock, NSOCK), + OPT_VLIMIT(openfd, OPENFD), + OPT_VLIMIT(anon, ANON), + OPT_VLIMIT(shmem, SHMEM), + OPT_VLIMIT(semary, SEMARY), + OPT_VLIMIT(nsems, NSEMS), + OPT_VLIMIT(dentry, DENTRY), { 0,0,0,0 } }; #define REV_RESLIM(X) [RLIMIT_##X] = #X +#define REV_VLIMIT(X) [VC_VLIMIT_##X] = #X static char const * const LIMIT_STR[] = { - REV_RESLIM(CPU), REV_RESLIM(FSIZE), REV_RESLIM(DATA), REV_RESLIM(STACK), - REV_RESLIM(CORE), REV_RESLIM(RSS), REV_RESLIM(NPROC), REV_RESLIM(NOFILE), - REV_RESLIM(MEMLOCK), REV_RESLIM(AS), REV_RESLIM(LOCKS) + REV_RESLIM(CPU), REV_RESLIM(FSIZE), REV_RESLIM(DATA), REV_RESLIM(STACK), + REV_RESLIM(CORE), REV_RESLIM(RSS), REV_RESLIM(NPROC), REV_RESLIM(NOFILE), + REV_RESLIM(MEMLOCK), REV_RESLIM(AS), REV_RESLIM(LOCKS), REV_RESLIM(MSGQUEUE), + REV_VLIMIT(NSOCK), REV_VLIMIT(OPENFD), REV_VLIMIT(ANON), REV_VLIMIT(SHMEM), + REV_VLIMIT(SEMARY), REV_VLIMIT(NSEMS), REV_VLIMIT(DENTRY), }; static void @@ -130,7 +147,8 @@ showHelp(int fd, char const *cmd, int res) " --| \n" " ... set specified (MSH) limit for to \n\n" "Valid values for resource are cpu, fsize, data, stack, core, rss, nproc,\n" - "nofile, memlock, as and locks.\n\n" + "nofile, memlock, as, locks, msgqueue, nsock, openfd, anon, shmem, semary,\n" + "nsems, and dentry.\n\n" "Please report bugs to " PACKAGE_BUGREPORT "\n"); exit(res); } @@ -198,7 +216,7 @@ showAll(int ctx) if (((mask.min|mask.soft|mask.hard) & bitmask)==0) continue; if (vc_get_rlimit(ctx, i, &limit)==-1) { perror("vc_get_rlimit()"); - //continue; + continue; } memset(buf, ' ', sizeof buf); -- 1.8.1.5