/* * Copyright (c) 2018-2021, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include #include #include #include #include // Kernel internal options. #define O_NOFOLLOW_NOERROR (1 << 29) #define O_UNLINK_INTERNAL (1 << 30) #define MS_NODEV (1 << 0) #define MS_NOEXEC (1 << 1) #define MS_NOSUID (1 << 2) #define MS_BIND (1 << 3) #define MS_RDONLY (1 << 4) #define MS_REMOUNT (1 << 5) enum { _SC_MONOTONIC_CLOCK, _SC_NPROCESSORS_CONF, _SC_NPROCESSORS_ONLN, _SC_OPEN_MAX, _SC_TTY_NAME_MAX, _SC_PAGESIZE, _SC_GETPW_R_SIZE_MAX, _SC_CLK_TCK, }; enum { PERF_EVENT_SAMPLE = 1, PERF_EVENT_MALLOC = 2, PERF_EVENT_FREE = 4, PERF_EVENT_MMAP = 8, PERF_EVENT_MUNMAP = 16, PERF_EVENT_PROCESS_CREATE = 32, PERF_EVENT_PROCESS_EXEC = 64, PERF_EVENT_PROCESS_EXIT = 128, PERF_EVENT_THREAD_CREATE = 256, PERF_EVENT_THREAD_EXIT = 512, PERF_EVENT_CONTEXT_SWITCH = 1024, PERF_EVENT_KMALLOC = 2048, PERF_EVENT_KFREE = 4096, PERF_EVENT_PAGE_FAULT = 8192, PERF_EVENT_SYSCALL = 16384, PERF_EVENT_SIGNPOST = 32768, }; #define WNOHANG 1 #define WUNTRACED 2 #define WSTOPPED WUNTRACED #define WEXITED 4 #define WCONTINUED 8 #define WNOWAIT 0x1000000 #define R_OK 4 #define W_OK 2 #define X_OK 1 #define F_OK 0 #define SEEK_SET 0 #define SEEK_CUR 1 #define SEEK_END 2 #define MADV_SET_VOLATILE 0x100 #define MADV_SET_NONVOLATILE 0x200 #define F_DUPFD 0 #define F_GETFD 1 #define F_SETFD 2 #define F_GETFL 3 #define F_SETFL 4 #define F_ISTTY 5 #define F_GETLK 6 #define F_SETLK 7 #define F_SETLKW 8 #define FD_CLOEXEC 1 // Avoid interference with AK/Types.h and LibC/sys/types.h by defining *separate* names: TYPEDEF_DISTINCT_ORDERED_ID(pid_t, ProcessID); TYPEDEF_DISTINCT_ORDERED_ID(pid_t, ThreadID); TYPEDEF_DISTINCT_ORDERED_ID(pid_t, SessionID); TYPEDEF_DISTINCT_ORDERED_ID(pid_t, ProcessGroupID); struct tms { clock_t tms_utime; clock_t tms_stime; clock_t tms_cutime; clock_t tms_cstime; }; typedef i64 off_t; typedef i64 time_t; typedef u32 blksize_t; typedef u32 blkcnt_t; #define POLLIN (1u << 0) #define POLLPRI (1u << 1) #define POLLOUT (1u << 2) #define POLLERR (1u << 3) #define POLLHUP (1u << 4) #define POLLNVAL (1u << 5) #define POLLRDHUP (1u << 13) struct pollfd { int fd; short events; short revents; }; typedef u32 __u32; typedef u16 __u16; typedef u8 __u8; typedef int __s32; typedef short __s16; typedef u32 useconds_t; typedef i32 suseconds_t; struct timeval { time_t tv_sec; suseconds_t tv_usec; }; typedef enum { P_ALL = 1, P_PID, P_PGID } idtype_t; #define UTSNAME_ENTRY_LEN 65 struct utsname { char sysname[UTSNAME_ENTRY_LEN]; char nodename[UTSNAME_ENTRY_LEN]; char release[UTSNAME_ENTRY_LEN]; char version[UTSNAME_ENTRY_LEN]; char machine[UTSNAME_ENTRY_LEN]; }; struct iovec { void* iov_base; size_t iov_len; }; struct sched_param { int sched_priority; }; struct ifreq { #define IFNAMSIZ 16 char ifr_name[IFNAMSIZ]; union { struct sockaddr ifru_addr; struct sockaddr ifru_dstaddr; struct sockaddr ifru_broadaddr; struct sockaddr ifru_netmask; struct sockaddr ifru_hwaddr; short ifru_flags; int ifru_metric; int64_t ifru_vnetid; uint64_t ifru_media; void* ifru_data; unsigned int ifru_index; } ifr_ifru; #define ifr_addr ifr_ifru.ifru_addr // address #define ifr_dstaddr ifr_ifru.ifru_dstaddr // other end of p-to-p link #define ifr_broadaddr ifr_ifru.ifru_broadaddr // broadcast address #define ifr_netmask ifr_ifru.ifru_netmask // network mask #define ifr_flags ifr_ifru.ifru_flags // flags #define ifr_metric ifr_ifru.ifru_metric // metric #define ifr_mtu ifr_ifru.ifru_metric // mtu (overload) #define ifr_hardmtu ifr_ifru.ifru_metric // hardmtu (overload) #define ifr_media ifr_ifru.ifru_media // media options #define ifr_rdomainid ifr_ifru.ifru_metric // VRF instance (overload) #define ifr_vnetid ifr_ifru.ifru_vnetid // Virtual Net Id #define ifr_ttl ifr_ifru.ifru_metric // tunnel TTL (overload) #define ifr_data ifr_ifru.ifru_data // for use by interface #define ifr_index ifr_ifru.ifru_index // interface index #define ifr_llprio ifr_ifru.ifru_metric // link layer priority #define ifr_hwaddr ifr_ifru.ifru_hwaddr // MAC address }; struct rtentry { struct sockaddr rt_gateway; /* the gateway address */ struct sockaddr rt_genmask; /* the target network mask */ unsigned short int rt_flags; char* rt_dev; /* FIXME: complete the struct */ }; #define RTF_UP 0x1 /* do not delete the route */ #define RTF_GATEWAY 0x2 /* the route is a gateway and not an end host */ #define AT_FDCWD -100 #define AT_SYMLINK_NOFOLLOW 0x100 struct arpreq { struct sockaddr arp_pa; /* protocol address */ struct sockaddr arp_ha; /* hardware address */ struct sockaddr arp_netmask; /* netmask of protocol address */ int arp_flags; /* flags */ char arp_dev[16]; }; #define PURGE_ALL_VOLATILE 0x1 #define PURGE_ALL_CLEAN_INODE 0x2 #define PT_TRACE_ME 1 #define PT_ATTACH 2 #define PT_CONTINUE 3 #define PT_SYSCALL 4 #define PT_GETREGS 5 #define PT_DETACH 6 #define PT_PEEK 7 #define PT_POKE 8 #define PT_SETREGS 9 #define PT_POKEDEBUG 10 #define PT_PEEKDEBUG 11 // Used in struct dirent enum { DT_UNKNOWN = 0, #define DT_UNKNOWN DT_UNKNOWN DT_FIFO = 1, #define DT_FIFO DT_FIFO DT_CHR = 2, #define DT_CHR DT_CHR DT_DIR = 4, #define DT_DIR DT_DIR DT_BLK = 6, #define DT_BLK DT_BLK DT_REG = 8, #define DT_REG DT_REG DT_LNK = 10, #define DT_LNK DT_LNK DT_SOCK = 12, #define DT_SOCK DT_SOCK DT_WHT = 14 #define DT_WHT DT_WHT }; typedef uint64_t fsblkcnt_t; typedef uint64_t fsfilcnt_t; #define ST_RDONLY 0x1 #define ST_NOSUID 0x2 struct statvfs { unsigned long f_bsize; unsigned long f_frsize; fsblkcnt_t f_blocks; fsblkcnt_t f_bfree; fsblkcnt_t f_bavail; fsfilcnt_t f_files; fsfilcnt_t f_ffree; fsfilcnt_t f_favail; unsigned long f_fsid; unsigned long f_flag; unsigned long f_namemax; };