X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fplanetlab.h;h=246f66bde406630b522951a9e6674f70934e3e3f;hb=5594cc4c22c895396adc5c59d39b294f7b171de1;hp=07bbbdba53b9e618a6f00c6cb3b2e4f91839e8fc;hpb=a4c40d6625dba35d74fdc49af3f5ee79098707ca;p=util-vserver.git diff --git a/lib/planetlab.h b/lib/planetlab.h index 07bbbdb..246f66b 100644 --- a/lib/planetlab.h +++ b/lib/planetlab.h @@ -34,22 +34,51 @@ POSSIBILITY OF SUCH DAMAGE. #ifndef _LIB_PLANETLAB_H_ #define _LIB_PLANETLAB_H_ -/* - * context create - */ -typedef struct { - uint32_t cpu_share; - uint32_t cpu_sched_flags; - uint64_t mem_limit; - uint64_t task_limit; -} rspec_t; - #define VC_VXF_SCHED_FLAGS (VC_VXF_SCHED_HARD | VC_VXF_SCHED_SHARE) +struct sliver_resources { + unsigned long long vs_cpu; + struct vc_rlimit vs_rss; + struct vc_rlimit vs_as; + struct vc_rlimit vs_nproc; + struct vc_rlimit vs_openfd; +}; + +int adjust_lim(const struct vc_rlimit *vcr, struct rlimit *lim); + int -pl_chcontext(xid_t ctx, uint32_t flags, uint64_t bcaps, const rspec_t *rspec); +pl_chcontext(xid_t ctx, uint64_t bcaps, const struct sliver_resources *slr); + +int +pl_setup_done(xid_t ctx); int pl_setsched(xid_t ctx, uint32_t cpu_share, uint32_t cpu_sched_flags); +/* scheduler flags */ +#define VS_SCHED_CPU_GUARANTEED 1 + +/* Null byte made explicit */ +#define NULLBYTE_SIZE 1 + +void pl_get_limits(const char *, struct sliver_resources *); +void pl_set_ulimits(const struct sliver_resources *); + +static int +_PERROR(const char *format, char *file, int line, int _errno, ...) +{ + va_list ap; + + va_start(ap, _errno); + fprintf(stderr, "%s:%d: ", file, line); + vfprintf(stderr, format, ap); + if (_errno) + fprintf(stderr, ": %s (%d)", strerror(_errno), _errno); + fputs("\n", stderr); + fflush(stderr); + + return _errno; +} + +#define PERROR(format, args...) _PERROR(format, __FILE__, __LINE__, errno, ## args) #endif