#include "internal.h"
-#ifndef __NR_vserver
-# define __NR_vserver 273
+#if !defined(__NR_vserver) && defined(ENSC_SYSCALL__NR_vserver)
+# define __NR_vserver ENSC_SYSCALL__NR_vserver
#endif
#define VC_PREFIX 0)
int ver = utilvserver_checkCompatVersion(); \
if (ver==-1) return -1; \
VC_SUFFIX, __VA_ARGS__, VC_PREFIX; \
- errno = EINVAL; \
+ errno = ENOSYS; \
return -1; \
} while (0)
#else
#endif
#ifdef VC_ENABLE_API_V13
-# define CALL_VC_V13(F,...) CALL_VC_GENERAL(0x00010010, v13, F, __VA_ARGS__)
+# define CALL_VC_V13(F,...) CALL_VC_GENERAL(0x00010011, v13, F, __VA_ARGS__)
#else
# define CALL_VC_V13(F,...) CALL_VC_NOOP
#endif
+#ifdef VC_ENABLE_API_V13
+# define CALL_VC_V13A(F,...) CALL_VC_GENERAL(0x00010012, v13, F, __VA_ARGS__)
+#else
+# define CALL_VC_V13A(F,...) CALL_VC_NOOP
+#endif
+
#ifdef VC_ENABLE_API_FSCOMPAT
# define CALL_VC_FSCOMPAT(F,...) CALL_VC_GENERAL(0x00010000, fscompat, F, __VA_ARGS__)
#else
#endif
#ifdef VC_ENABLE_API_OLDPROC
-# define CALL_VC_OLDPROC(F,...) CALL_VC_GENERAL(0x00000000, X, F, __VA_ARGS__)
+# define CALL_VC_OLDPROC(F,...) CALL_VC_GENERAL(0x00000000, oldproc, F, __VA_ARGS__)
#else
# define CALL_VC_OLDPROC(F,...) CALL_VC_NOOP
#endif
+#ifdef VC_ENABLE_API_OLDUTS
+# define CALL_VC_OLDUTS(F,...) CALL_VC_GENERAL(0x00000000, olduts, F, __VA_ARGS__)
+#else
+# define CALL_VC_OLDUTS(F,...) CALL_VC_NOOP
+#endif
+
+
+ // Some kernel <-> userspace wrappers; they should be noops in most cases
+
#if 1
# define CTX_KERNEL2USER(X) (((X)==(uint32_t)(-1)) ? VC_NOCTX : \
((X)==(uint32_t)(-2)) ? VC_SAMECTX : \
(xid_t)(X))
-# define CTX_USER2KERNEL(X) (((X)==VC_RANDCTX) ? (uint32_t)(-1) : \
- ((X)==VC_SAMECTX) ? (uint32_t)(-2) : \
+# define CTX_USER2KERNEL(X) (((X)==VC_DYNAMIC_XID) ? (uint32_t)(-1) : \
+ ((X)==VC_SAMECTX) ? (uint32_t)(-2) : \
(uint32_t)(X))
#else
# define CTX_USER2KERNEL(X) (X)
# define EXT2FLAGS_USER2KERNEL(X) (X)
#endif
+#if 1
+# define VHI_USER2KERNEL(X) ((((X)==vcVHI_CONTEXT) ? VHIN_CONTEXT : \
+ ((X)==vcVHI_SYSNAME) ? VHIN_SYSNAME : \
+ ((X)==vcVHI_NODENAME) ? VHIN_NODENAME : \
+ ((X)==vcVHI_RELEASE) ? VHIN_RELEASE : \
+ ((X)==vcVHI_VERSION) ? VHIN_VERSION : \
+ ((X)==vcVHI_MACHINE) ? VHIN_MACHINE : \
+ ((X)==vcVHI_DOMAINNAME) ? VHIN_DOMAINNAME : \
+ (X)))
+# define VHI_KERNEL2USER(X) ((((X)==VHIN_CONTEXT) ? vcVHI_CONTEXT : \
+ ((X)==VHIN_SYSNAME) ? vcVHI_SYSNAME : \
+ ((X)==VHIN_NODENAME) ? vcVHI_NODENAME : \
+ ((X)==VHIN_RELEASE) ? vcVHI_RELEASE : \
+ ((X)==VHIN_VERSION) ? vcVHI_VERSION : \
+ ((X)==VHIN_MACHINE) ? vcVHI_MACHINE : \
+ ((X)==VHIN_DOMAINNAME) ? vcVHI_DOMAINNAME : \
+ (X)))
+#else
+# define VHI_USER2KERNEL(X) (X)
+# define VHI_KERNEL2USER(X) (X)
+#endif
+
#define EXT2_IOC_GETCONTEXT _IOR('x', 1, long)
#define EXT2_IOC_SETCONTEXT _IOW('x', 2, long)
#ifndef HAVE_VSERVER
-#if defined(__pic__) && defined(__i386)
+#ifdef ENSC_SYSCALL_TRADITIONAL
inline static UNUSED ALWAYSINLINE
int vserver(uint32_t cmd, uint32_t id, void *data)
{