1
#pragma once
2

            
3
#include <string>
4

            
5
#include "envoy/api/os_sys_calls.h"
6

            
7
#include "source/common/singleton/threadsafe_singleton.h"
8

            
9
#define ENVOY_DEFAULT_PIPE_TYPE AF_UNIX
10

            
11
namespace Envoy {
12
namespace Api {
13

            
14
class OsSysCallsImpl : public OsSysCalls {
15
public:
16
  // Api::OsSysCalls
17
  SysCallIntResult bind(os_fd_t sockfd, const sockaddr* addr, socklen_t addrlen) override;
18
  SysCallIntResult chmod(const std::string& path, mode_t mode) override;
19
  SysCallIntResult ioctl(os_fd_t sockfd, unsigned long int request, void* argp, unsigned long,
20
                         void*, unsigned long, unsigned long*) override;
21
  SysCallSizeResult writev(os_fd_t fd, const iovec* iov, int num_iov) override;
22
  SysCallSizeResult readv(os_fd_t fd, const iovec* iov, int num_iov) override;
23
  SysCallSizeResult pwrite(os_fd_t fd, const void* buffer, size_t length,
24
                           off_t offset) const override;
25
  SysCallSizeResult pread(os_fd_t fd, void* buffer, size_t length, off_t offset) const override;
26
  SysCallSizeResult send(os_fd_t socket, void* buffer, size_t length, int flags) override;
27
  SysCallSizeResult recv(os_fd_t socket, void* buffer, size_t length, int flags) override;
28
  SysCallSizeResult recvmsg(os_fd_t sockfd, msghdr* msg, int flags) override;
29
  SysCallIntResult recvmmsg(os_fd_t sockfd, struct mmsghdr* msgvec, unsigned int vlen, int flags,
30
                            struct timespec* timeout) override;
31
  bool supportsMmsg() const override;
32
  bool supportsUdpGro() const override;
33
  bool supportsUdpGso() const override;
34
  bool supportsIpTransparent(Network::Address::IpVersion version) const override;
35
  bool supportsMptcp() const override;
36
  SysCallIntResult close(os_fd_t fd) override;
37
  SysCallIntResult ftruncate(int fd, off_t length) override;
38
  SysCallPtrResult mmap(void* addr, size_t length, int prot, int flags, int fd,
39
                        off_t offset) override;
40
  SysCallIntResult stat(const char* pathname, struct stat* buf) override;
41
  SysCallIntResult fstat(os_fd_t fd, struct stat* buf) override;
42
  SysCallIntResult setsockopt(os_fd_t sockfd, int level, int optname, const void* optval,
43
                              socklen_t optlen) override;
44
  SysCallIntResult getsockopt(os_fd_t sockfd, int level, int optname, void* optval,
45
                              socklen_t* optlen) override;
46
  SysCallSocketResult socket(int domain, int type, int protocol) override;
47
  SysCallSizeResult sendmsg(os_fd_t fd, const msghdr* message, int flags) override;
48
  SysCallIntResult getsockname(os_fd_t sockfd, sockaddr* addr, socklen_t* addrlen) override;
49
  SysCallIntResult gethostname(char* name, size_t length) override;
50
  SysCallIntResult getpeername(os_fd_t sockfd, sockaddr* name, socklen_t* namelen) override;
51
  SysCallIntResult setsocketblocking(os_fd_t sockfd, bool blocking) override;
52
  SysCallIntResult connect(os_fd_t sockfd, const sockaddr* addr, socklen_t addrlen) override;
53
  SysCallIntResult open(const char* pathname, int flags) const override;
54
  SysCallIntResult open(const char* pathname, int flags, mode_t mode) const override;
55
  SysCallIntResult unlink(const char* pathname) const override;
56
  SysCallIntResult linkat(os_fd_t olddirfd, const char* oldpath, os_fd_t newdirfd,
57
                          const char* newpath, int flags) const override;
58
  SysCallIntResult mkstemp(char* tmplate) const override;
59
  bool supportsAllPosixFileOperations() const override;
60
  SysCallIntResult shutdown(os_fd_t sockfd, int how) override;
61
  SysCallIntResult socketpair(int domain, int type, int protocol, os_fd_t sv[2]) override;
62
  SysCallIntResult listen(os_fd_t sockfd, int backlog) override;
63
  SysCallSizeResult write(os_fd_t socket, const void* buffer, size_t length) override;
64
  SysCallSocketResult duplicate(os_fd_t oldfd) override;
65
  SysCallSocketResult accept(os_fd_t socket, sockaddr* addr, socklen_t* addrlen) override;
66
  SysCallBoolResult socketTcpInfo(os_fd_t sockfd, EnvoyTcpInfo* tcp_info) override;
67
  bool supportsGetifaddrs() const override;
68
  SysCallIntResult getifaddrs(InterfaceAddressVector& interfaces) override;
69
  SysCallIntResult getaddrinfo(const char* node, const char* service, const addrinfo* hints,
70
                               addrinfo** res) override;
71
  void freeaddrinfo(addrinfo* res) override;
72
  SysCallIntResult getrlimit(int resource, struct rlimit* rlim) override;
73
  SysCallIntResult setrlimit(int resource, const struct rlimit* rlim) override;
74
};
75

            
76
using OsSysCallsSingleton = ThreadSafeSingleton<OsSysCallsImpl>;
77

            
78
} // namespace Api
79
} // namespace Envoy