util-vserver (libvserver)  0.30.216-pre3054
vserver.h
Go to the documentation of this file.
1 /* $Id$
2 
3 * Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2, or (at your option)
8 * any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 */
19 
24 #ifndef H_VSERVER_SYSCALL_H
25 #define H_VSERVER_SYSCALL_H
26 
27 #include <stdint.h>
28 #include <stdlib.h>
29 #include <stdbool.h>
30 #include <sys/types.h>
31 #include <sched.h>
32 #include <netinet/in.h>
33 
34 #ifndef IS_DOXYGEN
35 #if defined(__GNUC__)
36 # define VC_ATTR_UNUSED __attribute__((__unused__))
37 # define VC_ATTR_NORETURN __attribute__((__noreturn__))
38 # define VC_ATTR_CONST __attribute__((__const__))
39 # define VC_ATTR_DEPRECATED __attribute__((__deprecated__))
40 # if __GNUC__*0x10000 + __GNUC_MINOR__*0x100 + __GNUC_PATCHLEVEL__ >= 0x30300
41 # define VC_ATTR_NONNULL(ARGS) __attribute__((__nonnull__ ARGS))
42 # define VC_ATTR_ALWAYSINLINE __attribute__((__always_inline__))
43 # else
44 # define VC_ATTR_NONNULL(ARGS)
45 # define VC_ATTR_ALWAYSINLINE
46 # endif
47 # if __GNUC__*0x10000 + __GNUC_MINOR__*0x100 + __GNUC_PATCHLEVEL__ >= 0x30303
48 # define VC_ATTR_PURE __attribute__((__pure__))
49 # else
50 # define VC_ATTR_PURE
51 # endif
52 #else
53 # define VC_ATTR_NONNULL(ARGS)
54 # define VC_ATTR_UNUSED
55 # define VC_ATTR_NORETURN
56 # define VC_ATTR_ALWAYSINLINE
57 # define VC_ATTR_DEPRECATED
58 # define VC_ATTR_PURE
59 # define VC_ATTR_CONST
60 #endif
61 #endif // IS_DOXYGEN
62 
64 #define VC_NOCTX ((xid_t)(-1))
65 #define VC_NOXID ((xid_t)(-1))
66 
67 #define VC_DYNAMIC_XID ((xid_t)(-1))
68 
69 #define VC_SAMECTX ((xid_t)(-2))
70 
71 #define VC_NONID ((nid_t)(-1))
72 #define VC_DYNAMIC_NID ((nid_t)(-1))
73 
74 #define VC_LIM_INFINITY (~0ULL)
75 #define VC_LIM_KEEP (~1ULL)
76 
77 #define VC_CDLIM_UNSET (0U)
78 #define VC_CDLIM_INFINITY (~0U)
79 #define VC_CDLIM_KEEP (~1U)
80 
81 #ifndef S_CTX_INFO_LOCK
82 # define S_CTX_INFO_LOCK 1
83 #endif
84 
85 #ifndef S_CTX_INFO_SCHED
86 # define S_CTX_INFO_SCHED 2
87 #endif
88 
89 #ifndef S_CTX_INFO_NPROC
90 # define S_CTX_INFO_NPROC 4
91 #endif
92 
93 #ifndef S_CTX_INFO_PRIVATE
94 # define S_CTX_INFO_PRIVATE 8
95 #endif
96 
97 #ifndef S_CTX_INFO_INIT
98 # define S_CTX_INFO_INIT 16
99 #endif
100 
101 #ifndef S_CTX_INFO_HIDEINFO
102 # define S_CTX_INFO_HIDEINFO 32
103 #endif
104 
105 #ifndef S_CTX_INFO_ULIMIT
106 # define S_CTX_INFO_ULIMIT 64
107 #endif
108 
109 #ifndef S_CTX_INFO_NAMESPACE
110 # define S_CTX_INFO_NAMESPACE 128
111 #endif
112 
113 #define VC_CAP_CHOWN 0
114 #define VC_CAP_DAC_OVERRIDE 1
115 #define VC_CAP_DAC_READ_SEARCH 2
116 #define VC_CAP_FOWNER 3
117 #define VC_CAP_FSETID 4
118 #define VC_CAP_KILL 5
119 #define VC_CAP_SETGID 6
120 #define VC_CAP_SETUID 7
121 #define VC_CAP_SETPCAP 8
122 #define VC_CAP_LINUX_IMMUTABLE 9
123 #define VC_CAP_NET_BIND_SERVICE 10
124 #define VC_CAP_NET_BROADCAST 11
125 #define VC_CAP_NET_ADMIN 12
126 #define VC_CAP_NET_RAW 13
127 #define VC_CAP_IPC_LOCK 14
128 #define VC_CAP_IPC_OWNER 15
129 #define VC_CAP_SYS_MODULE 16
130 #define VC_CAP_SYS_RAWIO 17
131 #define VC_CAP_SYS_CHROOT 18
132 #define VC_CAP_SYS_PTRACE 19
133 #define VC_CAP_SYS_PACCT 20
134 #define VC_CAP_SYS_ADMIN 21
135 #define VC_CAP_SYS_BOOT 22
136 #define VC_CAP_SYS_NICE 23
137 #define VC_CAP_SYS_RESOURCE 24
138 #define VC_CAP_SYS_TIME 25
139 #define VC_CAP_SYS_TTY_CONFIG 26
140 #define VC_CAP_MKNOD 27
141 #define VC_CAP_LEASE 28
142 #define VC_CAP_AUDIT_WRITE 29
143 #define VC_CAP_AUDIT_CONTROL 30
144 #define VC_CAP_SETFCAP 31
145 #define VC_CAP_MAC_OVERRIDE 32
146 #define VC_CAP_MAC_ADMIN 33
147 
148 #define VC_IMMUTABLE_FILE_FL 0x0000010lu
149 #define VC_IMMUTABLE_LINK_FL 0x0008000lu
150 #define VC_IMMUTABLE_ALL (VC_IMMUTABLE_LINK_FL|VC_IMMUTABLE_FILE_FL)
151 
152 #define VC_IATTR_XID 0x01000000u
153 
154 #define VC_IATTR_ADMIN 0x00000001u
155 #define VC_IATTR_WATCH 0x00000002u
156 #define VC_IATTR_HIDE 0x00000004u
157 #define VC_IATTR_WRITE 0x00000008u
158 #define VC_IATTR_FLAGS 0x0000000fu
159 
160 #define VC_IATTR_BARRIER 0x00010000u
161 #define VC_IATTR_IUNLINK 0x00020000u
162 #define VC_IATTR_IMMUTABLE 0x00040000u
163 #define VC_IATTR_COW 0x00080000u
164 
165 
166 // the flags
167 #define VC_VXF_INFO_LOCK 0x00000001ull
168 #define VC_VXF_INFO_NPROC 0x00000004ull
169 #define VC_VXF_INFO_PRIVATE 0x00000008ull
170 #define VC_VXF_INFO_INIT 0x00000010ull
171 
172 #define VC_VXF_INFO_HIDEINFO 0x00000020ull
173 #define VC_VXF_INFO_ULIMIT 0x00000040ull
174 #define VC_VXF_INFO_NAMESPACE 0x00000080ull
175 
176 #define VC_VXF_SCHED_HARD 0x00000100ull
177 #define VC_VXF_SCHED_PRIO 0x00000200ull
178 #define VC_VXF_SCHED_PAUSE 0x00000400ull
179 
180 #define VC_VXF_VIRT_MEM 0x00010000ull
181 #define VC_VXF_VIRT_UPTIME 0x00020000ull
182 #define VC_VXF_VIRT_CPU 0x00040000ull
183 #define VC_VXF_VIRT_LOAD 0x00080000ull
184 #define VC_VXF_VIRT_TIME 0x00100000ull
185 
186 #define VC_VXF_HIDE_MOUNT 0x01000000ull
187 #define VC_VXF_HIDE_NETIF 0x02000000ull
188 #define VC_VXF_HIDE_VINFO 0x04000000ull
189 
190 #define VC_VXF_STATE_SETUP (1ULL<<32)
191 #define VC_VXF_STATE_INIT (1ULL<<33)
192 #define VC_VXF_STATE_ADMIN (1ULL<<34)
193 
194 #define VC_VXF_SC_HELPER (1ULL<<36)
195 #define VC_VXF_REBOOT_KILL (1ULL<<37)
196 #define VC_VXF_PERSISTENT (1ULL<<38)
197 
198 #define VC_VXF_FORK_RSS (1ULL<<48)
199 #define VC_VXF_PROLIFIC (1ULL<<49)
200 
201 #define VC_VXF_IGNEG_NICE (1ULL<<52)
202 #define VC_VXF_IGNEG_IONICE (1ULL<<53)
203 
204 
205 // the ccapabilities
206 #define VC_VXC_SET_UTSNAME 0x00000001ull
207 #define VC_VXC_SET_RLIMIT 0x00000002ull
208 #define VC_VXC_FS_SECURITY 0x00000004ull
209 #define VC_VXC_TIOCSTI 0x00000010ull
210 
211 #define VC_VXC_RAW_ICMP 0x00000100ull
212 #define VC_VXC_SYSLOG 0x00001000ull
213 #define VC_VXC_OOM_ADJUST 0x00002000ull
214 #define VC_VXC_AUDIT_CONTROL 0x00004000ull
215 
216 #define VC_VXC_SECURE_MOUNT 0x00010000ull
217 #define VC_VXC_SECURE_REMOUNT 0x00020000ull
218 #define VC_VXC_BINARY_MOUNT 0x00040000ull
219 
220 #define VC_VXC_QUOTA_CTL 0x00100000ull
221 #define VC_VXC_ADMIN_MAPPER 0x00200000ull
222 #define VC_VXC_ADMIN_CLOOP 0x00400000ull
223 
224 #define VC_VXC_KTHREAD 0x01000000ull
225 #define VC_VXC_NAMESPACE 0x02000000ull
226 
227 
228 // the scheduler flags
229 #define VC_VXSM_FILL_RATE 0x0001
230 #define VC_VXSM_INTERVAL 0x0002
231 #define VC_VXSM_FILL_RATE2 0x0004
232 #define VC_VXSM_INTERVAL2 0x0008
233 #define VC_VXSM_TOKENS 0x0010
234 #define VC_VXSM_TOKENS_MIN 0x0020
235 #define VC_VXSM_TOKENS_MAX 0x0040
236 #define VC_VXSM_PRIO_BIAS 0x0100
237 #define VC_VXSM_CPU_ID 0x1000
238 #define VC_VXSM_BUCKET_ID 0x2000
239 
240 #define VC_VXSM_IDLE_TIME 0x0200
241 #define VC_VXSM_FORCE 0x0400
242 #define VC_VXSM_MSEC 0x4000
243 
244 #define VC_VXSM_V3_MASK 0x0173
245 
246 
247 // the network flags
248 #define VC_NXF_INFO_LOCK 0x00000001ull
249 #define VC_NXF_INFO_PRIVATE 0x00000008ull
250 
251 #define VC_NXF_SINGLE_IP 0x00000100ull
252 #define VC_NXF_LBACK_REMAP 0x00000200ull
253 #define VC_NXF_LBACK_ALLOW 0x00000400ull
254 
255 #define VC_NXF_HIDE_NETIF 0x02000000ull
256 #define VC_NXF_HIDE_LBACK 0x04000000ull
257 
258 #define VC_NXF_STATE_SETUP (1ULL<<32)
259 #define VC_NXF_STATE_ADMIN (1ULL<<34)
260 
261 #define VC_NXF_SC_HELPER (1ULL<<36)
262 #define VC_NXF_PERSISTENT (1ULL<<38)
263 
264 
265 // the network capabilities
266 #define VC_NXC_TUN_CREATE 0x00000001ull
267 
268 #define VC_NXC_RAW_ICMP 0x00000100ull
269 
270 
271 // the vserver specific limits
272 #define VC_VLIMIT_NSOCK 16
273 #define VC_VLIMIT_OPENFD 17
274 #define VC_VLIMIT_ANON 18
275 #define VC_VLIMIT_SHMEM 19
276 #define VC_VLIMIT_SEMARY 20
277 #define VC_VLIMIT_NSEMS 21
278 #define VC_VLIMIT_DENTRY 22
279 #define VC_VLIMIT_MAPPED 23
280 
281 
282 // the VCI bit values
283 #define VC_VCI_NO_DYNAMIC (1 << 0)
284 #define VC_VCI_PROC_SECURE (1 << 4)
285 #define VC_VCI_HARDCPU (1 << 5)
286 #define VC_VCI_IDLELIMIT (1 << 6)
287 #define VC_VCI_IDLETIME (1 << 7)
288 #define VC_VCI_COWBL (1 << 8)
289 #define VC_VCI_FULLCOWBL (1 << 9)
290 #define VC_VCI_SPACES (1 << 10)
291 #define VC_VCI_NETV2 (1 << 11)
292 #define VC_VCI_MEMCG (1 << 12)
293 #define VC_VCI_DEBUG (1 << 16)
294 #define VC_VCI_HISTORY (1 << 20)
295 #define VC_VCI_TAGGED (1 << 24)
296 #define VC_VCI_PPTAG (1 << 28)
297 
298 
299 // the device mapping flags
300 #define VC_DATTR_CREATE 0x00000001
301 #define VC_DATTR_OPEN 0x00000002
302 
303 #define VC_DATTR_REMAP 0x00000010
304 
305 
306 // the process context migration flags
307 #define VC_VXM_SET_INIT 0x00000001
308 #define VC_VXM_SET_REAPER 0x00000002
309 
310 
311 // the network address flags
312 #define VC_NXA_TYPE_IPV4 0x0001
313 #define VC_NXA_TYPE_IPV6 0x0002
314 
315 #define VC_NXA_TYPE_NONE 0x0000
316 #define VC_NXA_TYPE_ANY 0x00FF
317 
318 #define VC_NXA_TYPE_ADDR 0x0010
319 #define VC_NXA_TYPE_MASK 0x0020
320 #define VC_NXA_TYPE_RANGE 0x0040
321 
322 #define VC_NXA_MOD_BCAST 0x0100
323 #define VC_NXA_MOD_LBACK 0x0200
324 
325 
326 #ifndef CLONE_NEWNS
327 # define CLONE_NEWNS 0x00020000
328 #endif
329 #ifndef CLONE_NEWUTS
330 # define CLONE_NEWUTS 0x04000000
331 #endif
332 #ifndef CLONE_NEWIPC
333 # define CLONE_NEWIPC 0x08000000
334 #endif
335 #ifndef CLONE_NEWUSER
336 # define CLONE_NEWUSER 0x10000000
337 #endif
338 #ifndef CLONE_NEWPID
339 # define CLONE_NEWPID 0x20000000
340 #endif
341 #ifndef CLONE_NEWNET
342 # define CLONE_NEWNET 0x40000000
343 #endif
344 
345 
346 #define VC_BAD_PERSONALITY ((uint_least32_t)(-1))
347 
348 
358 #ifdef IS_DOXYGEN
359 typedef an_unsigned_integer_type xid_t;
360 typedef an_unsigned_integer_type nid_t;
361 typedef an_unsigned_integer_type tag_t;
362 #endif
363 
364 #ifdef __cplusplus
365 extern "C" {
366 #endif
367 
380  int vc_syscall(uint32_t cmd, xid_t xid, void *data);
381 
386  int vc_get_version();
387 
388  typedef uint64_t vc_vci_t;
393  vc_vci_t vc_get_vci();
394 
395  int vc_get_kernel();
396 
414  xid_t vc_new_s_context(xid_t ctx, unsigned int remove_cap, unsigned int flags);
415 
417  uint32_t ip;
418  uint32_t mask;
419  };
420 
424  int vc_set_ipv4root(uint32_t bcast, size_t nb,
425  struct vc_ip_mask_pair const *ips) VC_ATTR_NONNULL((3));
426 
433  size_t vc_get_nb_ipv4root() VC_ATTR_CONST VC_ATTR_PURE;
434 
435  /* process context */
438  struct vc_ctx_flags {
440  uint_least64_t flagword;
444  uint_least64_t mask;
445  };
446 
458  xid_t vc_ctx_create(xid_t xid, struct vc_ctx_flags *flags);
459 
466  int vc_ctx_migrate(xid_t xid, uint_least64_t flags);
467 
469  struct vc_ctx_stat {
470  uint_least32_t usecnt;
471  uint_least32_t tasks;
472  };
473 
481  int vc_ctx_stat(xid_t xid, struct vc_ctx_stat /*@out@*/ *stat) VC_ATTR_NONNULL((2));
482 
484  struct vc_virt_stat {
485  uint_least64_t offset;
486  uint_least64_t uptime;
487  uint_least32_t nr_threads;
488  uint_least32_t nr_running;
489  uint_least32_t nr_uninterruptible;
490  uint_least32_t nr_onhold;
491  uint_least32_t nr_forks;
492  uint_least32_t load[3];
493  };
494 
502  int vc_virt_stat(xid_t xid, struct vc_virt_stat /*@out@*/ *stat) VC_ATTR_NONNULL((2));
503 
510  int vc_ctx_kill(xid_t ctx, pid_t pid, int sig);
511 
512  int vc_get_cflags(xid_t xid, struct vc_ctx_flags /*@out@*/ *) VC_ATTR_NONNULL((2));
513  int vc_set_cflags(xid_t xid, struct vc_ctx_flags /*@in@*/ const *) VC_ATTR_NONNULL((2));
514 
516  struct vc_ctx_caps {
518  uint_least64_t bcaps;
522  uint_least64_t bmask;
524  uint_least64_t ccaps;
528  uint_least64_t cmask;
529  };
530 
531  int vc_get_ccaps(xid_t xid, struct vc_ctx_caps *);
532  int vc_set_ccaps(xid_t xid, struct vc_ctx_caps const *);
533 
534  struct vc_vx_info {
535  xid_t xid;
536  pid_t initpid;
537  };
538 
539  int vc_get_vx_info(xid_t xid, struct vc_vx_info *info) VC_ATTR_NONNULL((2));
540 
548  xid_t vc_get_task_xid(pid_t pid);
549 
553  int vc_wait_exit(xid_t xid);
554 
555  /* rlimit related functions */
556 
566  typedef uint_least64_t vc_limit_t;
567 
569  struct vc_rlimit_mask {
570  uint_least32_t min;
571  uint_least32_t soft;
572  uint_least32_t hard;
573  };
574 
576  int vc_get_rlimit_mask(xid_t xid,
577  struct vc_rlimit_mask /*@out@*/ *lim) VC_ATTR_NONNULL((2));
578 
582  struct vc_rlimit {
583  vc_limit_t min;
584  vc_limit_t soft;
585  vc_limit_t hard;
586  };
587 
596  int vc_get_rlimit(xid_t xid, int resource,
597  struct vc_rlimit /*@out@*/ *lim) VC_ATTR_NONNULL((3));
606  int vc_set_rlimit(xid_t xid, int resource,
607  struct vc_rlimit const /*@in@*/ *lim) VC_ATTR_NONNULL((3));
608 
610  struct vc_rlimit_stat {
611  uint_least32_t hits;
612  vc_limit_t value;
613  vc_limit_t minimum;
614  vc_limit_t maximum;
615  };
616 
625  int vc_rlimit_stat(xid_t xid, int resource,
626  struct vc_rlimit_stat /*@out@*/ *stat) VC_ATTR_NONNULL((3));
627 
634  int vc_reset_minmax(xid_t xid);
635 
655  bool vc_parseLimit(char const /*@in@*/ *str, vc_limit_t /*@out@*/ *res) VC_ATTR_NONNULL((1,2));
656 
657 
658  /* network context */
659  struct vc_nx_info {
660  nid_t nid;
661  };
662 
663  nid_t vc_get_task_nid(pid_t pid);
664  int vc_get_nx_info(nid_t nid, struct vc_nx_info *) VC_ATTR_NONNULL((2));
665 
666  struct vc_net_addr {
667  uint16_t vna_type;
668  uint16_t vna_flags;
669  uint16_t vna_prefix;
670  uint16_t vna_parent;
671  struct {
672  union {
673  struct in_addr v4;
674  struct in6_addr v6;
675  } ip;
676  union {
677  struct in_addr v4;
678  struct in6_addr v6;
679  } ip2;
680  union {
681  struct in_addr v4;
682  struct in6_addr v6;
683  } mask;
684  } s;
685 #define vna_v4_ip s.ip.v4
686 #define vna_v4_ip2 s.ip2.v4
687 #define vna_v4_mask s.mask.v4
688 #define vna_v6_ip s.ip.v6
689 #define vna_v6_ip2 s.ip2.v6
690 #define vna_v6_mask s.mask.v6
691  };
692 
693  struct vc_net_flags {
694  uint_least64_t flagword;
695  uint_least64_t mask;
696  };
697 
698  nid_t vc_net_create(nid_t nid);
699  int vc_net_migrate(nid_t nid);
700 
701  int vc_net_add(nid_t nid, struct vc_net_addr const *info);
702  int vc_net_remove(nid_t nid, struct vc_net_addr const *info);
703 
704  int vc_get_nflags(nid_t, struct vc_net_flags *);
705  int vc_set_nflags(nid_t, struct vc_net_flags const *);
706 
707  struct vc_net_caps {
708  uint_least64_t ncaps;
709  uint_least64_t cmask;
710  };
711 
712  int vc_get_ncaps(nid_t, struct vc_net_caps *);
713  int vc_set_ncaps(nid_t, struct vc_net_caps const *);
714 
715 
716  /* iattr related functions */
717 
718  int vc_set_iattr(char const *filename, xid_t xid,
719  uint_least32_t flags, uint_least32_t mask) VC_ATTR_NONNULL((1));
720 
721  int vc_fset_iattr(int fd, xid_t xid,
722  uint_least32_t flags, uint_least32_t mask);
723 
750  int vc_get_iattr(char const *filename, xid_t * /*@null@*/ xid,
751  uint_least32_t * /*@null@*/ flags,
752  uint_least32_t * /*@null@*/ mask) VC_ATTR_NONNULL((1));
753 
754  int vc_fget_iattr(int fd, xid_t * /*@null@*/ xid,
755  uint_least32_t * /*@null@*/ flags,
756  uint_least32_t * /*@null@*/ mask) VC_ATTR_NONNULL((4));
757 
771  xid_t vc_getfilecontext(char const *filename) VC_ATTR_NONNULL((1));
772 
773 
774  /* vhi related functions */
775  typedef enum { vcVHI_CONTEXT, vcVHI_SYSNAME, vcVHI_NODENAME,
776  vcVHI_RELEASE, vcVHI_VERSION, vcVHI_MACHINE,
777  vcVHI_DOMAINNAME } vc_uts_type;
778 
779  int vc_set_vhi_name(xid_t xid, vc_uts_type type,
780  char const *val, size_t len) VC_ATTR_NONNULL((3));
781  int vc_get_vhi_name(xid_t xid, vc_uts_type type,
782  char *val, size_t len) VC_ATTR_NONNULL((3));
783 
784  /* namespace related functions */
785  int vc_enter_namespace(xid_t xid, uint_least64_t mask, uint32_t index);
786  int vc_set_namespace(xid_t xid, uint_least64_t mask, uint32_t index);
787  int vc_cleanup_namespace(void);
788  uint_least64_t vc_get_space_mask(void);
789  uint_least64_t vc_get_space_default(void);
790 
791 
792  /* disk limit related things */
793  struct vc_ctx_dlimit {
794  uint_least32_t space_used;
795  uint_least32_t space_total;
796  uint_least32_t inodes_used;
797  uint_least32_t inodes_total;
798  uint_least32_t reserved;
799  };
800 
801 
803  int vc_add_dlimit(char const *filename, xid_t xid,
804  uint_least32_t flags) VC_ATTR_NONNULL((1));
806  int vc_rem_dlimit(char const *filename, xid_t xid,
807  uint_least32_t flags) VC_ATTR_NONNULL((1));
808 
810  int vc_set_dlimit(char const *filename, xid_t xid,
811  uint_least32_t flags,
812  struct vc_ctx_dlimit const *limits) VC_ATTR_NONNULL((1,4));
814  int vc_get_dlimit(char const *filename, xid_t xid,
815  uint_least32_t flags,
816  struct vc_ctx_dlimit *limits) VC_ATTR_NONNULL((1));
817 
819  tag_t vc_get_task_tag(pid_t pid);
820 
822  int vc_tag_create(tag_t tag);
823 
825  int vc_tag_migrate(tag_t tag);
826 
827  /* scheduler related syscalls */
828  struct vc_set_sched {
829  uint_least32_t set_mask;
830  int_least32_t fill_rate;
831  int_least32_t interval;
832  int_least32_t fill_rate2;
833  int_least32_t interval2;
834  int_least32_t tokens;
835  int_least32_t tokens_min;
836  int_least32_t tokens_max;
837  int_least32_t priority_bias;
838  int_least32_t cpu_id;
839  int_least32_t bucket_id;
840  };
841 
842  int vc_set_sched(xid_t xid, struct vc_set_sched const *) VC_ATTR_NONNULL((2));
843  int vc_get_sched(xid_t xid, struct vc_set_sched *) VC_ATTR_NONNULL((2));
844 
845  struct vc_sched_info {
846  int_least32_t cpu_id;
847  int_least32_t bucket_id;
848  uint_least64_t user_msec;
849  uint_least64_t sys_msec;
850  uint_least64_t hold_msec;
851  uint_least32_t token_usec;
852  int_least32_t vavavoom;
853  };
854 
855  int vc_sched_info(xid_t xid, struct vc_sched_info *info) VC_ATTR_NONNULL((2));
856 
857  /* misc. syscalls */
858  int vc_set_mapping(xid_t xid, const char *device, const char *target, uint32_t flags);
859  int vc_unset_mapping(xid_t xid, const char *device, const char *target, uint32_t flags);
860 
861  int vc_get_badness(xid_t xid, int64_t *badness);
862  int vc_set_badness(xid_t xid, int64_t badness);
863 
864 
866  struct vc_umask {
867  uint_least64_t umask;
868  uint_least64_t mask;
869  };
870 
871  int vc_get_umask(xid_t xid, struct vc_umask *umask);
872  int vc_set_umask(xid_t xid, struct vc_umask const *umask);
873 
878  char const *ptr;
879  size_t len;
880  };
881 
892  uint_least64_t vc_text2bcap(char const *str, size_t len);
893 
908  char const * vc_lobcap2text(uint_least64_t *val) VC_ATTR_NONNULL((1));
909 
937  int vc_list2bcap(char const *str, size_t len,
938  struct vc_err_listparser *err,
939  struct vc_ctx_caps *cap) VC_ATTR_NONNULL((1,4));
940 
941  uint_least64_t vc_text2ccap(char const *, size_t len);
942  char const * vc_loccap2text(uint_least64_t *);
943  int vc_list2ccap(char const *, size_t len,
944  struct vc_err_listparser *err,
945  struct vc_ctx_caps *);
946  char const * vc_loumask2text(uint_least64_t *);
947  int vc_list2umask(char const *, size_t len,
948  struct vc_err_listparser *err,
949  struct vc_umask *);
950  int vc_list2cflag(char const *, size_t len,
951  struct vc_err_listparser *err,
952  struct vc_ctx_flags *flags);
953  uint_least64_t vc_text2cflag(char const *, size_t len);
954  char const * vc_locflag2text(uint_least64_t *);
955 
956  uint_least32_t vc_list2cflag_compat(char const *, size_t len,
957  struct vc_err_listparser *err);
958  uint_least32_t vc_text2cflag_compat(char const *, size_t len);
959  char const * vc_hicflag2text_compat(uint_least32_t);
960 
961  int vc_text2cap(char const *);
962  char const * vc_cap2text(unsigned int);
963 
964 
965  int vc_list2nflag(char const *, size_t len,
966  struct vc_err_listparser *err,
967  struct vc_net_flags *flags);
968  uint_least64_t vc_text2nflag(char const *, size_t len);
969  char const * vc_lonflag2text(uint_least64_t *);
970 
971  uint_least64_t vc_text2ncap(char const *, size_t len);
972  char const * vc_loncap2text(uint_least64_t *);
973  int vc_list2ncap(char const *, size_t len,
974  struct vc_err_listparser *err,
975  struct vc_net_caps *);
976 
977  uint_least64_t vc_get_insecurebcaps() VC_ATTR_CONST;
978  inline static uint_least64_t vc_get_insecureccaps() {
979  return ~(VC_VXC_SET_UTSNAME|VC_VXC_RAW_ICMP|VC_VXC_AUDIT_CONTROL);
980  }
981 
982  inline static int vc_setfilecontext(char const *filename, xid_t xid) {
983  return vc_set_iattr(filename, xid, 0, VC_IATTR_XID);
984  }
985 
986 
987  uint_least32_t vc_text2personalityflag(char const *str,
988  size_t len) VC_ATTR_NONNULL((1));
989 
990  char const * vc_lopersonality2text(uint_least32_t *) VC_ATTR_NONNULL((1));
991 
992  int vc_list2personalityflag(char const /*@in@*/ *,
993  size_t len,
994  uint_least32_t /*@out@*/ *personality,
995  struct vc_err_listparser /*@out@*/ *err) VC_ATTR_NONNULL((1,3));
996 
997  uint_least32_t vc_str2personalitytype(char const /*@in@*/*,
998  size_t len) VC_ATTR_NONNULL((1));
999 
1000 
1001  typedef enum { vcFEATURE_VKILL, vcFEATURE_IATTR, vcFEATURE_RLIMIT,
1002  vcFEATURE_COMPAT, vcFEATURE_MIGRATE, vcFEATURE_NAMESPACE,
1003  vcFEATURE_SCHED, vcFEATURE_VINFO, vcFEATURE_VHI,
1004  vcFEATURE_VSHELPER0, vcFEATURE_VSHELPER, vcFEATURE_VWAIT,
1005  vcFEATURE_VNET, vcFEATURE_VSTAT, vcFEATURE_PPTAG,
1006  vcFEATURE_PIDSPACE, vcFEATURE_SPACES, vcFEATURE_PERSISTENT,
1007  vcFEATURE_PIVOT_ROOT, vcFEATURE_MEMCG, vcFEATURE_DYNAMIC,
1008  vcFEATURE_BME,
1009  }
1010  vcFeatureSet;
1011 
1012  bool vc_isSupported(vcFeatureSet) VC_ATTR_CONST;
1013  bool vc_isSupportedString(char const *);
1014 
1015 
1016  typedef enum { vcTYPE_INVALID, vcTYPE_MAIN, vcTYPE_WATCH,
1017  vcTYPE_STATIC, vcTYPE_DYNAMIC }
1018  vcXidType;
1019 
1020  vcXidType vc_getXIDType(xid_t xid) VC_ATTR_CONST;
1021 
1023  bool vc_is_dynamic_xid(xid_t xid);
1024 
1025 
1026  /* The management part */
1027 
1028 #define VC_LIMIT_VSERVER_NAME_LEN 1024
1029 
1030  typedef enum { vcCFG_NONE, vcCFG_AUTO,
1031  vcCFG_LEGACY,
1032  vcCFG_RECENT_SHORT,
1033  vcCFG_RECENT_FULL } vcCfgStyle;
1034 
1035 
1037  xid_t vc_xidopt2xid(char const *, bool honor_static, char const **err_info);
1039  nid_t vc_nidopt2nid(char const *, bool honor_static, char const **err_info);
1041  tag_t vc_tagopt2tag(char const *, bool honor_static, char const **err_info);
1042 
1043  vcCfgStyle vc_getVserverCfgStyle(char const *id);
1044 
1047  char * vc_getVserverName(char const *id, vcCfgStyle style);
1048 
1053  char * vc_getVserverCfgDir(char const *id, vcCfgStyle style);
1054 
1058  char * vc_getVserverAppDir(char const *id, vcCfgStyle style, char const *app);
1059 
1062  char * vc_getVserverVdir(char const *id, vcCfgStyle style, bool physical);
1063 
1064  typedef enum { vcCTX_XID = 1,
1065  vcCTX_NID,
1066  vcCTX_TAG,
1067  } vcCtxType;
1068 
1076  xid_t vc_getVserverCtx(char const *id, vcCfgStyle style,
1077  bool honor_static, bool /*@null@*/ *is_running,
1078  vcCtxType type);
1079 
1084  char * vc_getVserverByCtx(xid_t ctx, /*@null@*/vcCfgStyle *style,
1085  /*@null@*/char const *revdir);
1086 
1087  int vc_compareVserverById(char const *lhs, vcCfgStyle lhs_style,
1088  char const *rhs, vcCfgStyle rhs_style);
1089 
1090  void vc_exitLikeProcess(int pid, int ret) VC_ATTR_NORETURN;
1091 
1092 #define vcSKEL_INTERFACES 1u
1093 #define vcSKEL_PKGMGMT 2u
1094 #define vcSKEL_FILESYSTEM 4u
1095 
1098  int vc_createSkeleton(char const *id, vcCfgStyle style, int flags);
1099 
1100 
1101 #ifdef __cplusplus
1102 }
1103 #endif
1104 
1105 #undef VC_ATTR_PURE
1106 #undef VC_ATTR_ALWAYSINLINE
1107 #undef VC_ATTR_NORETURN
1108 #undef VC_ATTR_UNUSED
1109 #undef VC_ATTR_NONNULL
1110 
1111 #endif
int vc_get_dlimit(char const *filename, xid_t xid, uint_least32_t flags, struct vc_ctx_dlimit *limits)
char const * vc_lobcap2text(uint_least64_t *val)
Converts the lowest bit of a bcapability or the entire value (when possible) to a textual representat...
uint_least64_t vc_text2bcap(char const *str, size_t len)
Converts a single string into bcapability.
uint_least64_t cmask
Mask of set and unset process context capabilities when used by set operations, or the modifiable cap...
Definition: vserver.h:528
int vc_ctx_kill(xid_t ctx, pid_t pid, int sig)
Sends a signal to a context/pidSpecial values for pid are:
xid_t vc_xidopt2xid(char const *, bool honor_static, char const **err_info)
int vc_reset_minmax(xid_t xid)
Resets the minimum and maximum observed values of all resources.
size_t len
Length of the erroneous string.
Definition: vserver.h:879
Capabilities of process-contexts.
Definition: vserver.h:516
int vc_get_iattr(char const *filename, xid_t *xid, uint_least32_t *flags, uint_least32_t *mask)
Returns information about attributes and assigned context of a file.This function returns the VC_IATT...
int vc_rlimit_stat(xid_t xid, int resource, struct vc_rlimit_stat *stat)
Returns the current stats of resource.
uint_least32_t hard
masks the resources supporting a hard limit
Definition: vserver.h:572
bool vc_parseLimit(char const *str, vc_limit_t *res)
Parses a string describing a limitThis function parses str and interprets special words like &quot;inf&quot; or...
int vc_set_dlimit(char const *filename, xid_t xid, uint_least32_t flags, struct vc_ctx_dlimit const *limits)
char * vc_getVserverCfgDir(char const *id, vcCfgStyle style)
uint_least32_t tasks
number of tasks
Definition: vserver.h:471
char const * ptr
Pointer to the first character of an erroneous string.
Definition: vserver.h:878
int vc_ctx_stat(xid_t xid, struct vc_ctx_stat *stat)
Get some statistics about a context.
Namespaces allowed to unshare.
Definition: vserver.h:866
int vc_virt_stat(xid_t xid, struct vc_virt_stat *stat)
Get more statistics about a context.
The limits of a resources.
Definition: vserver.h:582
uint_least32_t hits
number of hits on the limit
Definition: vserver.h:611
xid_t vc_ctx_create(xid_t xid, struct vc_ctx_flags *flags)
Creates a context without starting it.This functions initializes a new context. When already in a fre...
char * vc_getVserverByCtx(xid_t ctx, vcCfgStyle *style, char const *revdir)
uint_least64_t bmask
Mask of set and unset common system capabilities when used by set operations, or the modifiable capab...
Definition: vserver.h:522
int vc_tag_migrate(tag_t tag)
uint_least64_t flagword
Mask of set context flags.
Definition: vserver.h:440
Statistics about a context.
Definition: vserver.h:469
int vc_syscall(uint32_t cmd, xid_t xid, void *data)
The generic vserver syscallThis function executes the generic vserver syscall. It uses the correct sy...
uint_least64_t vc_limit_t
The type which is used for a single limit value.
Definition: vserver.h:566
Information about parsing errors.
Definition: vserver.h:877
int vc_set_rlimit(xid_t xid, int resource, struct vc_rlimit const *lim)
Sets the limits of resource.
bool vc_is_dynamic_xid(xid_t xid)
int vc_get_rlimit_mask(xid_t xid, struct vc_rlimit_mask *lim)
Returns the limits supported by the kernel.
vc_limit_t minimum
minimum value observed
Definition: vserver.h:613
Masks describing the supported limits.
Definition: vserver.h:569
int vc_set_ipv4root(uint32_t bcast, size_t nb, struct vc_ip_mask_pair const *ips)
Sets the ipv4root information.
uint_least32_t usecnt
number of uses
Definition: vserver.h:470
an_unsigned_integer_type xid_t
Definition: vserver.h:359
vc_limit_t soft
the softlimit of a resource
Definition: vserver.h:584
int vc_wait_exit(xid_t xid)
Waits for the end of a context.
int vc_ctx_migrate(xid_t xid, uint_least64_t flags)
Moves the current process into the specified context.
char * vc_getVserverVdir(char const *id, vcCfgStyle style, bool physical)
int vc_createSkeleton(char const *id, vcCfgStyle style, int flags)
int vc_get_rlimit(xid_t xid, int resource, struct vc_rlimit *lim)
Returns the limits of resource.
uint_least32_t min
masks the resources supporting a minimum limit
Definition: vserver.h:570
int vc_get_version()
Returns the version of the current kernel API.
Contains further statistics about a context.
Definition: vserver.h:484
xid_t vc_getVserverCtx(char const *id, vcCfgStyle style, bool honor_static, bool *is_running, vcCtxType type)
vc_vci_t vc_get_vci()
Returns the kernel configuration bits.
char * vc_getVserverName(char const *id, vcCfgStyle style)
nid_t vc_nidopt2nid(char const *, bool honor_static, char const **err_info)
vc_limit_t min
the guaranted minimum of a resources
Definition: vserver.h:583
char * vc_getVserverAppDir(char const *id, vcCfgStyle style, char const *app)
uint_least64_t ccaps
Mask of set process context capabilities.
Definition: vserver.h:524
xid_t vc_getfilecontext(char const *filename)
Returns the context of filename This function calls vc_get_iattr() with appropriate arguments to dete...
size_t vc_get_nb_ipv4root() VC_ATTR_CONST
Returns the value of NB_IPV4ROOT.This function returns the value of NB_IPV4ROOT which was used when t...
Statistics for a resource limit.
Definition: vserver.h:610
Flags of process-contexts.
Definition: vserver.h:438
int vc_add_dlimit(char const *filename, xid_t xid, uint_least32_t flags)
vc_limit_t maximum
maximum value observed
Definition: vserver.h:614
xid_t vc_new_s_context(xid_t ctx, unsigned int remove_cap, unsigned int flags)
Moves current process into a contextPuts current process into context ctx, removes the capabilities g...
xid_t vc_get_task_xid(pid_t pid)
Returns the context of the given process.
tag_t vc_tagopt2tag(char const *, bool honor_static, char const **err_info)
int vc_tag_create(tag_t tag)
tag_t vc_get_task_tag(pid_t pid)
uint_least64_t mask
Mask of set and unset context flags when used by set operations, or modifiable flags when used by get...
Definition: vserver.h:444
int vc_list2bcap(char const *str, size_t len, struct vc_err_listparser *err, struct vc_ctx_caps *cap)
Converts a string into a bcapability-bitmaskSyntax of str: .
uint_least32_t soft
masks the resources supporting a soft limit
Definition: vserver.h:571
vc_limit_t value
current value
Definition: vserver.h:612
uint_least64_t bcaps
Mask of set common system capabilities.
Definition: vserver.h:518
int vc_rem_dlimit(char const *filename, xid_t xid, uint_least32_t flags)
vc_limit_t hard
the absolute hardlimit of a resource
Definition: vserver.h:585