Network Component  Version 0.1
MDK-Professional Middleware for IP Networking
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
rl_net.h
Go to the documentation of this file.
1 /*------------------------------------------------------------------------------
2  * MDK Middleware - Component ::Network
3  * Copyright (c) 2004-2013 ARM Germany GmbH. All rights reserved.
4  *------------------------------------------------------------------------------
5  * Name: rl_net.h
6  * Purpose: Network API
7  * Rev.: V5.02
8  *----------------------------------------------------------------------------*/
9 
10 #ifndef __RL_NET_H
11 #define __RL_NET_H
12 
13 #include <stdint.h>
14 #include <stdbool.h>
15 #include <stddef.h>
16 #include "RTE_Components.h"
17 
19 #ifdef __BIG_ENDIAN
20  #define ntohl(v) (uint32_t)(v)
21  #define ntohs(v) (uint16_t)(v)
22 #else
23  #define ntohl(v) (uint32_t)(__rev(v))
24  #define ntohs(v) (uint16_t)(__rev(v) >> 16)
25 #endif
26 #define htons(v) ntohs(v)
27 #define htonl(v) ntohl(v)
28 
30 #define ETH_ADRLEN 6
31 #define IP_ADRLEN 4
32 
33 
34 #define NETIF_ETH 0
35 #define NETIF_PPP 1
36 #define NETIF_SLIP 2
37 #define NETIF_LOCAL 3
38 #define NETIF_NULL 4
39 
40 
41 #define UDP_OPT_SEND_CHECKSUM 0x01
42 #define UDP_OPT_VERIFY_CHECKSUM 0x02
43 
44 /* TCP Socket Types */
45 #define TCP_TYPE_SERVER 0x01
46 #define TCP_TYPE_CLIENT 0x02
47 #define TCP_TYPE_CLIENT_SERVER 0x03
48 #define TCP_TYPE_DELAY_ACK 0x04
49 #define TCP_TYPE_FLOW_CTRL 0x08
50 #define TCP_TYPE_KEEP_ALIVE 0x10
51 
52 
53 #define TCP_EVENT_CONREQ 0
54 #define TCP_EVENT_CONNECT 1
55 #define TCP_EVENT_CLOSE 2
56 #define TCP_EVENT_ABORT 3
57 #define TCP_EVENT_ACK 4
58 #define TCP_EVENT_DATA 5
59 
60 
61 #define TCP_STATE_FREE 0
62 #define TCP_STATE_CLOSED 1
63 #define TCP_STATE_LISTEN 2
64 #define TCP_STATE_SYN_REC 3
65 #define TCP_STATE_SYN_SENT 4
66 #define TCP_STATE_FINW1 5
67 #define TCP_STATE_FINW2 6
68 #define TCP_STATE_CLOSING 7
69 #define TCP_STATE_LAST_ACK 8
70 #define TCP_STATE_TWAIT 9
71 #define TCP_STATE_CONNECT 10
72 
73 // ==== BSD Socket definitions ====
74 #ifdef RTE_Network_Socket_BSD
75 
77 #define AF_UNSPEC 0
78 #define AF_INET 1
79 #define AF_NETBIOS 2
80 
81 
82 #define PF_UNSPEC 0
83 #define PF_INET 1
84 #define PF_NETBIOS 2
85 
86 
87 #define SOCK_STREAM 1
88 #define SOCK_DGRAM 2
89 
90 
91 #define IPPROTO_TCP 1
92 #define IPPROTO_UDP 2
93 
94 
95 #define INADDR_ANY 0x00000000
96 #define INADDR_NONE 0xffffffff
97 
98 
99 #define BSD_SUCCESS 0
100 #define BSD_ERROR (-1)
101 #define BSD_ERROR_SOCKET (-2)
102 #define BSD_ERROR_PARAMETER (-3)
103 #define BSD_ERROR_WOULDBLOCK (-4)
104 #define BSD_ERROR_NOMEMORY (-5)
105 #define BSD_ERROR_CLOSED (-6)
106 #define BSD_ERROR_LOCKED (-7)
107 #define BSD_ERROR_TIMEOUT (-8)
108 #define BSD_ERROR_INPROGRESS (-9)
109 #define BSD_ERROR_NONAME (-10)
110 
111 
112 #define MSG_DONTWAIT 0x01
113 #define MSG_PEEK 0x02
114 
115 
116 #define FIONBIO 1
117 #define FIO_DELAY_ACK 2
118 #define FIO_KEEP_ALIVE 3
119 #define FIO_FLOW_CTRL 4
120 
121 #endif /* RTE_Network_Socket_BSD */
122 
124 #define ICMP_EVENT_SUCCESS 0
125 #define ICMP_EVENT_TIMEOUT 1
126 
127 
128 #define DNS_CLIENT_EVENT_SUCCESS 0
129 #define DNS_CLIENT_EVENT_NONAME 1
130 #define DNS_CLIENT_EVENT_TIMEOUT 2
131 #define DNS_CLIENT_EVENT_ERROR 3
132 
133 
134 #define DNS_CLIENT_OK 0
135 #define DNS_CLIENT_ERROR_BUSY 1
136 #define DNS_CLIENT_ERROR_LABEL 2
137 #define DNS_CLIENT_ERROR_NAME 3
138 #define DNS_CLIENT_ERROR_NOSERVER 4
139 #define DNS_CLIENT_ERROR_PARAMETER 5
140 
141 
142 #define SMTP_CLIENT_EVENT_SUCCESS 0
143 #define SMTP_CLIENT_EVENT_TIMEOUT 1
144 #define SMTP_CLIENT_EVENT_ERROR 2
145 
146 
147 #define FTP_CLIENT_CMD_PUT 0
148 #define FTP_CLIENT_CMD_GET 1
149 #define FTP_CLIENT_CMD_APPEND 2
150 #define FTP_CLIENT_CMD_DELETE 3
151 #define FTP_CLIENT_CMD_LIST 4
152 #define FTP_CLIENT_CMD_RENAME 5
153 #define FTP_CLIENT_CMD_MKDIR 6
154 #define FTP_CLIENT_CMD_RMDIR 7
155 #define FTP_CLIENT_CMD_NLIST 8
156 
157 
158 #define FTP_CLIENT_EVENT_SUCCESS 0
159 #define FTP_CLIENT_EVENT_TIMEOUT 1
160 #define FTP_CLIENT_EVENT_LOGINFAIL 2
161 #define FTP_CLIENT_EVENT_NOACCESS 3
162 #define FTP_CLIENT_EVENT_NOTFOUND 4
163 #define FTP_CLIENT_EVENT_NOPATH 5
164 #define FTP_CLIENT_EVENT_ERRORLOCAL 6
165 #define FTP_CLIENT_EVENT_ERROR 7
166 
167 
168 #define TFTP_CLIENT_EVENT_SUCCESS 0
169 #define TFTP_CLIENT_EVENT_TIMEOUT 1
170 #define TFTP_CLIENT_EVENT_NOACCESS 2
171 #define TFTP_CLIENT_EVENT_NOTFOUND 3
172 #define TFTP_CLIENT_EVENT_DISKFULL 4
173 #define TFTP_CLIENT_EVENT_ERROR 5
174 
175 
176 #define FTP_SERVER_EVENT_LOGIN 0
177 #define FTP_SERVER_EVENT_LOGOUT 1
178 #define FTP_SERVER_EVENT_LOGINFAIL 2
179 #define FTP_SERVER_EVENT_DOWNLOAD 3
180 #define FTP_SERVER_EVENT_UPLOAD 4
181 #define FTP_SERVER_EVENT_DELETE 5
182 #define FTP_SERVER_EVENT_RENAME 6
183 #define FTP_SERVER_EVENT_MKDIR 7
184 #define FTP_SERVER_EVENT_RMDIR 8
185 #define FTP_SERVER_EVENT_ERRORLOCAL 9
186 #define FTP_SERVER_EVENT_DENIED 10
187 #define FTP_SERVER_EVENT_ERROR 11
188 
189 
190 #define ARP_TYPE_FIXED_IP 0
191 #define ARP_TYPE_TEMP_IP 1
192 
193 // ==== BSD Socket structures ====
194 #ifdef RTE_Network_Socket_BSD
195 
197 typedef struct sockaddr {
198  uint16_t sa_family;
199  int8_t sa_data[14];
200 } SOCKADDR;
201 
202 #pragma push
203 #pragma anon_unions
204 
206 typedef struct in_addr {
207  union {
208  struct {
209  uint8_t s_b1,s_b2,s_b3,s_b4;
210  };
211  struct {
212  uint16_t s_w1,s_w2;
213  };
214  uint32_t s_addr;
215  };
216 } IN_ADDR;
217 
218 #pragma pop
219 
221 typedef struct sockaddr_in {
222  int16_t sin_family;
223  uint16_t sin_port;
225  int8_t sin_zero[8];
226 } SOCKADDR_IN;
227 
229 typedef struct hostent {
230  char *h_name;
231  char **h_aliases;
232  int16_t h_addrtype;
233  int16_t h_length;
234  char **h_addr_list;
235 } HOSTENT;
236 
237 #endif /* RTE_Network_Socket_BSD */
238 
239 // ==== Network native API ====
240 
243 extern void net_initialize (void);
244 
249 extern bool net_main (void);
250 
262 extern uint8_t udp_get_socket (uint8_t tos, uint8_t opt,
263  uint16_t (*listener)(uint8_t socket, uint8_t *remip, uint16_t port, uint8_t *buf, uint16_t len));
264 
270 extern bool udp_release_socket (uint8_t socket);
271 
279 extern bool udp_open (uint8_t socket, uint16_t locport);
280 
286 extern bool udp_close (uint8_t socket);
287 
294 extern bool udp_multicast_ttl (uint8_t socket, uint8_t ttl);
295 
299 extern uint8_t *udp_get_buf (uint16_t size);
300 
310 extern bool udp_send (uint8_t socket, uint8_t *remip, uint16_t remport, uint8_t *buf, uint16_t dlen);
311 
326 extern uint8_t tcp_get_socket (uint8_t type, uint8_t tos, uint16_t tout,
327  uint16_t (*listener)(uint8_t socket, uint8_t event, uint8_t *buf, uint16_t len));
328 
334 extern bool tcp_release_socket (uint8_t socket);
335 
343 extern bool tcp_listen (uint8_t socket, uint16_t locport);
344 
354 extern bool tcp_connect (uint8_t socket, uint8_t *remip, uint16_t remport, uint16_t locport);
355 
359 extern uint8_t *tcp_get_buf (uint16_t size);
360 
364 extern uint16_t tcp_max_data_size (uint8_t socket);
365 
371 extern bool tcp_check_send (uint8_t socket);
372 
387 extern uint8_t tcp_get_state (uint8_t socket);
388 
396 extern bool tcp_send (uint8_t socket, uint8_t *buf, uint16_t dlen);
397 
403 extern bool tcp_close (uint8_t socket);
404 
410 extern bool tcp_abort (uint8_t socket);
411 
414 extern void tcp_reset_window (uint8_t socket);
415 
424 extern bool arp_cache_ip (uint8_t *ipadr, uint8_t type);
425 
431 extern bool arp_cache_mac (uint8_t *hwadr);
432 
437 extern void ppp_listen (const char *user, const char *passw);
438 
444 extern void ppp_connect (const char *dialnum, const char *user, const char *passw);
445 
447 extern void ppp_close (void);
448 
453 extern bool ppp_is_up (void);
454 
456 extern void slip_listen (void);
457 
461 extern void slip_connect (const char *dialnum);
462 
464 extern void slip_close (void);
465 
470 extern bool slip_is_up (void);
471 
482 extern uint8_t get_host_by_name (const char *hostn, void (*cbfunc)(uint8_t event, uint8_t *host_ip));
483 
491 extern bool smtp_connect (uint8_t *ipadr, uint16_t port, void (*cbfunc)(uint8_t event));
492 
494 extern void dhcp_disable (void);
495 
501 extern bool igmp_join (uint8_t *group_ip);
502 
508 extern bool igmp_leave (uint8_t *group_ip);
509 
527 extern bool snmp_trap (uint8_t *manager_ip, uint8_t gen_trap, uint8_t spec_trap, uint16_t *obj_list);
528 
534 extern bool snmp_set_community (const char *community);
535 
542 extern bool icmp_ping (uint8_t *remip, void (*cbfunc)(uint8_t event));
543 
561 extern bool ftp_client_connect (uint8_t *ipadr, uint16_t port,
562  uint8_t command, void (*cbfunc)(uint8_t event));
563 
573 extern bool tftp_client_put (uint8_t *ipadr, uint16_t port,
574  const char *src, const char *dst, void (*cbfunc)(uint8_t event));
575 
585 extern bool tftp_client_get (uint8_t *ipadr, uint16_t port,
586  const char *src, const char *dst, void (*cbfunc)(uint8_t event));
587 
594 extern bool sntp_get_time (uint8_t *ipadr, void (*cbfunc)(uint32_t utc_time));
595 
611 extern void ftp_server_notify (uint8_t event);
612 
613 // ==== BSD Socket API ====
614 #ifdef RTE_Network_Socket_BSD
615 
630 extern int socket (int family, int type, int protocol);
631 
640 extern int bind (int sock, const SOCKADDR *addr, int addrlen);
641 
650 extern int listen (int sock, int backlog);
651 
662 extern int accept (int sock, SOCKADDR *addr, int *addrlen);
663 
675 extern int connect (int sock, SOCKADDR *addr, int addrlen);
676 
692 extern int send (int sock, const char *buf, int len, int flags);
693 
712 extern int sendto (int sock, const char *buf, int len, int flags, SOCKADDR *to, int tolen);
713 
729 extern int recv (int sock, char *buf, int len, int flags);
730 
749 extern int recvfrom (int sock, char *buf, int len, int flags, SOCKADDR *from, int *fromlen);
750 
758 extern int closesocket (int sock);
759 
768 extern int getpeername (int sock, SOCKADDR *name, int *namelen);
769 
778 extern int getsockname (int sock, SOCKADDR *name, int *namelen);
779 
786 // FIO_FLOW_CTRL enable flow-control mode.
793 extern int ioctlsocket (int sock, long cmd, unsigned long *argp);
794 
808 extern HOSTENT *gethostbyname (const char *name, int *err);
809 #endif /* RTE_Network_Socket_BSD */
810 
811 #endif /* __RL_NET_H */