X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Flib%2Fvserver-internal.h;h=9a4fb9375a1ade03438fe2e4971b6625db947fcb;hb=3eb1b2279739d0f16391a3724a9897c686f030d3;hp=9e84248e1323d7821345eb2fa61499821eab7e43;hpb=00b613b67ee77052df275631075fed51dfa0daad;p=util-vserver.git diff --git a/util-vserver/lib/vserver-internal.h b/util-vserver/lib/vserver-internal.h index 9e84248..9a4fb93 100644 --- a/util-vserver/lib/vserver-internal.h +++ b/util-vserver/lib/vserver-internal.h @@ -35,9 +35,11 @@ # define __NR_vserver ENSC_SYSCALL__NR_vserver #endif +inline static ALWAYSINLINE void vc_noop0() {} + #define VC_PREFIX 0) -#define VC_SUFFIX else (void)((void)0 -#define CALL_VC_NOOP (void)0 +#define VC_SUFFIX else (void)(vc_noop0() +#define CALL_VC_NOOP vc_noop0() #define CALL_VC_GENERAL(ID, SUFFIX, FUNC, ...) \ VC_PREFIX; VC_SELECT(ID) return FUNC ## _ ## SUFFIX(__VA_ARGS__); VC_SUFFIX @@ -90,6 +92,25 @@ # define CALL_VC_V13A(F,...) CALL_VC_NOOP #endif +#ifdef VC_ENABLE_API_V13 +# define CALL_VC_V13B(F,...) CALL_VC_GENERAL(0x00010021, v13b, F, __VA_ARGS__) +#else +# define CALL_VC_V13B(F,...) CALL_VC_NOOP +#endif + +#ifdef VC_ENABLE_API_V13 +# define CALL_VC_V13OBS(F,...) CALL_VC_GENERAL(0x00010011, v13obs, F, __VA_ARGS__) +#else +# define CALL_VC_V13OBS(F,...) CALL_VC_NOOP +#endif + + +#ifdef VC_ENABLE_API_NET +# define CALL_VC_NET(F,...) CALL_VC_GENERAL(0x00010016, net, F, __VA_ARGS__) +#else +# define CALL_VC_NET(F,...) CALL_VC_NOOP +#endif + #ifdef VC_ENABLE_API_FSCOMPAT # define CALL_VC_FSCOMPAT(F,...) CALL_VC_GENERAL(0x00010000, fscompat, F, __VA_ARGS__) #else @@ -158,6 +179,54 @@ # define VHI_KERNEL2USER(X) (X) #endif +#if 1 +# define NID_KERNEL2USER(X) (((X)==(uint32_t)(-1)) ? VC_NONID : \ + (xid_t)(X)) + +# define NID_USER2KERNEL(X) (((X)==VC_DYNAMIC_NID) ? (uint32_t)(-1) : \ + (uint32_t)(X)) +#else +# define NID_USER2KERNEL(X) (X) +# define NID_KERNEL2USER(X) (X) +#endif + +#if 1 +# define NETTYPE_USER2KERNEL(X) ((X)==vcNET_IPV4 ? 0 : \ + (X)==vcNET_IPV6 ? 1 : \ + (X)==vcNET_IPV4R ? 2 : \ + (X)==vcNET_IPV6R ? 3 : \ + (X)) +# define NETTYPE_KERNEL2USER(X) ((X)==0 ? vcNET_IPV4 ? : \ + (X)==1 ? vcNET_IPV6 ? : \ + (X)==2 ? vcNET_IPV4R ? : \ + (X)==3 ? vcNET_IPV6R ? : \ + (vc_net_nx_type)(X)) +#else +# define NETTYPE_USER2KERNEL(X) (X) +# define NETTYPE_KERNEL2USER(X) (X) +#endif + +#define CDLIM_USER2KERNEL(X) ((X)==VC_CDLIM_UNSET ? CDLIM_UNSET : \ + (X)==VC_CDLIM_INFINITY ? CDLIM_INFINITY : \ + (X)==VC_CDLIM_KEEP ? CDLIM_KEEP : \ + (X)) + + /// the __typeof__ thing is a hack to deal with the kernel interface + /// using an unsigned long long value for a uint32_t type +#define CDLIM_KERNEL2USER(X) ((X)==(__typeof__(X))CDLIM_UNSET ? VC_CDLIM_UNSET : \ + (X)==(__typeof__(X))CDLIM_INFINITY ? VC_CDLIM_INFINITY : \ + (X)==(__typeof__(X))CDLIM_KEEP ? VC_CDLIM_KEEP : \ + (X)) + + +#define ENSC_STRUCT_IDX(STRUCT,ATTR) \ + ((char*)(&(STRUCT).ATTR) - (char*)(&(STRUCT))) +#define ENSC_SAME_STRUCT_IDX(LHS,RHS,ATTR) \ + (ENSC_STRUCT_IDX(LHS,ATTR) == ENSC_STRUCT_IDX(RHS,ATTR)) +#define ENSC_SAME_STRUCT_ITEM(LHS,RHS,ATTR) \ + (ENSC_SAME_STRUCT_IDX(LHS,RHS,ATTR) && \ + sizeof((LHS).ATTR)==sizeof((RHS).ATTR) && \ + sizeof(LHS)==sizeof(RHS)) #define EXT2_IOC_GETCONTEXT _IOR('x', 1, long) #define EXT2_IOC_SETCONTEXT _IOW('x', 2, long)