xref: /xnu-11215/bsd/sys/ipc.h (revision a5e72196)
1 /*
2  * Copyright (c) 2000-2002 Apple Computer, Inc. All rights reserved.
3  *
4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5  *
6  * This file contains Original Code and/or Modifications of Original Code
7  * as defined in and that are subject to the Apple Public Source License
8  * Version 2.0 (the 'License'). You may not use this file except in
9  * compliance with the License. The rights granted to you under the License
10  * may not be used to create, or enable the creation or redistribution of,
11  * unlawful or unlicensed copies of an Apple operating system, or to
12  * circumvent, violate, or enable the circumvention or violation of, any
13  * terms of an Apple operating system software license agreement.
14  *
15  * Please obtain a copy of the License at
16  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17  *
18  * The Original Code and all software distributed under the License are
19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23  * Please see the License for the specific language governing rights and
24  * limitations under the License.
25  *
26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27  */
28 /*
29  * Copyright (c) 1988 University of Utah.
30  * Copyright (c) 1990, 1993
31  *	The Regents of the University of California.  All rights reserved.
32  * (c) UNIX System Laboratories, Inc.
33  * All or some portions of this file are derived from material licensed
34  * to the University of California by American Telephone and Telegraph
35  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
36  * the permission of UNIX System Laboratories, Inc.
37  *
38  * This code is derived from software contributed to Berkeley by
39  * the Systems Programming Group of the University of Utah Computer
40  * Science Department.
41  *
42  * Redistribution and use in source and binary forms, with or without
43  * modification, are permitted provided that the following conditions
44  * are met:
45  * 1. Redistributions of source code must retain the above copyright
46  *    notice, this list of conditions and the following disclaimer.
47  * 2. Redistributions in binary form must reproduce the above copyright
48  *    notice, this list of conditions and the following disclaimer in the
49  *    documentation and/or other materials provided with the distribution.
50  * 3. All advertising materials mentioning features or use of this software
51  *    must display the following acknowledgement:
52  *	This product includes software developed by the University of
53  *	California, Berkeley and its contributors.
54  * 4. Neither the name of the University nor the names of its contributors
55  *    may be used to endorse or promote products derived from this software
56  *    without specific prior written permission.
57  *
58  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
59  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
60  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
61  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
62  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
63  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
64  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
65  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
66  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
67  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
68  * SUCH DAMAGE.
69  *
70  *	@(#)ipc.h	8.4 (Berkeley) 2/19/95
71  */
72 
73 /*
74  * SVID compatible ipc.h file
75  */
76 #ifndef _SYS_IPC_H_
77 #define _SYS_IPC_H_
78 
79 #include <sys/appleapiopts.h>
80 #include <sys/cdefs.h>
81 
82 #include <sys/_types.h>
83 
84 /*
85  * [XSI] The uid_t, gid_t, mode_t, and key_t types SHALL be defined as
86  * described in <sys/types.h>.
87  */
88 #include <sys/_types/_uid_t.h>
89 #include <sys/_types/_gid_t.h>
90 #include <sys/_types/_mode_t.h>
91 #include <sys/_types/_key_t.h>
92 
93 
94 #pragma pack(4)
95 
96 /*
97  * Technically, we should force all code references to the new structure
98  * definition, not in just the standards conformance case, and leave the
99  * legacy interface there for binary compatibility only.  Currently, we
100  * are only forcing this for programs requesting standards conformance.
101  */
102 #if __DARWIN_UNIX03 || defined(KERNEL)
103 /*
104  * [XSI] Information used in determining permission to perform an IPC
105  * operation
106  */
107 struct ipc_perm {
108 	uid_t           uid;            /* [XSI] Owner's user ID */
109 	gid_t           gid;            /* [XSI] Owner's group ID */
110 	uid_t           cuid;           /* [XSI] Creator's user ID */
111 	gid_t           cgid;           /* [XSI] Creator's group ID */
112 	mode_t          mode;           /* [XSI] Read/write permission */
113 	unsigned short  _seq;           /* Reserved for internal use */
114 	key_t           _key;           /* Reserved for internal use */
115 };
116 #define __ipc_perm_new  ipc_perm
117 #else   /* !__DARWIN_UNIX03 */
118 #define ipc_perm        __ipc_perm_old
119 #endif  /* !__DARWIN_UNIX03 */
120 
121 #if !__DARWIN_UNIX03
122 /*
123  * Legacy structure; this structure is maintained for binary backward
124  * compatability with previous versions of the interface.  New code
125  * should not use this interface, since ID values may be truncated.
126  */
127 struct __ipc_perm_old {
128 	__uint16_t      cuid;           /* Creator's user ID */
129 	__uint16_t      cgid;           /* Creator's group ID */
130 	__uint16_t      uid;            /* Owner's user ID */
131 	__uint16_t      gid;            /* Owner's group ID */
132 	mode_t          mode;           /* Read/Write permission */
133 	__uint16_t      seq;            /* Reserved for internal use */
134 	key_t           key;            /* Reserved for internal use */
135 };
136 #endif  /* !__DARWIN_UNIX03 */
137 
138 #pragma pack()
139 
140 /*
141  * [XSI] Definitions shall be provided for the following constants:
142  */
143 
144 /* Mode bits */
145 #define IPC_CREAT       001000          /* Create entry if key does not exist */
146 #define IPC_EXCL        002000          /* Fail if key exists */
147 #define IPC_NOWAIT      004000          /* Error if request must wait */
148 
149 /* Keys */
150 #define IPC_PRIVATE     ((key_t)0)      /* Private key */
151 
152 /* Control commands */
153 #define IPC_RMID        0               /* Remove identifier */
154 #define IPC_SET         1               /* Set options */
155 #define IPC_STAT        2               /* Get options */
156 
157 
158 #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
159 
160 /* common mode bits */
161 #define IPC_R           000400          /* Read permission */
162 #define IPC_W           000200          /* Write/alter permission */
163 #define IPC_M           010000          /* Modify control info permission */
164 
165 #endif  /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
166 
167 
168 #ifdef BSD_KERNEL_PRIVATE
169 /*
170  * Kernel implementation details which should not be utilized by user
171  * space programs.
172  */
173 
174 /* Macros to convert between ipc ids and array indices or sequence ids */
175 #define IPCID_TO_IX(id)         ((id) & 0xffff)
176 #define IPCID_TO_SEQ(id)        (((id) >> 16) & 0xffff)
177 #define IXSEQ_TO_IPCID(ix, perm) (((perm._seq) << 16L) | ((ix) & 0xffff))
178 
179 struct ucred;
180 
181 int     ipcperm(struct ucred *, struct ipc_perm *, int);
182 #endif /* BSD_KERNEL_PRIVATE */
183 
184 #ifndef KERNEL
185 
186 __BEGIN_DECLS
187 /* [XSI] */
188 key_t   ftok(const char *, int);
189 __END_DECLS
190 
191 #endif  /* !KERNEL */
192 
193 #endif /* !_SYS_IPC_H_ */
194