X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Flib%2Fvserver.h;h=b997d299bcbf8b2dc351657056f8b75e40eeb186;hb=3eb1b2279739d0f16391a3724a9897c686f030d3;hp=2c13e7035ab36da7e69d922a8ef723e354c57591;hpb=e6258d71f3fdb31544bd67b2e06c6c7eb8a4296b;p=util-vserver.git diff --git a/util-vserver/lib/vserver.h b/util-vserver/lib/vserver.h index 2c13e70..b997d29 100644 --- a/util-vserver/lib/vserver.h +++ b/util-vserver/lib/vserver.h @@ -72,6 +72,9 @@ #define VC_LIM_INFINITY (~0ULL) #define VC_LIM_KEEP (~1ULL) +#define VC_CDLIM_UNSET (0U) +#define VC_CDLIM_INFINITY (~0U) +#define VC_CDLIM_KEEP (~1U) #ifndef S_CTX_INFO_LOCK # define S_CTX_INFO_LOCK 1 @@ -169,6 +172,7 @@ #define VC_VXF_VIRT_MEM 0x00010000ull #define VC_VXF_VIRT_UPTIME 0x00020000ull #define VC_VXF_VIRT_CPU 0x00040000ull +#define VC_VXF_VIRT_LOAD 0x00080000ull #define VC_VXF_HIDE_MOUNT 0x01000000ull #define VC_VXF_HIDE_NETIF 0x02000000ull @@ -176,13 +180,29 @@ #define VC_VXF_STATE_SETUP (1ULL<<32) #define VC_VXF_STATE_INIT (1ULL<<33) +#define VC_VXF_FORK_RSS (1ULL<<48) +#define VC_VXF_PROLIFIC (1ULL<<49) + +#define VC_VXF_IGNEG_NICE (1ULL<<52) + + // the ccapabilities #define VC_VXC_SET_UTSNAME 0x00000001ull #define VC_VXC_SET_RLIMIT 0x00000002ull -#define VC_VXC_ICMP_PING 0x00000100ull +#define VC_VXC_RAW_ICMP 0x00000100ull #define VC_VXC_SECURE_MOUNT 0x00010000ull +#define VC_VXC_SECURE_REMOUNT 0x00020000ull + + +#define VC_VXSM_FILL_RATE 0x0001 +#define VC_VXSM_INTERVAL 0x0002 +#define VC_VXSM_TOKENS 0x0010 +#define VC_VXSM_TOKENS_MIN 0x0020 +#define VC_VXSM_TOKENS_MAX 0x0040 +#define VC_VXSM_PRIO_BIAS 0x0100 + /** \defgroup syscalls Syscall wrappers @@ -215,9 +235,9 @@ extern "C" { * correct syscallnumber (which may differ between the different * architectures). * - * \params cmd the command to be executed - * \params xid the xid on which the cmd shall be applied - * \params data additional arguments; depends on \c cmd + * \param cmd the command to be executed + * \param xid the xid on which the cmd shall be applied + * \param data additional arguments; depends on \c cmd * \returns depends on \c cmd; usually, -1 stands for an error */ int vc_syscall(uint32_t cmd, xid_t xid, void *data); @@ -241,7 +261,7 @@ extern "C" { * \param remove_cap The linux capabilities which will be \b removed. * \param flags Special flags which will be set. * - * \returns The new context-id, or VC_NOCTX on errors; errno + * \returns The new context-id, or VC_NOCTX on errors; \c errno * will be set appropriately * * See http://vserver.13thfloor.at/Stuff/Logic.txt for details */ @@ -270,7 +290,7 @@ extern "C" { * \param xid The new context; special values are: * - VC_DYNAMIC_XID which means to create a dynamic context * - * \returns the xid of the created context, or VC_NOCTX on errors. errno + * \returns the xid of the created context, or VC_NOCTX on errors. \c errno * will be set appropriately. */ xid_t vc_ctx_create(xid_t xid); @@ -407,6 +427,33 @@ extern "C" { int vc_set_iattr(char const *filename, xid_t xid, uint_least32_t flags, uint_least32_t mask) VC_ATTR_NONNULL((1)); + + /** \brief Returns information about attributes and assigned context of a file. + * \ingroup syscalls + * + * This function returns the VC_IATTR_XXX flags and about the assigned + * context of a file. To request an information, the appropriate bit in + * \c mask must be set and the corresponding parameter (\a xid or \a + * flags) must not be NULL. + * + * E.g. to receive the assigned context, the \c VC_IATTR_XID bit must be + * set in \a mask, and \a xid must point to valid memory. + * + * Possible flags are \c VC_IATTR_ADMIN, \c VC_IATTR_WATCH , \c VC_IATTR_HIDE, + * \c VC_IATTR_BARRIER, \c VC_IATTR_IUNLINK and \c VC_IATTR_IMMUTABLE. + * + * \param filename The name of the file whose attributes shall be determined. + + * \param xid When non-zero and the VC_IATTR_XID bit is set in \a mask, + * the assigned context of \a filename will be stored there. + * \param flags When non-zero, a bitmask of current attributes will be + * stored there. These attributes must be requested explicitly + * by setting the appropriate bit in \a mask + * \param mask Points to a bitmask which tells which attributes shall be + * determined. On return, it will masquerade the attributes + * which were determined. + * + * \pre mask!=0 && !((*mask&VC_IATTR_XID) && xid==0) && !((*mask&~VC_IATTR_XID) && flags==0) */ int vc_get_iattr(char const *filename, xid_t * /*@null@*/ xid, uint_least32_t * /*@null@*/ flags, uint_least32_t * /*@null@*/ mask) VC_ATTR_NONNULL((1)); @@ -416,9 +463,10 @@ extern "C" { pid_t initpid; }; - /** \brief Returns the context of the given process. + /** \brief Returns the context of the given process. + * \ingroup syscalls * - * \params pid the process-id whose xid shall be determined; + * \param pid the process-id whose xid shall be determined; * pid==0 means the current process. * \returns the xid of process \c pid or -1 on errors */ @@ -578,35 +626,68 @@ extern "C" { uint_least64_t vc_get_insecurebcaps() VC_ATTR_CONST; inline static uint_least64_t vc_get_insecureccaps() { - return ~(VC_VXC_SET_UTSNAME|VC_VXC_ICMP_PING); - } - inline static uint_least64_t vc_get_insecureflags() { - return VC_VXF_HIDE_NETIF; + return ~(VC_VXC_SET_UTSNAME|VC_VXC_RAW_ICMP); } inline static int vc_setfilecontext(char const *filename, xid_t xid) { return vc_set_iattr(filename, xid, 0, VC_IATTR_XID); } - inline static xid_t vc_getfilecontext(char const *filename) { - xid_t res; - if (vc_get_iattr(filename, &res, 0,0)==-1) return VC_NOCTX; - return res; - } + /** \brief Returns the context of \c filename + * \ingroup syscalls + * + * This function calls vc_get_iattr() with appropriate arguments to + * determine the context of \c filename. In error-case or when no context + * is assigned, \c VC_NOCTX will be returned. To differ between both cases, + * \c errno must be examined. + * + * \b WARNING: this function can modify \c errno although no error happened. + * + * \param filename The file to check + * \returns The assigned context, or VC_NOCTX when an error occured or no + * such assignment exists. \c errno will be 0 in the latter case */ + xid_t vc_getfilecontext(char const *filename) VC_ATTR_NONNULL((1)); struct vc_set_sched { - int32_t fill_rate; - int32_t interval; - int32_t tokens; - int32_t tokens_min; - int32_t tokens_max; - uint64_t cpu_mask; + uint_least32_t set_mask; + int_least32_t fill_rate; + int_least32_t interval; + int_least32_t tokens; + int_least32_t tokens_min; + int_least32_t tokens_max; + int_least32_t priority_bias; }; int vc_set_sched(xid_t xid, struct vc_set_sched const *); + + + struct vc_ctx_dlimit { + uint_least32_t space_used; + uint_least32_t space_total; + uint_least32_t inodes_used; + uint_least32_t inodes_total; + uint_least32_t reserved; + }; + + /** Add a disk limit to a file system. */ + int vc_add_dlimit(char const *filename, xid_t xid, + uint_least32_t flags) VC_ATTR_NONNULL((1)); + /** Remove a disk limit from a file system. */ + int vc_rem_dlimit(char const *filename, xid_t xid, + uint_least32_t flags) VC_ATTR_NONNULL((1)); + + /** Set a disk limit. */ + int vc_set_dlimit(char const *filename, xid_t xid, + uint_least32_t flags, + struct vc_ctx_dlimit const *limits) VC_ATTR_NONNULL((1,4)); + /** Get a disk limit. */ + int vc_get_dlimit(char const *filename, xid_t xid, + uint_least32_t flags, + struct vc_ctx_dlimit *limits) VC_ATTR_NONNULL((1)); + typedef enum { vcFEATURE_VKILL, vcFEATURE_IATTR, vcFEATURE_RLIMIT, vcFEATURE_COMPAT, vcFEATURE_MIGRATE, vcFEATURE_NAMESPACE, vcFEATURE_SCHED, vcFEATURE_VINFO, vcFEATURE_VHI, @@ -616,6 +697,13 @@ extern "C" { bool vc_isSupported(vcFeatureSet) VC_ATTR_CONST; bool vc_isSupportedString(char const *); + + typedef enum { vcTYPE_INVALID, vcTYPE_MAIN, vcTYPE_WATCH, + vcTYPE_STATIC, vcTYPE_DYNAMIC } + vcXidType; + + vcXidType vc_getXIDType(xid_t xid) VC_ATTR_CONST; + /* The management part */ #define VC_LIMIT_VSERVER_NAME_LEN 1024 @@ -666,15 +754,16 @@ extern "C" { freed by the caller. */ char * vc_getVserverByCtx(xid_t ctx, /*@null@*/vcCfgStyle *style, /*@null@*/char const *revdir); - + #define vcSKEL_INTERFACES 1u #define vcSKEL_PKGMGMT 2u #define vcSKEL_FILESYSTEM 4u - + /** Create a basic configuration skeleton for a vserver plus toplevel * directories for pkgmanagemt and filesystem (when requested). */ int vc_createSkeleton(char const *id, vcCfgStyle style, int flags); - + + #ifdef __cplusplus } #endif