Only enter the namespaces for static and dynamic xids (i.e. not the spectator).
[util-vserver.git] / lib / vserver.h
index 68cee6b..bb0b93a 100644 (file)
@@ -28,6 +28,7 @@
 #include <stdlib.h>
 #include <stdbool.h>
 #include <sys/types.h>
+#include <sched.h>
 
 #ifndef IS_DOXYGEN
 #if defined(__GNUC__)
 
 #define VC_VXC_QUOTA_CTL               0x00100000ull
 #define VC_VXC_ADMIN_MAPPER            0x00200000ull
-#define VC_VXC_ADMIN_LOOP              0x00400000ull
+#define VC_VXC_ADMIN_CLOOP             0x00400000ull
 
 
 // the scheduler flags
 
 // the network flags
 #define VC_NXF_INFO_LOCK               0x00000001ull
+#define VC_NXF_INFO_PRIVATE            0x00000008ull
+
+#define VC_NXF_SINGLE_IP               0x00000100ull
+
+#define VC_NXF_HIDE_NETIF              0x02000000ull
 
 #define VC_NXF_STATE_SETUP             (1ULL<<32)
 #define VC_NXF_STATE_ADMIN             (1ULL<<34)
 #define VC_NXF_PERSISTENT              (1ULL<<38)
 
 
+// the vserver specific limits
+#define VC_VLIMIT_NSOCK                        16
+#define VC_VLIMIT_OPENFD               17
+#define VC_VLIMIT_ANON                 18
+#define VC_VLIMIT_SHMEM                        19
+#define VC_VLIMIT_SEMARY               20
+#define VC_VLIMIT_NSEMS                        21
+#define VC_VLIMIT_DENTRY               22
+#define VC_VLIMIT_MAPPED               23
+
+
+// the VCI bit values
+#define VC_VCI_NO_DYNAMIC              (1 << 0)
+#define VC_VCI_SPACES                  (1 << 10)
+
+
+#ifndef CLONE_NEWNS
+#  define CLONE_NEWNS                  0x00020000
+#endif
+#ifndef CLONE_NEWUTS
+#  define CLONE_NEWUTS                 0x04000000
+#endif
+#ifndef CLONE_NEWIPC
+#  define CLONE_NEWIPC                 0x08000000
+#endif
+
+
 
 #define VC_BAD_PERSONALITY             ((uint_least32_t)(-1))
 
@@ -284,6 +317,12 @@ extern "C" {
      * \returns The versionnumber of the kernel API
      */
   int  vc_get_version();
+
+    /** \brief   Returns the kernel configuration bits
+     *  \ingroup syscalls
+     *  \returns The kernel configuration bits
+     */
+  int   vc_get_vci();
   
     /** \brief   Moves current process into a context
      *  \ingroup syscalls
@@ -337,6 +376,42 @@ extern "C" {
      *  \param   xid  The new context
      *  \returns 0 on success, -1 on errors */
   int  vc_ctx_migrate(xid_t xid);
+
+    /** \brief   Statistics about a context */
+  struct vc_ctx_stat {
+      uint_least32_t   usecnt; ///< number of uses
+      uint_least32_t   tasks;  ///< number of tasks
+  };
+
+    /** \brief   Get some statistics about a context.
+     *  \ingroup syscalls
+     *
+     *  \param   xid   The context to get stats about
+     *  \param   stat  Where to store the result
+     *
+     *  \returns 0 on success, -1 on errors. */
+  int   vc_ctx_stat(xid_t xid, struct vc_ctx_stat /*@out@*/ *stat) VC_ATTR_NONNULL((2));
+
+    /** \brief   Contains further statistics about a context. */
+  struct vc_virt_stat {
+      uint_least64_t   offset;
+      uint_least32_t   uptime;
+      uint_least32_t   nr_threads;
+      uint_least32_t   nr_running;
+      uint_least32_t   nr_uninterruptible;
+      uint_least32_t   nr_onhold;
+      uint_least32_t   nr_forks;
+      uint_least32_t   load[3];
+  };
+
+    /** \brief   Get more statistics about a context.
+     *  \ingroup syscalls
+     *
+     *  \param xid   The context to get stats about
+     *  \param stat  Where to store the result
+     *
+     *  \returns 0 on success, -1 on errors. */
+  int   vc_virt_stat(xid_t xid, struct vc_virt_stat /*@out@*/ *stat) VC_ATTR_NONNULL((2));
   
     /* rlimit related functions */
   
@@ -367,6 +442,14 @@ extern "C" {
       uint_least32_t   hard;   ///< masks the resources supporting a hard limit
   };
 
+    /** \brief Statistics for a resource limit. */
+  struct  vc_rlimit_stat {
+      uint_least32_t   hits;    ///< number of hits on the limit
+      uint_least64_t   value;   ///< current value
+      uint_least64_t   minimum; ///< minimum value observed
+      uint_least64_t   maximum; ///< maximum value observed
+  };
+
     /** \brief   Returns the limits of \a resource.
      *  \ingroup syscalls
      *
@@ -389,6 +472,23 @@ extern "C" {
                      struct vc_rlimit const /*@in@*/  *lim) VC_ATTR_NONNULL((3));
   int  vc_get_rlimit_mask(xid_t xid,
                           struct vc_rlimit_mask *lim)       VC_ATTR_NONNULL((2));
+    /** \brief   Returns the current stats of \a resource.
+     *  \ingroup syscalls
+     *
+     *  \param  xid       The id of the context
+     *  \param  resource  The resource which will be queried
+     *  \param  stat      The result which will be filled with the stats
+     *
+     *  \returns 0 on success, and -1 on errors. */
+  int   vc_rlimit_stat(xid_t xid, int resource,
+                      struct vc_rlimit_stat /*@out@*/ *stat) VC_ATTR_NONNULL((3));
+    /** \brief   Resets the minimum and maximum observed values for all resources.
+     *  \ingroup syscalls
+     *
+     *  \param xid  The id of the context
+     *
+     *  \returns 0 on success, and -1 on errors. */
+  int   vc_reset_minmax(xid_t xid);
     /** \brief   Parses a string describing a limit
      *  \ingroup helper
      *
@@ -525,9 +625,10 @@ extern "C" {
     /** Returns true iff \a xid is a dynamic xid */
   bool         vc_is_dynamic_xid(xid_t xid);
 
-  int          vc_enter_namespace(xid_t xid);
-  int          vc_set_namespace();
+  int          vc_enter_namespace(xid_t xid, uint_least64_t mask);
+  int          vc_set_namespace(xid_t xid, uint_least64_t mask);
   int          vc_cleanup_namespace();
+  uint_least64_t vc_get_space_mask();
 
   
   /** \brief    Flags of process-contexts
@@ -706,6 +807,8 @@ extern "C" {
       uint_least32_t   set_mask;
       int_least32_t    fill_rate;
       int_least32_t    interval;
+      int_least32_t    fill_rate2;
+      int_least32_t    interval2;
       int_least32_t    tokens;
       int_least32_t    tokens_min;
       int_least32_t    tokens_max;
@@ -776,6 +879,8 @@ extern "C" {
 
   /** Maps an xid given at '--xid' options to an xid_t */
   xid_t                vc_xidopt2xid(char const *, bool honor_static, char const **err_info);
+  /** Maps a  nid given at '--nid' options to a  nid_t */
+  nid_t                vc_nidopt2nid(char const *, bool honor_static, char const **err_info);
 
   vcCfgStyle   vc_getVserverCfgStyle(char const *id);