X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fvserver.h;h=be896e134d0757874e1cc66cfa51ed70c56c569b;hb=c8219c13d0a45263725d23d6aa3adf49d6cc36a5;hp=a6708a7e06e100fa360669ed2f6ab7e7c66b5faa;hpb=0d4cba12770c5b09a3380f456a6a2f6787042ee7;p=util-vserver.git diff --git a/lib/vserver.h b/lib/vserver.h index a6708a7..be896e1 100644 --- a/lib/vserver.h +++ b/lib/vserver.h @@ -29,6 +29,7 @@ #include #include #include +#include #ifndef IS_DOXYGEN #if defined(__GNUC__) @@ -210,6 +211,8 @@ #define VC_VXC_ADMIN_MAPPER 0x00200000ull #define VC_VXC_ADMIN_CLOOP 0x00400000ull +#define VC_VXC_KTHREAD 0x01000000ull + // the scheduler flags #define VC_VXSM_FILL_RATE 0x0001 @@ -225,6 +228,7 @@ #define VC_VXSM_IDLE_TIME 0x0200 #define VC_VXSM_FORCE 0x0400 +#define VC_VXSM_MSEC 0x4000 #define VC_VXSM_V3_MASK 0x0173 @@ -234,8 +238,10 @@ #define VC_NXF_INFO_PRIVATE 0x00000008ull #define VC_NXF_SINGLE_IP 0x00000100ull +#define VC_NXF_LBACK_REMAP 0x00000200ull #define VC_NXF_HIDE_NETIF 0x02000000ull +#define VC_NXF_HIDE_LBACK 0x04000000ull #define VC_NXF_STATE_SETUP (1ULL<<32) #define VC_NXF_STATE_ADMIN (1ULL<<34) @@ -244,6 +250,10 @@ #define VC_NXF_PERSISTENT (1ULL<<38) +// the network capabilities +#define VC_NXC_RAW_ICMP 0x00000100ull + + // the vserver specific limits #define VC_VLIMIT_NSOCK 16 #define VC_VLIMIT_OPENFD 17 @@ -258,6 +268,8 @@ // the VCI bit values #define VC_VCI_NO_DYNAMIC (1 << 0) #define VC_VCI_SPACES (1 << 10) +#define VC_VCI_NETV2 (1 << 11) +#define VC_VCI_PPTAG (1 << 28) // the device mapping flags @@ -267,6 +279,26 @@ #define VC_DATTR_REMAP 0x00000010 +// the process context migration flags +#define VC_VXM_SET_INIT 0x00000001 +#define VC_VXM_SET_REAPER 0x00000002 + + +// the network address flags +#define VC_NXA_TYPE_IPV4 0x0001 +#define VC_NXA_TYPE_IPV6 0x0002 + +#define VC_NXA_TYPE_NONE 0x0000 +#define VC_NXA_TYPE_ANY 0x00FF + +#define VC_NXA_TYPE_ADDR 0x0010 +#define VC_NXA_TYPE_MASK 0x0020 +#define VC_NXA_TYPE_RANGE 0x0040 + +#define VC_NXA_MOD_BCAST 0x0100 +#define VC_NXA_MOD_LBACK 0x0200 + + #ifndef CLONE_NEWNS # define CLONE_NEWNS 0x00020000 #endif @@ -276,7 +308,9 @@ #ifndef CLONE_NEWIPC # define CLONE_NEWIPC 0x08000000 #endif - +#ifndef CLONE_NEWUSER +# define CLONE_NEWUSER 0x10000000 +#endif #define VC_BAD_PERSONALITY ((uint_least32_t)(-1)) @@ -294,6 +328,7 @@ #ifdef IS_DOXYGEN typedef an_unsigned_integer_type xid_t; typedef an_unsigned_integer_type nid_t; +typedef an_unsigned_integer_type tag_t; #endif #ifdef __cplusplus @@ -320,11 +355,12 @@ extern "C" { */ int vc_get_version(); + typedef uint64_t vc_vci_t; /** \brief Returns the kernel configuration bits * \ingroup syscalls * \returns The kernel configuration bits */ - int vc_get_vci(); + vc_vci_t vc_get_vci(); /** \brief Moves current process into a context * \ingroup syscalls @@ -387,14 +423,15 @@ extern "C" { * * \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); + xid_t vc_ctx_create(xid_t xid, struct vc_ctx_flags *flags); /** \brief Moves the current process into the specified context. * \ingroup syscalls * - * \param xid The new context + * \param xid The new context + * \param flags The flags, see VC_VXM_* * \returns 0 on success, -1 on errors */ - int vc_ctx_migrate(xid_t xid); + int vc_ctx_migrate(xid_t xid, uint_least64_t flags); /** \brief Statistics about a context */ struct vc_ctx_stat { @@ -414,7 +451,7 @@ extern "C" { /** \brief Contains further statistics about a context. */ struct vc_virt_stat { uint_least64_t offset; - uint_least32_t uptime; + uint_least64_t uptime; uint_least32_t nr_threads; uint_least32_t nr_running; uint_least32_t nr_uninterruptible; @@ -594,15 +631,31 @@ extern "C" { 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)); - typedef enum { vcNET_IPV4=1, vcNET_IPV6=2, - vcNET_IPV4B=0x101, vcNET_IPV6B=0x102, - vcNET_ANY=~0 } vc_net_nx_type; - - struct vc_net_nx { - vc_net_nx_type type; - size_t count; - uint32_t ip[4]; - uint32_t mask[4]; + struct vc_net_addr { + uint16_t vna_type; + uint16_t vna_flags; + uint16_t vna_prefix; + uint16_t vna_parent; + struct { + union { + struct in_addr v4; + struct in6_addr v6; + } ip; + union { + struct in_addr v4; + struct in6_addr v6; + } ip2; + union { + struct in_addr v4; + struct in6_addr v6; + } mask; + } s; +#define vna_v4_ip s.ip.v4 +#define vna_v4_ip2 s.ip2.v4 +#define vna_v4_mask s.mask.v4 +#define vna_v6_ip s.ip.v6 +#define vna_v6_ip2 s.ip2.v6 +#define vna_v6_mask s.mask.v6 }; struct vc_net_flags { @@ -613,8 +666,8 @@ extern "C" { nid_t vc_net_create(nid_t nid); int vc_net_migrate(nid_t nid); - int vc_net_add(nid_t nid, struct vc_net_nx const *info); - int vc_net_remove(nid_t nid, struct vc_net_nx const *info); + int vc_net_add(nid_t nid, struct vc_net_addr const *info); + int vc_net_remove(nid_t nid, struct vc_net_addr const *info); int vc_get_nflags(nid_t, struct vc_net_flags *); int vc_set_nflags(nid_t, struct vc_net_flags const *); @@ -633,6 +686,9 @@ extern "C" { int vc_set_iattr(char const *filename, xid_t xid, uint_least32_t flags, uint_least32_t mask) VC_ATTR_NONNULL((1)); + int vc_fset_iattr(int fd, xid_t xid, + uint_least32_t flags, uint_least32_t mask); + /** \brief Returns information about attributes and assigned context of a file. * \ingroup syscalls * @@ -662,6 +718,10 @@ extern "C" { 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)); + + int vc_fget_iattr(int fd, xid_t * /*@null@*/ xid, + uint_least32_t * /*@null@*/ flags, + uint_least32_t * /*@null@*/ mask) VC_ATTR_NONNULL((4)); /** \brief Returns the context of \c filename * \ingroup syscalls @@ -720,9 +780,18 @@ extern "C" { /** 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,4)); + struct vc_ctx_dlimit *limits) VC_ATTR_NONNULL((1)); - /* misc. syscalls */ + /** Get the filesystem tag for a process. */ + tag_t vc_get_task_tag(pid_t pid); + + /** Create a new filesystem tag space. */ + int vc_tag_create(tag_t tag); + + /** Migrate to an existing filesystem tag space. */ + int vc_tag_migrate(tag_t tag); + + /* scheduler related syscalls */ struct vc_set_sched { uint_least32_t set_mask; int_least32_t fill_rate; @@ -738,8 +807,26 @@ extern "C" { }; int vc_set_sched(xid_t xid, struct vc_set_sched const *) VC_ATTR_NONNULL((2)); + int vc_get_sched(xid_t xid, struct vc_set_sched *) VC_ATTR_NONNULL((2)); + struct vc_sched_info { + int_least32_t cpu_id; + int_least32_t bucket_id; + uint_least64_t user_msec; + uint_least64_t sys_msec; + uint_least64_t hold_msec; + uint_least32_t token_usec; + int_least32_t vavavoom; + }; + + int vc_sched_info(xid_t xid, struct vc_sched_info *info) VC_ATTR_NONNULL((2)); + + /* misc. syscalls */ int vc_set_mapping(xid_t xid, const char *device, const char *target, uint32_t flags); + int vc_unset_mapping(xid_t xid, const char *device, const char *target, uint32_t flags); + + int vc_get_badness(xid_t xid, int64_t *badness); + int vc_set_badness(xid_t xid, int64_t badness); /** \brief Information about parsing errors @@ -870,7 +957,7 @@ extern "C" { vcFEATURE_COMPAT, vcFEATURE_MIGRATE, vcFEATURE_NAMESPACE, vcFEATURE_SCHED, vcFEATURE_VINFO, vcFEATURE_VHI, vcFEATURE_VSHELPER0, vcFEATURE_VSHELPER, vcFEATURE_VWAIT, - vcFEATURE_VNET } + vcFEATURE_VNET, vcFEATURE_VSTAT, vcFEATURE_PPTAG, } vcFeatureSet; bool vc_isSupported(vcFeatureSet) VC_ATTR_CONST; @@ -901,6 +988,8 @@ extern "C" { 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); + /** Maps a tag given at '--tag' options to a tag_t */ + tag_t vc_tagopt2tag(char const *, bool honor_static, char const **err_info); vcCfgStyle vc_getVserverCfgStyle(char const *id); @@ -923,6 +1012,11 @@ extern "C" { * allocated and must be freed by the caller. */ char * vc_getVserverVdir(char const *id, vcCfgStyle style, bool physical); + typedef enum { vcCTX_XID = 1, + vcCTX_NID, + vcCTX_TAG, + } vcCtxType; + /** Returns the ctx of the given vserver. When vserver is not running and * 'honor_static' is false, VC_NOCTX will be returned. Else, when * 'honor_static' is true and a static assignment exists, those value will @@ -931,7 +1025,8 @@ extern "C" { * When 'is_running' is not null, the status of the vserver will be * assigned to this variable. */ xid_t vc_getVserverCtx(char const *id, vcCfgStyle style, - bool honor_static, bool /*@null@*/ *is_running); + bool honor_static, bool /*@null@*/ *is_running, + vcCtxType type); /** Resolves the cfg-path of the vserver owning the given ctx. 'revdir' will be used as the directory holding the mapping-links; when NULL, the