/** the value which is returned in error-case (no ctx found) */
#define VC_NOCTX ((xid_t)(-1))
/** the value which means a random (the next free) ctx */
-#define VC_RANDCTX ((xid_t)(-1))
+#define VC_DYNAMIC_XID ((xid_t)(-1))
/** the value which means the current ctx */
#define VC_SAMECTX ((xid_t)(-2))
# define S_CTX_INFO_ULIMIT 64
#endif
+#ifndef S_CTX_INFO_NAMESPACE
+# define S_CTX_INFO_NAMESPACE 128
+#endif
+
#define VC_CAP_CHOWN 0
#define VC_CAP_DAC_OVERRIDE 1
#define VC_CAP_DAC_READ_SEARCH 2
#define VC_IATTR_ADMIN 0x00000001
#define VC_IATTR_WATCH 0x00000002
#define VC_IATTR_HIDE 0x00000004
+#define VC_IATTR_FLAGS 0x00000007
#define VC_IATTR_BARRIER 0x00010000
#define VC_IATTR_IUNLINK 0x00020000
-
+#define VC_IATTR_IMMUTABLE 0x00040000
#ifdef __cplusplus
extern "C" {
/** Sets the ipv4root information.
* \precondition: nb<16 */
int vc_set_ipv4root(uint32_t bcast, size_t nb, struct vc_ip_mask_pair const *ips);
+
+ xid_t vc_create_context(xid_t xid);
+ int vc_migrate_context(xid_t xid);
/* rlimit related functions */
- typedef uint64_t vc_limit_t;
-
-
+ typedef uint_least64_t vc_limit_t;
+
struct vc_rlimit {
- vc_limit_t min;
- vc_limit_t soft;
- vc_limit_t hard;
+ vc_limit_t min;
+ vc_limit_t soft;
+ vc_limit_t hard;
};
struct vc_rlimit_mask {
- uint32_t min;
- uint32_t soft;
- uint32_t hard;
+ uint_least32_t min;
+ uint_least32_t soft;
+ uint_least32_t hard;
};
int vc_get_rlimit(xid_t ctx, int resource, struct vc_rlimit *lim);
- int vc_set_iattr(char const *filename, xid_t xid, uint32_t flags, uint32_t mask);
+ int vc_set_iattr(char const *filename, xid_t xid,
+ uint_least32_t flags, uint_least32_t mask);
int vc_get_iattr(char const *filename, xid_t * /*@null@*/ xid,
- uint32_t * /*@null@*/ flags, uint32_t * /*@null@*/ mask);
+ uint_least32_t * /*@null@*/ flags,
+ uint_least32_t * /*@null@*/ mask);
struct vc_vx_info {
xid_t xid;
int vc_get_vhi_name(xid_t xid, vc_uts_type type, char *val, size_t len);
- uint32_t vc_textlist2flag(char const *, size_t len,
- char const **err_ptr, size_t *err_len);
- uint32_t vc_text2flag(char const *, size_t len);
- char const * vc_hiflag2text(unsigned int);
+ int vc_enter_namespace(xid_t xid);
+ int vc_set_namespace();
+ int vc_cleanup_namespace();
+
+ struct vc_ctx_flags {
+ uint_least64_t flagword;
+ uint_least64_t mask;
+ };
+
+ int vc_get_flags(xid_t xid, struct vc_ctx_flags *);
+ int vc_set_flags(xid_t xid, struct vc_ctx_flags const *);
+
+ int vc_list2flag(char const *, size_t len,
+ char const **err_ptr, size_t *err_len,
+ uint_least64_t *flag,
+ uint_least64_t *mask);
+ uint_least64_t vc_text2flag(char const *, size_t len);
+ char const * vc_hiflag2text(uint_least64_t);
+
+ uint_least32_t vc_list2flag_compat(char const *, size_t len,
+ char const **err_ptr, size_t *err_len);
+ uint_least32_t vc_text2flag_compat(char const *, size_t len);
+ char const * vc_hiflag2text_compat(uint_least32_t);
int vc_text2cap(char const *);
char const * vc_cap2text(unsigned int);
- inline static int vc_get_securecaps() {
+ inline static uint_least32_t vc_get_securecaps() {
return ( (1<<VC_CAP_LINUX_IMMUTABLE) | (1<<VC_CAP_NET_BROADCAST) |
(1<<VC_CAP_NET_ADMIN) | (1<<VC_CAP_NET_RAW) |
(1<<VC_CAP_IPC_LOCK) | (1<<VC_CAP_IPC_OWNER) |
if (vc_get_iattr(filename, &res, 0,0)==-1) return VC_NOCTX;
return res;
}
+
+
+ struct vc_set_sched {
+ int32_t fill_rate;
+ int32_t period;
+ int32_t fill_level;
+ int32_t bucket_size;
+ };
+
+ int vc_set_sched(xid_t xid, struct vc_set_sched const *);
+ typedef enum { vcFEATURE_VKILL, vcFEATURE_IATTR, vcFEATURE_RLIMIT,
+ vcFEATURE_COMPAT, vcFEATURE_MIGRATE, vcFEATURE_NAMESPACE,
+ vcFEATURE_SCHED, vcFEATURE_VINFO, vcFEATURE_VHI }
+ vcFeatureSet;
+
+ bool vc_isSupported(vcFeatureSet);
+ bool vc_isSupportedString(char const *);
+
/* The management part */
#define VC_LIMIT_VSERVER_NAME_LEN 1024