1 /*- 2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3 * 4 * Copyright (c) 2002 Doug Rabson 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 * 28 * $FreeBSD$ 29 */ 30 31 #ifndef _COMPAT_FREEBSD32_FREEBSD32_IPC_H_ 32 #define _COMPAT_FREEBSD32_FREEBSD32_IPC_H_ 33 34 struct ipc_perm32 { 35 uid_t cuid; 36 gid_t cgid; 37 uid_t uid; 38 gid_t gid; 39 mode_t mode; 40 uint16_t seq; 41 uint32_t key; 42 }; 43 44 struct semid_ds32 { 45 struct ipc_perm32 sem_perm; 46 uint32_t __sem_base; 47 unsigned short sem_nsems; 48 int32_t sem_otime; 49 int32_t sem_ctime; 50 }; 51 52 #ifdef _KERNEL 53 struct semid_kernel32 { 54 /* Data structure exposed to user space. */ 55 struct semid_ds32 u; 56 57 /* Kernel-private components of the semaphore. */ 58 int32_t label; 59 int32_t cred; 60 }; 61 #endif /* _KERNEL */ 62 63 union semun32 { 64 int val; 65 uint32_t buf; 66 uint32_t array; 67 }; 68 69 struct msqid_ds32 { 70 struct ipc_perm32 msg_perm; 71 uint32_t __msg_first; 72 uint32_t __msg_last; 73 uint32_t msg_cbytes; 74 uint32_t msg_qnum; 75 uint32_t msg_qbytes; 76 pid_t msg_lspid; 77 pid_t msg_lrpid; 78 int32_t msg_stime; 79 int32_t msg_rtime; 80 int32_t msg_ctime; 81 }; 82 83 #ifdef _KERNEL 84 struct msqid_kernel32 { 85 /* Data structure exposed to user space. */ 86 struct msqid_ds32 u; 87 88 /* Kernel-private components of the message queue. */ 89 uint32_t label; 90 uint32_t cred; 91 }; 92 #endif 93 94 struct shmid_ds32 { 95 struct ipc_perm32 shm_perm; 96 int32_t shm_segsz; 97 pid_t shm_lpid; 98 pid_t shm_cpid; 99 unsigned int shm_nattch; 100 int32_t shm_atime; 101 int32_t shm_dtime; 102 int32_t shm_ctime; 103 }; 104 105 #ifdef _KERNEL 106 struct shmid_kernel32 { 107 struct shmid_ds32 u; 108 int32_t *object; 109 int32_t *label; 110 int32_t *cred; 111 }; 112 #endif 113 114 struct shm_info32 { 115 int32_t used_ids; 116 uint32_t shm_tot; 117 uint32_t shm_rss; 118 uint32_t shm_swp; 119 uint32_t swap_attempts; 120 uint32_t swap_successes; 121 }; 122 123 struct shminfo32 { 124 uint32_t shmmax; 125 uint32_t shmmin; 126 uint32_t shmmni; 127 uint32_t shmseg; 128 uint32_t shmall; 129 }; 130 131 #if defined(COMPAT_FREEBSD4) || defined(COMPAT_FREEBSD5) || \ 132 defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD7) 133 struct ipc_perm32_old { 134 uint16_t cuid; 135 uint16_t cgid; 136 uint16_t uid; 137 uint16_t gid; 138 uint16_t mode; 139 uint16_t seq; 140 uint32_t key; 141 }; 142 143 struct semid_ds32_old { 144 struct ipc_perm32_old sem_perm; 145 uint32_t __sem_base; 146 unsigned short sem_nsems; 147 int32_t sem_otime; 148 int32_t sem_pad1; 149 int32_t sem_ctime; 150 int32_t sem_pad2; 151 int32_t sem_pad3[4]; 152 }; 153 154 struct msqid_ds32_old { 155 struct ipc_perm32_old msg_perm; 156 uint32_t __msg_first; 157 uint32_t __msg_last; 158 uint32_t msg_cbytes; 159 uint32_t msg_qnum; 160 uint32_t msg_qbytes; 161 pid_t msg_lspid; 162 pid_t msg_lrpid; 163 int32_t msg_stime; 164 int32_t msg_pad1; 165 int32_t msg_rtime; 166 int32_t msg_pad2; 167 int32_t msg_ctime; 168 int32_t msg_pad3; 169 int32_t msg_pad4[4]; 170 }; 171 172 struct shmid_ds32_old { 173 struct ipc_perm32_old shm_perm; 174 int32_t shm_segsz; 175 pid_t shm_lpid; 176 pid_t shm_cpid; 177 int16_t shm_nattch; 178 int32_t shm_atime; 179 int32_t shm_dtime; 180 int32_t shm_ctime; 181 uint32_t shm_internal; 182 }; 183 184 void freebsd32_ipcperm_old_in(struct ipc_perm32_old *ip32, 185 struct ipc_perm *ip); 186 void freebsd32_ipcperm_old_out(struct ipc_perm *ip, 187 struct ipc_perm32_old *ip32); 188 #endif 189 190 void freebsd32_ipcperm_in(struct ipc_perm32 *ip32, struct ipc_perm *ip); 191 void freebsd32_ipcperm_out(struct ipc_perm *ip, struct ipc_perm32 *ip32); 192 193 #endif /* !_COMPAT_FREEBSD32_FREEBSD32_IPC_H_ */ 194