updated to 2.6.13.3-vs2.1.0-rc4 headers
[util-vserver.git] / util-vserver / lib / vserver.h
index 9a4bf7b..d7de781 100644 (file)
@@ -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
 #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
 #define VC_VXC_SET_RLIMIT              0x00000002ull
 
 #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_PRIO_BIAS              0x0100
 
 
+#define VC_BAD_PERSONALITY             ((uint_least32_t)(-1))
+
 
 /** \defgroup  syscalls Syscall wrappers
  *  Functions which are calling the vserver syscall directly. */
@@ -232,9 +242,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);
@@ -258,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 */
@@ -287,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);
 
@@ -424,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));
@@ -433,9 +470,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
      */
@@ -601,12 +639,35 @@ extern "C" {
   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 {
@@ -620,17 +681,54 @@ extern "C" {
   };
 
   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
@@ -682,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