#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))
* \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
* \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 */
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
*
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
*
/** 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
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;
/** 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);