/*
 *  linux/kernel/vserver/switch.c
 *
 *  Virtual Server: Syscall Switch
 *
 *  Copyright (C) 2003-2004  Herbert P�tzl
 *
 *  V0.01  syscall switch
 *  V0.02  added signal to context
 *  V0.03  added rlimit functions
 *  V0.04  added iattr, task/xid functions
 *
 */

#include <linux/config.h>
#include <linux/linkage.h>
#include <asm/errno.h>

#include <linux/vserver/switch.h>


static inline int
vc_get_version(uint32_t id)
{
	return VCI_VERSION;
}


#include <linux/vserver/legacy.h>
#include <linux/vserver/context.h>
#include <linux/vserver/network.h>
#include <linux/vserver/limit.h>
#include <linux/vserver/inode.h>
#include <linux/vserver/signal.h>

extern asmlinkage int
sys_vserver(uint32_t cmd, uint32_t id, void *data)
{
	int ret = -ENOTSUP;

	switch (cmd) {
	case VCMD_get_version:
		ret = vc_get_version(id);
		break;
		
	case VCMD_new_s_context:
		ret = vc_new_s_context(id, data);
		break;
	case VCMD_set_ipv4root:
		ret = vc_set_ipv4root(id, data);
		break;

	case VCMD_get_rlimit:
		ret = vc_get_rlimit(id, data);
		break;
	case VCMD_set_rlimit:
		ret = vc_set_rlimit(id, data);
		break;
	case VCMD_get_rlimit_mask:
		ret = vc_get_rlimit_mask(id, data);
		break;
		
	case VCMD_ctx_kill:
		ret = vc_ctx_kill(id, data);
		break;

	case VCMD_get_iattr:
		ret = vc_get_iattr(id, data);
		break;
	case VCMD_set_iattr:
		ret = vc_set_iattr(id, data);
		break;

	case VCMD_task_xid:
		ret = vc_task_xid(id, data);
		break;
	case VCMD_vx_info:
		ret = vc_vx_info(id, data);
		break;

	case VCMD_enter_namespace:
		ret = vc_enter_namespace(id, data);
		break;
	}
	return ret;
}