ae5e1b22f1
Currently the IPC namespace management code is spread over the ipc/*.c files. I moved this code into ipc/namespace.c file which is compiled out when needed. The linux/ipc_namespace.h file is used to store the prototypes of the functions in namespace.c and the stubs for NAMESPACES=n case. This is done so, because the stub for copy_ipc_namespace requires the knowledge of the CLONE_NEWIPC flag, which is in sched.h. But the linux/ipc.h file itself in included into many many .c files via the sys.h->sem.h sequence so adding the sched.h into it will make all these .c depend on sched.h which is not that good. On the other hand the knowledge about the namespaces stuff is required in 4 .c files only. Besides, this patch compiles out some auxiliary functions from ipc/sem.c, msg.c and shm.c files. It turned out that moving these functions into namespaces.c is not that easy because they use many other calls and macros from the original file. Moving them would make this patch complicated. On the other hand all these functions can be consolidated, so I will send a separate patch doing this a bit later. Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Acked-by: Serge Hallyn <serue@us.ibm.com> Cc: Cedric Le Goater <clg@fr.ibm.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Herbert Poetzl <herbert@13thfloor.at> Cc: Kirill Korotaev <dev@sw.ru> Cc: Sukadev Bhattiprolu <sukadev@us.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
105 lines
2.4 KiB
C
105 lines
2.4 KiB
C
#ifndef _LINUX_IPC_H
|
|
#define _LINUX_IPC_H
|
|
|
|
#include <linux/types.h>
|
|
|
|
#define IPC_PRIVATE ((__kernel_key_t) 0)
|
|
|
|
/* Obsolete, used only for backwards compatibility and libc5 compiles */
|
|
struct ipc_perm
|
|
{
|
|
__kernel_key_t key;
|
|
__kernel_uid_t uid;
|
|
__kernel_gid_t gid;
|
|
__kernel_uid_t cuid;
|
|
__kernel_gid_t cgid;
|
|
__kernel_mode_t mode;
|
|
unsigned short seq;
|
|
};
|
|
|
|
/* Include the definition of ipc64_perm */
|
|
#include <asm/ipcbuf.h>
|
|
|
|
/* resource get request flags */
|
|
#define IPC_CREAT 00001000 /* create if key is nonexistent */
|
|
#define IPC_EXCL 00002000 /* fail if key exists */
|
|
#define IPC_NOWAIT 00004000 /* return error on wait */
|
|
|
|
/* these fields are used by the DIPC package so the kernel as standard
|
|
should avoid using them if possible */
|
|
|
|
#define IPC_DIPC 00010000 /* make it distributed */
|
|
#define IPC_OWN 00020000 /* this machine is the DIPC owner */
|
|
|
|
/*
|
|
* Control commands used with semctl, msgctl and shmctl
|
|
* see also specific commands in sem.h, msg.h and shm.h
|
|
*/
|
|
#define IPC_RMID 0 /* remove resource */
|
|
#define IPC_SET 1 /* set ipc_perm options */
|
|
#define IPC_STAT 2 /* get ipc_perm options */
|
|
#define IPC_INFO 3 /* see ipcs */
|
|
|
|
/*
|
|
* Version flags for semctl, msgctl, and shmctl commands
|
|
* These are passed as bitflags or-ed with the actual command
|
|
*/
|
|
#define IPC_OLD 0 /* Old version (no 32-bit UID support on many
|
|
architectures) */
|
|
#define IPC_64 0x0100 /* New version (support 32-bit UIDs, bigger
|
|
message sizes, etc. */
|
|
|
|
/*
|
|
* These are used to wrap system calls.
|
|
*
|
|
* See architecture code for ugly details..
|
|
*/
|
|
struct ipc_kludge {
|
|
struct msgbuf __user *msgp;
|
|
long msgtyp;
|
|
};
|
|
|
|
#define SEMOP 1
|
|
#define SEMGET 2
|
|
#define SEMCTL 3
|
|
#define SEMTIMEDOP 4
|
|
#define MSGSND 11
|
|
#define MSGRCV 12
|
|
#define MSGGET 13
|
|
#define MSGCTL 14
|
|
#define SHMAT 21
|
|
#define SHMDT 22
|
|
#define SHMGET 23
|
|
#define SHMCTL 24
|
|
|
|
/* Used by the DIPC package, try and avoid reusing it */
|
|
#define DIPC 25
|
|
|
|
#define IPCCALL(version,op) ((version)<<16 | (op))
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
#include <linux/kref.h>
|
|
#include <linux/spinlock.h>
|
|
|
|
#define IPCMNI 32768 /* <= MAX_INT limit for ipc arrays (including sysctl changes) */
|
|
|
|
/* used by in-kernel data structures */
|
|
struct kern_ipc_perm
|
|
{
|
|
spinlock_t lock;
|
|
int deleted;
|
|
int id;
|
|
key_t key;
|
|
uid_t uid;
|
|
gid_t gid;
|
|
uid_t cuid;
|
|
gid_t cgid;
|
|
mode_t mode;
|
|
unsigned long seq;
|
|
void *security;
|
|
};
|
|
|
|
#endif /* __KERNEL__ */
|
|
|
|
#endif /* _LINUX_IPC_H */
|