util-vserver (libvserver)
0.30.216-pre3025
|
00001 /* $Id$ 00002 00003 * Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> 00004 * 00005 * This program is free software; you can redistribute it and/or modify 00006 * it under the terms of the GNU General Public License as published by 00007 * the Free Software Foundation; either version 2, or (at your option) 00008 * any later version. 00009 * 00010 * This program is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 * GNU General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU General Public License 00016 * along with this program; if not, write to the Free Software 00017 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00018 */ 00019 00024 #ifndef H_VSERVER_SYSCALL_H 00025 #define H_VSERVER_SYSCALL_H 00026 00027 #include <stdint.h> 00028 #include <stdlib.h> 00029 #include <stdbool.h> 00030 #include <sys/types.h> 00031 #include <sched.h> 00032 #include <netinet/in.h> 00033 00034 #ifndef IS_DOXYGEN 00035 #if defined(__GNUC__) 00036 # define VC_ATTR_UNUSED __attribute__((__unused__)) 00037 # define VC_ATTR_NORETURN __attribute__((__noreturn__)) 00038 # define VC_ATTR_CONST __attribute__((__const__)) 00039 # define VC_ATTR_DEPRECATED __attribute__((__deprecated__)) 00040 # if __GNUC__*0x10000 + __GNUC_MINOR__*0x100 + __GNUC_PATCHLEVEL__ >= 0x30300 00041 # define VC_ATTR_NONNULL(ARGS) __attribute__((__nonnull__ ARGS)) 00042 # define VC_ATTR_ALWAYSINLINE __attribute__((__always_inline__)) 00043 # else 00044 # define VC_ATTR_NONNULL(ARGS) 00045 # define VC_ATTR_ALWAYSINLINE 00046 # endif 00047 # if __GNUC__*0x10000 + __GNUC_MINOR__*0x100 + __GNUC_PATCHLEVEL__ >= 0x30303 00048 # define VC_ATTR_PURE __attribute__((__pure__)) 00049 # else 00050 # define VC_ATTR_PURE 00051 # endif 00052 #else 00053 # define VC_ATTR_NONNULL(ARGS) 00054 # define VC_ATTR_UNUSED 00055 # define VC_ATTR_NORETURN 00056 # define VC_ATTR_ALWAYSINLINE 00057 # define VC_ATTR_DEPRECATED 00058 # define VC_ATTR_PURE 00059 # define VC_ATTR_CONST 00060 #endif 00061 #endif // IS_DOXYGEN 00062 00064 #define VC_NOCTX ((xid_t)(-1)) 00065 #define VC_NOXID ((xid_t)(-1)) 00066 00067 #define VC_DYNAMIC_XID ((xid_t)(-1)) 00068 00069 #define VC_SAMECTX ((xid_t)(-2)) 00070 00071 #define VC_NONID ((nid_t)(-1)) 00072 #define VC_DYNAMIC_NID ((nid_t)(-1)) 00073 00074 #define VC_LIM_INFINITY (~0ULL) 00075 #define VC_LIM_KEEP (~1ULL) 00076 00077 #define VC_CDLIM_UNSET (0U) 00078 #define VC_CDLIM_INFINITY (~0U) 00079 #define VC_CDLIM_KEEP (~1U) 00080 00081 #ifndef S_CTX_INFO_LOCK 00082 # define S_CTX_INFO_LOCK 1 00083 #endif 00084 00085 #ifndef S_CTX_INFO_SCHED 00086 # define S_CTX_INFO_SCHED 2 00087 #endif 00088 00089 #ifndef S_CTX_INFO_NPROC 00090 # define S_CTX_INFO_NPROC 4 00091 #endif 00092 00093 #ifndef S_CTX_INFO_PRIVATE 00094 # define S_CTX_INFO_PRIVATE 8 00095 #endif 00096 00097 #ifndef S_CTX_INFO_INIT 00098 # define S_CTX_INFO_INIT 16 00099 #endif 00100 00101 #ifndef S_CTX_INFO_HIDEINFO 00102 # define S_CTX_INFO_HIDEINFO 32 00103 #endif 00104 00105 #ifndef S_CTX_INFO_ULIMIT 00106 # define S_CTX_INFO_ULIMIT 64 00107 #endif 00108 00109 #ifndef S_CTX_INFO_NAMESPACE 00110 # define S_CTX_INFO_NAMESPACE 128 00111 #endif 00112 00113 #define VC_CAP_CHOWN 0 00114 #define VC_CAP_DAC_OVERRIDE 1 00115 #define VC_CAP_DAC_READ_SEARCH 2 00116 #define VC_CAP_FOWNER 3 00117 #define VC_CAP_FSETID 4 00118 #define VC_CAP_KILL 5 00119 #define VC_CAP_SETGID 6 00120 #define VC_CAP_SETUID 7 00121 #define VC_CAP_SETPCAP 8 00122 #define VC_CAP_LINUX_IMMUTABLE 9 00123 #define VC_CAP_NET_BIND_SERVICE 10 00124 #define VC_CAP_NET_BROADCAST 11 00125 #define VC_CAP_NET_ADMIN 12 00126 #define VC_CAP_NET_RAW 13 00127 #define VC_CAP_IPC_LOCK 14 00128 #define VC_CAP_IPC_OWNER 15 00129 #define VC_CAP_SYS_MODULE 16 00130 #define VC_CAP_SYS_RAWIO 17 00131 #define VC_CAP_SYS_CHROOT 18 00132 #define VC_CAP_SYS_PTRACE 19 00133 #define VC_CAP_SYS_PACCT 20 00134 #define VC_CAP_SYS_ADMIN 21 00135 #define VC_CAP_SYS_BOOT 22 00136 #define VC_CAP_SYS_NICE 23 00137 #define VC_CAP_SYS_RESOURCE 24 00138 #define VC_CAP_SYS_TIME 25 00139 #define VC_CAP_SYS_TTY_CONFIG 26 00140 #define VC_CAP_MKNOD 27 00141 #define VC_CAP_LEASE 28 00142 #define VC_CAP_AUDIT_WRITE 29 00143 #define VC_CAP_AUDIT_CONTROL 30 00144 #define VC_CAP_SETFCAP 31 00145 #define VC_CAP_MAC_OVERRIDE 32 00146 #define VC_CAP_MAC_ADMIN 33 00147 00148 #define VC_IMMUTABLE_FILE_FL 0x0000010lu 00149 #define VC_IMMUTABLE_LINK_FL 0x0008000lu 00150 #define VC_IMMUTABLE_ALL (VC_IMMUTABLE_LINK_FL|VC_IMMUTABLE_FILE_FL) 00151 00152 #define VC_IATTR_XID 0x01000000u 00153 00154 #define VC_IATTR_ADMIN 0x00000001u 00155 #define VC_IATTR_WATCH 0x00000002u 00156 #define VC_IATTR_HIDE 0x00000004u 00157 #define VC_IATTR_WRITE 0x00000008u 00158 #define VC_IATTR_FLAGS 0x0000000fu 00159 00160 #define VC_IATTR_BARRIER 0x00010000u 00161 #define VC_IATTR_IUNLINK 0x00020000u 00162 #define VC_IATTR_IMMUTABLE 0x00040000u 00163 #define VC_IATTR_COW 0x00080000u 00164 00165 00166 // the flags 00167 #define VC_VXF_INFO_LOCK 0x00000001ull 00168 #define VC_VXF_INFO_NPROC 0x00000004ull 00169 #define VC_VXF_INFO_PRIVATE 0x00000008ull 00170 #define VC_VXF_INFO_INIT 0x00000010ull 00171 00172 #define VC_VXF_INFO_HIDEINFO 0x00000020ull 00173 #define VC_VXF_INFO_ULIMIT 0x00000040ull 00174 #define VC_VXF_INFO_NAMESPACE 0x00000080ull 00175 00176 #define VC_VXF_SCHED_HARD 0x00000100ull 00177 #define VC_VXF_SCHED_PRIO 0x00000200ull 00178 #define VC_VXF_SCHED_PAUSE 0x00000400ull 00179 00180 #define VC_VXF_VIRT_MEM 0x00010000ull 00181 #define VC_VXF_VIRT_UPTIME 0x00020000ull 00182 #define VC_VXF_VIRT_CPU 0x00040000ull 00183 #define VC_VXF_VIRT_LOAD 0x00080000ull 00184 #define VC_VXF_VIRT_TIME 0x00100000ull 00185 00186 #define VC_VXF_HIDE_MOUNT 0x01000000ull 00187 #define VC_VXF_HIDE_NETIF 0x02000000ull 00188 #define VC_VXF_HIDE_VINFO 0x04000000ull 00189 00190 #define VC_VXF_STATE_SETUP (1ULL<<32) 00191 #define VC_VXF_STATE_INIT (1ULL<<33) 00192 #define VC_VXF_STATE_ADMIN (1ULL<<34) 00193 00194 #define VC_VXF_SC_HELPER (1ULL<<36) 00195 #define VC_VXF_REBOOT_KILL (1ULL<<37) 00196 #define VC_VXF_PERSISTENT (1ULL<<38) 00197 00198 #define VC_VXF_FORK_RSS (1ULL<<48) 00199 #define VC_VXF_PROLIFIC (1ULL<<49) 00200 00201 #define VC_VXF_IGNEG_NICE (1ULL<<52) 00202 #define VC_VXF_IGNEG_IONICE (1ULL<<53) 00203 00204 00205 // the ccapabilities 00206 #define VC_VXC_SET_UTSNAME 0x00000001ull 00207 #define VC_VXC_SET_RLIMIT 0x00000002ull 00208 #define VC_VXC_FS_SECURITY 0x00000004ull 00209 #define VC_VXC_TIOCSTI 0x00000010ull 00210 00211 #define VC_VXC_RAW_ICMP 0x00000100ull 00212 #define VC_VXC_SYSLOG 0x00001000ull 00213 #define VC_VXC_OOM_ADJUST 0x00002000ull 00214 #define VC_VXC_AUDIT_CONTROL 0x00004000ull 00215 00216 #define VC_VXC_SECURE_MOUNT 0x00010000ull 00217 #define VC_VXC_SECURE_REMOUNT 0x00020000ull 00218 #define VC_VXC_BINARY_MOUNT 0x00040000ull 00219 00220 #define VC_VXC_QUOTA_CTL 0x00100000ull 00221 #define VC_VXC_ADMIN_MAPPER 0x00200000ull 00222 #define VC_VXC_ADMIN_CLOOP 0x00400000ull 00223 00224 #define VC_VXC_KTHREAD 0x01000000ull 00225 #define VC_VXC_NAMESPACE 0x02000000ull 00226 00227 00228 // the scheduler flags 00229 #define VC_VXSM_FILL_RATE 0x0001 00230 #define VC_VXSM_INTERVAL 0x0002 00231 #define VC_VXSM_FILL_RATE2 0x0004 00232 #define VC_VXSM_INTERVAL2 0x0008 00233 #define VC_VXSM_TOKENS 0x0010 00234 #define VC_VXSM_TOKENS_MIN 0x0020 00235 #define VC_VXSM_TOKENS_MAX 0x0040 00236 #define VC_VXSM_PRIO_BIAS 0x0100 00237 #define VC_VXSM_CPU_ID 0x1000 00238 #define VC_VXSM_BUCKET_ID 0x2000 00239 00240 #define VC_VXSM_IDLE_TIME 0x0200 00241 #define VC_VXSM_FORCE 0x0400 00242 #define VC_VXSM_MSEC 0x4000 00243 00244 #define VC_VXSM_V3_MASK 0x0173 00245 00246 00247 // the network flags 00248 #define VC_NXF_INFO_LOCK 0x00000001ull 00249 #define VC_NXF_INFO_PRIVATE 0x00000008ull 00250 00251 #define VC_NXF_SINGLE_IP 0x00000100ull 00252 #define VC_NXF_LBACK_REMAP 0x00000200ull 00253 #define VC_NXF_LBACK_ALLOW 0x00000400ull 00254 00255 #define VC_NXF_HIDE_NETIF 0x02000000ull 00256 #define VC_NXF_HIDE_LBACK 0x04000000ull 00257 00258 #define VC_NXF_STATE_SETUP (1ULL<<32) 00259 #define VC_NXF_STATE_ADMIN (1ULL<<34) 00260 00261 #define VC_NXF_SC_HELPER (1ULL<<36) 00262 #define VC_NXF_PERSISTENT (1ULL<<38) 00263 00264 00265 // the network capabilities 00266 #define VC_NXC_TUN_CREATE 0x00000001ull 00267 00268 #define VC_NXC_RAW_ICMP 0x00000100ull 00269 00270 00271 // the vserver specific limits 00272 #define VC_VLIMIT_NSOCK 16 00273 #define VC_VLIMIT_OPENFD 17 00274 #define VC_VLIMIT_ANON 18 00275 #define VC_VLIMIT_SHMEM 19 00276 #define VC_VLIMIT_SEMARY 20 00277 #define VC_VLIMIT_NSEMS 21 00278 #define VC_VLIMIT_DENTRY 22 00279 #define VC_VLIMIT_MAPPED 23 00280 00281 00282 // the VCI bit values 00283 #define VC_VCI_NO_DYNAMIC (1 << 0) 00284 #define VC_VCI_PROC_SECURE (1 << 4) 00285 #define VC_VCI_HARDCPU (1 << 5) 00286 #define VC_VCI_IDLELIMIT (1 << 6) 00287 #define VC_VCI_IDLETIME (1 << 7) 00288 #define VC_VCI_COWBL (1 << 8) 00289 #define VC_VCI_FULLCOWBL (1 << 9) 00290 #define VC_VCI_SPACES (1 << 10) 00291 #define VC_VCI_NETV2 (1 << 11) 00292 #define VC_VCI_MEMCG (1 << 12) 00293 #define VC_VCI_DEBUG (1 << 16) 00294 #define VC_VCI_HISTORY (1 << 20) 00295 #define VC_VCI_TAGGED (1 << 24) 00296 #define VC_VCI_PPTAG (1 << 28) 00297 00298 00299 // the device mapping flags 00300 #define VC_DATTR_CREATE 0x00000001 00301 #define VC_DATTR_OPEN 0x00000002 00302 00303 #define VC_DATTR_REMAP 0x00000010 00304 00305 00306 // the process context migration flags 00307 #define VC_VXM_SET_INIT 0x00000001 00308 #define VC_VXM_SET_REAPER 0x00000002 00309 00310 00311 // the network address flags 00312 #define VC_NXA_TYPE_IPV4 0x0001 00313 #define VC_NXA_TYPE_IPV6 0x0002 00314 00315 #define VC_NXA_TYPE_NONE 0x0000 00316 #define VC_NXA_TYPE_ANY 0x00FF 00317 00318 #define VC_NXA_TYPE_ADDR 0x0010 00319 #define VC_NXA_TYPE_MASK 0x0020 00320 #define VC_NXA_TYPE_RANGE 0x0040 00321 00322 #define VC_NXA_MOD_BCAST 0x0100 00323 #define VC_NXA_MOD_LBACK 0x0200 00324 00325 00326 #ifndef CLONE_NEWNS 00327 # define CLONE_NEWNS 0x00020000 00328 #endif 00329 #ifndef CLONE_NEWUTS 00330 # define CLONE_NEWUTS 0x04000000 00331 #endif 00332 #ifndef CLONE_NEWIPC 00333 # define CLONE_NEWIPC 0x08000000 00334 #endif 00335 #ifndef CLONE_NEWUSER 00336 # define CLONE_NEWUSER 0x10000000 00337 #endif 00338 #ifndef CLONE_NEWPID 00339 # define CLONE_NEWPID 0x20000000 00340 #endif 00341 #ifndef CLONE_NEWNET 00342 # define CLONE_NEWNET 0x40000000 00343 #endif 00344 00345 00346 #define VC_BAD_PERSONALITY ((uint_least32_t)(-1)) 00347 00348 00358 #ifdef IS_DOXYGEN 00359 typedef an_unsigned_integer_type xid_t; 00360 typedef an_unsigned_integer_type nid_t; 00361 typedef an_unsigned_integer_type tag_t; 00362 #endif 00363 00364 #ifdef __cplusplus 00365 extern "C" { 00366 #endif 00367 00380 int vc_syscall(uint32_t cmd, xid_t xid, void *data); 00381 00386 int vc_get_version(); 00387 00388 typedef uint64_t vc_vci_t; 00393 vc_vci_t vc_get_vci(); 00394 00395 int vc_get_kernel(); 00396 00414 xid_t vc_new_s_context(xid_t ctx, unsigned int remove_cap, unsigned int flags); 00415 00416 struct vc_ip_mask_pair { 00417 uint32_t ip; 00418 uint32_t mask; 00419 }; 00420 00424 int vc_set_ipv4root(uint32_t bcast, size_t nb, 00425 struct vc_ip_mask_pair const *ips) VC_ATTR_NONNULL((3)); 00426 00433 size_t vc_get_nb_ipv4root() VC_ATTR_CONST VC_ATTR_PURE; 00434 00435 /* process context */ 00438 struct vc_ctx_flags { 00440 uint_least64_t flagword; 00444 uint_least64_t mask; 00445 }; 00446 00458 xid_t vc_ctx_create(xid_t xid, struct vc_ctx_flags *flags); 00459 00466 int vc_ctx_migrate(xid_t xid, uint_least64_t flags); 00467 00469 struct vc_ctx_stat { 00470 uint_least32_t usecnt; 00471 uint_least32_t tasks; 00472 }; 00473 00481 int vc_ctx_stat(xid_t xid, struct vc_ctx_stat /*@out@*/ *stat) VC_ATTR_NONNULL((2)); 00482 00484 struct vc_virt_stat { 00485 uint_least64_t offset; 00486 uint_least64_t uptime; 00487 uint_least32_t nr_threads; 00488 uint_least32_t nr_running; 00489 uint_least32_t nr_uninterruptible; 00490 uint_least32_t nr_onhold; 00491 uint_least32_t nr_forks; 00492 uint_least32_t load[3]; 00493 }; 00494 00502 int vc_virt_stat(xid_t xid, struct vc_virt_stat /*@out@*/ *stat) VC_ATTR_NONNULL((2)); 00503 00510 int vc_ctx_kill(xid_t ctx, pid_t pid, int sig); 00511 00512 int vc_get_cflags(xid_t xid, struct vc_ctx_flags /*@out@*/ *) VC_ATTR_NONNULL((2)); 00513 int vc_set_cflags(xid_t xid, struct vc_ctx_flags /*@in@*/ const *) VC_ATTR_NONNULL((2)); 00514 00516 struct vc_ctx_caps { 00518 uint_least64_t bcaps; 00522 uint_least64_t bmask; 00524 uint_least64_t ccaps; 00528 uint_least64_t cmask; 00529 }; 00530 00531 int vc_get_ccaps(xid_t xid, struct vc_ctx_caps *); 00532 int vc_set_ccaps(xid_t xid, struct vc_ctx_caps const *); 00533 00534 struct vc_vx_info { 00535 xid_t xid; 00536 pid_t initpid; 00537 }; 00538 00539 int vc_get_vx_info(xid_t xid, struct vc_vx_info *info) VC_ATTR_NONNULL((2)); 00540 00548 xid_t vc_get_task_xid(pid_t pid); 00549 00553 int vc_wait_exit(xid_t xid); 00554 00555 /* rlimit related functions */ 00556 00566 typedef uint_least64_t vc_limit_t; 00567 00569 struct vc_rlimit_mask { 00570 uint_least32_t min; 00571 uint_least32_t soft; 00572 uint_least32_t hard; 00573 }; 00574 00576 int vc_get_rlimit_mask(xid_t xid, 00577 struct vc_rlimit_mask /*@out@*/ *lim) VC_ATTR_NONNULL((2)); 00578 00582 struct vc_rlimit { 00583 vc_limit_t min; 00584 vc_limit_t soft; 00585 vc_limit_t hard; 00586 }; 00587 00596 int vc_get_rlimit(xid_t xid, int resource, 00597 struct vc_rlimit /*@out@*/ *lim) VC_ATTR_NONNULL((3)); 00606 int vc_set_rlimit(xid_t xid, int resource, 00607 struct vc_rlimit const /*@in@*/ *lim) VC_ATTR_NONNULL((3)); 00608 00610 struct vc_rlimit_stat { 00611 uint_least32_t hits; 00612 vc_limit_t value; 00613 vc_limit_t minimum; 00614 vc_limit_t maximum; 00615 }; 00616 00625 int vc_rlimit_stat(xid_t xid, int resource, 00626 struct vc_rlimit_stat /*@out@*/ *stat) VC_ATTR_NONNULL((3)); 00627 00634 int vc_reset_minmax(xid_t xid); 00635 00655 bool vc_parseLimit(char const /*@in@*/ *str, vc_limit_t /*@out@*/ *res) VC_ATTR_NONNULL((1,2)); 00656 00657 00658 /* network context */ 00659 struct vc_nx_info { 00660 nid_t nid; 00661 }; 00662 00663 nid_t vc_get_task_nid(pid_t pid); 00664 int vc_get_nx_info(nid_t nid, struct vc_nx_info *) VC_ATTR_NONNULL((2)); 00665 00666 struct vc_net_addr { 00667 uint16_t vna_type; 00668 uint16_t vna_flags; 00669 uint16_t vna_prefix; 00670 uint16_t vna_parent; 00671 struct { 00672 union { 00673 struct in_addr v4; 00674 struct in6_addr v6; 00675 } ip; 00676 union { 00677 struct in_addr v4; 00678 struct in6_addr v6; 00679 } ip2; 00680 union { 00681 struct in_addr v4; 00682 struct in6_addr v6; 00683 } mask; 00684 } s; 00685 #define vna_v4_ip s.ip.v4 00686 #define vna_v4_ip2 s.ip2.v4 00687 #define vna_v4_mask s.mask.v4 00688 #define vna_v6_ip s.ip.v6 00689 #define vna_v6_ip2 s.ip2.v6 00690 #define vna_v6_mask s.mask.v6 00691 }; 00692 00693 struct vc_net_flags { 00694 uint_least64_t flagword; 00695 uint_least64_t mask; 00696 }; 00697 00698 nid_t vc_net_create(nid_t nid); 00699 int vc_net_migrate(nid_t nid); 00700 00701 int vc_net_add(nid_t nid, struct vc_net_addr const *info); 00702 int vc_net_remove(nid_t nid, struct vc_net_addr const *info); 00703 00704 int vc_get_nflags(nid_t, struct vc_net_flags *); 00705 int vc_set_nflags(nid_t, struct vc_net_flags const *); 00706 00707 struct vc_net_caps { 00708 uint_least64_t ncaps; 00709 uint_least64_t cmask; 00710 }; 00711 00712 int vc_get_ncaps(nid_t, struct vc_net_caps *); 00713 int vc_set_ncaps(nid_t, struct vc_net_caps const *); 00714 00715 00716 /* iattr related functions */ 00717 00718 int vc_set_iattr(char const *filename, xid_t xid, 00719 uint_least32_t flags, uint_least32_t mask) VC_ATTR_NONNULL((1)); 00720 00721 int vc_fset_iattr(int fd, xid_t xid, 00722 uint_least32_t flags, uint_least32_t mask); 00723 00750 int vc_get_iattr(char const *filename, xid_t * /*@null@*/ xid, 00751 uint_least32_t * /*@null@*/ flags, 00752 uint_least32_t * /*@null@*/ mask) VC_ATTR_NONNULL((1)); 00753 00754 int vc_fget_iattr(int fd, xid_t * /*@null@*/ xid, 00755 uint_least32_t * /*@null@*/ flags, 00756 uint_least32_t * /*@null@*/ mask) VC_ATTR_NONNULL((4)); 00757 00771 xid_t vc_getfilecontext(char const *filename) VC_ATTR_NONNULL((1)); 00772 00773 00774 /* vhi related functions */ 00775 typedef enum { vcVHI_CONTEXT, vcVHI_SYSNAME, vcVHI_NODENAME, 00776 vcVHI_RELEASE, vcVHI_VERSION, vcVHI_MACHINE, 00777 vcVHI_DOMAINNAME } vc_uts_type; 00778 00779 int vc_set_vhi_name(xid_t xid, vc_uts_type type, 00780 char const *val, size_t len) VC_ATTR_NONNULL((3)); 00781 int vc_get_vhi_name(xid_t xid, vc_uts_type type, 00782 char *val, size_t len) VC_ATTR_NONNULL((3)); 00783 00784 /* namespace related functions */ 00785 int vc_enter_namespace(xid_t xid, uint_least64_t mask, uint32_t index); 00786 int vc_set_namespace(xid_t xid, uint_least64_t mask, uint32_t index); 00787 int vc_cleanup_namespace(void); 00788 uint_least64_t vc_get_space_mask(void); 00789 uint_least64_t vc_get_space_default(void); 00790 00791 00792 /* disk limit related things */ 00793 struct vc_ctx_dlimit { 00794 uint_least32_t space_used; 00795 uint_least32_t space_total; 00796 uint_least32_t inodes_used; 00797 uint_least32_t inodes_total; 00798 uint_least32_t reserved; 00799 }; 00800 00801 00803 int vc_add_dlimit(char const *filename, xid_t xid, 00804 uint_least32_t flags) VC_ATTR_NONNULL((1)); 00806 int vc_rem_dlimit(char const *filename, xid_t xid, 00807 uint_least32_t flags) VC_ATTR_NONNULL((1)); 00808 00810 int vc_set_dlimit(char const *filename, xid_t xid, 00811 uint_least32_t flags, 00812 struct vc_ctx_dlimit const *limits) VC_ATTR_NONNULL((1,4)); 00814 int vc_get_dlimit(char const *filename, xid_t xid, 00815 uint_least32_t flags, 00816 struct vc_ctx_dlimit *limits) VC_ATTR_NONNULL((1)); 00817 00819 tag_t vc_get_task_tag(pid_t pid); 00820 00822 int vc_tag_create(tag_t tag); 00823 00825 int vc_tag_migrate(tag_t tag); 00826 00827 /* scheduler related syscalls */ 00828 struct vc_set_sched { 00829 uint_least32_t set_mask; 00830 int_least32_t fill_rate; 00831 int_least32_t interval; 00832 int_least32_t fill_rate2; 00833 int_least32_t interval2; 00834 int_least32_t tokens; 00835 int_least32_t tokens_min; 00836 int_least32_t tokens_max; 00837 int_least32_t priority_bias; 00838 int_least32_t cpu_id; 00839 int_least32_t bucket_id; 00840 }; 00841 00842 int vc_set_sched(xid_t xid, struct vc_set_sched const *) VC_ATTR_NONNULL((2)); 00843 int vc_get_sched(xid_t xid, struct vc_set_sched *) VC_ATTR_NONNULL((2)); 00844 00845 struct vc_sched_info { 00846 int_least32_t cpu_id; 00847 int_least32_t bucket_id; 00848 uint_least64_t user_msec; 00849 uint_least64_t sys_msec; 00850 uint_least64_t hold_msec; 00851 uint_least32_t token_usec; 00852 int_least32_t vavavoom; 00853 }; 00854 00855 int vc_sched_info(xid_t xid, struct vc_sched_info *info) VC_ATTR_NONNULL((2)); 00856 00857 /* misc. syscalls */ 00858 int vc_set_mapping(xid_t xid, const char *device, const char *target, uint32_t flags); 00859 int vc_unset_mapping(xid_t xid, const char *device, const char *target, uint32_t flags); 00860 00861 int vc_get_badness(xid_t xid, int64_t *badness); 00862 int vc_set_badness(xid_t xid, int64_t badness); 00863 00864 00866 struct vc_umask { 00867 uint_least64_t umask; 00868 uint_least64_t mask; 00869 }; 00870 00871 int vc_get_umask(xid_t xid, struct vc_umask *umask); 00872 int vc_set_umask(xid_t xid, struct vc_umask const *umask); 00873 00877 struct vc_err_listparser { 00878 char const *ptr; 00879 size_t len; 00880 }; 00881 00892 uint_least64_t vc_text2bcap(char const *str, size_t len); 00893 00908 char const * vc_lobcap2text(uint_least64_t *val) VC_ATTR_NONNULL((1)); 00909 00937 int vc_list2bcap(char const *str, size_t len, 00938 struct vc_err_listparser *err, 00939 struct vc_ctx_caps *cap) VC_ATTR_NONNULL((1,4)); 00940 00941 uint_least64_t vc_text2ccap(char const *, size_t len); 00942 char const * vc_loccap2text(uint_least64_t *); 00943 int vc_list2ccap(char const *, size_t len, 00944 struct vc_err_listparser *err, 00945 struct vc_ctx_caps *); 00946 char const * vc_loumask2text(uint_least64_t *); 00947 int vc_list2umask(char const *, size_t len, 00948 struct vc_err_listparser *err, 00949 struct vc_umask *); 00950 int vc_list2cflag(char const *, size_t len, 00951 struct vc_err_listparser *err, 00952 struct vc_ctx_flags *flags); 00953 uint_least64_t vc_text2cflag(char const *, size_t len); 00954 char const * vc_locflag2text(uint_least64_t *); 00955 00956 uint_least32_t vc_list2cflag_compat(char const *, size_t len, 00957 struct vc_err_listparser *err); 00958 uint_least32_t vc_text2cflag_compat(char const *, size_t len); 00959 char const * vc_hicflag2text_compat(uint_least32_t); 00960 00961 int vc_text2cap(char const *); 00962 char const * vc_cap2text(unsigned int); 00963 00964 00965 int vc_list2nflag(char const *, size_t len, 00966 struct vc_err_listparser *err, 00967 struct vc_net_flags *flags); 00968 uint_least64_t vc_text2nflag(char const *, size_t len); 00969 char const * vc_lonflag2text(uint_least64_t *); 00970 00971 uint_least64_t vc_text2ncap(char const *, size_t len); 00972 char const * vc_loncap2text(uint_least64_t *); 00973 int vc_list2ncap(char const *, size_t len, 00974 struct vc_err_listparser *err, 00975 struct vc_net_caps *); 00976 00977 uint_least64_t vc_get_insecurebcaps() VC_ATTR_CONST; 00978 inline static uint_least64_t vc_get_insecureccaps() { 00979 return ~(VC_VXC_SET_UTSNAME|VC_VXC_RAW_ICMP|VC_VXC_AUDIT_CONTROL); 00980 } 00981 00982 inline static int vc_setfilecontext(char const *filename, xid_t xid) { 00983 return vc_set_iattr(filename, xid, 0, VC_IATTR_XID); 00984 } 00985 00986 00987 uint_least32_t vc_text2personalityflag(char const *str, 00988 size_t len) VC_ATTR_NONNULL((1)); 00989 00990 char const * vc_lopersonality2text(uint_least32_t *) VC_ATTR_NONNULL((1)); 00991 00992 int vc_list2personalityflag(char const /*@in@*/ *, 00993 size_t len, 00994 uint_least32_t /*@out@*/ *personality, 00995 struct vc_err_listparser /*@out@*/ *err) VC_ATTR_NONNULL((1,3)); 00996 00997 uint_least32_t vc_str2personalitytype(char const /*@in@*/*, 00998 size_t len) VC_ATTR_NONNULL((1)); 00999 01000 01001 typedef enum { vcFEATURE_VKILL, vcFEATURE_IATTR, vcFEATURE_RLIMIT, 01002 vcFEATURE_COMPAT, vcFEATURE_MIGRATE, vcFEATURE_NAMESPACE, 01003 vcFEATURE_SCHED, vcFEATURE_VINFO, vcFEATURE_VHI, 01004 vcFEATURE_VSHELPER0, vcFEATURE_VSHELPER, vcFEATURE_VWAIT, 01005 vcFEATURE_VNET, vcFEATURE_VSTAT, vcFEATURE_PPTAG, 01006 vcFEATURE_PIDSPACE, vcFEATURE_SPACES, vcFEATURE_PERSISTENT, 01007 vcFEATURE_PIVOT_ROOT, vcFEATURE_MEMCG, vcFEATURE_DYNAMIC, 01008 vcFEATURE_BME, 01009 } 01010 vcFeatureSet; 01011 01012 bool vc_isSupported(vcFeatureSet) VC_ATTR_CONST; 01013 bool vc_isSupportedString(char const *); 01014 01015 01016 typedef enum { vcTYPE_INVALID, vcTYPE_MAIN, vcTYPE_WATCH, 01017 vcTYPE_STATIC, vcTYPE_DYNAMIC } 01018 vcXidType; 01019 01020 vcXidType vc_getXIDType(xid_t xid) VC_ATTR_CONST; 01021 01023 bool vc_is_dynamic_xid(xid_t xid); 01024 01025 01026 /* The management part */ 01027 01028 #define VC_LIMIT_VSERVER_NAME_LEN 1024 01029 01030 typedef enum { vcCFG_NONE, vcCFG_AUTO, 01031 vcCFG_LEGACY, 01032 vcCFG_RECENT_SHORT, 01033 vcCFG_RECENT_FULL } vcCfgStyle; 01034 01035 01037 xid_t vc_xidopt2xid(char const *, bool honor_static, char const **err_info); 01039 nid_t vc_nidopt2nid(char const *, bool honor_static, char const **err_info); 01041 tag_t vc_tagopt2tag(char const *, bool honor_static, char const **err_info); 01042 01043 vcCfgStyle vc_getVserverCfgStyle(char const *id); 01044 01047 char * vc_getVserverName(char const *id, vcCfgStyle style); 01048 01053 char * vc_getVserverCfgDir(char const *id, vcCfgStyle style); 01054 01058 char * vc_getVserverAppDir(char const *id, vcCfgStyle style, char const *app); 01059 01062 char * vc_getVserverVdir(char const *id, vcCfgStyle style, bool physical); 01063 01064 typedef enum { vcCTX_XID = 1, 01065 vcCTX_NID, 01066 vcCTX_TAG, 01067 } vcCtxType; 01068 01076 xid_t vc_getVserverCtx(char const *id, vcCfgStyle style, 01077 bool honor_static, bool /*@null@*/ *is_running, 01078 vcCtxType type); 01079 01084 char * vc_getVserverByCtx(xid_t ctx, /*@null@*/vcCfgStyle *style, 01085 /*@null@*/char const *revdir); 01086 01087 int vc_compareVserverById(char const *lhs, vcCfgStyle lhs_style, 01088 char const *rhs, vcCfgStyle rhs_style); 01089 01090 void vc_exitLikeProcess(int pid, int ret) VC_ATTR_NORETURN; 01091 01092 #define vcSKEL_INTERFACES 1u 01093 #define vcSKEL_PKGMGMT 2u 01094 #define vcSKEL_FILESYSTEM 4u 01095 01098 int vc_createSkeleton(char const *id, vcCfgStyle style, int flags); 01099 01100 01101 #ifdef __cplusplus 01102 } 01103 #endif 01104 01105 #undef VC_ATTR_PURE 01106 #undef VC_ATTR_ALWAYSINLINE 01107 #undef VC_ATTR_NORETURN 01108 #undef VC_ATTR_UNUSED 01109 #undef VC_ATTR_NONNULL 01110 01111 #endif