2 * (c) 2009 Technische Universität Dresden
3 * This file is part of TUD:OS and distributed under the terms of the
4 * GNU Lesser General Public License 2.1.
5 * Please see the COPYING-LGPL-2.1 file for details.
8 #define LWIP_COMPAT_SOCKETS 0
10 #include "lwip/sockets.h"
11 #include "lwip/netdb.h"
15 int socket(int domain, int type, int protocol);
16 int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
17 int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
18 int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
19 int getsockopt(int sockfd, int level, int optname,
20 void *optval, socklen_t *optlen);
21 int setsockopt(int sockfd, int level, int optname,
22 const void *optval, socklen_t optlen);
23 int listen(int sockfd, int backlog);
24 ssize_t recv(int sockfd, void *buf, size_t len, int flags);
25 ssize_t send(int sockfd, const void *buf, size_t len, int flags);
26 ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
27 const struct sockaddr *dest_addr, socklen_t addrlen);
28 int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
29 int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
30 int getnameinfo(const struct sockaddr *sa, socklen_t salen,
31 char *host, socklen_t hostlen,
32 char *serv, socklen_t servlen, unsigned int flags);
33 int shutdown(int sockfd, int how);
34 struct hostent *gethostbyname(const char *name);
35 int gethostname(char *name, size_t len);
39 * BD: Actually, we only need this, if we intermix uclibc and lwip
40 * socket functions which seems to be a bad idea anyway?
42 static void __attribute__((unused))
43 uclibc_to_lwip_sockaddr(struct sockaddr *addr)
45 unsigned char *a = (unsigned char *)addr;
46 unsigned char x = a[0];
53 int socket(int domain, int type, int protocol)
55 int sockfd = lwip_socket(domain, type, protocol);
56 return assign_fd_to_socket(sockfd);
59 int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
61 int sock = socket_for_fd(sockfd);
62 int ret = lwip_connect(sock, addr, addrlen);
64 mark_connected(sockfd, 1);
69 int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
71 int sock = socket_for_fd(sockfd);
72 int ret = lwip_accept(sock, addr, addrlen);
76 int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
78 int sock = socket_for_fd(sockfd);
79 int ret = lwip_bind(sock, addr, addrlen);
81 mark_connected(sockfd, 1);
85 int getsockopt(int sockfd, int level, int optname,
86 void *optval, socklen_t *optlen)
88 int sock = socket_for_fd(sockfd);
89 return lwip_getsockopt(sock, level, optname, optval, optlen);
92 int setsockopt(int sockfd, int level, int optname,
93 const void *optval, socklen_t optlen)
95 int sock = socket_for_fd(sockfd);
96 return lwip_setsockopt(sock, level, optname, optval, optlen);
99 int listen(int sockfd, int backlog)
101 int sock = socket_for_fd(sockfd);
102 return lwip_listen(sock, backlog);
105 ssize_t recv(int sockfd, void *buf, size_t len, int flags)
107 int sock = socket_for_fd(sockfd);
108 return lwip_recv(sock, buf, len, flags);
111 ssize_t send(int sockfd, const void *buf, size_t len, int flags)
113 int sock = socket_for_fd(sockfd);
114 return lwip_send(sock, buf, len, flags);
117 ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
118 const struct sockaddr *dest_addr, socklen_t addrlen)
120 int sock = socket_for_fd(sockfd);
121 return lwip_sendto(sock, buf, len, flags, dest_addr, addrlen);
124 int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
126 int sock = socket_for_fd(sockfd);
127 return lwip_getsockname(sock, addr, addrlen);
130 int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
132 int sock = socket_for_fd(sockfd);
133 return lwip_getpeername(sock, addr, addrlen);
136 int getnameinfo(const struct sockaddr *sa, socklen_t salen,
137 char *host, socklen_t hostlen,
138 char *serv, socklen_t servlen, unsigned int flags)
140 printf("Unimplemented: %s(%p, %d, %p, %d, %p, %d, %d)\n", __func__,
141 sa, salen, host, hostlen, serv, servlen, flags);
145 int shutdown(int sockfd, int how)
147 printf("Unimplemented: %s(%d, %d)\n", __func__, sockfd, how);
152 struct hostent *gethostbyname(const char *name)
154 return lwip_gethostbyname(name);
157 int gethostname(char *name, size_t len)
159 const char const *my_fine_hostname = "l4re-host";
160 strncpy(name, my_fine_hostname, len);