fixed segfault when no arguments are given (reported by Adrian Reyer)
[util-vserver.git] / util-vserver / lib / vserver.h
index 88423fb..18c0c93 100644 (file)
@@ -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 */
 #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
 #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
@@ -203,10 +221,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).
+     *
+     *  \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
+     *  \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 +258,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 +287,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 +383,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));
 
@@ -401,7 +433,12 @@ 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.
+     *
+     *  \params 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 +488,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,27 +595,37 @@ 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);
   }
   
-  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 *);