1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22 /*
23 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
25 */
26
27 #ifndef _LX_SYSV_IPC_H
28 #define _LX_SYSV_IPC_H
29
30 #pragma ident "%Z%%M% %I% %E% SMI"
31
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35
36 /*
37 * msg-related definitions.
38 */
39 #define LX_IPC_CREAT 00001000
40 #define LX_IPC_EXCL 00002000
41 #define LX_IPC_NOWAIT 00004000
42
43 #define LX_IPC_RMID 0
44 #define LX_IPC_SET 1
45 #define LX_IPC_STAT 2
46 #define LX_IPC_INFO 3
47
48 #define LX_IPC_64 0x0100
49
50 #define LX_SEMOP 1
51 #define LX_SEMGET 2
52 #define LX_SEMCTL 3
53 #define LX_MSGSND 11
54 #define LX_MSGRCV 12
55 #define LX_MSGGET 13
56 #define LX_MSGCTL 14
57 #define LX_SHMAT 21
58 #define LX_SHMDT 22
59 #define LX_SHMGET 23
60 #define LX_SHMCTL 24
61
62 #define LX_MSG_STAT 11
63 #define LX_MSG_INFO 12
64
65 #define LX_MSG_NOERROR 010000
66
67 /*
68 * Linux hard codes the maximum msgbuf length to be 8192 bytes. Really.
69 */
70 #define LX_MSGMAX 8192
71
72 struct lx_ipc_perm {
73 key_t key;
74 uid_t uid;
75 uid_t gid;
76 uid_t cuid;
77 uid_t cgid;
78 ushort_t mode;
79 ushort_t _pad1;
80 ushort_t seq;
81 ushort_t _pad2;
82 ulong_t _unused1;
83 ulong_t _unused2;
84 };
85
86 struct lx_msqid_ds {
87 struct lx_ipc_perm msg_perm;
88 time_t msg_stime;
89 ulong_t _unused1;
90 time_t msg_rtime;
91 ulong_t _unused2;
92 time_t msg_ctime;
93 ulong_t _unused3;
94 ulong_t msg_cbytes;
95 ulong_t msg_qnum;
96 ulong_t msg_qbytes;
97 pid_t msg_lspid;
98 pid_t msg_lrpid;
99 ulong_t _unused4;
100 ulong_t _unused5;
101 };
102
103 struct lx_msginfo {
104 int msgpool;
105 int msgmap;
106 int msgmax;
107 int msgmnb;
108 int msgmni;
109 int msgssz;
110 int msgtql;
111 ushort_t msgseg;
112 };
113
114 /*
115 * semaphore-related definitions.
116 */
117 #define LX_GETPID 11
118 #define LX_GETVAL 12
119 #define LX_GETALL 13
120 #define LX_GETNCNT 14
121 #define LX_GETZCNT 15
122 #define LX_SETVAL 16
123 #define LX_SETALL 17
124 #define LX_SEM_STAT 18
125 #define LX_SEM_INFO 19
126 #define LX_SEM_UNDO 0x1000
127 #define LX_SEMVMX 32767
128
129 struct lx_semid_ds {
130 struct lx_ipc_perm sem_perm;
131 time_t sem_otime;
132 ulong_t _unused1;
133 time_t sem_ctime;
134 ulong_t _unused2;
135 ulong_t sem_nsems;
136 ulong_t _unused3;
137 ulong_t _unused4;
138 };
139
140 struct lx_seminfo {
141 int semmap;
142 int semmni;
143 int semmns;
144 int semmnu;
145 int semmsl;
146 int semopm;
147 int semume;
148 int semusz;
149 int semvmx;
150 int semaem;
151 };
152
153 union lx_semun {
154 int val;
155 struct lx_semid_ds *semds;
156 ushort_t *sems;
157 struct lx_seminfo *info;
158 uintptr_t dummy;
159 };
160
161 /*
162 * shm-related definitions
163 */
164 #define LX_SHM_LOCKED 02000
165 #define LX_SHM_RDONLY 010000
166 #define LX_SHM_RND 020000
167 #define LX_SHM_REMAP 040000
168
169 #define LX_SHM_LOCK 11
170 #define LX_SHM_UNLOCK 12
171 #define LX_SHM_STAT 13
172 #define LX_SHM_INFO 14
173
174 struct lx_shmid_ds {
175 struct lx_ipc_perm shm_perm;
176 size_t shm_segsz;
177 time_t shm_atime;
178 ulong_t _unused1;
179 time_t shm_dtime;
180 ulong_t _unused2;
181 time_t shm_ctime;
182 ulong_t _unused3;
183 pid_t shm_cpid;
184 pid_t shm_lpid;
185 ushort_t shm_nattch;
186 ulong_t _unused4;
187 ulong_t _unused5;
188 };
189
190 struct lx_shm_info {
191 int used_ids;
192 ulong_t shm_tot;
193 ulong_t shm_rss;
194 ulong_t shm_swp;
195 ulong_t swap_attempts;
196 ulong_t swap_successes;
197 };
198
199 struct lx_shminfo {
200 int shmmax;
201 int shmmin;
202 int shmmni;
203 int shmseg;
204 int shmall;
205 };
206
207 #ifdef __cplusplus
208 }
209 #endif
210
211 #endif /* _LX_SYSV_IPC_H */