00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef __LWIP_SOCKETS_H__
00035 #define __LWIP_SOCKETS_H__
00036
00037 #include "lwip/opt.h"
00038
00039 #if LWIP_SOCKET
00040
00041 #include <stddef.h>
00042
00043 #include "lwip/ip_addr.h"
00044 #include "lwip/inet.h"
00045
00046 #ifdef __cplusplus
00047 extern "C" {
00048 #endif
00049
00050
00051 struct sockaddr_in {
00052 u8_t sin_len;
00053 u8_t sin_family;
00054 u16_t sin_port;
00055 struct in_addr sin_addr;
00056 char sin_zero[8];
00057 };
00058
00059 struct sockaddr {
00060 u8_t sa_len;
00061 u8_t sa_family;
00062 char sa_data[14];
00063 };
00064
00065 #ifndef socklen_t
00066 # define socklen_t u32_t
00067 #endif
00068
00069
00070 #define SOCK_STREAM 1
00071 #define SOCK_DGRAM 2
00072 #define SOCK_RAW 3
00073
00074
00075
00076
00077 #define SO_DEBUG 0x0001
00078 #define SO_ACCEPTCONN 0x0002
00079 #define SO_REUSEADDR 0x0004
00080 #define SO_KEEPALIVE 0x0008
00081 #define SO_DONTROUTE 0x0010
00082 #define SO_BROADCAST 0x0020
00083 #define SO_USELOOPBACK 0x0040
00084 #define SO_LINGER 0x0080
00085 #define SO_OOBINLINE 0x0100
00086 #define SO_REUSEPORT 0x0200
00087
00088 #define SO_DONTLINGER ((int)(~SO_LINGER))
00089
00090
00091
00092
00093 #define SO_SNDBUF 0x1001
00094 #define SO_RCVBUF 0x1002
00095 #define SO_SNDLOWAT 0x1003
00096 #define SO_RCVLOWAT 0x1004
00097 #define SO_SNDTIMEO 0x1005
00098 #define SO_RCVTIMEO 0x1006
00099 #define SO_ERROR 0x1007
00100 #define SO_TYPE 0x1008
00101 #define SO_CONTIMEO 0x1009
00102 #define SO_NO_CHECK 0x100a
00103
00104
00105
00106
00107
00108 struct linger {
00109 int l_onoff;
00110 int l_linger;
00111 };
00112
00113
00114
00115
00116 #define SOL_SOCKET 0xfff
00117
00118
00119 #define AF_UNSPEC 0
00120 #define AF_INET 2
00121 #define PF_INET AF_INET
00122 #define PF_UNSPEC AF_UNSPEC
00123
00124 #define IPPROTO_IP 0
00125 #define IPPROTO_TCP 6
00126 #define IPPROTO_UDP 17
00127 #define IPPROTO_UDPLITE 136
00128
00129
00130 #define MSG_PEEK 0x01
00131 #define MSG_WAITALL 0x02
00132 #define MSG_OOB 0x04
00133 #define MSG_DONTWAIT 0x08
00134 #define MSG_MORE 0x10
00135
00136
00137
00138
00139
00140 #define IP_TOS 1
00141 #define IP_TTL 2
00142
00143 #if LWIP_TCP
00144
00145
00146
00147 #define TCP_NODELAY 0x01
00148 #define TCP_KEEPALIVE 0x02
00149 #define TCP_KEEPIDLE 0x03
00150 #define TCP_KEEPINTVL 0x04
00151 #define TCP_KEEPCNT 0x05
00152 #endif
00153
00154 #if LWIP_UDP && LWIP_UDPLITE
00155
00156
00157
00158 #define UDPLITE_SEND_CSCOV 0x01
00159 #define UDPLITE_RECV_CSCOV 0x02
00160 #endif
00161
00162
00163 #if LWIP_IGMP
00164
00165
00166
00167 #define IP_ADD_MEMBERSHIP 3
00168 #define IP_DROP_MEMBERSHIP 4
00169 #define IP_MULTICAST_TTL 5
00170 #define IP_MULTICAST_IF 6
00171 #define IP_MULTICAST_LOOP 7
00172
00173 typedef struct ip_mreq {
00174 struct in_addr imr_multiaddr;
00175 struct in_addr imr_interface;
00176 } ip_mreq;
00177 #endif
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195 #define IPTOS_TOS_MASK 0x1E
00196 #define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK)
00197 #define IPTOS_LOWDELAY 0x10
00198 #define IPTOS_THROUGHPUT 0x08
00199 #define IPTOS_RELIABILITY 0x04
00200 #define IPTOS_LOWCOST 0x02
00201 #define IPTOS_MINCOST IPTOS_LOWCOST
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212 #define IPTOS_PREC_MASK 0xe0
00213 #define IPTOS_PREC(tos) ((tos) & IPTOS_PREC_MASK)
00214 #define IPTOS_PREC_NETCONTROL 0xe0
00215 #define IPTOS_PREC_INTERNETCONTROL 0xc0
00216 #define IPTOS_PREC_CRITIC_ECP 0xa0
00217 #define IPTOS_PREC_FLASHOVERRIDE 0x80
00218 #define IPTOS_PREC_FLASH 0x60
00219 #define IPTOS_PREC_IMMEDIATE 0x40
00220 #define IPTOS_PREC_PRIORITY 0x20
00221 #define IPTOS_PREC_ROUTINE 0x00
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234 #if !defined(FIONREAD) || !defined(FIONBIO)
00235 #define IOCPARM_MASK 0x7fU
00236 #define IOC_VOID 0x20000000UL
00237 #define IOC_OUT 0x40000000UL
00238 #define IOC_IN 0x80000000UL
00239 #define IOC_INOUT (IOC_IN|IOC_OUT)
00240
00241
00242 #define _IO(x,y) (IOC_VOID|((x)<<8)|(y))
00243
00244 #define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
00245
00246 #define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
00247 #endif
00248
00249 #ifndef FIONREAD
00250 #define FIONREAD _IOR('f', 127, unsigned long)
00251 #endif
00252 #ifndef FIONBIO
00253 #define FIONBIO _IOW('f', 126, unsigned long)
00254 #endif
00255
00256
00257 #ifndef SIOCSHIWAT
00258 #define SIOCSHIWAT _IOW('s', 0, unsigned long)
00259 #define SIOCGHIWAT _IOR('s', 1, unsigned long)
00260 #define SIOCSLOWAT _IOW('s', 2, unsigned long)
00261 #define SIOCGLOWAT _IOR('s', 3, unsigned long)
00262 #define SIOCATMARK _IOR('s', 7, unsigned long)
00263 #endif
00264
00265
00266 #ifndef O_NONBLOCK
00267 #define O_NONBLOCK 04000U
00268 #endif
00269
00270
00271 #ifndef FD_SET
00272 #undef FD_SETSIZE
00273
00274 #define FD_SETSIZE MEMP_NUM_NETCONN
00275 #define FD_SET(n, p) ((p)->fd_bits[(n)/8] |= (1 << ((n) & 7)))
00276 #define FD_CLR(n, p) ((p)->fd_bits[(n)/8] &= ~(1 << ((n) & 7)))
00277 #define FD_ISSET(n,p) ((p)->fd_bits[(n)/8] & (1 << ((n) & 7)))
00278 #define FD_ZERO(p) memset((void*)(p),0,sizeof(*(p)))
00279
00280 typedef struct fd_set {
00281 unsigned char fd_bits [(FD_SETSIZE+7)/8];
00282 } fd_set;
00283
00284 #endif
00285
00286
00287
00288 #ifndef LWIP_TIMEVAL_PRIVATE
00289 #define LWIP_TIMEVAL_PRIVATE 1
00290 #endif
00291
00292 #if LWIP_TIMEVAL_PRIVATE
00293 struct timeval {
00294 long tv_sec;
00295 long tv_usec;
00296 };
00297 #endif
00298
00299 void lwip_socket_init(void);
00300
00301 int lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen);
00302 int lwip_bind(int s, const struct sockaddr *name, socklen_t namelen);
00303 int lwip_shutdown(int s, int how);
00304 int lwip_getpeername (int s, struct sockaddr *name, socklen_t *namelen);
00305 int lwip_getsockname (int s, struct sockaddr *name, socklen_t *namelen);
00306 int lwip_getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen);
00307 int lwip_setsockopt (int s, int level, int optname, const void *optval, socklen_t optlen);
00308 int lwip_close(int s);
00309 int lwip_connect(int s, const struct sockaddr *name, socklen_t namelen);
00310 int lwip_listen(int s, int backlog);
00311 int lwip_recv(int s, void *mem, size_t len, int flags);
00312 int lwip_read(int s, void *mem, size_t len);
00313 int lwip_recvfrom(int s, void *mem, size_t len, int flags,
00314 struct sockaddr *from, socklen_t *fromlen);
00315 int lwip_send(int s, const void *dataptr, size_t size, int flags);
00316 int lwip_sendto(int s, const void *dataptr, size_t size, int flags,
00317 const struct sockaddr *to, socklen_t tolen);
00318 int lwip_socket(int domain, int type, int protocol);
00319 int lwip_write(int s, const void *dataptr, size_t size);
00320 int lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,
00321 struct timeval *timeout);
00322 int lwip_ioctl(int s, long cmd, void *argp);
00323
00324 #if LWIP_COMPAT_SOCKETS
00325 #define accept(a,b,c) lwip_accept(a,b,c)
00326 #define bind(a,b,c) lwip_bind(a,b,c)
00327 #define shutdown(a,b) lwip_shutdown(a,b)
00328 #define closesocket(s) lwip_close(s)
00329 #define connect(a,b,c) lwip_connect(a,b,c)
00330 #define getsockname(a,b,c) lwip_getsockname(a,b,c)
00331 #define getpeername(a,b,c) lwip_getpeername(a,b,c)
00332 #define setsockopt(a,b,c,d,e) lwip_setsockopt(a,b,c,d,e)
00333 #define getsockopt(a,b,c,d,e) lwip_getsockopt(a,b,c,d,e)
00334 #define listen(a,b) lwip_listen(a,b)
00335 #define recv(a,b,c,d) lwip_recv(a,b,c,d)
00336 #define recvfrom(a,b,c,d,e,f) lwip_recvfrom(a,b,c,d,e,f)
00337 #define send(a,b,c,d) lwip_send(a,b,c,d)
00338 #define sendto(a,b,c,d,e,f) lwip_sendto(a,b,c,d,e,f)
00339 #define socket(a,b,c) lwip_socket(a,b,c)
00340 #define select(a,b,c,d,e) lwip_select(a,b,c,d,e)
00341 #define ioctlsocket(a,b,c) lwip_ioctl(a,b,c)
00342
00343 #if LWIP_POSIX_SOCKETS_IO_NAMES
00344 #define read(a,b,c) lwip_read(a,b,c)
00345 #define write(a,b,c) lwip_write(a,b,c)
00346 #define close(s) lwip_close(s)
00347 #endif
00348
00349 #endif
00350
00351 #ifdef __cplusplus
00352 }
00353 #endif
00354
00355 #endif
00356
00357 #endif