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