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