socket.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. /*
  2. * Copyright (C) 2019 Intel Corporation. All rights reserved.
  3. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. */
  5. #include <sys/types.h>
  6. #include <sys/socket.h>
  7. #include <stdint.h>
  8. #include <stddef.h>
  9. #include <netinet/in.h>
  10. #include <arpa/inet.h>
  11. int
  12. ocall_socket(int domain, int type, int protocol)
  13. {
  14. return socket(domain, type, protocol);
  15. }
  16. int
  17. ocall_getsockopt(int sockfd, int level, int optname, void *val_buf,
  18. unsigned int val_buf_size, void *len_buf)
  19. {
  20. return getsockopt(sockfd, level, optname, val_buf, (socklen_t *)len_buf);
  21. }
  22. ssize_t
  23. ocall_sendmsg(int sockfd, void *msg_buf, unsigned int msg_buf_size, int flags)
  24. {
  25. struct msghdr *msg = (struct msghdr *)msg_buf;
  26. int i;
  27. ssize_t ret;
  28. if (msg->msg_name != NULL)
  29. msg->msg_name = msg_buf + (unsigned)(uintptr_t)msg->msg_name;
  30. if (msg->msg_control != NULL)
  31. msg->msg_control = msg_buf + (unsigned)(uintptr_t)msg->msg_control;
  32. if (msg->msg_iov != NULL) {
  33. msg->msg_iov = msg_buf + (unsigned)(uintptr_t)msg->msg_iov;
  34. for (i = 0; i < msg->msg_iovlen; i++) {
  35. msg->msg_iov[i].iov_base =
  36. msg_buf + (unsigned)(uintptr_t)msg->msg_iov[i].iov_base;
  37. }
  38. }
  39. return sendmsg(sockfd, msg, flags);
  40. }
  41. ssize_t
  42. ocall_recvmsg(int sockfd, void *msg_buf, unsigned int msg_buf_size, int flags)
  43. {
  44. struct msghdr *msg = (struct msghdr *)msg_buf;
  45. int i;
  46. ssize_t ret;
  47. if (msg->msg_name != NULL)
  48. msg->msg_name = msg_buf + (unsigned)(uintptr_t)msg->msg_name;
  49. if (msg->msg_control != NULL)
  50. msg->msg_control = msg_buf + (unsigned)(uintptr_t)msg->msg_control;
  51. if (msg->msg_iov != NULL) {
  52. msg->msg_iov = msg_buf + (unsigned)(uintptr_t)msg->msg_iov;
  53. for (i = 0; i < msg->msg_iovlen; i++) {
  54. msg->msg_iov[i].iov_base =
  55. msg_buf + (unsigned)(uintptr_t)msg->msg_iov[i].iov_base;
  56. }
  57. }
  58. return recvmsg(sockfd, msg, flags);
  59. }
  60. int
  61. ocall_shutdown(int sockfd, int how)
  62. {
  63. return shutdown(sockfd, how);
  64. }
  65. int
  66. ocall_setsockopt(int sockfd, int level, int optname, void *optval,
  67. unsigned int optlen)
  68. {
  69. return setsockopt(sockfd, level, optname, optval, optlen);
  70. }
  71. int
  72. ocall_bind(int sockfd, const void *addr, uint32_t addrlen)
  73. {
  74. return bind(sockfd, (const struct sockaddr *)addr, addrlen);
  75. }
  76. int
  77. ocall_getsockname(int sockfd, void *addr, uint32_t *addrlen, uint32_t addr_size)
  78. {
  79. return getsockname(sockfd, (struct sockaddr *)addr, addrlen);
  80. }
  81. int
  82. ocall_getpeername(int sockfd, void *addr, uint32_t *addrlen, uint32_t addr_size)
  83. {
  84. return getpeername(sockfd, (struct sockaddr *)addr, addrlen);
  85. }
  86. int
  87. ocall_listen(int sockfd, int backlog)
  88. {
  89. return listen(sockfd, backlog);
  90. }
  91. int
  92. ocall_accept(int sockfd, void *addr, uint32_t *addrlen, uint32_t addr_size)
  93. {
  94. return accept(sockfd, (struct sockaddr *)addr, addrlen);
  95. }
  96. int
  97. ocall_recv(int sockfd, void *buf, size_t len, int flags)
  98. {
  99. return recv(sockfd, buf, len, flags);
  100. }
  101. ssize_t
  102. ocall_recvfrom(int sockfd, void *buf, size_t len, int flags, void *src_addr,
  103. uint32_t *addrlen, uint32_t addr_size)
  104. {
  105. return recvfrom(sockfd, buf, len, flags, (struct sockaddr *)src_addr,
  106. addrlen);
  107. }
  108. int
  109. ocall_send(int sockfd, const void *buf, size_t len, int flags)
  110. {
  111. return send(sockfd, buf, len, flags);
  112. }
  113. ssize_t
  114. ocall_sendto(int sockfd, const void *buf, size_t len, int flags,
  115. void *dest_addr, uint32_t addrlen)
  116. {
  117. return sendto(sockfd, buf, len, flags, (struct sockaddr *)dest_addr,
  118. addrlen);
  119. }
  120. int
  121. ocall_connect(int sockfd, void *addr, uint32_t addrlen)
  122. {
  123. return connect(sockfd, (const struct sockaddr *)addr, addrlen);
  124. }