From 09fcd8d24e21368e9e5a5f49aa1c0bbdcafd9aed Mon Sep 17 00:00:00 2001 From: Enrico Scholz Date: Wed, 14 Apr 2004 23:21:43 +0000 Subject: [PATCH] updated to vs1.90pre9 git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@1451 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- util-vserver/kernel/context.h | 58 ++++++++++----------- util-vserver/kernel/cvirt.h | 16 +++--- util-vserver/kernel/inode.h | 18 +++---- util-vserver/kernel/legacy.h | 4 +- util-vserver/kernel/limit.h | 8 +-- util-vserver/kernel/namespace.h | 14 +++--- util-vserver/kernel/network.h | 109 ++++++++++++++++++++++++++++++++++++---- util-vserver/kernel/sched.h | 9 ---- util-vserver/kernel/switch.h | 29 +++++++---- util-vserver/kernel/xid.h | 96 +++++++++++++++++++++++------------ 10 files changed, 244 insertions(+), 117 deletions(-) diff --git a/util-vserver/kernel/context.h b/util-vserver/kernel/context.h index 52fe0b4..a51a035 100644 --- a/util-vserver/kernel/context.h +++ b/util-vserver/kernel/context.h @@ -13,7 +13,7 @@ #include #include -#define _VX_INFO_DEF_ +#define _VX_INFO_DEF_ #include "cvirt.h" #include "limit.h" #include "sched.h" @@ -45,21 +45,21 @@ extern spinlock_t vxlist_lock; extern struct list_head vx_infos; -#define VX_ADMIN 0x0001 -#define VX_WATCH 0x0002 +#define VX_ADMIN 0x0001 +#define VX_WATCH 0x0002 #define VX_DUMMY 0x0008 -#define VX_IDENT 0x0010 -#define VX_EQUIV 0x0020 -#define VX_PARENT 0x0040 -#define VX_CHILD 0x0080 +#define VX_IDENT 0x0010 +#define VX_EQUIV 0x0020 +#define VX_PARENT 0x0040 +#define VX_CHILD 0x0080 -#define VX_ARG_MASK 0x00F0 +#define VX_ARG_MASK 0x00F0 -#define VX_DYNAMIC 0x0100 -#define VX_STATIC 0x0200 +#define VX_DYNAMIC 0x0100 +#define VX_STATIC 0x0200 -#define VX_ATR_MASK 0x0F00 +#define VX_ATR_MASK 0x0F00 void free_vx_info(struct vx_info *); @@ -76,16 +76,16 @@ extern int vx_migrate_task(struct task_struct *, struct vx_info *); /* vinfo commands */ -#define VCMD_task_xid VC_CMD(VINFO, 1, 0) -#define VCMD_task_nid VC_CMD(VINFO, 2, 0) +#define VCMD_task_xid VC_CMD(VINFO, 1, 0) +#define VCMD_task_nid VC_CMD(VINFO, 2, 0) #ifdef __KERNEL__ extern int vc_task_xid(uint32_t, void __user *); #endif /* __KERNEL__ */ -#define VCMD_vx_info VC_CMD(VINFO, 5, 0) -#define VCMD_nx_info VC_CMD(VINFO, 6, 0) +#define VCMD_vx_info VC_CMD(VINFO, 5, 0) +#define VCMD_nx_info VC_CMD(VINFO, 6, 0) struct vcmd_vx_info_v0 { uint32_t xid; @@ -98,17 +98,17 @@ extern int vc_vx_info(uint32_t, void __user *); #endif /* __KERNEL__ */ -#define VCMD_create_context VC_CMD(VSETUP, 1, 0) -#define VCMD_migrate_context VC_CMD(PROCMIG, 1, 0) +#define VCMD_ctx_create VC_CMD(VPROC, 1, 0) +#define VCMD_ctx_migrate VC_CMD(PROCMIG, 1, 0) #ifdef __KERNEL__ -extern int vc_create_context(uint32_t, void __user *); -extern int vc_migrate_context(uint32_t, void __user *); +extern int vc_ctx_create(uint32_t, void __user *); +extern int vc_ctx_migrate(uint32_t, void __user *); #endif /* __KERNEL__ */ -#define VCMD_get_flags VC_CMD(FLAGS, 1, 0) -#define VCMD_set_flags VC_CMD(FLAGS, 2, 0) +#define VCMD_get_cflags VC_CMD(FLAGS, 1, 0) +#define VCMD_set_cflags VC_CMD(FLAGS, 2, 0) struct vcmd_ctx_flags_v0 { uint64_t flagword; @@ -116,8 +116,8 @@ struct vcmd_ctx_flags_v0 { }; #ifdef __KERNEL__ -extern int vc_get_flags(uint32_t, void __user *); -extern int vc_set_flags(uint32_t, void __user *); +extern int vc_get_cflags(uint32_t, void __user *); +extern int vc_set_cflags(uint32_t, void __user *); #endif /* __KERNEL__ */ @@ -131,9 +131,9 @@ extern int vc_set_flags(uint32_t, void __user *); #define VXF_INFO_ULIMIT 0x00000040 #define VXF_INFO_NSPACE 0x00000080 -#define VXF_SCHED_HARD 0x00000100 -#define VXF_SCHED_PRIO 0x00000200 -#define VXF_SCHED_PAUSE 0x00000400 +#define VXF_SCHED_HARD 0x00000100 +#define VXF_SCHED_PRIO 0x00000200 +#define VXF_SCHED_PAUSE 0x00000400 #define VXF_VIRT_MEM 0x00010000 #define VXF_VIRT_UPTIME 0x00020000 @@ -142,11 +142,11 @@ extern int vc_set_flags(uint32_t, void __user *); #define VXF_HIDE_MOUNT 0x01000000 #define VXF_HIDE_NETIF 0x02000000 -#define VXF_STATE_SETUP (1ULL<<32) -#define VXF_STATE_INIT (1ULL<<33) +#define VXF_STATE_SETUP (1ULL<<32) +#define VXF_STATE_INIT (1ULL<<33) -#define VXF_ONE_TIME (0x0003ULL<<32) +#define VXF_ONE_TIME (0x0003ULL<<32) #define VCMD_get_ccaps VC_CMD(FLAGS, 3, 0) #define VCMD_set_ccaps VC_CMD(FLAGS, 4, 0) diff --git a/util-vserver/kernel/cvirt.h b/util-vserver/kernel/cvirt.h index da8c185..a8a242e 100644 --- a/util-vserver/kernel/cvirt.h +++ b/util-vserver/kernel/cvirt.h @@ -20,9 +20,9 @@ struct _vx_cvirt { unsigned long total_forks; unsigned int bias_cswtch; - long bias_jiffies; - long bias_idle; + struct timespec bias_idle; struct timespec bias_tp; + uint64_t bias_jiffies; struct new_utsname utsname; @@ -42,16 +42,18 @@ static inline long vx_sock_total(struct _vx_cvirt *cvirt, int type, int pos) } +extern uint64_t vx_idle_jiffies(void); + static inline void vx_info_init_cvirt(struct _vx_cvirt *cvirt) { int i,j; + uint64_t idle_jiffies = vx_idle_jiffies(); cvirt->nr_threads = 1; // new->virt.bias_cswtch = kstat.context_swtch; - cvirt->bias_jiffies = jiffies; - /* new->virt.bias_idle = init_tasks[0]->times.tms_utime + - init_tasks[0]->times.tms_stime; - */ + cvirt->bias_jiffies = get_jiffies_64(); + + jiffies_to_timespec(idle_jiffies, &cvirt->bias_idle); do_posix_clock_monotonic_gettime(&cvirt->bias_tp); down_read(&uts_sem); @@ -99,7 +101,7 @@ static inline int vx_info_proc_cvirt(struct _vx_cvirt *cvirt, char *buffer) struct timespec; -void vx_vsi_uptime(struct timespec *uptime); +void vx_vsi_uptime(struct timespec *uptime, struct timespec *idle); #endif /* __KERNEL__ */ diff --git a/util-vserver/kernel/inode.h b/util-vserver/kernel/inode.h index 0cf360c..aa8852f 100644 --- a/util-vserver/kernel/inode.h +++ b/util-vserver/kernel/inode.h @@ -35,16 +35,16 @@ struct vcmd_ctx_iattr_v1 { #define IATTR_FLAGS 0x00000007 #define IATTR_BARRIER 0x00010000 -#define IATTR_IUNLINK 0x00020000 -#define IATTR_IMMUTABLE 0x00040000 +#define IATTR_IUNLINK 0x00020000 +#define IATTR_IMMUTABLE 0x00040000 #ifdef CONFIG_PROC_SECURE -#define IATTR_PROC_DEFAULT ( IATTR_ADMIN | IATTR_HIDE ) -#define IATTR_PROC_SYMLINK ( IATTR_ADMIN ) +#define IATTR_PROC_DEFAULT ( IATTR_ADMIN | IATTR_HIDE ) +#define IATTR_PROC_SYMLINK ( IATTR_ADMIN ) #else -#define IATTR_PROC_DEFAULT ( IATTR_ADMIN ) -#define IATTR_PROC_SYMLINK ( IATTR_ADMIN ) +#define IATTR_PROC_DEFAULT ( IATTR_ADMIN ) +#define IATTR_PROC_SYMLINK ( IATTR_ADMIN ) #endif #ifdef __KERNEL__ @@ -61,7 +61,7 @@ extern int vc_set_iattr(uint32_t, void __user *); /* inode ioctls */ -#define FIOC_GETXFLG _IOR('x', 5, long) -#define FIOC_SETXFLG _IOW('x', 6, long) +#define FIOC_GETXFLG _IOR('x', 5, long) +#define FIOC_SETXFLG _IOW('x', 6, long) -#endif /* _VX_LEGACY_H */ +#endif /* _VX_INODE_H */ diff --git a/util-vserver/kernel/legacy.h b/util-vserver/kernel/legacy.h index 53c6dcd..1372c0f 100644 --- a/util-vserver/kernel/legacy.h +++ b/util-vserver/kernel/legacy.h @@ -9,6 +9,8 @@ #define VCMD_new_s_context VC_CMD(COMPAT, 1, 1) #define VCMD_set_ipv4root VC_CMD(COMPAT, 2, 3) +#define VCMD_create_context VC_CMD(VSETUP, 1, 0) + /* compatibiliy vserver arguments */ struct vcmd_new_s_context_v1 { @@ -22,7 +24,7 @@ struct vcmd_set_ipv4root_v3 { struct { uint32_t ip; uint32_t mask; - } ip_mask_pair[NB_IPV4ROOT]; + } nx_mask_pair[NB_IPV4ROOT]; }; diff --git a/util-vserver/kernel/limit.h b/util-vserver/kernel/limit.h index d8634ec..74e02cd 100644 --- a/util-vserver/kernel/limit.h +++ b/util-vserver/kernel/limit.h @@ -5,9 +5,9 @@ /* context sub struct */ -#define NUM_RLIMITS 20 +#define NUM_RLIMITS 16 -#define VLIMIT_SOCK 16 +#define VLIMIT_SOCK 16 struct _vx_limit { @@ -52,7 +52,6 @@ static inline int vx_info_proc_limit(struct _vx_limit *limit, char *buffer) #ifndef _VX_LIMIT_H #define _VX_LIMIT_H -#include #include "switch.h" /* rlimit vserver commands */ @@ -79,6 +78,9 @@ struct vcmd_ctx_rlimit_mask_v0 { #define CRLIM_KEEP (~1ULL) #ifdef __KERNEL__ + +#include + extern int vc_get_rlimit(uint32_t, void __user *); extern int vc_set_rlimit(uint32_t, void __user *); extern int vc_get_rlimit_mask(uint32_t, void __user *); diff --git a/util-vserver/kernel/namespace.h b/util-vserver/kernel/namespace.h index ac4e191..140fc79 100644 --- a/util-vserver/kernel/namespace.h +++ b/util-vserver/kernel/namespace.h @@ -2,13 +2,12 @@ #define _VX_NAMESPACE_H #include -#include /* virtual host info names */ -#define VCMD_vx_set_vhi_name VC_CMD(VHOST, 1, 0) -#define VCMD_vx_get_vhi_name VC_CMD(VHOST, 2, 0) +#define VCMD_vx_set_vhi_name VC_CMD(VHOST, 1, 0) +#define VCMD_vx_get_vhi_name VC_CMD(VHOST, 2, 0) struct vcmd_vx_vhi_name_v0 { uint32_t field; @@ -28,14 +27,17 @@ enum vx_vhi_name_field { #ifdef __KERNEL__ + +#include + extern int vc_set_vhi_name(uint32_t, void __user *); extern int vc_get_vhi_name(uint32_t, void __user *); #endif /* __KERNEL__ */ -#define VCMD_enter_namespace VC_CMD(PROCALT, 1, 0) -#define VCMD_cleanup_namespace VC_CMD(PROCALT, 2, 0) -#define VCMD_set_namespace VC_CMD(PROCALT, 3, 0) +#define VCMD_enter_namespace VC_CMD(PROCALT, 1, 0) +#define VCMD_cleanup_namespace VC_CMD(PROCALT, 2, 0) +#define VCMD_set_namespace VC_CMD(PROCALT, 3, 0) #ifdef __KERNEL__ diff --git a/util-vserver/kernel/network.h b/util-vserver/kernel/network.h index 1389af8..11a8e7f 100644 --- a/util-vserver/kernel/network.h +++ b/util-vserver/kernel/network.h @@ -1,6 +1,9 @@ #ifndef _VX_NETWORK_H #define _VX_NETWORK_H +#define MAX_N_CONTEXT 65535 /* Arbitrary limit */ + +#define IP_DYNAMIC_ID ((uint32_t)-1) /* id for dynamic context */ #define NB_IPV4ROOT 16 @@ -13,10 +16,14 @@ #include -struct ip_info { - struct list_head ip_list; /* linked list of ipinfos */ - nid_t ip_id; /* vnet id */ - atomic_t ip_refcount; +struct nx_info { + struct list_head nx_list; /* linked list of nxinfos */ + nid_t nx_id; /* vnet id */ + atomic_t nx_refcount; + + uint64_t nx_flags; /* network flag word */ + uint64_t nx_ncaps; /* network capabilities */ + int nbipv4; __u32 ipv4[NB_IPV4ROOT]; /* Process can only bind to these IPs */ /* The first one is used to connect */ @@ -26,19 +33,103 @@ struct ip_info { /* Used to select the proper source */ /* address for sockets */ __u32 v4_bcast; /* Broadcast address to receive UDP */ + + char nx_name[65]; /* network context name */ }; extern spinlock_t iplist_lock; -extern struct list_head ip_infos; +extern struct list_head nx_infos; + + +void free_nx_info(struct nx_info *); +struct nx_info *create_nx_info(void); + +extern struct nx_info *find_nx_info(int); +extern int nx_info_id_valid(int); + +#endif /* __KERNEL__ */ + +#include "switch.h" + +/* vinfo commands */ + +#define VCMD_task_nid VC_CMD(VINFO, 2, 0) +#ifdef __KERNEL__ +extern int vc_task_nid(uint32_t, void __user *); + +#endif /* __KERNEL__ */ -void free_ip_info(struct ip_info *); -struct ip_info *create_ip_info(void); +#define VCMD_nx_info VC_CMD(VINFO, 6, 0) -extern struct ip_info *find_ip_info(int); -extern int ip_info_id_valid(int); +struct vcmd_nx_info_v0 { + uint32_t nid; + /* more to come */ +}; +#ifdef __KERNEL__ +extern int vc_nx_info(uint32_t, void __user *); #endif /* __KERNEL__ */ + +#define VCMD_net_create VC_CMD(VNET, 1, 0) +#define VCMD_net_migrate VC_CMD(NETMIG, 1, 0) + +#define VCMD_net_add VC_CMD(NETALT, 1, 0) +#define VCMD_net_remove VC_CMD(NETALT, 2, 0) + +struct vcmd_net_nx_v0 { + uint16_t type; + uint16_t count; + uint32_t ip[4]; + uint32_t mask[4]; + /* more to come */ +}; + +// IPN_TYPE_IPV4 + + +#ifdef __KERNEL__ +extern int vc_net_create(uint32_t, void __user *); +extern int vc_net_migrate(uint32_t, void __user *); + +#endif /* __KERNEL__ */ + +#define VCMD_get_nflags VC_CMD(FLAGS, 5, 0) +#define VCMD_set_nflags VC_CMD(FLAGS, 6, 0) + +struct vcmd_net_flags_v0 { + uint64_t flagword; + uint64_t mask; +}; + +#ifdef __KERNEL__ +extern int vc_get_nflags(uint32_t, void __user *); +extern int vc_set_nflags(uint32_t, void __user *); + +#endif /* __KERNEL__ */ + +#define IPF_STATE_SETUP (1ULL<<32) + + +#define IPF_ONE_TIME (0x0001ULL<<32) + +#define VCMD_get_ncaps VC_CMD(FLAGS, 7, 0) +#define VCMD_set_ncaps VC_CMD(FLAGS, 8, 0) + +struct vcmd_net_caps_v0 { + uint64_t ncaps; + uint64_t cmask; +}; + +#ifdef __KERNEL__ +extern int vc_get_ncaps(uint32_t, void __user *); +extern int vc_set_ncaps(uint32_t, void __user *); + +#endif /* __KERNEL__ */ + +#define IPC_WOSSNAME 0x00000001 + + #endif /* _VX_NETWORK_H */ diff --git a/util-vserver/kernel/sched.h b/util-vserver/kernel/sched.h index c918e36..0800461 100644 --- a/util-vserver/kernel/sched.h +++ b/util-vserver/kernel/sched.h @@ -63,15 +63,6 @@ static inline int vx_info_proc_sched(struct _vx_sched *sched, char *buffer) /* sched vserver commands */ -#define VCMD_set_sched_v1 VC_CMD(SYSTEST, 1, 1) - -struct vcmd_set_sched_v1 { - int32_t fill_rate; - int32_t period; - int32_t fill_level; - int32_t bucket_size; -}; - #define VCMD_set_sched VC_CMD(SCHED, 1, 2) struct vcmd_set_sched_v2 { diff --git a/util-vserver/kernel/switch.h b/util-vserver/kernel/switch.h index efbef33..5fef690 100644 --- a/util-vserver/kernel/switch.h +++ b/util-vserver/kernel/switch.h @@ -12,22 +12,22 @@ /* - Syscall Matrix V2.5 + Syscall Matrix V2.6 |VERSION|CREATE |MODIFY |MIGRATE|CONTROL|EXPERIM| |SPECIAL|SPECIAL| |STATS |DESTROY|ALTER |CHANGE |LIMIT |TEST | | | | |INFO |SETUP | |MOVE | | | | | | -------+-------+-------+-------+-------+-------+-------+ +-------+-------+ - SYSTEM |VERSION| | | | | | |DEVICES| | + SYSTEM |VERSION|VSETUP |VHOST | | | | |DEVICES| | HOST | 00| 01| 02| 03| 04| 05| | 06| 07| -------+-------+-------+-------+-------+-------+-------+ +-------+-------+ - CPU | | |PROCALT|PROCMIG|PROCTRL| | |SCHED. | | + CPU | |VPROC |PROCALT|PROCMIG|PROCTRL| | |SCHED. | | PROCESS| 08| 09| 10| 11| 12| 13| | 14| 15| -------+-------+-------+-------+-------+-------+-------+ +-------+-------+ MEMORY | | | | | | | |SWAP | | | 16| 17| 18| 19| 20| 21| | 22| 23| -------+-------+-------+-------+-------+-------+-------+ +-------+-------+ - NETWORK| | | | | | | |SERIAL | | + NETWORK| |VNET |NETALT |NETMIG |NETCTL | | |SERIAL | | | 24| 25| 26| 27| 28| 29| | 30| 31| -------+-------+-------+-------+-------+-------+-------+ +-------+-------+ DISK | | | | | | | |INODE | | @@ -48,16 +48,23 @@ #define VC_CAT_VERSION 0 #define VC_CAT_VSETUP 1 -#define VC_CAT_VHOST 2 +#define VC_CAT_VHOST 2 -#define VC_CAT_PROCALT 10 -#define VC_CAT_PROCMIG 11 +#define VC_CAT_VPROC 9 +#define VC_CAT_PROCALT 10 +#define VC_CAT_PROCMIG 11 #define VC_CAT_PROCTRL 12 #define VC_CAT_SCHED 14 + +#define VC_CAT_VNET 25 +#define VC_CAT_NETALT 26 +#define VC_CAT_NETMIG 27 +#define VC_CAT_NETCTRL 28 + #define VC_CAT_INODE 38 -#define VC_CAT_VINFO 46 +#define VC_CAT_VINFO 46 #define VC_CAT_FLAGS 52 #define VC_CAT_RLIMIT 60 @@ -67,7 +74,7 @@ /* interface version */ -#define VCI_VERSION 0x00010014 +#define VCI_VERSION 0x00010016 /* query version */ @@ -79,10 +86,10 @@ #include -#define ENOTSUP -EOPNOTSUPP +#define ENOTSUP -EOPNOTSUPP #else /* __KERNEL__ */ -#define __user +#define __user #endif /* __KERNEL__ */ #endif /* _VX_SWITCH_H */ diff --git a/util-vserver/kernel/xid.h b/util-vserver/kernel/xid.h index 2edba25..ba52c25 100644 --- a/util-vserver/kernel/xid.h +++ b/util-vserver/kernel/xid.h @@ -1,64 +1,94 @@ -#ifndef _LINUX_VXID_H_ -#define _LINUX_VXID_H_ +#ifndef _LINUX_XID_H_ +#define _LINUX_XID_H_ #ifdef CONFIG_INOXID_NONE -#define INOXID_UID(uid, gid) (uid) -#define INOXID_GID(uid, gid) (gid) -#define INOXID_XID(uid, gid, xid) (0) +#define MAX_UID 0xFFFFFFFF +#define MAX_GID 0xFFFFFFFF -#define XIDINO_UID(uid, xid) (uid) -#define XIDINO_GID(gid, xid) (gid) +#define INOXID_XID(uid, gid, xid) (0) -#define MAX_UID 0xFFFFFFFF -#define MAX_GID 0xFFFFFFFF +#define XIDINO_UID(uid, xid) (uid) +#define XIDINO_GID(gid, xid) (gid) #endif + #ifdef CONFIG_INOXID_GID16 -#define INOXID_UID(uid, gid) (uid) -#define INOXID_GID(uid, gid) ((gid) & 0xFFFF) -#define INOXID_XID(uid, gid, xid) (((gid) >> 16) & 0xFFFF) +#define MAX_UID 0xFFFFFFFF +#define MAX_GID 0x0000FFFF + +#define INOXID_XID(uid, gid, xid) (((gid) >> 16) & 0xFFFF) -#define XIDINO_UID(uid, xid) (uid) -#define XIDINO_GID(gid, xid) (((gid) & 0xFFFF) | ((xid) << 16)) +#define XIDINO_UID(uid, xid) (uid) +#define XIDINO_GID(gid, xid) (((gid) & 0xFFFF) | ((xid) << 16)) -#define MAX_UID 0xFFFFFFFF -#define MAX_GID 0x0000FFFF #endif + #ifdef CONFIG_INOXID_GID24 -#define INOXID_UID(uid, gid) ((uid) & 0xFFFFFF) -#define INOXID_GID(uid, gid) ((gid) & 0xFFFFFF) -#define INOXID_XID(uid, gid, xid) ((((uid) >> 16) & 0xFF00) | (((gid) >> 24) & 0xFF)) +#define MAX_UID 0x00FFFFFF +#define MAX_GID 0x00FFFFFF -#define XIDINO_UID(uid, xid) (((uid) & 0xFFFFFF) | (((xid) & 0xFF00) << 16)) -#define XIDINO_GID(gid, xid) (((gid) & 0xFFFFFF) | (((xid) & 0x00FF) << 24)) +#define INOXID_XID(uid, gid, xid) ((((uid) >> 16) & 0xFF00) | (((gid) >> 24) & 0xFF)) -#define MAX_UID 0x00FFFFFF -#define MAX_GID 0x00FFFFFF +#define XIDINO_UID(uid, xid) (((uid) & 0xFFFFFF) | (((xid) & 0xFF00) << 16)) +#define XIDINO_GID(gid, xid) (((gid) & 0xFFFFFF) | (((xid) & 0x00FF) << 24)) #endif + #ifdef CONFIG_INOXID_GID32 -#define INOXID_UID(uid, gid) (uid) -#define INOXID_GID(uid, gid) (gid) -#define INOXID_XID(uid, gid, xid) (xid) +#define MAX_UID 0xFFFFFFFF +#define MAX_GID 0xFFFFFFFF + +#define INOXID_XID(uid, gid, xid) (xid) + +#define XIDINO_UID(uid, xid) (uid) +#define XIDINO_GID(gid, xid) (gid) + +#endif + + +#ifdef CONFIG_INOXID_RUNTIME -#define XIDINO_UID(uid, xid) (uid) -#define XIDINO_GID(gid, xid) (gid) +#define MAX_UID 0xFFFFFFFF +#define MAX_GID 0xFFFFFFFF -#define MAX_UID 0xFFFFFFFF -#define MAX_GID 0xFFFFFFFF +#define INOXID_XID(uid, gid, xid) (0) + +#define XIDINO_UID(uid, xid) (uid) +#define XIDINO_GID(gid, xid) (gid) #endif -#define FIOC_GETXID _IOR('x', 1, long) -#define FIOC_SETXID _IOW('x', 2, long) -#define FIOC_SETXIDJ _IOW('x', 3, long) +#define INOXID_UID(uid, gid) ((uid) & MAX_UID) +#define INOXID_GID(uid, gid) ((gid) & MAX_GID) + +static inline uid_t vx_map_uid(uid_t uid) +{ + if ((uid > MAX_UID) && (uid != -1)) + uid = -2; + return (uid & MAX_UID); +} + +static inline gid_t vx_map_gid(gid_t gid) +{ + if ((gid > MAX_GID) && (gid != -1)) + gid = -2; + return (gid & MAX_GID); +} + + +#ifdef CONFIG_VSERVER_LEGACY +#define FIOC_GETXID _IOR('x', 1, long) +#define FIOC_SETXID _IOW('x', 2, long) +#define FIOC_SETXIDJ _IOW('x', 3, long) #endif + +#endif /* _LINUX_XID_H_ */ -- 1.8.1.5