X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=kernel%2Fvserver%2Fhelper.c;h=e3ab5814fdb9cd99028bf786168082e2efe9b825;hb=8e8ece46a861c84343256819eaec77e608ff9217;hp=ebb3a755c2ca2279c0e862fa791ada50b651ee1e;hpb=a6d8dea2993ef90fb69b81372daa0b63f8aa940e;p=linux-2.6.git diff --git a/kernel/vserver/helper.c b/kernel/vserver/helper.c index ebb3a755c..e3ab5814f 100644 --- a/kernel/vserver/helper.c +++ b/kernel/vserver/helper.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -55,6 +56,7 @@ long vs_reboot(unsigned int cmd, void * arg) { char id_buf[8], cmd_buf[16]; char uid_buf[16], pid_buf[16]; + int ret; char *argv[] = {vshelper_path, NULL, id_buf, 0}; char *envp[] = {"HOME=/", "TERM=linux", @@ -88,9 +90,12 @@ long vs_reboot(unsigned int cmd, void * arg) return 0; } - if (do_vshelper(vshelper_path, argv, envp, 1)) - return -EPERM; - return 0; +#ifndef CONFIG_VSERVER_LEGACY + ret = do_vshelper(vshelper_path, argv, envp, 1); +#else + ret = do_vshelper(vshelper_path, argv, envp, 0); +#endif + return (ret) ? -EPERM : 0; } @@ -109,6 +114,9 @@ long vs_state_change(struct vx_info *vxi, unsigned int cmd) char *envp[] = {"HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", cmd_buf, 0}; + if (!vx_info_flags(vxi, VXF_STATE_HELPER, 0)) + return 0; + snprintf(id_buf, sizeof(id_buf)-1, "%d", vxi->vx_id); snprintf(cmd_buf, sizeof(cmd_buf)-1, "VS_CMD=%08x", cmd); @@ -127,3 +135,40 @@ long vs_state_change(struct vx_info *vxi, unsigned int cmd) return 0; } + +/* + * argv [0] = vshelper_path; + * argv [1] = action: "netup", "netdown" + * argv [2] = context identifier + * + * envp [*] = type-specific parameters + */ + +long vs_net_change(struct nx_info *nxi, unsigned int cmd) +{ + char id_buf[8], cmd_buf[16]; + char *argv[] = {vshelper_path, NULL, id_buf, 0}; + char *envp[] = {"HOME=/", "TERM=linux", + "PATH=/sbin:/usr/sbin:/bin:/usr/bin", cmd_buf, 0}; + + if (!nx_info_flags(nxi, NXF_STATE_HELPER, 0)) + return 0; + + snprintf(id_buf, sizeof(id_buf)-1, "%d", nxi->nx_id); + snprintf(cmd_buf, sizeof(cmd_buf)-1, "VS_CMD=%08x", cmd); + + switch (cmd) { + case VSC_NETUP: + argv[1] = "netup"; + break; + case VSC_NETDOWN: + argv[1] = "netdown"; + break; + default: + return 0; + } + + do_vshelper(vshelper_path, argv, envp, 1); + return 0; +} +