X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fplanetlab.c;h=34cf2b3e1f71833a4ec68a064ca6b04efda7b8f2;hb=5f167675beabb9f55df5fe8a579f87763764cb08;hp=44ac625c9f8e4a2e373a2903640819fe6a29d941;hpb=49591fe388c97f7e7573c88ad9fe29cf2e1b5ba1;p=util-vserver.git diff --git a/lib/planetlab.c b/lib/planetlab.c index 44ac625..34cf2b3 100644 --- a/lib/planetlab.c +++ b/lib/planetlab.c @@ -52,7 +52,6 @@ static int create_context(xid_t ctx, uint64_t bcaps, struct sliver_resources *slr) { struct vc_ctx_caps vc_caps; - struct vc_net_nx vc_net; struct vc_net_flags vc_nf; /* Create network context */ @@ -67,14 +66,6 @@ create_context(xid_t ctx, uint64_t bcaps, struct sliver_resources *slr) if (vc_set_nflags(ctx, &vc_nf)) return -1; - /* XXX: Allow access to all IPv4 addresses (for now) */ - vc_net.type = vcNET_IPV4; - vc_net.count = 1; - vc_net.ip[0] = 0; - vc_net.mask[0] = 0; - if (vc_net_add(ctx, &vc_net) == -1) - return -1; - process: /* * Create context info - this sets the STATE_SETUP and STATE_INIT flags. @@ -119,6 +110,8 @@ pl_chcontext(xid_t ctx, uint64_t bcaps, struct sliver_resources *slr) int retry_count = 0; int net_migrated = 0; + pl_set_ulimits(slr); + for (;;) { struct vc_ctx_flags vc_flags; @@ -257,8 +250,6 @@ pl_get_limits(char *context, struct sliver_resources *slr) {"rlimits/openfd.soft", &slr->vs_openfd.soft}, {"rlimits/openfd.min", &slr->vs_openfd.min}, - {"whitelisted", &slr->vs_whitelisted}, - {"bcapabilities", NULL}, {0,0} }; @@ -285,8 +276,6 @@ pl_get_limits(char *context, struct sliver_resources *slr) slr->vs_openfd.soft = VC_LIM_KEEP; slr->vs_openfd.min = VC_LIM_KEEP; - slr->vs_whitelisted = 1; - slr->vs_capabilities.bcaps = 0; slr->vs_capabilities.bmask = 0; slr->vs_capabilities.ccaps = 0; @@ -372,61 +361,62 @@ adjust_lim(struct vc_rlimit *vcr, struct rlimit *lim) return adjusted; } +static inline void +set_one_ulimit(int resource, struct vc_rlimit *limit) +{ + struct rlimit lim; + getrlimit(resource, &lim); + adjust_lim(limit, &lim); + setrlimit(resource, &lim); +} + +void +pl_set_ulimits(struct sliver_resources *slr) +{ + if (!slr) + return; + + set_one_ulimit(RLIMIT_RSS, &slr->vs_rss); + set_one_ulimit(RLIMIT_AS, &slr->vs_as); + set_one_ulimit(RLIMIT_NPROC, &slr->vs_nproc); + set_one_ulimit(RLIMIT_NOFILE, &slr->vs_openfd); +} + void pl_set_limits(xid_t ctx, struct sliver_resources *slr) { - struct rlimit lim; /* getrlimit values */ unsigned long long vs_cpu; uint32_t cpu_sched_flags; if (slr != 0) { /* set memory limits */ - getrlimit(RLIMIT_RSS,&lim); - if (adjust_lim(&slr->vs_rss, &lim)) { - setrlimit(RLIMIT_RSS, &lim); - if (vc_set_rlimit(ctx, RLIMIT_RSS, &slr->vs_rss)) - { - PERROR("pl_setrlimit(%u, RLIMIT_RSS)", ctx); - exit(1); - } + if (vc_set_rlimit(ctx, RLIMIT_RSS, &slr->vs_rss)) { + PERROR("pl_setrlimit(%u, RLIMIT_RSS)", ctx); + exit(1); } /* set address space limits */ - getrlimit(RLIMIT_AS,&lim); - if (adjust_lim(&slr->vs_as, &lim)) { - setrlimit(RLIMIT_AS, &lim); - if (vc_set_rlimit(ctx, RLIMIT_AS, &slr->vs_as)) - { - PERROR("pl_setrlimit(%u, RLIMIT_AS)", ctx); - exit(1); - } + if (vc_set_rlimit(ctx, RLIMIT_AS, &slr->vs_as)) { + PERROR("pl_setrlimit(%u, RLIMIT_AS)", ctx); + exit(1); } + /* set nrpoc limit */ - getrlimit(RLIMIT_NPROC,&lim); - if (adjust_lim(&slr->vs_nproc, &lim)) { - setrlimit(RLIMIT_NPROC, &lim); - if (vc_set_rlimit(ctx, RLIMIT_NPROC, &slr->vs_nproc)) - { - PERROR("pl_setrlimit(%u, RLIMIT_NPROC)", ctx); - exit(1); - } + if (vc_set_rlimit(ctx, RLIMIT_NPROC, &slr->vs_nproc)) { + PERROR("pl_setrlimit(%u, RLIMIT_NPROC)", ctx); + exit(1); } /* set openfd limit */ - getrlimit(RLIMIT_NOFILE,&lim); - if (adjust_lim(&slr->vs_openfd, &lim)) { - setrlimit(RLIMIT_NOFILE, &lim); - if (vc_set_rlimit(ctx, RLIMIT_NOFILE, &slr->vs_openfd)) - { - PERROR("pl_setrlimit(%u, RLIMIT_NOFILE)", ctx); - exit(1); - } - if (vc_set_rlimit(ctx, VC_VLIMIT_OPENFD, &slr->vs_openfd)) - { - PERROR("pl_setrlimit(%u, VLIMIT_OPENFD)", ctx); - exit(1); - } + if (vc_set_rlimit(ctx, RLIMIT_NOFILE, &slr->vs_openfd)) { + PERROR("pl_setrlimit(%u, RLIMIT_NOFILE)", ctx); + exit(1); } + if (vc_set_rlimit(ctx, VC_VLIMIT_OPENFD, &slr->vs_openfd)) { + PERROR("pl_setrlimit(%u, VLIMIT_OPENFD)", ctx); + exit(1); + } + vs_cpu = slr->vs_cpu; cpu_sched_flags = slr->vs_cpuguaranteed & VS_SCHED_CPU_GUARANTEED;