39#ifndef LWIP_HDR_SOCKETS_H
40#define LWIP_HDR_SOCKETS_H
60#if !defined(sa_family_t) && !defined(SA_FAMILY_T_DEFINED)
61typedef u8_t sa_family_t;
65#if !defined(in_port_t) && !defined(IN_PORT_T_DEFINED)
66typedef u16_t in_port_t;
73 sa_family_t sin_family;
77 char sin_zero[SIN_ZERO_LEN];
84 sa_family_t sin6_family;
94 sa_family_t sa_family;
98struct sockaddr_storage {
100 sa_family_t ss_family;
110#if !defined(socklen_t) && !defined(SOCKLEN_T_DEFINED)
111typedef u32_t socklen_t;
115#define IOV_MAX 0xFFFF
116#elif IOV_MAX > 0xFFFF
117#error "IOV_MAX larger than supported by LwIP"
129 socklen_t msg_namelen;
130 struct iovec *msg_iov;
133 socklen_t msg_controllen;
138#define MSG_TRUNC 0x04
139#define MSG_CTRUNC 0x08
155#define ALIGN_H(size) (((size) + sizeof(long) - 1U) & ~(sizeof(long)-1U))
156#define ALIGN_D(size) ALIGN_H(size)
158#define CMSG_FIRSTHDR(mhdr) \
159 ((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \
160 (struct cmsghdr *)(mhdr)->msg_control : \
161 (struct cmsghdr *)NULL)
163#define CMSG_NXTHDR(mhdr, cmsg) \
164 (((cmsg) == NULL) ? CMSG_FIRSTHDR(mhdr) : \
165 (((u8_t *)(cmsg) + ALIGN_H((cmsg)->cmsg_len) \
166 + ALIGN_D(sizeof(struct cmsghdr)) > \
167 (u8_t *)((mhdr)->msg_control) + (mhdr)->msg_controllen) ? \
168 (struct cmsghdr *)NULL : \
169 (struct cmsghdr *)((void*)((u8_t *)(cmsg) + \
170 ALIGN_H((cmsg)->cmsg_len)))))
172#define CMSG_DATA(cmsg) ((void*)((u8_t *)(cmsg) + \
173 ALIGN_D(sizeof(struct cmsghdr))))
175#define CMSG_SPACE(length) (ALIGN_D(sizeof(struct cmsghdr)) + \
178#define CMSG_LEN(length) (ALIGN_D(sizeof(struct cmsghdr)) + \
182#define IFNAMSIZ NETIF_NAMESIZE
184 char ifr_name[IFNAMSIZ];
195#define SO_REUSEADDR 0x0004
196#define SO_KEEPALIVE 0x0008
197#define SO_BROADCAST 0x0020
203#define SO_DEBUG 0x0001
204#define SO_ACCEPTCONN 0x0002
205#define SO_DONTROUTE 0x0010
206#define SO_USELOOPBACK 0x0040
207#define SO_LINGER 0x0080
208#define SO_DONTLINGER ((int)(~SO_LINGER))
209#define SO_OOBINLINE 0x0100
210#define SO_REUSEPORT 0x0200
211#define SO_SNDBUF 0x1001
212#define SO_RCVBUF 0x1002
213#define SO_SNDLOWAT 0x1003
214#define SO_RCVLOWAT 0x1004
215#define SO_SNDTIMEO 0x1005
216#define SO_RCVTIMEO 0x1006
217#define SO_ERROR 0x1007
218#define SO_TYPE 0x1008
219#define SO_CONTIMEO 0x1009
220#define SO_NO_CHECK 0x100a
221#define SO_BINDTODEVICE 0x100b
234#define SOL_SOCKET 0xfff
242#define AF_INET6 AF_UNSPEC
244#define PF_INET AF_INET
245#define PF_INET6 AF_INET6
246#define PF_UNSPEC AF_UNSPEC
249#define IPPROTO_ICMP 1
251#define IPPROTO_UDP 17
253#define IPPROTO_IPV6 41
254#define IPPROTO_ICMPV6 58
256#define IPPROTO_UDPLITE 136
257#define IPPROTO_RAW 255
261#define MSG_WAITALL 0x02
263#define MSG_DONTWAIT 0x08
265#define MSG_NOSIGNAL 0x20
279#define TCP_NODELAY 0x01
280#define TCP_KEEPALIVE 0x02
281#define TCP_KEEPIDLE 0x03
282#define TCP_KEEPINTVL 0x04
283#define TCP_KEEPCNT 0x05
290#define IPV6_CHECKSUM 7
291#define IPV6_V6ONLY 27
294#if LWIP_UDP && LWIP_UDPLITE
298#define UDPLITE_SEND_CSCOV 0x01
299#define UDPLITE_RECV_CSCOV 0x02
303#if LWIP_MULTICAST_TX_OPTIONS
307#define IP_MULTICAST_TTL 5
308#define IP_MULTICAST_IF 6
309#define IP_MULTICAST_LOOP 7
316#define IP_ADD_MEMBERSHIP 3
317#define IP_DROP_MEMBERSHIP 4
319typedef struct ip_mreq {
327 unsigned int ipi_ifindex;
336#define IPV6_JOIN_GROUP 12
337#define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP
338#define IPV6_LEAVE_GROUP 13
339#define IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP
341typedef struct ipv6_mreq {
343 unsigned int ipv6mr_interface;
363#define IPTOS_TOS_MASK 0x1E
364#define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK)
365#define IPTOS_LOWDELAY 0x10
366#define IPTOS_THROUGHPUT 0x08
367#define IPTOS_RELIABILITY 0x04
368#define IPTOS_LOWCOST 0x02
369#define IPTOS_MINCOST IPTOS_LOWCOST
380#define IPTOS_PREC_MASK 0xe0
381#define IPTOS_PREC(tos) ((tos) & IPTOS_PREC_MASK)
382#define IPTOS_PREC_NETCONTROL 0xe0
383#define IPTOS_PREC_INTERNETCONTROL 0xc0
384#define IPTOS_PREC_CRITIC_ECP 0xa0
385#define IPTOS_PREC_FLASHOVERRIDE 0x80
386#define IPTOS_PREC_FLASH 0x60
387#define IPTOS_PREC_IMMEDIATE 0x40
388#define IPTOS_PREC_PRIORITY 0x20
389#define IPTOS_PREC_ROUTINE 0x00
402#if !defined(FIONREAD) || !defined(FIONBIO)
403#define IOCPARM_MASK 0x7fU
404#define IOC_VOID 0x20000000UL
405#define IOC_OUT 0x40000000UL
406#define IOC_IN 0x80000000UL
407#define IOC_INOUT (IOC_IN|IOC_OUT)
414#define _IO(x,y) ((long)(IOC_VOID|((x)<<8)|(y)))
416#define _IOR(x,y,t) ((long)(IOC_OUT|((sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)))
418#define _IOW(x,y,t) ((long)(IOC_IN|((sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)))
422#define FIONREAD _IOR('f', 127, unsigned long)
425#define FIONBIO _IOW('f', 126, unsigned long)
430#define SIOCSHIWAT _IOW('s', 0, unsigned long)
431#define SIOCGHIWAT _IOR('s', 1, unsigned long)
432#define SIOCSLOWAT _IOW('s', 2, unsigned long)
433#define SIOCGLOWAT _IOR('s', 3, unsigned long)
434#define SIOCATMARK _IOR('s', 7, unsigned long)
451#define O_NDELAY O_NONBLOCK
460#define O_RDWR (O_RDONLY|O_WRONLY)
473#define FD_SETSIZE MEMP_NUM_NETCONN
474#define LWIP_SELECT_MAXNFDS (FD_SETSIZE + LWIP_SOCKET_OFFSET)
475#define FDSETSAFESET(n, code) do { \
476 if (((n) - LWIP_SOCKET_OFFSET < MEMP_NUM_NETCONN) && (((int)(n) - LWIP_SOCKET_OFFSET) >= 0)) { \
478#define FDSETSAFEGET(n, code) (((n) - LWIP_SOCKET_OFFSET < MEMP_NUM_NETCONN) && (((int)(n) - LWIP_SOCKET_OFFSET) >= 0) ?\
480#define FD_SET(n, p) FDSETSAFESET(n, (p)->fd_bits[((n)-LWIP_SOCKET_OFFSET)/8] = (u8_t)((p)->fd_bits[((n)-LWIP_SOCKET_OFFSET)/8] | (1 << (((n)-LWIP_SOCKET_OFFSET) & 7))))
481#define FD_CLR(n, p) FDSETSAFESET(n, (p)->fd_bits[((n)-LWIP_SOCKET_OFFSET)/8] = (u8_t)((p)->fd_bits[((n)-LWIP_SOCKET_OFFSET)/8] & ~(1 << (((n)-LWIP_SOCKET_OFFSET) & 7))))
482#define FD_ISSET(n,p) FDSETSAFEGET(n, (p)->fd_bits[((n)-LWIP_SOCKET_OFFSET)/8] & (1 << (((n)-LWIP_SOCKET_OFFSET) & 7)))
483#define FD_ZERO(p) memset((void*)(p), 0, sizeof(*(p)))
487 unsigned char fd_bits [(FD_SETSIZE+7)/8];
490#elif FD_SETSIZE < (LWIP_SOCKET_OFFSET + MEMP_NUM_NETCONN)
491#error "external FD_SETSIZE too small for number of sockets"
493#define LWIP_SELECT_MAXNFDS FD_SETSIZE
498#if !defined(POLLIN) && !defined(POLLOUT)
504#define POLLRDNORM 0x10
505#define POLLRDBAND 0x20
507#define POLLWRNORM 0x80
508#define POLLWRBAND 0x100
510typedef unsigned int nfds_t;
521#ifndef LWIP_TIMEVAL_PRIVATE
522#define LWIP_TIMEVAL_PRIVATE 1
525#if LWIP_TIMEVAL_PRIVATE
532#define lwip_socket_init()
533err_t lwip_socket_thread_init(
void *task);
534err_t lwip_socket_thread_cleanup(
void *task);
536#if LWIP_COMPAT_SOCKETS == 2
538#define lwip_accept accept
539#define lwip_bind bind
540#define lwip_shutdown shutdown
541#define lwip_getpeername getpeername
542#define lwip_getsockname getsockname
543#define lwip_setsockopt setsockopt
544#define lwip_getsockopt getsockopt
545#define lwip_close closesocket
546#define lwip_connect connect
547#define lwip_listen listen
548#define lwip_recv recv
549#define lwip_recvmsg recvmsg
550#define lwip_recvfrom recvfrom
551#define lwip_send send
552#define lwip_sendmsg sendmsg
553#define lwip_sendto sendto
554#define lwip_socket socket
555#if LWIP_SOCKET_SELECT
556#define lwip_select select
559#define lwip_poll poll
561#define lwip_ioctl ioctlsocket
562#define lwip_inet_ntop inet_ntop
563#define lwip_inet_pton inet_pton
565#if LWIP_POSIX_SOCKETS_IO_NAMES
566#define lwip_read read
567#define lwip_readv readv
568#define lwip_write write
569#define lwip_writev writev
571#define lwip_close close
572#define closesocket(s) close(s)
573int fcntl(
int s,
int cmd, ...);
575#define lwip_ioctl ioctl
576#define ioctlsocket ioctl
580int lwip_accept(
int s,
struct sockaddr *addr, socklen_t *addrlen);
581int lwip_bind(
int s,
const struct sockaddr *name, socklen_t namelen);
582int lwip_shutdown(
int s,
int how);
583int lwip_getpeername (
int s,
struct sockaddr *name, socklen_t *namelen);
584int lwip_getsockname (
int s,
struct sockaddr *name, socklen_t *namelen);
585int lwip_getsockopt (
int s,
int level,
int optname,
void *optval, socklen_t *optlen);
586int lwip_setsockopt (
int s,
int level,
int optname,
const void *optval, socklen_t optlen);
587 int lwip_close(
int s);
588int lwip_connect(
int s,
const struct sockaddr *name, socklen_t namelen);
589int lwip_listen(
int s,
int backlog);
590ssize_t lwip_recv(
int s,
void *mem,
size_t len,
int flags);
591ssize_t lwip_read(
int s,
void *mem,
size_t len);
592ssize_t lwip_readv(
int s,
const struct iovec *iov,
int iovcnt);
593ssize_t lwip_recvfrom(
int s,
void *mem,
size_t len,
int flags,
594 struct sockaddr *from, socklen_t *fromlen);
595ssize_t lwip_recvmsg(
int s,
struct msghdr *message,
int flags);
596ssize_t lwip_send(
int s,
const void *dataptr,
size_t size,
int flags);
597ssize_t lwip_sendmsg(
int s,
const struct msghdr *message,
int flags);
598ssize_t lwip_sendto(
int s,
const void *dataptr,
size_t size,
int flags,
599 const struct sockaddr *to, socklen_t tolen);
600int lwip_socket(
int domain,
int type,
int protocol);
601ssize_t lwip_write(
int s,
const void *dataptr,
size_t size);
602ssize_t lwip_writev(
int s,
const struct iovec *iov,
int iovcnt);
603#if LWIP_SOCKET_SELECT
604int lwip_select(
int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,
605 struct timeval *timeout);
608int lwip_poll(
struct pollfd *fds, nfds_t nfds,
int timeout);
610int lwip_ioctl(
int s,
long cmd,
void *argp);
611int lwip_fcntl(
int s,
int cmd,
int val);
612const char *lwip_inet_ntop(
int af,
const void *src,
char *dst, socklen_t size);
613int lwip_inet_pton(
int af,
const char *src,
void *dst);
615#if LWIP_COMPAT_SOCKETS
616#if LWIP_COMPAT_SOCKETS != 2
618#define accept(s,addr,addrlen) lwip_accept(s,addr,addrlen)
620#define bind(s,name,namelen) lwip_bind(s,name,namelen)
622#define shutdown(s,how) lwip_shutdown(s,how)
624#define getpeername(s,name,namelen) lwip_getpeername(s,name,namelen)
626#define getsockname(s,name,namelen) lwip_getsockname(s,name,namelen)
628#define setsockopt(s,level,optname,opval,optlen) lwip_setsockopt(s,level,optname,opval,optlen)
630#define getsockopt(s,level,optname,opval,optlen) lwip_getsockopt(s,level,optname,opval,optlen)
632#define closesocket(s) lwip_close(s)
634#define connect(s,name,namelen) lwip_connect(s,name,namelen)
636#define listen(s,backlog) lwip_listen(s,backlog)
638#define recv(s,mem,len,flags) lwip_recv(s,mem,len,flags)
640#define recvmsg(s,message,flags) lwip_recvmsg(s,message,flags)
642#define recvfrom(s,mem,len,flags,from,fromlen) lwip_recvfrom(s,mem,len,flags,from,fromlen)
644#define send(s,dataptr,size,flags) lwip_send(s,dataptr,size,flags)
646#define sendmsg(s,message,flags) lwip_sendmsg(s,message,flags)
648#define sendto(s,dataptr,size,flags,to,tolen) lwip_sendto(s,dataptr,size,flags,to,tolen)
650#define socket(domain,type,protocol) lwip_socket(domain,type,protocol)
651#if LWIP_SOCKET_SELECT
653#define select(maxfdp1,readset,writeset,exceptset,timeout) lwip_select(maxfdp1,readset,writeset,exceptset,timeout)
657#define poll(fds,nfds,timeout) lwip_poll(fds,nfds,timeout)
660#define ioctlsocket(s,cmd,argp) lwip_ioctl(s,cmd,argp)
662#define inet_ntop(af,src,dst,size) lwip_inet_ntop(af,src,dst,size)
664#define inet_pton(af,src,dst) lwip_inet_pton(af,src,dst)
666#if LWIP_POSIX_SOCKETS_IO_NAMES
668#define read(s,mem,len) lwip_read(s,mem,len)
670#define readv(s,iov,iovcnt) lwip_readv(s,iov,iovcnt)
672#define write(s,dataptr,len) lwip_write(s,dataptr,len)
674#define writev(s,iov,iovcnt) lwip_writev(s,iov,iovcnt)
676#define close(s) lwip_close(s)
678#define fcntl(s,cmd,val) lwip_fcntl(s,cmd,val)
680#define ioctl(s,cmd,argp) lwip_ioctl(s,cmd,argp)
s8_t err_t
Definition: err.h:96