xref: /third_party/ltp/include/lapi/ipcbuf.h (revision f08c3bdf)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Copyright (c) 2020 Linaro Limited. All rights reserved.
4 * Author: Viresh Kumar <viresh.kumar@linaro.org>
5 */
6
7#ifndef LAPI_IPCBUF_H__
8#define LAPI_IPCBUF_H__
9
10#include "config.h"
11#include "lapi/posix_types.h"
12
13#ifndef HAVE_IPC64_PERM
14
15#if defined(__hppa__)
16#define HAVE_IPC64_PERM
17/*
18 * The ipc64_perm structure for PA-RISC is almost identical to
19 * kern_ipc_perm as we have always had 32-bit UIDs and GIDs in the kernel.
20 * 'seq' has been changed from long to int so that it's the same size
21 * on 64-bit kernels as on 32-bit ones.
22 */
23
24struct ipc64_perm
25{
26	__kernel_key_t		key;
27	__kernel_uid_t		uid;
28	__kernel_gid_t		gid;
29	__kernel_uid_t		cuid;
30	__kernel_gid_t		cgid;
31#if __BITS_PER_LONG != 64
32	unsigned short int	__pad1;
33#endif
34	__kernel_mode_t		mode;
35	unsigned short int	__pad2;
36	unsigned short int	seq;
37	unsigned int		__pad3;
38	unsigned long long int __unused1;
39	unsigned long long int __unused2;
40};
41#endif /* __hppa__ */
42
43#if defined(__powerpc__) || defined(__powerpc64__)
44#define HAVE_IPC64_PERM
45/*
46 * The ipc64_perm structure for the powerpc is identical to
47 * kern_ipc_perm as we have always had 32-bit UIDs and GIDs in the
48 * kernel.  Note extra padding because this structure is passed back
49 * and forth between kernel and user space.  Pad space is left for:
50 *	- 1 32-bit value to fill up for 8-byte alignment
51 *	- 2 miscellaneous 64-bit values
52 */
53
54struct ipc64_perm
55{
56	__kernel_key_t	key;
57	__kernel_uid_t	uid;
58	__kernel_gid_t	gid;
59	__kernel_uid_t	cuid;
60	__kernel_gid_t	cgid;
61	__kernel_mode_t	mode;
62	unsigned int	seq;
63	unsigned int	__pad1;
64	unsigned long long __unused1;
65	unsigned long long __unused2;
66};
67
68#endif /* defined(__powerpc__) || defined(__powerpc64__) */
69
70#if defined(__s390__)
71#define HAVE_IPC64_PERM
72/*
73 * The user_ipc_perm structure for S/390 architecture.
74 * Note extra padding because this structure is passed back and forth
75 * between kernel and user space.
76 *
77 * Pad space is left for:
78 * - 32-bit mode_t and seq
79 * - 2 miscellaneous 32-bit values
80 */
81
82struct ipc64_perm
83{
84	__kernel_key_t		key;
85	__kernel_uid32_t	uid;
86	__kernel_gid32_t	gid;
87	__kernel_uid32_t	cuid;
88	__kernel_gid32_t	cgid;
89	__kernel_mode_t		mode;
90	unsigned short		__pad1;
91	unsigned short		seq;
92#ifndef __s390x__
93	unsigned short		__pad2;
94#endif /* ! __s390x__ */
95	unsigned long		__unused1;
96	unsigned long		__unused2;
97};
98
99#endif /* defined(__powerpc__) || defined(__powerpc64__) */
100
101#if defined(__sparc__)
102#define HAVE_IPC64_PERM
103/*
104 * The ipc64_perm structure for sparc/sparc64 architecture.
105 * Note extra padding because this structure is passed back and forth
106 * between kernel and user space.
107 *
108 * Pad space is left for:
109 * - 32-bit seq
110 * - on sparc for 32 bit mode (it is 32 bit on sparc64)
111 * - 2 miscellaneous 64-bit values
112 */
113
114struct ipc64_perm
115{
116	__kernel_key_t		key;
117	__kernel_uid32_t	uid;
118	__kernel_gid32_t	gid;
119	__kernel_uid32_t	cuid;
120	__kernel_gid32_t	cgid;
121#ifndef __arch64__
122	unsigned short		__pad0;
123#endif
124	__kernel_mode_t		mode;
125	unsigned short		__pad1;
126	unsigned short		seq;
127	unsigned long long	__unused1;
128	unsigned long long	__unused2;
129};
130
131#endif /* __sparc__ */
132
133#if defined(__xtensa__)
134#define HAVE_IPC64_PERM
135/*
136 * Pad space is left for:
137 * - 32-bit mode_t and seq
138 * - 2 miscellaneous 32-bit values
139 *
140 * This file is subject to the terms and conditions of the GNU General
141 * Public License.  See the file "COPYING" in the main directory of
142 * this archive for more details.
143 */
144
145struct ipc64_perm
146{
147	__kernel_key_t		key;
148	__kernel_uid32_t	uid;
149	__kernel_gid32_t	gid;
150	__kernel_uid32_t	cuid;
151	__kernel_gid32_t	cgid;
152	__kernel_mode_t		mode;
153	unsigned long		seq;
154	unsigned long		__unused1;
155	unsigned long		__unused2;
156};
157
158#endif /* __xtensa__ */
159
160#ifndef HAVE_IPC64_PERM
161/*
162 * The generic ipc64_perm structure:
163 * Note extra padding because this structure is passed back and forth
164 * between kernel and user space.
165 *
166 * ipc64_perm was originally meant to be architecture specific, but
167 * everyone just ended up making identical copies without specific
168 * optimizations, so we may just as well all use the same one.
169 *
170 * Pad space is left for:
171 * - 32-bit mode_t on architectures that only had 16 bit
172 * - 32-bit seq
173 * - 2 miscellaneous 32-bit values
174 */
175
176struct ipc64_perm {
177	__kernel_key_t		key;
178	__kernel_uid32_t	uid;
179	__kernel_gid32_t	gid;
180	__kernel_uid32_t	cuid;
181	__kernel_gid32_t	cgid;
182	__kernel_mode_t		mode;
183				/* pad if mode_t is u16: */
184	unsigned char		__pad1[4 - sizeof(__kernel_mode_t)];
185	unsigned short		seq;
186	unsigned short		__pad2;
187	__kernel_ulong_t	__unused1;
188	__kernel_ulong_t	__unused2;
189};
190
191#endif /* ipc64_perm */
192
193#endif /* HAVE_IPC64_PERM */
194
195#endif /* LAPI_IPCBUF_H__ */
196