added VCMD_set_namespace and VCMD_cleanup_namespace declarations
[util-vserver.git] / util-vserver / lib / virtual.h
1 #ifndef _LINUX_VIRTUAL_H
2 #define _LINUX_VIRTUAL_H
3
4
5 #define NB_IPV4ROOT     16
6
7
8 #define VC_CATEGORY(c)          (((c) >> 24) & 0x3F)
9 #define VC_COMMAND(c)           (((c) >> 16) & 0xFF)
10 #define VC_VERSION(c)           ((c) & 0xFFF)
11
12 #define VC_CMD(c,i,v)           ((((VC_CAT_ ## c) & 0x3F) << 24) \
13                                 | (((i) & 0xFF) << 16) | ((v) & 0xFFF))
14
15 /*
16
17   Syscall Matrix V2.3
18
19          |VERSION|CREATE |MODIFY |MIGRATE|CONTROL|EXPERIM| |SPECIAL|SPECIAL|
20          |STATS  |DESTROY|ALTER  |CHANGE |LIMIT  |TEST   | |       |       |
21          |INFO   |SETUP  |       |MOVE   |       |       | |       |       |
22   -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
23   SYSTEM |VERSION|       |       |       |       |       | |DEVICES|       |
24   HOST   |     00|     01|     02|     03|     04|     05| |     06|     07|
25   -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
26   CPU    |       |       |       |       |       |       | |SCHED. |       |
27   PROCESS|     08|     09|     10|     11|     12|     13| |     14|     15|
28   -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
29   MEMORY |       |       |       |       |       |       | |SWAP   |       |
30          |     16|     17|     18|     19|     20|     21| |     22|     23|
31   -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
32   NETWORK|       |       |       |       |       |       | |SERIAL |       |
33          |     24|     25|     26|     27|     28|     29| |     30|     31|
34   -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
35   DISK   |       |       |       |       |       |       | |       |       |
36   VFS    |     32|     33|     34|     35|     36|     37| |     38|     39|
37   -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
38   OTHER  |       |       |       |       |       |       | |       |       |
39          |     40|     41|     42|     43|     44|     45| |     46|     47|
40   =======+=======+=======+=======+=======+=======+=======+ +=======+=======+
41   SPECIAL|       |       |       |       |       |       | |       |       |
42          |     48|     49|     50|     51|     52|     53| |     54|     55|
43   -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
44   SPECIAL|       |       |       |       |RLIMIT |SYSCALL| |       |COMPAT |
45          |     56|     57|     58|     59|     60|TEST 61| |     62|     63|
46   -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
47
48 */
49
50 #define VC_CAT_VERSION          0
51 #define VC_CAT_VSETUP           1
52 #define VC_CAT_VHOST            2
53
54 #define VC_CAT_PROCALT          10
55 #define VC_CAT_PROCMIG          11
56 #define VC_CAT_PROCTRL          12
57
58 #define VC_CAT_SCHED            14
59 #define VC_CAT_INODE            38
60
61 #define VC_CAT_VINFO            46
62
63 #define VC_CAT_FLAGS            59
64 #define VC_CAT_RLIMIT           60
65
66 #define VC_CAT_SYSTEST          61
67 #define VC_CAT_COMPAT           63
68
69
70
71 /*  interface version */
72
73 #define VCI_VERSION             0x00010004
74
75
76
77 /*  query version */
78
79 #define VCMD_get_version        VC_CMD(VERSION, 0, 0)
80
81
82 /*  compatibiliy vserver commands */
83
84 #define VCMD_new_s_context      VC_CMD(COMPAT, 1, 1)
85 #define VCMD_set_ipv4root       VC_CMD(COMPAT, 2, 3)
86
87 #define VCMD_enter_namespace    VC_CMD(PROCALT, 1, 0)
88 #define VCMD_cleanup_namespace  VC_CMD(PROCALT, 2, 0)
89 #define VCMD_set_namespace      VC_CMD(PROCALT, 3, 0)
90
91 /*  compatibiliy vserver arguments */
92
93 struct  vcmd_new_s_context_v1 {
94         uint32_t remove_cap;
95         uint32_t flags;
96 };
97
98 struct  vcmd_set_ipv4root_v3 {
99         /* number of pairs in id */
100         uint32_t broadcast;
101         struct {
102                 uint32_t ip;
103                 uint32_t mask;
104         } ip_mask_pair[NB_IPV4ROOT];
105 };
106
107 /*  context signalling */
108
109 #define VCMD_ctx_kill           VC_CMD(PROCTRL, 1, 0)
110
111 struct  vcmd_ctx_kill_v0 {
112         int32_t pid;
113         int32_t sig;
114 };
115
116 /*  rlimit vserver commands */
117
118 #define VCMD_get_rlimit         VC_CMD(RLIMIT, 1, 0)
119 #define VCMD_set_rlimit         VC_CMD(RLIMIT, 2, 0)
120 #define VCMD_get_rlimit_mask    VC_CMD(RLIMIT, 3, 0)
121
122 struct  vcmd_ctx_rlimit_v0 {
123         uint32_t id;
124         uint64_t minimum;
125         uint64_t softlimit;
126         uint64_t maximum;
127 };
128
129 struct  vcmd_ctx_rlimit_mask_v0 {
130         uint32_t minimum;
131         uint32_t softlimit;
132         uint32_t maximum;
133 };
134
135 #define CRLIM_INFINITY          (~0ULL)
136 #define CRLIM_KEEP              (~1ULL)
137
138
139
140 #define VC_CAT_SCHED            14
141
142 /* scheduler vserver commands */
143
144 #define VCMD_get_sched          VC_CMD(SCHED, 1, 1)
145 #define VCMD_set_sched          VC_CMD(SCHED, 2, 1)
146
147
148 /* Structure for context's TBF scheduling priorities */
149
150 struct  vcmd_tbf_sched_v1 {
151         uint32_t fill_level;
152         uint32_t fill_rate;
153         uint32_t period;
154         uint32_t bucket_size;
155 };
156
157 #define TBFS_PERIOD_AUTO        (0ULL)
158 #define TBFS_KEEP_VALUE         (~0ULL)
159
160
161 /*  inode vserver commands */
162
163 #define VCMD_get_iattr_v0       VC_CMD(INODE, 1, 0)
164 #define VCMD_set_iattr_v0       VC_CMD(INODE, 2, 0)
165 #define VCMD_get_iattr          VC_CMD(INODE, 1, 1)
166 #define VCMD_set_iattr          VC_CMD(INODE, 2, 1)
167
168 struct  vcmd_ctx_iattr_v1 {
169         const char *file_name;
170         uint32_t xid;
171         uint32_t flags;
172         uint32_t mask;
173 };
174
175 #define IATTR_XID       0x01000000
176
177 #define IATTR_ADMIN     0x00000001
178 #define IATTR_WATCH     0x00000002
179 #define IATTR_HIDE      0x00000004
180
181 #define IATTR_BARRIER   0x00010000
182 #define IATTR_IUNLINK   0x00020000
183
184
185
186 /* vinfo commands */
187
188 #define VCMD_task_xid           VC_CMD(VINFO, 1, 0)
189 #define VCMD_task_nid           VC_CMD(VINFO, 2, 0)
190
191 #define VCMD_vx_info            VC_CMD(VINFO, 5, 0)
192 #define VCMD_nx_info            VC_CMD(VINFO, 6, 0)
193
194 struct  vcmd_vx_info_v0 {
195     uint32_t xid;
196     uint32_t initpid;
197     /* more to come */
198 };
199
200
201 #define VCMD_vx_set_vhi_name            VC_CMD(VHOST, 1, 0)
202 #define VCMD_vx_get_vhi_name            VC_CMD(VHOST, 2, 0)
203
204 struct  vcmd_vx_vhi_name_v0 {
205        uint32_t field;
206        char name[65];
207 };
208
209 enum vx_vhi_name_field {
210        VHIN_CONTEXT=0,
211        VHIN_SYSNAME,
212        VHIN_NODENAME,
213        VHIN_RELEASE,
214        VHIN_VERSION,
215        VHIN_MACHINE,
216        VHIN_DOMAINNAME,
217 };
218
219 #define VCMD_create_context     VC_CMD(VSETUP, 1, 0)
220 #define VCMD_migrate_context    VC_CMD(PROCMIG, 1, 0)
221
222 #define VCMD_get_flags          VC_CMD(FLAGS, 1, 0)
223 #define VCMD_set_flags          VC_CMD(FLAGS, 2, 0)
224 struct  vcmd_ctx_flags_v0 {
225         uint64_t flagword;
226         uint64_t mask;
227 };
228
229
230 #define VCMD_get_ccaps          VC_CMD(FLAGS, 3, 0)
231 #define VCMD_set_ccaps          VC_CMD(FLAGS, 4, 0)
232 struct  vcmd_ctx_caps_v0 {
233         uint64_t scaps;
234         uint64_t ccaps;
235         uint64_t cmask;
236 };
237
238 #endif /* _LINUX_VIRTUAL_H */