RPC.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #ifndef __RPCLIB_H_
  2. #define __RPCLIB_H_
  3. #include <stdint.h>
  4. #define CANARY_SIZE sizeof(uint64_t)
  5. #define CANARY_PADDING_SIZE 12
  6. #define TOKEN_SIZE CANARY_SIZE+CANARY_PADDING_SIZE
  7. #define RPC_PHRASE "zerotier\0"
  8. #define RPC_PHRASE_SIZE 9
  9. // 1st RPC section (metdata)
  10. #define IDX_SIGNAL_PHRASE 0
  11. #define IDX_PID IDX_SIGNAL_PHRASE + RPC_PHRASE_SIZE
  12. #define IDX_TID sizeof(pid_t) + IDX_PID
  13. #define IDX_COUNT IDX_TID + sizeof(pid_t)
  14. #define IDX_TIME IDX_COUNT + sizeof(int)
  15. #define IDX_PAYLOAD IDX_TIME + 20 /* 20 being the length of the timestamp string */
  16. // 2nd RPC section (payload and canary)
  17. #define CMD_ID_IDX 0
  18. #define CANARY_IDX 1
  19. #define STRUCT_IDX CANARY_IDX+CANARY_SIZE
  20. #define BUF_SZ 512
  21. #define ERR_OK 0
  22. /* RPC codes */
  23. #define RPC_UNDEFINED 0
  24. #define RPC_CONNECT 1
  25. #define RPC_CONNECT_SOCKARG 2
  26. #define RPC_CLOSE 3
  27. #define RPC_READ 4
  28. #define RPC_WRITE 5
  29. #define RPC_BIND 6
  30. #define RPC_ACCEPT 7
  31. #define RPC_LISTEN 8
  32. #define RPC_SOCKET 9
  33. #define RPC_SHUTDOWN 10
  34. #define RPC_GETSOCKNAME 11
  35. /* Administration RPC codes */
  36. #define RPC_MAP 20 /* Give the service the value we "see" for the new buffer fd */
  37. #define RPC_MAP_REQ 21 /* A call to determine whether an fd is mapped to the service */
  38. #define RPC_RETVAL 22 /* not RPC per se, but something we should codify */
  39. #define RPC_KILL_INTERCEPT 23 /* Tells the service we need to shut down all connections */
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43. int get_retval(int);
  44. //#ifdef NETCON_INTERCEPT
  45. int rpc_join(const char * sockname);
  46. int rpc_send_command(char *path, int cmd, int forfd, void *data, int len);
  47. //#endif
  48. int get_new_fd(int sock);
  49. ssize_t sock_fd_write(int sock, int fd);
  50. ssize_t sock_fd_read(int sock, void *buf, ssize_t bufsize, int *fd);
  51. void rpc_mutex_destroy();
  52. void rpc_mutex_init();
  53. /* Structures used for sending commands via RPC mechanism */
  54. struct bind_st {
  55. int sockfd;
  56. struct sockaddr_storage addr;
  57. socklen_t addrlen;
  58. int __tid;
  59. };
  60. struct connect_st {
  61. int __fd;
  62. struct sockaddr_storage __addr;
  63. socklen_t __len;
  64. int __tid;
  65. };
  66. struct close_st {
  67. int fd;
  68. };
  69. struct listen_st {
  70. int sockfd;
  71. int backlog;
  72. int __tid;
  73. };
  74. struct socket_st {
  75. int socket_family;
  76. int socket_type;
  77. int protocol;
  78. int __tid;
  79. };
  80. struct accept_st {
  81. int sockfd;
  82. struct sockaddr_storage addr;
  83. socklen_t addrlen;
  84. int __tid;
  85. };
  86. struct shutdown_st {
  87. int socket;
  88. int how;
  89. };
  90. struct getsockname_st {
  91. int sockfd;
  92. struct sockaddr_storage addr;
  93. socklen_t addrlen;
  94. };
  95. #ifdef __cplusplus
  96. }
  97. #endif
  98. #endif