11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _LINUX_IPC_H
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _LINUX_IPC_H
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/types.h>
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IPC_PRIVATE ((__kernel_key_t) 0)
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Obsolete, used only for backwards compatibility and libc5 compiles */
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct ipc_perm
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__kernel_key_t	key;
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__kernel_uid_t	uid;
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__kernel_gid_t	gid;
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__kernel_uid_t	cuid;
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__kernel_gid_t	cgid;
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__kernel_mode_t	mode;
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned short	seq;
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Include the definition of ipc64_perm */
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/ipcbuf.h>
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* resource get request flags */
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IPC_CREAT  00001000   /* create if key is nonexistent */
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IPC_EXCL   00002000   /* fail if key exists */
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IPC_NOWAIT 00004000   /* return error on wait */
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* these fields are used by the DIPC package so the kernel as standard
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   should avoid using them if possible */
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IPC_DIPC 00010000  /* make it distributed */
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IPC_OWN  00020000  /* this machine is the DIPC owner */
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Control commands used with semctl, msgctl and shmctl
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * see also specific commands in sem.h, msg.h and shm.h
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IPC_RMID 0     /* remove resource */
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IPC_SET  1     /* set ipc_perm options */
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IPC_STAT 2     /* get ipc_perm options */
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IPC_INFO 3     /* see ipcs */
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Version flags for semctl, msgctl, and shmctl commands
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * These are passed as bitflags or-ed with the actual command
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IPC_OLD 0	/* Old version (no 32-bit UID support on many
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			   architectures) */
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IPC_64  0x0100  /* New version (support 32-bit UIDs, bigger
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			   message sizes, etc. */
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
52cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk/*
53cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk * These are used to wrap system calls.
54cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk *
55cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk * See architecture code for ugly details..
56cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk */
57cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunkstruct ipc_kludge {
58cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk	struct msgbuf __user *msgp;
59cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk	long msgtyp;
60cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk};
61cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk
62cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk#define SEMOP		 1
63cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk#define SEMGET		 2
64cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk#define SEMCTL		 3
65cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk#define SEMTIMEDOP	 4
66cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk#define MSGSND		11
67cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk#define MSGRCV		12
68cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk#define MSGGET		13
69cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk#define MSGCTL		14
70cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk#define SHMAT		21
71cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk#define SHMDT		22
72cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk#define SHMGET		23
73cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk#define SHMCTL		24
74cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk
75cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk/* Used by the DIPC package, try and avoid reusing it */
76cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk#define DIPC            25
77cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk
78cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk#define IPCCALL(version,op)	((version)<<16 | (op))
79cba4fbbff2e9722e93b28e18fa7714b9013cbddaAdrian Bunk
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __KERNEL__
810a3021f4e249fbdb5f30d614707b5e02022e4c9bRobert P. J. Day#include <linux/spinlock.h>
82b119f13f56a7a47915278ab5eb3c666ca5dbb067Cedric Le Goater
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IPCMNI 32768  /* <= MAX_INT limit for ipc arrays (including sysctl changes) */
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* used by in-kernel data structures */
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct kern_ipc_perm
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	spinlock_t	lock;
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int		deleted;
907ca7e564e049d8b350ec9d958ff25eaa24226352Nadia Derbey	int		id;
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	key_t		key;
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uid_t		uid;
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gid_t		gid;
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uid_t		cuid;
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gid_t		cgid;
962570ebbd1f1ce1ef31f568b0660354fc59424be2Al Viro	umode_t		mode;
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long	seq;
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void		*security;
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* __KERNEL__ */
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* _LINUX_IPC_H */
104