util-vserver (libvserver)  0.30.216-pre3126
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_FS_TRUSTED 0x00000008ull
210 #define VC_VXC_TIOCSTI 0x00000010ull
211 
212 #define VC_VXC_RAW_ICMP 0x00000100ull
213 #define VC_VXC_SYSLOG 0x00001000ull
214 #define VC_VXC_OOM_ADJUST 0x00002000ull
215 #define VC_VXC_AUDIT_CONTROL 0x00004000ull
216 
217 #define VC_VXC_SECURE_MOUNT 0x00010000ull
218 #define VC_VXC_SECURE_REMOUNT 0x00020000ull
219 #define VC_VXC_BINARY_MOUNT 0x00040000ull
220 #define VC_VXC_DEV_MOUNT 0x00080000ull
221 
222 #define VC_VXC_QUOTA_CTL 0x00100000ull
223 #define VC_VXC_ADMIN_MAPPER 0x00200000ull
224 #define VC_VXC_ADMIN_CLOOP 0x00400000ull
225 
226 #define VC_VXC_KTHREAD 0x01000000ull
227 #define VC_VXC_NAMESPACE 0x02000000ull
228 
229 
230 // the scheduler flags
231 #define VC_VXSM_FILL_RATE 0x0001
232 #define VC_VXSM_INTERVAL 0x0002
233 #define VC_VXSM_FILL_RATE2 0x0004
234 #define VC_VXSM_INTERVAL2 0x0008
235 #define VC_VXSM_TOKENS 0x0010
236 #define VC_VXSM_TOKENS_MIN 0x0020
237 #define VC_VXSM_TOKENS_MAX 0x0040
238 #define VC_VXSM_PRIO_BIAS 0x0100
239 #define VC_VXSM_CPU_ID 0x1000
240 #define VC_VXSM_BUCKET_ID 0x2000
241 
242 #define VC_VXSM_IDLE_TIME 0x0200
243 #define VC_VXSM_FORCE 0x0400
244 #define VC_VXSM_MSEC 0x4000
245 
246 #define VC_VXSM_V3_MASK 0x0173
247 
248 
249 // the network flags
250 #define VC_NXF_INFO_LOCK 0x00000001ull
251 #define VC_NXF_INFO_PRIVATE 0x00000008ull
252 
253 #define VC_NXF_SINGLE_IP 0x00000100ull
254 #define VC_NXF_LBACK_REMAP 0x00000200ull
255 #define VC_NXF_LBACK_ALLOW 0x00000400ull
256 
257 #define VC_NXF_HIDE_NETIF 0x02000000ull
258 #define VC_NXF_HIDE_LBACK 0x04000000ull
259 
260 #define VC_NXF_STATE_SETUP (1ULL<<32)
261 #define VC_NXF_STATE_ADMIN (1ULL<<34)
262 
263 #define VC_NXF_SC_HELPER (1ULL<<36)
264 #define VC_NXF_PERSISTENT (1ULL<<38)
265 
266 
267 // the network capabilities
268 #define VC_NXC_TUN_CREATE 0x00000001ull
269 
270 #define VC_NXC_RAW_ICMP 0x00000100ull
271 
272 
273 // the vserver specific limits
274 #define VC_VLIMIT_NSOCK 16
275 #define VC_VLIMIT_OPENFD 17
276 #define VC_VLIMIT_ANON 18
277 #define VC_VLIMIT_SHMEM 19
278 #define VC_VLIMIT_SEMARY 20
279 #define VC_VLIMIT_NSEMS 21
280 #define VC_VLIMIT_DENTRY 22
281 #define VC_VLIMIT_MAPPED 23
282 
283 
284 // the VCI bit values
285 #define VC_VCI_NO_DYNAMIC (1 << 0)
286 #define VC_VCI_PROC_SECURE (1 << 4)
287 #define VC_VCI_HARDCPU (1 << 5)
288 #define VC_VCI_IDLELIMIT (1 << 6)
289 #define VC_VCI_IDLETIME (1 << 7)
290 #define VC_VCI_COWBL (1 << 8)
291 #define VC_VCI_FULLCOWBL (1 << 9)
292 #define VC_VCI_SPACES (1 << 10)
293 #define VC_VCI_NETV2 (1 << 11)
294 #define VC_VCI_MEMCG (1 << 12)
295 #define VC_VCI_DEBUG (1 << 16)
296 #define VC_VCI_HISTORY (1 << 20)
297 #define VC_VCI_TAGGED (1 << 24)
298 #define VC_VCI_PPTAG (1 << 28)
299 
300 
301 // the device mapping flags
302 #define VC_DATTR_CREATE 0x00000001
303 #define VC_DATTR_OPEN 0x00000002
304 
305 #define VC_DATTR_REMAP 0x00000010
306 
307 
308 // the process context migration flags
309 #define VC_VXM_SET_INIT 0x00000001
310 #define VC_VXM_SET_REAPER 0x00000002
311 
312 
313 // the network address flags
314 #define VC_NXA_TYPE_IPV4 0x0001
315 #define VC_NXA_TYPE_IPV6 0x0002
316 
317 #define VC_NXA_TYPE_NONE 0x0000
318 #define VC_NXA_TYPE_ANY 0x00FF
319 
320 #define VC_NXA_TYPE_ADDR 0x0010
321 #define VC_NXA_TYPE_MASK 0x0020
322 #define VC_NXA_TYPE_RANGE 0x0040
323 
324 #define VC_NXA_MOD_BCAST 0x0100
325 #define VC_NXA_MOD_LBACK 0x0200
326 
327 
328 #ifndef CLONE_NEWNS
329 # define CLONE_NEWNS 0x00020000
330 #endif
331 #ifndef CLONE_NEWUTS
332 # define CLONE_NEWUTS 0x04000000
333 #endif
334 #ifndef CLONE_NEWIPC
335 # define CLONE_NEWIPC 0x08000000
336 #endif
337 #ifndef CLONE_NEWUSER
338 # define CLONE_NEWUSER 0x10000000
339 #endif
340 #ifndef CLONE_NEWPID
341 # define CLONE_NEWPID 0x20000000
342 #endif
343 #ifndef CLONE_NEWNET
344 # define CLONE_NEWNET 0x40000000
345 #endif
346 
347 
348 #define VC_BAD_PERSONALITY ((uint_least32_t)(-1))
349 
350 
360 #ifdef IS_DOXYGEN
361 typedef an_unsigned_integer_type xid_t;
362 typedef an_unsigned_integer_type nid_t;
363 typedef an_unsigned_integer_type tag_t;
364 #endif
365 
366 #ifdef __cplusplus
367 extern "C" {
368 #endif
369 
382  int vc_syscall(uint32_t cmd, xid_t xid, void *data);
383 
388  int vc_get_version();
389 
390  typedef uint64_t vc_vci_t;
395  vc_vci_t vc_get_vci();
396 
397  int vc_get_kernel();
398 
416  xid_t vc_new_s_context(xid_t ctx, unsigned int remove_cap, unsigned int flags);
417 
419  uint32_t ip;
420  uint32_t mask;
421  };
422 
426  int vc_set_ipv4root(uint32_t bcast, size_t nb,
427  struct vc_ip_mask_pair const *ips) VC_ATTR_NONNULL((3));
428 
435  size_t vc_get_nb_ipv4root() VC_ATTR_CONST VC_ATTR_PURE;
436 
437  /* process context */
440  struct vc_ctx_flags {
442  uint_least64_t flagword;
446  uint_least64_t mask;
447  };
448 
460  xid_t vc_ctx_create(xid_t xid, struct vc_ctx_flags *flags);
461 
468  int vc_ctx_migrate(xid_t xid, uint_least64_t flags);
469 
471  struct vc_ctx_stat {
472  uint_least32_t usecnt;
473  uint_least32_t tasks;
474  };
475 
483  int vc_ctx_stat(xid_t xid, struct vc_ctx_stat /*@out@*/ *stat) VC_ATTR_NONNULL((2));
484 
486  struct vc_virt_stat {
487  uint_least64_t offset;
488  uint_least64_t uptime;
489  uint_least32_t nr_threads;
490  uint_least32_t nr_running;
491  uint_least32_t nr_uninterruptible;
492  uint_least32_t nr_onhold;
493  uint_least32_t nr_forks;
494  uint_least32_t load[3];
495  };
496 
504  int vc_virt_stat(xid_t xid, struct vc_virt_stat /*@out@*/ *stat) VC_ATTR_NONNULL((2));
505 
512  int vc_ctx_kill(xid_t ctx, pid_t pid, int sig);
513 
514  int vc_get_cflags(xid_t xid, struct vc_ctx_flags /*@out@*/ *) VC_ATTR_NONNULL((2));
515  int vc_set_cflags(xid_t xid, struct vc_ctx_flags /*@in@*/ const *) VC_ATTR_NONNULL((2));
516 
518  struct vc_ctx_caps {
520  uint_least64_t bcaps;
524  uint_least64_t bmask;
526  uint_least64_t ccaps;
530  uint_least64_t cmask;
531  };
532 
533  int vc_get_ccaps(xid_t xid, struct vc_ctx_caps *);
534  int vc_set_ccaps(xid_t xid, struct vc_ctx_caps const *);
535 
536  struct vc_vx_info {
537  xid_t xid;
538  pid_t initpid;
539  };
540 
541  int vc_get_vx_info(xid_t xid, struct vc_vx_info *info) VC_ATTR_NONNULL((2));
542 
550  xid_t vc_get_task_xid(pid_t pid);
551 
555  int vc_wait_exit(xid_t xid);
556 
557  /* rlimit related functions */
558 
568  typedef uint_least64_t vc_limit_t;
569 
571  struct vc_rlimit_mask {
572  uint_least32_t min;
573  uint_least32_t soft;
574  uint_least32_t hard;
575  };
576 
578  int vc_get_rlimit_mask(xid_t xid,
579  struct vc_rlimit_mask /*@out@*/ *lim) VC_ATTR_NONNULL((2));
580 
584  struct vc_rlimit {
585  vc_limit_t min;
586  vc_limit_t soft;
587  vc_limit_t hard;
588  };
589 
598  int vc_get_rlimit(xid_t xid, int resource,
599  struct vc_rlimit /*@out@*/ *lim) VC_ATTR_NONNULL((3));
608  int vc_set_rlimit(xid_t xid, int resource,
609  struct vc_rlimit const /*@in@*/ *lim) VC_ATTR_NONNULL((3));
610 
612  struct vc_rlimit_stat {
613  uint_least32_t hits;
614  vc_limit_t value;
615  vc_limit_t minimum;
616  vc_limit_t maximum;
617  };
618 
627  int vc_rlimit_stat(xid_t xid, int resource,
628  struct vc_rlimit_stat /*@out@*/ *stat) VC_ATTR_NONNULL((3));
629 
636  int vc_reset_minmax(xid_t xid);
637 
657  bool vc_parseLimit(char const /*@in@*/ *str, vc_limit_t /*@out@*/ *res) VC_ATTR_NONNULL((1,2));
658 
659 
660  /* network context */
661  struct vc_nx_info {
662  nid_t nid;
663  };
664 
665  nid_t vc_get_task_nid(pid_t pid);
666  int vc_get_nx_info(nid_t nid, struct vc_nx_info *) VC_ATTR_NONNULL((2));
667 
668  struct vc_net_addr {
669  uint16_t vna_type;
670  uint16_t vna_flags;
671  uint16_t vna_prefix;
672  uint16_t vna_parent;
673  struct {
674  union {
675  struct in_addr v4;
676  struct in6_addr v6;
677  } ip;
678  union {
679  struct in_addr v4;
680  struct in6_addr v6;
681  } ip2;
682  union {
683  struct in_addr v4;
684  struct in6_addr v6;
685  } mask;
686  } s;
687 #define vna_v4_ip s.ip.v4
688 #define vna_v4_ip2 s.ip2.v4
689 #define vna_v4_mask s.mask.v4
690 #define vna_v6_ip s.ip.v6
691 #define vna_v6_ip2 s.ip2.v6
692 #define vna_v6_mask s.mask.v6
693  };
694 
695  struct vc_net_flags {
696  uint_least64_t flagword;
697  uint_least64_t mask;
698  };
699 
700  nid_t vc_net_create(nid_t nid);
701  int vc_net_migrate(nid_t nid);
702 
703  int vc_net_add(nid_t nid, struct vc_net_addr const *info);
704  int vc_net_remove(nid_t nid, struct vc_net_addr const *info);
705 
706  int vc_get_nflags(nid_t, struct vc_net_flags *);
707  int vc_set_nflags(nid_t, struct vc_net_flags const *);
708 
709  struct vc_net_caps {
710  uint_least64_t ncaps;
711  uint_least64_t cmask;
712  };
713 
714  int vc_get_ncaps(nid_t, struct vc_net_caps *);
715  int vc_set_ncaps(nid_t, struct vc_net_caps const *);
716 
717 
718  /* iattr related functions */
719 
720  int vc_set_iattr(char const *filename, xid_t xid,
721  uint_least32_t flags, uint_least32_t mask) VC_ATTR_NONNULL((1));
722 
723  int vc_fset_iattr(int fd, xid_t xid,
724  uint_least32_t flags, uint_least32_t mask);
725 
752  int vc_get_iattr(char const *filename, xid_t * /*@null@*/ xid,
753  uint_least32_t * /*@null@*/ flags,
754  uint_least32_t * /*@null@*/ mask) VC_ATTR_NONNULL((1));
755 
756  int vc_fget_iattr(int fd, xid_t * /*@null@*/ xid,
757  uint_least32_t * /*@null@*/ flags,
758  uint_least32_t * /*@null@*/ mask) VC_ATTR_NONNULL((4));
759 
773  xid_t vc_getfilecontext(char const *filename) VC_ATTR_NONNULL((1));
774 
775 
776  /* vhi related functions */
777  typedef enum { vcVHI_CONTEXT, vcVHI_SYSNAME, vcVHI_NODENAME,
778  vcVHI_RELEASE, vcVHI_VERSION, vcVHI_MACHINE,
779  vcVHI_DOMAINNAME } vc_uts_type;
780 
781  int vc_set_vhi_name(xid_t xid, vc_uts_type type,
782  char const *val, size_t len) VC_ATTR_NONNULL((3));
783  int vc_get_vhi_name(xid_t xid, vc_uts_type type,
784  char *val, size_t len) VC_ATTR_NONNULL((3));
785 
786  /* namespace related functions */
787  int vc_enter_namespace(xid_t xid, uint_least64_t mask, uint32_t index);
788  int vc_set_namespace(xid_t xid, uint_least64_t mask, uint32_t index);
789  int vc_cleanup_namespace(void);
790  uint_least64_t vc_get_space_mask(void);
791  uint_least64_t vc_get_space_default(void);
792 
793 
794  /* disk limit related things */
795  struct vc_ctx_dlimit {
796  uint_least32_t space_used;
797  uint_least32_t space_total;
798  uint_least32_t inodes_used;
799  uint_least32_t inodes_total;
800  uint_least32_t reserved;
801  };
802 
803 
805  int vc_add_dlimit(char const *filename, xid_t xid,
806  uint_least32_t flags) VC_ATTR_NONNULL((1));
808  int vc_rem_dlimit(char const *filename, xid_t xid,
809  uint_least32_t flags) VC_ATTR_NONNULL((1));
810 
812  int vc_set_dlimit(char const *filename, xid_t xid,
813  uint_least32_t flags,
814  struct vc_ctx_dlimit const *limits) VC_ATTR_NONNULL((1,4));
816  int vc_get_dlimit(char const *filename, xid_t xid,
817  uint_least32_t flags,
818  struct vc_ctx_dlimit *limits) VC_ATTR_NONNULL((1));
819 
821  tag_t vc_get_task_tag(pid_t pid);
822 
824  int vc_tag_create(tag_t tag);
825 
827  int vc_tag_migrate(tag_t tag);
828 
829  /* scheduler related syscalls */
830  struct vc_set_sched {
831  uint_least32_t set_mask;
832  int_least32_t fill_rate;
833  int_least32_t interval;
834  int_least32_t fill_rate2;
835  int_least32_t interval2;
836  int_least32_t tokens;
837  int_least32_t tokens_min;
838  int_least32_t tokens_max;
839  int_least32_t priority_bias;
840  int_least32_t cpu_id;
841  int_least32_t bucket_id;
842  };
843 
844  int vc_set_sched(xid_t xid, struct vc_set_sched const *) VC_ATTR_NONNULL((2));
845  int vc_get_sched(xid_t xid, struct vc_set_sched *) VC_ATTR_NONNULL((2));
846 
847  struct vc_sched_info {
848  int_least32_t cpu_id;
849  int_least32_t bucket_id;
850  uint_least64_t user_msec;
851  uint_least64_t sys_msec;
852  uint_least64_t hold_msec;
853  uint_least32_t token_usec;
854  int_least32_t vavavoom;
855  };
856 
857  int vc_sched_info(xid_t xid, struct vc_sched_info *info) VC_ATTR_NONNULL((2));
858 
859  /* misc. syscalls */
860  int vc_set_mapping(xid_t xid, const char *device, const char *target, uint32_t flags);
861  int vc_unset_mapping(xid_t xid, const char *device, const char *target, uint32_t flags);
862 
863  int vc_get_badness(xid_t xid, int64_t *badness);
864  int vc_set_badness(xid_t xid, int64_t badness);
865 
866 
868  struct vc_umask {
869  uint_least64_t umask;
870  uint_least64_t mask;
871  };
872 
873  int vc_get_umask(xid_t xid, struct vc_umask *umask);
874  int vc_set_umask(xid_t xid, struct vc_umask const *umask);
875 
880  char const *ptr;
881  size_t len;
882  };
883 
894  uint_least64_t vc_text2bcap(char const *str, size_t len);
895 
910  char const * vc_lobcap2text(uint_least64_t *val) VC_ATTR_NONNULL((1));
911 
939  int vc_list2bcap(char const *str, size_t len,
940  struct vc_err_listparser *err,
941  struct vc_ctx_caps *cap) VC_ATTR_NONNULL((1,4));
942 
943  uint_least64_t vc_text2ccap(char const *, size_t len);
944  char const * vc_loccap2text(uint_least64_t *);
945  int vc_list2ccap(char const *, size_t len,
946  struct vc_err_listparser *err,
947  struct vc_ctx_caps *);
948  char const * vc_loumask2text(uint_least64_t *);
949  int vc_list2umask(char const *, size_t len,
950  struct vc_err_listparser *err,
951  struct vc_umask *);
952  int vc_list2cflag(char const *, size_t len,
953  struct vc_err_listparser *err,
954  struct vc_ctx_flags *flags);
955  uint_least64_t vc_text2umask(char const *str, size_t len);
956  uint_least64_t vc_text2cflag(char const *, size_t len);
957  char const * vc_locflag2text(uint_least64_t *);
958 
959  uint_least32_t vc_list2cflag_compat(char const *, size_t len,
960  struct vc_err_listparser *err);
961  uint_least32_t vc_text2cflag_compat(char const *, size_t len);
962  char const * vc_hicflag2text_compat(uint_least32_t);
963 
964  int vc_text2cap(char const *);
965  char const * vc_cap2text(unsigned int);
966 
967 
968  int vc_list2nflag(char const *, size_t len,
969  struct vc_err_listparser *err,
970  struct vc_net_flags *flags);
971  uint_least64_t vc_text2nflag(char const *, size_t len);
972  char const * vc_lonflag2text(uint_least64_t *);
973 
974  uint_least64_t vc_text2ncap(char const *, size_t len);
975  char const * vc_loncap2text(uint_least64_t *);
976  int vc_list2ncap(char const *, size_t len,
977  struct vc_err_listparser *err,
978  struct vc_net_caps *);
979 
980  uint_least64_t vc_get_insecurebcaps() VC_ATTR_CONST;
981  inline static uint_least64_t vc_get_insecureccaps() {
982  return ~(VC_VXC_SET_UTSNAME|VC_VXC_RAW_ICMP|VC_VXC_AUDIT_CONTROL);
983  }
984 
985  inline static int vc_setfilecontext(char const *filename, xid_t xid) {
986  return vc_set_iattr(filename, xid, 0, VC_IATTR_XID);
987  }
988 
989 
990  uint_least32_t vc_text2personalityflag(char const *str,
991  size_t len) VC_ATTR_NONNULL((1));
992 
993  char const * vc_lopersonality2text(uint_least32_t *) VC_ATTR_NONNULL((1));
994 
995  int vc_list2personalityflag(char const /*@in@*/ *,
996  size_t len,
997  uint_least32_t /*@out@*/ *personality,
998  struct vc_err_listparser /*@out@*/ *err) VC_ATTR_NONNULL((1,3));
999 
1000  uint_least32_t vc_str2personalitytype(char const /*@in@*/*,
1001  size_t len) VC_ATTR_NONNULL((1));
1002 
1003 
1004  typedef enum { vcFEATURE_VKILL, vcFEATURE_IATTR, vcFEATURE_RLIMIT,
1005  vcFEATURE_COMPAT, vcFEATURE_MIGRATE, vcFEATURE_NAMESPACE,
1006  vcFEATURE_SCHED, vcFEATURE_VINFO, vcFEATURE_VHI,
1007  vcFEATURE_VSHELPER0, vcFEATURE_VSHELPER, vcFEATURE_VWAIT,
1008  vcFEATURE_VNET, vcFEATURE_VSTAT, vcFEATURE_PPTAG,
1009  vcFEATURE_PIDSPACE, vcFEATURE_SPACES, vcFEATURE_PERSISTENT,
1010  vcFEATURE_PIVOT_ROOT, vcFEATURE_MEMCG, vcFEATURE_DYNAMIC,
1011  vcFEATURE_BME,
1012  }
1013  vcFeatureSet;
1014 
1015  bool vc_isSupported(vcFeatureSet) VC_ATTR_CONST;
1016  bool vc_isSupportedString(char const *);
1017 
1018 
1019  typedef enum { vcTYPE_INVALID, vcTYPE_MAIN, vcTYPE_WATCH,
1020  vcTYPE_STATIC, vcTYPE_DYNAMIC }
1021  vcXidType;
1022 
1023  vcXidType vc_getXIDType(xid_t xid) VC_ATTR_CONST;
1024 
1026  bool vc_is_dynamic_xid(xid_t xid);
1027 
1028 
1029  /* The management part */
1030 
1031 #define VC_LIMIT_VSERVER_NAME_LEN 1024
1032 
1033  typedef enum { vcCFG_NONE, vcCFG_AUTO,
1034  vcCFG_LEGACY,
1035  vcCFG_RECENT_SHORT,
1036  vcCFG_RECENT_FULL } vcCfgStyle;
1037 
1038 
1040  xid_t vc_xidopt2xid(char const *, bool honor_static, char const **err_info);
1042  nid_t vc_nidopt2nid(char const *, bool honor_static, char const **err_info);
1044  tag_t vc_tagopt2tag(char const *, bool honor_static, char const **err_info);
1045 
1046  vcCfgStyle vc_getVserverCfgStyle(char const *id);
1047 
1050  char * vc_getVserverName(char const *id, vcCfgStyle style);
1051 
1056  char * vc_getVserverCfgDir(char const *id, vcCfgStyle style);
1057 
1061  char * vc_getVserverAppDir(char const *id, vcCfgStyle style, char const *app);
1062 
1065  char * vc_getVserverVdir(char const *id, vcCfgStyle style, bool physical);
1066 
1067  typedef enum { vcCTX_XID = 1,
1068  vcCTX_NID,
1069  vcCTX_TAG,
1070  } vcCtxType;
1071 
1079  xid_t vc_getVserverCtx(char const *id, vcCfgStyle style,
1080  bool honor_static, bool /*@null@*/ *is_running,
1081  vcCtxType type);
1082 
1087  char * vc_getVserverByCtx(xid_t ctx, /*@null@*/vcCfgStyle *style,
1088  /*@null@*/char const *revdir);
1089 
1090  int vc_compareVserverById(char const *lhs, vcCfgStyle lhs_style,
1091  char const *rhs, vcCfgStyle rhs_style);
1092 
1093  void vc_exitLikeProcess(int pid, int ret) VC_ATTR_NORETURN;
1094 
1095 #define vcSKEL_INTERFACES 1u
1096 #define vcSKEL_PKGMGMT 2u
1097 #define vcSKEL_FILESYSTEM 4u
1098 
1101  int vc_createSkeleton(char const *id, vcCfgStyle style, int flags);
1102 
1103 
1104 #ifdef __cplusplus
1105 }
1106 #endif
1107 
1108 #undef VC_ATTR_PURE
1109 #undef VC_ATTR_ALWAYSINLINE
1110 #undef VC_ATTR_NORETURN
1111 #undef VC_ATTR_UNUSED
1112 #undef VC_ATTR_NONNULL
1113 
1114 #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:530
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:881
Capabilities of process-contexts.
Definition: vserver.h:518
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:574
bool vc_parseLimit(char const *str, vc_limit_t *res)
Parses a string describing a limitThis function parses str and interprets special words like "inf" 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:473
char const * ptr
Pointer to the first character of an erroneous string.
Definition: vserver.h:880
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:868
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:584
uint_least32_t hits
number of hits on the limit
Definition: vserver.h:613
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:524
int vc_tag_migrate(tag_t tag)
uint_least64_t flagword
Mask of set context flags.
Definition: vserver.h:442
Statistics about a context.
Definition: vserver.h:471
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:568
Information about parsing errors.
Definition: vserver.h:879
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:615
Masks describing the supported limits.
Definition: vserver.h:571
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:472
an_unsigned_integer_type xid_t
Definition: vserver.h:361
vc_limit_t soft
the softlimit of a resource
Definition: vserver.h:586
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:572
int vc_get_version()
Returns the version of the current kernel API.
Contains further statistics about a context.
Definition: vserver.h:486
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:585
char * vc_getVserverAppDir(char const *id, vcCfgStyle style, char const *app)
uint_least64_t ccaps
Mask of set process context capabilities.
Definition: vserver.h:526
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:612
Flags of process-contexts.
Definition: vserver.h:440
int vc_add_dlimit(char const *filename, xid_t xid, uint_least32_t flags)
vc_limit_t maximum
maximum value observed
Definition: vserver.h:616
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:446
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:573
vc_limit_t value
current value
Definition: vserver.h:614
uint_least64_t bcaps
Mask of set common system capabilities.
Definition: vserver.h:520
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:587