X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Flib%2Fvserver-internal.h;h=601f687efebd0e95fed92ea0a8868be638683e9a;hb=b38d70e7594b43cdd63b9e27ea5783001ef8407c;hp=cbf67c261dce47886cb0def7e00b310d60372948;hpb=48c61aa442df9e42a6451a3f2901879f42ea752f;p=util-vserver.git diff --git a/util-vserver/lib/vserver-internal.h b/util-vserver/lib/vserver-internal.h index cbf67c2..601f687 100644 --- a/util-vserver/lib/vserver-internal.h +++ b/util-vserver/lib/vserver-internal.h @@ -23,9 +23,13 @@ #include #include #include +#include +#include -#ifndef __NR_sys_virtual_context -# define __NR_sys_virtual_context 273 +#include "internal.h" + +#ifndef __NR_vserver +# define __NR_vserver 273 #endif #define VC_PREFIX 0) @@ -37,7 +41,7 @@ #if 1 # define VC_SELECT(ID) case ID: if(1) # define CALL_VC(...) \ - switch (utilvserver_checkCompatVersion()) { \ + switch (utilvserver_checkCompatVersion()&~0xff) { \ case -1 : if (1) break; \ VC_SUFFIX, __VA_ARGS__ , VC_PREFIX; \ default : errno = EINVAL; \ @@ -62,10 +66,43 @@ # define CALL_VC_LEGACY(F,...) CALL_VC_NOOP #endif -#ifndef HAVE_SYS_VIRTUAL_CONTEXT -static UNUSED -_syscall3(int, sys_virtual_context, +#ifdef VC_ENABLE_API_V11 +# define CALL_VC_V11(F,...) CALL_VC_GENERAL(0x00010000, v11, F, __VA_ARGS__) +#else +# define CALL_VC_V11(F,...) CALL_VC_NOOP +#endif + + +#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) : \ + (uint32_t)(X)) +#else +# define CTX_USER2KERNEL(X) (X) +# define CTX_KERNEL2USER(X) (X) +#endif + + +#ifndef HAVE_VSERVER +#if defined(__pic__) && defined(__i386) +inline static UNUSED ALWAYSINLINE +int vserver(uint32_t cmd, uint32_t id, void *data) +{ +#if defined __dietlibc__ + extern long int syscall (long int __sysno, ...); +#endif + + return syscall(__NR_vserver, cmd, id, data); +} +#else +inline static UNUSED ALWAYSINLINE +_syscall3(int, vserver, uint32_t, cmd, uint32_t, id, void *, data) #endif +#endif #endif // H_VSERVER_SYSCALL_INTERNAL_H