vdlimit is a replacement for the prior tools used to set disklimits.
[util-vserver.git] / lib / virtual.h
1 #ifndef _LINUX_VIRTUAL_H
2 #define _LINUX_VIRTUAL_H
3
4 #define VC_CATEGORY(c)          (((c) >> 24) & 0x3F)
5 #define VC_COMMAND(c)           (((c) >> 16) & 0xFF)
6 #define VC_VERSION(c)           ((c) & 0xFFF)
7
8 #define VC_CMD(c,i,v)           ((((VC_CAT_ ## c) & 0x3F) << 24) \
9                                 | (((i) & 0xFF) << 16) | ((v) & 0xFFF))
10
11 /*
12
13   Syscall Matrix V2.2
14
15          |VERSION|CREATE |MODIFY |MIGRATE|CONTROL|EXPERIM| |SPECIAL|SPECIAL|
16          |STATS  |DESTROY|ALTER  |CHANGE |LIMIT  |TEST   | |       |       |
17          |INFO   |SETUP  |       |MOVE   |       |       | |       |       |
18   -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
19   SYSTEM |VERSION|       |       |       |       |       | |DEVICES|       |
20   HOST   |     00|     01|     02|     03|     04|     05| |     06|     07|
21   -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
22   CPU    |       |       |       |       |       |       | |SCHED. |       |
23   PROCESS|     08|     09|     10|     11|     12|     13| |     14|     15|
24   -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
25   MEMORY |       |       |       |       |       |       | |SWAP   |       |
26          |     16|     17|     18|     19|     20|     21| |     22|     23|
27   -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
28   NETWORK|       |       |       |       |       |       | |SERIAL |       |
29          |     24|     25|     26|     27|     28|     29| |     30|     31|
30   -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
31   DISK   |       |       |       |       |       |       | |       |       |
32   VFS    |     32|     33|     34|     35|     36|     37| |     38|     39|
33   -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
34   OTHER  |       |       |       |       |       |       | |       |       |
35          |     40|     41|     42|     43|     44|     45| |     46|     47|
36   =======+=======+=======+=======+=======+=======+=======+ +=======+=======+
37   SPECIAL|       |       |       |       |       |       | |       |       |
38          |     48|     49|     50|     51|     52|     53| |     54|     55|
39   -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
40   SPECIAL|       |       |       |       |RLIMIT |SYSCALL| |       |COMPAT |
41          |     56|     57|     58|     59|     60|TEST 61| |     62|     63|
42   -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
43
44 */
45
46 #define VC_CAT_VERSION          0
47
48 #define VC_CAT_PROCTRL          12
49
50 #define VC_CAT_DLIMIT           36
51
52 #define VC_CAT_RLIMIT           60
53
54 #define VC_CAT_SYSTEST          61
55 #define VC_CAT_COMPAT           63
56         
57 /*  interface version */
58
59 #define VCI_VERSION             0x00010001
60
61
62
63 /*  query version */
64
65 #define VCMD_get_version        VC_CMD(VERSION, 0, 0)
66
67
68 /*  compatibiliy vserver commands */
69
70 #define VCMD_new_s_context      VC_CMD(COMPAT, 1, 1)
71 #define VCMD_set_ipv4root       VC_CMD(COMPAT, 2, 3)
72
73 /*  compatibiliy vserver arguments */
74
75 struct  vcmd_new_s_context_v1 {
76         uint32_t remove_cap;
77         uint32_t flags;
78 };
79
80 #define NB_IPV4ROOT 16
81
82 struct  vcmd_set_ipv4root_v3 {
83         /* number of pairs in id */
84         uint32_t broadcast;
85         struct {
86                 uint32_t ip;
87                 uint32_t mask;
88         } ip_mask_pair[NB_IPV4ROOT];
89 };
90
91 /*  context signalling */
92
93 #define VCMD_ctx_kill           VC_CMD(PROCTRL, 1, 0)
94
95 struct  vcmd_ctx_kill_v0 {
96         int32_t pid;
97         int32_t sig;
98 };
99
100 /*  rlimit vserver commands */
101
102 #define VCMD_get_rlimit         VC_CMD(RLIMIT, 1, 0)
103 #define VCMD_set_rlimit         VC_CMD(RLIMIT, 2, 0)
104 #define VCMD_get_rlimit_mask    VC_CMD(RLIMIT, 3, 0)
105
106 struct  vcmd_ctx_rlimit_v0 {
107         uint32_t id;
108         uint64_t minimum;
109         uint64_t softlimit;
110         uint64_t maximum;
111 };
112
113 struct  vcmd_ctx_rlimit_mask_v0 {
114         uint32_t minimum;
115         uint32_t softlimit;
116         uint32_t maximum;
117 };
118
119 #define CRLIM_INFINITY          (~0ULL)
120 #define CRLIM_KEEP              (~1ULL)
121
122
123 #endif /* _LINUX_VIRTUAL_H */