fixed VLAN setup: set the name-type, honor the 'ip' value and use the
[util-vserver.git] / util-vserver / lib / vserver-internal.h
index 90cb7d8..5ab015e 100644 (file)
 #define H_VSERVER_SYSCALL_INTERNAL_H
 
 #include <asm/unistd.h>
-#include <syscall.h>
 #include <errno.h>
 #include <stdint.h>
-#include <sys/syscall.h>
 #include <unistd.h>
 
 #include "internal.h"
+#include "syscall-wrap.h"
 
 #if !defined(__NR_vserver) && defined(ENSC_SYSCALL__NR_vserver)
 #  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
 
                                         (X)==VC_CDLIM_INFINITY ? CDLIM_INFINITY : \
                                         (X)==VC_CDLIM_KEEP     ? CDLIM_KEEP     : \
                                         (X))
-#define CDLIM_KERNEL2USER(X)           ((X)==CDLIM_UNSET       ? VC_CDLIM_UNSET    : \
-                                        (X)==CDLIM_INFINITY    ? VC_CDLIM_INFINITY : \
-                                        (X)==CDLIM_KEEP        ? VC_CDLIM_KEEP     : \
+
+  /// 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))