#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
#define VC_VXSM_PRIO_BIAS 0x0100
+#define VC_BAD_PERSONALITY ((uint_least32_t)(-1))
+
/** \defgroup syscalls Syscall wrappers
* Functions which are calling the vserver syscall directly. */
* 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);
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));
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
*/
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));
+
+ 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
};
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
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