1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
6 This file is part of systemd.
8 Copyright 2010 Lennart Poettering
10 systemd is free software; you can redistribute it and/or modify it
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
13 (at your option) any later version.
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
18 Lesser General Public License for more details.
20 You should have received a copy of the GNU Lesser General Public License
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
24 /* Missing glibc definitions to access certain kernel APIs */
26 #include <sys/resource.h>
27 #include <sys/syscall.h>
30 #include <linux/oom.h>
39 #include <asm/sgidefs.h>
43 #define RLIMIT_RTTIME 15
46 #ifndef F_LINUX_SPECIFIC_BASE
47 #define F_LINUX_SPECIFIC_BASE 1024
51 #define F_SETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 7)
55 #define F_GETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 8)
59 #define IP_FREEBIND 15
62 #ifndef OOM_SCORE_ADJ_MIN
63 #define OOM_SCORE_ADJ_MIN (-1000)
66 #ifndef OOM_SCORE_ADJ_MAX
67 #define OOM_SCORE_ADJ_MAX 1000
70 #ifndef AUDIT_SERVICE_START
71 #define AUDIT_SERVICE_START 1130 /* Service (daemon) start */
74 #ifndef AUDIT_SERVICE_STOP
75 #define AUDIT_SERVICE_STOP 1131 /* Service (daemon) stop */
79 #define TIOCVHANGUP 0x5437
82 #ifndef IP_TRANSPARENT
83 #define IP_TRANSPARENT 19
86 #if !HAVE_DECL_PIVOT_ROOT
87 static inline int pivot_root(const char *new_root, const char *put_old) {
88 return syscall(SYS_pivot_root, new_root, put_old);
93 # ifndef __NR_fanotify_init
94 # define __NR_fanotify_init 300
96 # ifndef __NR_fanotify_mark
97 # define __NR_fanotify_mark 301
99 #elif defined _MIPS_SIM
100 # if _MIPS_SIM == _MIPS_SIM_ABI32
101 # ifndef __NR_fanotify_init
102 # define __NR_fanotify_init 4336
104 # ifndef __NR_fanotify_mark
105 # define __NR_fanotify_mark 4337
107 # elif _MIPS_SIM == _MIPS_SIM_NABI32
108 # ifndef __NR_fanotify_init
109 # define __NR_fanotify_init 6300
111 # ifndef __NR_fanotify_mark
112 # define __NR_fanotify_mark 6301
114 # elif _MIPS_SIM == _MIPS_SIM_ABI64
115 # ifndef __NR_fanotify_init
116 # define __NR_fanotify_init 5295
118 # ifndef __NR_fanotify_mark
119 # define __NR_fanotify_mark 5296
123 # ifndef __NR_fanotify_init
124 # define __NR_fanotify_init 338
126 # ifndef __NR_fanotify_mark
127 # define __NR_fanotify_mark 339
131 #ifndef HAVE_FANOTIFY_INIT
132 static inline int fanotify_init(unsigned int flags, unsigned int event_f_flags) {
133 return syscall(__NR_fanotify_init, flags, event_f_flags);
137 #ifndef HAVE_FANOTIFY_MARK
138 static inline int fanotify_mark(int fanotify_fd, unsigned int flags, uint64_t mask,
139 int dfd, const char *pathname) {
140 #if defined _MIPS_SIM && _MIPS_SIM == _MIPS_SIM_ABI32 || defined __powerpc__ && !defined __powerpc64__
147 return syscall(__NR_fanotify_mark, fanotify_fd, flags,
148 _mask._32[0], _mask._32[1], dfd, pathname);
150 return syscall(__NR_fanotify_mark, fanotify_fd, flags, mask, dfd, pathname);
155 #ifndef BTRFS_IOCTL_MAGIC
156 #define BTRFS_IOCTL_MAGIC 0x94
159 #ifndef BTRFS_PATH_NAME_MAX
160 #define BTRFS_PATH_NAME_MAX 4087
163 struct btrfs_ioctl_vol_args {
165 char name[BTRFS_PATH_NAME_MAX + 1];
168 #ifndef BTRFS_IOC_DEFRAG
169 #define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, struct btrfs_ioctl_vol_args)
172 #ifndef BTRFS_SUPER_MAGIC
173 #define BTRFS_SUPER_MAGIC 0x9123683E
181 #define MS_PRIVATE (1 << 18)
184 #if !HAVE_DECL_GETTID
185 static inline pid_t gettid(void) {
186 return (pid_t) syscall(SYS_gettid);
191 #define SCM_SECURITY 0x03
194 #ifndef MS_STRICTATIME
195 #define MS_STRICTATIME (1<<24)
198 #ifndef PR_SET_NO_NEW_PRIVS
199 #define PR_SET_NO_NEW_PRIVS 38
202 #ifndef PR_SET_CHILD_SUBREAPER
203 #define PR_SET_CHILD_SUBREAPER 36
206 #ifndef MAX_HANDLE_SZ
207 #define MAX_HANDLE_SZ 128
211 # ifndef __NR_name_to_handle
212 # define __NR_name_to_handle 303
215 # ifndef __NR_name_to_handle
216 # define __NR_name_to_handle 341
220 #ifndef HAVE_NAME_TO_HANDLE_AT
223 unsigned int handle_bytes;
225 unsigned char f_handle[0];
228 static inline int name_to_handle_at(int fd, const char *name, struct file_handle *handle, int *mnt_id, int flags) {
229 return syscall(__NR_name_to_handle_at, fd, name, handle, mnt_id, flags);