Program Listing for File hooks.hpp
↰ Return to documentation for file (include/client/hooks.hpp
)
/*
Copyright 2018-2024, Barcelona Supercomputing Center (BSC), Spain
Copyright 2015-2024, Johannes Gutenberg Universitaet Mainz, Germany
This software was partially supported by the
EC H2020 funded project NEXTGenIO (Project ID: 671951, www.nextgenio.eu).
This software was partially supported by the
ADA-FS project under the SPPEXA project funded by the DFG.
This file is part of GekkoFS' POSIX interface.
GekkoFS' POSIX interface is free software: you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation, either version 3 of the License,
or (at your option) any later version.
GekkoFS' POSIX interface is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with GekkoFS' POSIX interface. If not, see
<https://www.gnu.org/licenses/>.
SPDX-License-Identifier: LGPL-3.0-or-later
*/
#ifndef GEKKOFS_HOOKS_HPP
#define GEKKOFS_HOOKS_HPP
extern "C" {
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/syscall.h>
}
#include <libsyscall_intercept_hook_point.h>
/*
* For PowerPC, syscall_no_intercept_wrapper() is defined in the
* syscall intercept branch `powerpc` and file
* `include/libsyscall_intercept_hook_point.h`
*/
#ifndef _ARCH_PPC64
template <class... Args>
inline long
syscall_no_intercept_wrapper(long syscall_number, Args... args) {
long result;
int error;
result = syscall_no_intercept(syscall_number, args...);
error = syscall_error_code(result);
if(error != 0) {
return -error;
}
return result;
}
#endif
struct statfs;
struct linux_dirent;
struct linux_dirent64;
namespace gkfs::hook {
int
hook_openat(int dirfd, const char* cpath, int flags, mode_t mode);
int
hook_close(int fd);
int
hook_stat(const char* path, struct stat* buf);
#ifdef STATX_TYPE
int
hook_statx(int dirfd, const char* path, int flags, unsigned int mask,
struct statx* buf);
#endif
int
hook_lstat(const char* path, struct stat* buf);
int
hook_fstat(unsigned int fd, struct stat* buf);
int
hook_fstatat(int dirfd, const char* cpath, struct stat* buf, int flags);
int
hook_read(unsigned int fd, void* buf, size_t count);
int
hook_pread(unsigned int fd, char* buf, size_t count, loff_t pos);
int
hook_readv(unsigned long fd, const struct iovec* iov, unsigned long iovcnt);
int
hook_preadv(unsigned long fd, const struct iovec* iov, unsigned long iovcnt,
unsigned long pos_l, unsigned long pos_h);
int
hook_write(unsigned int fd, const char* buf, size_t count);
int
hook_pwrite(unsigned int fd, const char* buf, size_t count, loff_t pos);
int
hook_writev(unsigned long fd, const struct iovec* iov, unsigned long iovcnt);
int
hook_pwritev(unsigned long fd, const struct iovec* iov, unsigned long iovcnt,
unsigned long pos_l, unsigned long pos_h);
int
hook_unlinkat(int dirfd, const char* cpath, int flags);
int
hook_symlinkat(const char* oldname, int newdfd, const char* newname);
int
hook_flock(unsigned long fd, int flags);
int
hook_access(const char* path, int mask);
int
hook_faccessat(int dirfd, const char* cpath, int mode);
#ifdef SYS_faccessat2
int
hook_faccessat2(int dirfd, const char* cpath, int mode, int flags);
#endif
off_t
hook_lseek(unsigned int fd, off_t offset, unsigned int whence);
int
hook_truncate(const char* path, long length);
int
hook_ftruncate(unsigned int fd, unsigned long length);
int
hook_dup(unsigned int fd);
int
hook_dup2(unsigned int oldfd, unsigned int newfd);
int
hook_dup3(unsigned int oldfd, unsigned int newfd, int flags);
int
hook_getdents(unsigned int fd, struct linux_dirent* dirp, unsigned int count);
int
hook_getdents64(unsigned int fd, struct linux_dirent64* dirp,
unsigned int count);
int
hook_mkdirat(int dirfd, const char* cpath, mode_t mode);
int
hook_fchmodat(int dirfd, const char* path, mode_t mode);
int
hook_fchmod(unsigned int dirfd, mode_t mode);
int
hook_chdir(const char* path);
int
hook_fchdir(unsigned int fd);
int
hook_getcwd(char* buf, unsigned long size);
int
hook_readlinkat(int dirfd, const char* cpath, char* buf, int bufsiz);
int
hook_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg);
int
hook_renameat(int olddfd, const char* oldname, int newdfd, const char* newname,
unsigned int flags);
int
hook_statfs(const char* path, struct statfs* buf);
int
hook_fstatfs(unsigned int fd, struct statfs* buf);
int
hook_fsync(unsigned int fd);
int
hook_getxattr(const char* path, const char* name, void* value, size_t size);
} // namespace gkfs::hook
#endif