]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/missing.h
hostnamectl: should the sanitized arch, not the native uname() one
[thirdparty/systemd.git] / src / shared / missing.h
CommitLineData
03467c88 1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
15ae422b 2
c2f1db8f 3#pragma once
b9f880f4 4
15ae422b
LP
5/***
6 This file is part of systemd.
7
8 Copyright 2010 Lennart Poettering
9
10 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
15ae422b
LP
13 (at your option) any later version.
14
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 18 Lesser General Public License for more details.
15ae422b 19
5430f7f2 20 You should have received a copy of the GNU Lesser General Public License
15ae422b
LP
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
b9f880f4
LP
24/* Missing glibc definitions to access certain kernel APIs */
25
26#include <sys/resource.h>
15ae422b 27#include <sys/syscall.h>
16c42ce1 28#include <fcntl.h>
4db17f29 29#include <stdlib.h>
82c121a4 30#include <unistd.h>
dd6c17b1 31#include <linux/oom.h>
118ecf32 32#include <linux/input.h>
d5eff740 33#include <linux/if_link.h>
dd6c17b1
LP
34
35#ifdef HAVE_AUDIT
36#include <libaudit.h>
37#endif
b9f880f4 38
ad780f19
LP
39#include "macro.h"
40
d59d0a2b 41#ifdef ARCH_MIPS
42#include <asm/sgidefs.h>
43#endif
44
b9f880f4
LP
45#ifndef RLIMIT_RTTIME
46#define RLIMIT_RTTIME 15
47#endif
48
4fd5948e
LP
49#ifndef F_LINUX_SPECIFIC_BASE
50#define F_LINUX_SPECIFIC_BASE 1024
51#endif
52
53#ifndef F_SETPIPE_SZ
54#define F_SETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 7)
55#endif
56
57#ifndef F_GETPIPE_SZ
58#define F_GETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 8)
59#endif
60
16c42ce1
KS
61#ifndef IP_FREEBIND
62#define IP_FREEBIND 15
63#endif
64
dd6c17b1
LP
65#ifndef OOM_SCORE_ADJ_MIN
66#define OOM_SCORE_ADJ_MIN (-1000)
67#endif
68
69#ifndef OOM_SCORE_ADJ_MAX
70#define OOM_SCORE_ADJ_MAX 1000
71#endif
15ae422b 72
4927fcae 73#ifndef AUDIT_SERVICE_START
dd6c17b1 74#define AUDIT_SERVICE_START 1130 /* Service (daemon) start */
4927fcae
LP
75#endif
76
77#ifndef AUDIT_SERVICE_STOP
dd6c17b1 78#define AUDIT_SERVICE_STOP 1131 /* Service (daemon) stop */
4927fcae
LP
79#endif
80
6ea832a2
LP
81#ifndef TIOCVHANGUP
82#define TIOCVHANGUP 0x5437
83#endif
84
b90865ba
KS
85#ifndef IP_TRANSPARENT
86#define IP_TRANSPARENT 19
87#endif
88
d5eff740
TG
89#ifndef IFLA_CARRIER
90 #define IFLA_CARRIER 33
91 #ifndef IFLA_NUM_RX_QUEUES
92 #define IFLA_NUM_RX_QUEUES 32
93 #ifndef IFLA_NUM_TX_QUEUES
94 #define IFLA_NUM_TX_QUEUES 31
95 #ifndef IFLA_PROMISCUITY
96 #define IFLA_PROMISCUITY 30
97 #endif
98 #endif
99 #endif
100#endif
101
a8348796 102#if !HAVE_DECL_PIVOT_ROOT
dd6c17b1
LP
103static inline int pivot_root(const char *new_root, const char *put_old) {
104 return syscall(SYS_pivot_root, new_root, put_old);
105}
a8348796 106#endif
dd6c17b1 107
22be093f 108#ifdef __x86_64__
d59d0a2b 109# ifndef __NR_fanotify_init
110# define __NR_fanotify_init 300
111# endif
112# ifndef __NR_fanotify_mark
113# define __NR_fanotify_mark 301
114# endif
115#elif defined _MIPS_SIM
116# if _MIPS_SIM == _MIPS_SIM_ABI32
117# ifndef __NR_fanotify_init
118# define __NR_fanotify_init 4336
119# endif
120# ifndef __NR_fanotify_mark
121# define __NR_fanotify_mark 4337
122# endif
123# elif _MIPS_SIM == _MIPS_SIM_NABI32
124# ifndef __NR_fanotify_init
125# define __NR_fanotify_init 6300
126# endif
127# ifndef __NR_fanotify_mark
128# define __NR_fanotify_mark 6301
129# endif
130# elif _MIPS_SIM == _MIPS_SIM_ABI64
131# ifndef __NR_fanotify_init
132# define __NR_fanotify_init 5295
133# endif
134# ifndef __NR_fanotify_mark
135# define __NR_fanotify_mark 5296
136# endif
137# endif
22be093f 138#else
d59d0a2b 139# ifndef __NR_fanotify_init
140# define __NR_fanotify_init 338
141# endif
142# ifndef __NR_fanotify_mark
143# define __NR_fanotify_mark 339
144# endif
22be093f
LP
145#endif
146
a8348796 147#ifndef HAVE_FANOTIFY_INIT
22be093f 148static inline int fanotify_init(unsigned int flags, unsigned int event_f_flags) {
05115020 149 return syscall(__NR_fanotify_init, flags, event_f_flags);
22be093f 150}
a8348796 151#endif
22be093f 152
a8348796 153#ifndef HAVE_FANOTIFY_MARK
05115020 154static inline int fanotify_mark(int fanotify_fd, unsigned int flags, uint64_t mask,
22be093f 155 int dfd, const char *pathname) {
28f30cf2 156#if defined _MIPS_SIM && _MIPS_SIM == _MIPS_SIM_ABI32 || defined __powerpc__ && !defined __powerpc64__ \
e9c1ea9d 157 || defined __arm__ && !defined __aarch64__
373c23b2 158 union {
159 uint64_t _64;
160 uint32_t _32[2];
161 } _mask;
162 _mask._64 = mask;
163
164 return syscall(__NR_fanotify_mark, fanotify_fd, flags,
165 _mask._32[0], _mask._32[1], dfd, pathname);
166#else
05115020 167 return syscall(__NR_fanotify_mark, fanotify_fd, flags, mask, dfd, pathname);
373c23b2 168#endif
22be093f 169}
a8348796 170#endif
22be093f 171
4b357e15
MM
172#ifndef BTRFS_IOCTL_MAGIC
173#define BTRFS_IOCTL_MAGIC 0x94
174#endif
175
176#ifndef BTRFS_PATH_NAME_MAX
177#define BTRFS_PATH_NAME_MAX 4087
178#endif
179
180#ifndef BTRFS_DEVICE_PATH_NAME_MAX
181#define BTRFS_DEVICE_PATH_NAME_MAX 1024
182#endif
183
184#ifndef BTRFS_FSID_SIZE
185#define BTRFS_FSID_SIZE 16
186#endif
187
188#ifndef BTRFS_UUID_SIZE
189#define BTRFS_UUID_SIZE 16
190#endif
191
192#ifndef HAVE_LINUX_BTRFS_H
193struct btrfs_ioctl_vol_args {
194 int64_t fd;
195 char name[BTRFS_PATH_NAME_MAX + 1];
196};
197
198struct btrfs_ioctl_dev_info_args {
199 uint64_t devid; /* in/out */
200 uint8_t uuid[BTRFS_UUID_SIZE]; /* in/out */
201 uint64_t bytes_used; /* out */
202 uint64_t total_bytes; /* out */
203 uint64_t unused[379]; /* pad to 4k */
204 char path[BTRFS_DEVICE_PATH_NAME_MAX]; /* out */
205};
206
207struct btrfs_ioctl_fs_info_args {
208 uint64_t max_id; /* out */
209 uint64_t num_devices; /* out */
210 uint8_t fsid[BTRFS_FSID_SIZE]; /* out */
211 uint64_t reserved[124]; /* pad to 1k */
212};
213#endif
214
215#ifndef BTRFS_IOC_DEFRAG
216#define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, struct btrfs_ioctl_vol_args)
217#endif
218
219#ifndef BTRFS_IOC_DEV_INFO
220#define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \
221 struct btrfs_ioctl_dev_info_args)
222#endif
223
224#ifndef BTRFS_IOC_FS_INFO
225#define BTRFS_IOC_FS_INFO _IOR(BTRFS_IOCTL_MAGIC, 31, \
226 struct btrfs_ioctl_fs_info_args)
227#endif
228
746f8906
LP
229#ifndef BTRFS_SUPER_MAGIC
230#define BTRFS_SUPER_MAGIC 0x9123683E
231#endif
232
94d82985
LP
233#ifndef MS_MOVE
234#define MS_MOVE 8192
235#endif
236
7cb1094a
HH
237#ifndef MS_PRIVATE
238#define MS_PRIVATE (1 << 18)
239#endif
240
a8348796 241#if !HAVE_DECL_GETTID
4d14be09
LP
242static inline pid_t gettid(void) {
243 return (pid_t) syscall(SYS_gettid);
244}
a8348796 245#endif
4d14be09 246
54ecda32
LP
247#ifndef SCM_SECURITY
248#define SCM_SECURITY 0x03
249#endif
250
48ac500b
LP
251#ifndef MS_STRICTATIME
252#define MS_STRICTATIME (1<<24)
253#endif
254
a9621528
AM
255#ifndef MS_REC
256#define MS_REC 16384
257#endif
258
259#ifndef MS_SHARED
260#define MS_SHARED (1<<20)
261#endif
262
8351ceae
LP
263#ifndef PR_SET_NO_NEW_PRIVS
264#define PR_SET_NO_NEW_PRIVS 38
265#endif
d4447f4d
AK
266
267#ifndef PR_SET_CHILD_SUBREAPER
268#define PR_SET_CHILD_SUBREAPER 36
269#endif
a8348796
LP
270
271#ifndef MAX_HANDLE_SZ
272#define MAX_HANDLE_SZ 128
273#endif
274
f527b6b8 275#if defined __x86_64__
848af055
ED
276# ifndef __NR_name_to_handle_at
277# define __NR_name_to_handle_at 303
a8348796 278# endif
f527b6b8 279#elif defined __i386__
848af055
ED
280# ifndef __NR_name_to_handle_at
281# define __NR_name_to_handle_at 341
a8348796 282# endif
f527b6b8
MO
283#elif defined __arm__
284# ifndef __NR_name_to_handle_at
285# define __NR_name_to_handle_at 370
286# endif
287#elif defined __powerpc__
288# ifndef __NR_name_to_handle_at
289# define __NR_name_to_handle_at 345
290# endif
291#else
292# ifndef __NR_name_to_handle_at
293# error __NR_name_to_handle_at is not defined
294# endif
a8348796
LP
295#endif
296
9388e99e 297#if !HAVE_DECL_NAME_TO_HANDLE_AT
a8348796
LP
298struct file_handle {
299 unsigned int handle_bytes;
300 int handle_type;
301 unsigned char f_handle[0];
302};
303
304static inline int name_to_handle_at(int fd, const char *name, struct file_handle *handle, int *mnt_id, int flags) {
305 return syscall(__NR_name_to_handle_at, fd, name, handle, mnt_id, flags);
306}
307#endif
4db17f29
ZJS
308
309#ifndef HAVE_SECURE_GETENV
310# ifdef HAVE___SECURE_GETENV
311# define secure_getenv __secure_getenv
312# else
313# error neither secure_getenv nor __secure_getenv are available
314# endif
315#endif
85210bff
LP
316
317#ifndef CIFS_MAGIC_NUMBER
65b3903f 318# define CIFS_MAGIC_NUMBER 0xFF534D42
85210bff 319#endif
8742514c
LP
320
321#ifndef TFD_TIMER_CANCEL_ON_SET
65b3903f 322# define TFD_TIMER_CANCEL_ON_SET (1 << 1)
8742514c 323#endif
f7db7a69
SL
324
325#ifndef SO_REUSEPORT
65b3903f 326# define SO_REUSEPORT 15
f7db7a69 327#endif
118ecf32
DH
328
329#ifndef EVIOCREVOKE
65b3903f 330# define EVIOCREVOKE _IOW('E', 0x91, int)
118ecf32
DH
331#endif
332
333#ifndef DRM_IOCTL_SET_MASTER
65b3903f 334# define DRM_IOCTL_SET_MASTER _IO('d', 0x1e)
118ecf32
DH
335#endif
336
337#ifndef DRM_IOCTL_DROP_MASTER
65b3903f
ZJS
338# define DRM_IOCTL_DROP_MASTER _IO('d', 0x1f)
339#endif
340
c09918f9
LP
341#if defined(__i386__) || defined(__x86_64__)
342
343/* The precise definition of __O_TMPFILE is arch specific, so let's
344 * just define this on x86 where we know the value. */
345
346#ifndef __O_TMPFILE
347#define __O_TMPFILE 020000000
348#endif
349
350/* a horrid kludge trying to make sure that this will fail on old kernels */
351#ifndef O_TMPFILE
352#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY)
353#endif
354
355#endif