X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Flib%2Fvserver.h;h=d7de781eed6ba938fefa78b4014e9543b0c3014f;hb=77d302326fbb2bc08b55f228627f83f2be1dbc0b;hp=88423fb6d2bf000255e06be8445578aa2a73c856;hpb=ee506d827f44c30f6e0e6c7c9db291b355f93b79;p=util-vserver.git diff --git a/util-vserver/lib/vserver.h b/util-vserver/lib/vserver.h index 88423fb..d7de781 100644 --- a/util-vserver/lib/vserver.h +++ b/util-vserver/lib/vserver.h @@ -60,6 +60,7 @@ /** the value which is returned in error-case (no ctx found) */ #define VC_NOCTX ((xid_t)(-1)) +#define VC_NOXID ((xid_t)(-1)) /** the value which means a random (the next free) ctx */ #define VC_DYNAMIC_XID ((xid_t)(-1)) /** the value which means the current ctx */ @@ -71,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 @@ -133,7 +137,8 @@ #define VC_CAP_SYS_TTY_CONFIG 26 #define VC_CAP_MKNOD 27 #define VC_CAP_LEASE 28 -#define VC_CAP_QUOTACTL 29 +#define VC_CAP_AUDIT_WRITE 29 +#define VC_CAP_AUDIT_CONTROL 30 #define VC_IMMUTABLE_FILE_FL 0x0000010lu #define VC_IMMUTABLE_LINK_FL 0x0008000lu @@ -168,6 +173,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 @@ -175,13 +181,35 @@ #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_SYSLOG 0x00001000ull #define VC_VXC_SECURE_MOUNT 0x00010000ull +#define VC_VXC_SECURE_REMOUNT 0x00020000ull +#define VC_VXC_BINARY_MOUNT 0x00040000ull + +#define VC_VXC_QUOTA_CTL 0x00100000ull + + +#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 + + +#define VC_BAD_PERSONALITY ((uint_least32_t)(-1)) /** \defgroup syscalls Syscall wrappers @@ -203,10 +231,24 @@ extern "C" { #endif struct vc_ip_mask_pair { - uint32_t ip; + uint32_t ip; uint32_t mask; }; + /** \brief The generic vserver syscall + * \ingroup syscalls + * + * This function executes the generic vserver syscall. It uses the + * correct syscallnumber (which may differ between the different + * architectures). + * + * \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); + /** \brief Returns the version of the current kernel API. * \ingroup syscalls * \returns The versionnumber of the kernel API @@ -226,7 +268,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 */ @@ -255,7 +297,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); @@ -351,7 +393,7 @@ extern "C" { struct vc_nx_info { nid_t nid; }; - + nid_t vc_get_task_nid(pid_t pid); int vc_get_nx_info(nid_t nid, struct vc_nx_info *) VC_ATTR_NONNULL((2)); @@ -392,6 +434,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)); @@ -401,7 +470,13 @@ extern "C" { pid_t initpid; }; - /** Returns the context of the given process. pid==0 means the current process. */ + /** \brief Returns the context of the given process. + * \ingroup syscalls + * + * \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 + */ xid_t vc_get_task_xid(pid_t pid); int vc_get_vx_info(xid_t xid, struct vc_vx_info *info) VC_ATTR_NONNULL((2)); @@ -451,6 +526,7 @@ extern "C" { }; /** \brief Information about parsing errors + * \ingroup helper */ struct vc_err_listparser { char const *ptr; ///< Pointer to the first character of an erroneous string @@ -557,41 +633,102 @@ 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); + 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); } + + + uint_least32_t vc_text2personalityflag(char const *str, + size_t len) VC_ATTR_NONNULL((1)); + + char const * vc_lopersonality2text(uint_least32_t *) VC_ATTR_NONNULL((1)); - 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; - } + int vc_list2personalityflag(char const /*@in@*/ *, + size_t len, + uint_least32_t /*@out@*/ *personality, + struct vc_err_listparser /*@out@*/ *err) VC_ATTR_NONNULL((1,3)); + + uint_least32_t vc_str2personalitytype(char const /*@in@*/*, + size_t len) VC_ATTR_NONNULL((1)); + + /** \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)); + + /** \brief Waits for the end of a context + * \ingroup syscalls + */ + int vc_wait_exit(xid_t xid); + typedef enum { vcFEATURE_VKILL, vcFEATURE_IATTR, vcFEATURE_RLIMIT, vcFEATURE_COMPAT, vcFEATURE_MIGRATE, vcFEATURE_NAMESPACE, vcFEATURE_SCHED, vcFEATURE_VINFO, vcFEATURE_VHI, - vcFEATURE_VSHELPER0, vcFEATURE_VSHELPER } + vcFEATURE_VSHELPER0, vcFEATURE_VSHELPER, vcFEATURE_VWAIT } vcFeatureSet; 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 @@ -643,14 +780,18 @@ extern "C" { char * vc_getVserverByCtx(xid_t ctx, /*@null@*/vcCfgStyle *style, /*@null@*/char const *revdir); + int vc_compareVserverById(char const *lhs, vcCfgStyle lhs_style, + char const *rhs, vcCfgStyle rhs_style); + #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