2 * linux/kernel/vserver/switch.c
4 * Virtual Server: Syscall Switch
6 * Copyright (C) 2003-2004 Herbert Pƶtzl
9 * V0.02 added signal to context
10 * V0.03 added rlimit functions
11 * V0.04 added iattr, task/xid functions
15 #include <linux/config.h>
16 #include <linux/linkage.h>
17 #include <asm/errno.h>
19 #include <linux/vs_base.h>
20 #include <linux/vs_context.h>
21 #include <linux/vserver/switch.h>
25 vc_get_version(uint32_t id)
31 #include <linux/vserver/legacy.h>
32 #include <linux/vserver/context.h>
33 #include <linux/vserver/network.h>
34 #include <linux/vserver/namespace.h>
35 #include <linux/vserver/sched.h>
36 #include <linux/vserver/limit.h>
37 #include <linux/vserver/inode.h>
38 #include <linux/vserver/signal.h>
39 #include <linux/vserver/dlimit.h>
42 extern asmlinkage long
43 sys_vserver(uint32_t cmd, uint32_t id, void __user *data)
46 vxdprintk(VXD_CBIT(switch, 0),
47 "vc: VCMD_%02d_%d[%d], %d",
48 VC_CATEGORY(cmd), VC_COMMAND(cmd),
52 case VCMD_get_version:
53 return vc_get_version(id);
55 #ifdef CONFIG_VSERVER_LEGACY
56 case VCMD_new_s_context:
57 return vc_new_s_context(id, data);
58 case VCMD_set_ipv4root:
59 return vc_set_ipv4root(id, data);
63 return vc_task_xid(id, data);
65 return vc_vx_info(id, data);
68 return vc_task_nid(id, data);
70 return vc_nx_info(id, data);
72 case VCMD_set_namespace:
73 return vc_set_namespace(id, data);
74 case VCMD_cleanup_namespace:
75 return vc_cleanup_namespace(id, data);
78 /* those are allowed while in setup too */
79 if (!vx_check(0, VX_ADMIN|VX_WATCH) &&
80 !vx_flags(VXF_STATE_SETUP,0))
83 #ifdef CONFIG_VSERVER_LEGACY
87 if (vx_check(0, VX_WATCH))
94 return vc_get_rlimit(id, data);
96 return vc_set_rlimit(id, data);
97 case VCMD_get_rlimit_mask:
98 return vc_get_rlimit_mask(id, data);
100 case VCMD_vx_get_vhi_name:
101 return vc_get_vhi_name(id, data);
102 case VCMD_vx_set_vhi_name:
103 return vc_set_vhi_name(id, data);
105 case VCMD_set_cflags:
106 return vc_set_cflags(id, data);
107 case VCMD_get_cflags:
108 return vc_get_cflags(id, data);
111 return vc_set_ccaps(id, data);
113 return vc_get_ccaps(id, data);
115 case VCMD_set_nflags:
116 return vc_set_nflags(id, data);
117 case VCMD_get_nflags:
118 return vc_get_nflags(id, data);
121 return vc_set_ncaps(id, data);
123 return vc_get_ncaps(id, data);
126 return vc_set_sched(id, data);
128 case VCMD_add_dlimit:
129 return vc_add_dlimit(id, data);
130 case VCMD_rem_dlimit:
131 return vc_rem_dlimit(id, data);
132 case VCMD_set_dlimit:
133 return vc_set_dlimit(id, data);
134 case VCMD_get_dlimit:
135 return vc_get_dlimit(id, data);
138 /* below here only with VX_ADMIN */
139 if (!vx_check(0, VX_ADMIN|VX_WATCH))
144 return vc_ctx_kill(id, data);
146 #ifdef CONFIG_VSERVER_LEGACY
147 case VCMD_create_context:
148 return vc_ctx_create(id, data);
152 return vc_get_iattr(id, data);
154 return vc_set_iattr(id, data);
156 case VCMD_enter_namespace:
157 return vc_enter_namespace(id, data);
159 case VCMD_ctx_create:
160 #ifdef CONFIG_VSERVER_LEGACY
166 return vc_ctx_create(id, data);
167 case VCMD_ctx_migrate:
168 return vc_ctx_migrate(id, data);
170 case VCMD_net_create:
171 return vc_net_create(id, data);
172 case VCMD_net_migrate:
173 return vc_net_migrate(id, data);