Subversion Repositories Kolibri OS

Rev

Rev 4248 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. #ifndef __MENUET_NET_H
  2. #define __MENUET_NET_H
  3.  
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7.  
  8. #include<menuet/os.h>
  9.  
  10.  
  11. // System functions
  12. #define _SOCKETF 75
  13.  
  14. // Socket subfunctions
  15. #define _OPENSF    0
  16. #define _CLOSESF   1
  17. #define _BINDSF    2
  18. #define _LISTENSF  3
  19. #define _CONNECTSF 4
  20. #define _ACCEPTSF  5
  21. #define _SENDSF    6
  22. #define _RECEIVESF 7
  23.  
  24. // Socket types
  25. #define SOCK_STREAM 1
  26. #define SOCK_DGRAM  2
  27. #define SOCK_RAW    3
  28.  
  29. // Socket options
  30. #define SO_NONBLOCK ((long)(1))
  31.  
  32. // IP protocols
  33. #define IPPROTO_IP   0
  34. #define IPPROTO_ICMP 1
  35. #define IPPROTO_TCP  6
  36. #define IPPROTO_UDP  17
  37.  
  38. // Address families
  39. #define AF_UNSPEC 0
  40. #define AF_LOCAL  1
  41. #define AF_INET   2  // IPv4
  42. #define AF_INET6  28 // IPv6 (not supported yet)
  43.  
  44. #define PF_UNSPEC AF_UNSPEC
  45. #define PF_LOCAL  AF_LOCAL
  46. #define PF_INET4  AF_INET4
  47. #define PF_INET6  AF_INET6
  48.  
  49. // Flags for addrinfo
  50. #define AI_PASSIVE     1
  51. #define AI_CANONNAME   2
  52. #define AI_NUMERICHOST 4
  53. #define AI_NUMERICSERV 8
  54. #define AI_ADDRCONFIG  0x400  
  55.  
  56. // Internal definition
  57. #define AI_SUPPORTED 0x40F
  58.  
  59. // For system function 76
  60. #define API_ETH   ((int)(0))
  61. #define API_IPv4  ((int)(1))
  62. #define API_ICMP  ((int)(2))
  63. #define API_UDP   ((int)(3))
  64. #define API_TCP   ((int)(4))
  65. #define API_ARP   ((int)(5))
  66. #define API_PPPOE ((int)(6))
  67.  
  68. // Socket flags for user calls
  69. #define MSG_PEEK     0x02
  70. #define MSG_DONTWAIT 0x40
  71.  
  72.  
  73. struct in_addr {
  74.   unsigned long s_addr;
  75. };
  76.  
  77. struct sockaddr {
  78.     unsigned short    sa_family;    // address family, AF_xxx
  79.     char              sa_data[14];  // 14 bytes of protocol address
  80. };
  81.  
  82. struct sockaddr_in {
  83.         short sin_family;  // sa_family_t
  84.         unsigned short sin_port;  // in_port_t
  85.         struct in_addr sin_addr;
  86.         char sin_zero[8];
  87. };
  88.  
  89. struct addrinfo {
  90.         int ai_flags;  // bitmask of AI_*
  91.         int longai_family;  // PF_*
  92.         int ai_socktype;  //SOCK_*
  93.         int ai_protocol;  // 0 or IPPROTO_*
  94.         int ai_addrlen;  // length of ai_addr
  95.         char *ai_canonname;
  96.         struct sockaddr *ai_addr;  // struct sockaddr*
  97.         struct addrinfo *ai_next;  // struct addrinfo*
  98. };
  99.  
  100. #define EAI_ADDRFAMILY 1
  101. #define EAI_AGAIN      2
  102. #define EAI_BADFLAGS   3
  103. #define EAI_FAIL       4
  104. #define EAI_FAMILY     5
  105. #define EAI_MEMORY     6
  106. #define EAI_NONAME     8
  107. #define EAI_SERVICE    9
  108. #define EAI_SOCKTYPE   10
  109. #define EAI_BADHINTS   12
  110. #define EAI_PROTOCOL   13
  111. #define EAI_OVERFLOW   14  
  112.  
  113. // Socket error codes
  114. // Error Codes
  115. #define ENOBUFS       1
  116. #define EINPROGRESS   2
  117. #define EOPNOTSUPP    4
  118. #define EWOULDBLOCK   6
  119. #define ENOTCONN      9
  120. #define EALREADY      10
  121. #define EINVAL        11
  122. #define EMSGSIZE      12
  123. #define ENOMEM        18
  124. #define EADDRINUSE    20
  125. #define ECONNREFUSED  61
  126. #define ECONNRESET    52
  127. #define EISCONN       56
  128. #define ETIMEDOUT     60
  129. #define ECONNABORTED  53
  130.  
  131.  
  132. unsigned long inet_addr(char *cp);
  133. int socket(int domain, int type, int protocol);
  134. int closesocket(int s);
  135. int bind(int sockfd, struct sockaddr *my_addr, int addrlen);
  136. int listen(int s, int backlog);
  137. int connect(int sockfd, const struct sockaddr *serv_addr, int addrlen);
  138. int accept(int s, struct sockaddr *addr, int *addrlen);
  139. int send(int s, const void *buf, int len, int flags);
  140. int recv(int sockfd, void *buf, int len, int flags);
  141. // Review int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);
  142. // Review int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);
  143. // Add socketpair()
  144.  
  145.  
  146. //---------------------------------------------  
  147.  
  148. #define __NET_stack_rd_cfg_word 0
  149. #define __NET_stack_get_ip      1
  150. #define __NET_stack_wr_cfg_word 2
  151. #define __NET_stack_put_ip      3
  152.  
  153. #define __NET_sock_open_UDP     0
  154. #define __NET_sock_open_TCP     5
  155. #define __NET_sock_close_UDP    1
  156. #define __NET_sock_close_TCP    8
  157. #define __NET_sock_poll         2
  158. #define __NET_sock_read         3
  159. #define __NET_sock_write_UDP    4
  160. #define __NET_sock_get_status   6
  161. #define __NET_sock_write_TCP    7
  162. #define __NET_sock_check_port   9
  163.  
  164. #define __NET_socket            53
  165. #define __NET_stack             52
  166.  
  167. int __menuet__get_stack_config_word(void);
  168. __u32 __menuet__get_my_IP(void);
  169. void __menuet__set_stack_config_word(int cfg);
  170. void __menuet__set_my_IP(__u32 my_IP);
  171.  
  172. __u32 __menuet__open_UDP_socket(__u32 local_port,__u32 remote_port,__u32 remote_ip);
  173. __u32 __menuet__open_TCP_socket(__u32 local_port,__u32 remote_port,__u32 remote_ip,int mode);
  174. int __menuet__close_UDP_socket(int socket);
  175. int __menuet__close_TCP_socket(int socket);
  176. int __menuet__poll_socket(int sock);
  177. int __menuet__read_socket(int sock,__u8 * return_data);
  178. int __menuet__get_TCP_socket_status(int sock);
  179. int __menuet__write_UDP_socket(int sock,int count,void * buffer);
  180. int __menuet__write_TCP_socket(int sock,int count,void * buffer);
  181. int __menuet__check_net_port_availability(int port);
  182.  
  183. /* Values returned by __menuet__check_net_port_availability */
  184. #define PORT_AVAILABLE          (1)
  185. #define PORT_UNAVAILABLE        (0)
  186.  
  187. #define NET_OP_OK               ((int)(0))
  188. #define NET_OP_ERR              ((int)(-1))
  189.  
  190. /* These are socket modes */
  191. #define SOCKET_PASSIVE          0
  192. #define SOCKET_ACTIVE           1
  193.  
  194. /* These belong to socket status */
  195. #define TCB_LISTEN              1
  196. #define TCB_SYN_SENT            2
  197. #define TCB_SYN_RECEIVED        3
  198. #define TCB_ESTABLISHED         4
  199. #define TCB_FIN_WAIT_1          5
  200. #define TCB_FIN_WAIT_2          6
  201. #define TCB_CLOSE_WAIT          7
  202. #define TCB_CLOSING             8
  203. #define TCB_LAST_ACK            9
  204. #define TCB_TIME_AWAIT          10
  205. #define TCB_CLOSED              11
  206.  
  207. #ifdef __cplusplus
  208. }
  209. #endif
  210.  
  211. #endif
  212.