• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
3  * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without modification,
6  * are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice, this list of
9  *    conditions and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above copyright notice, this list
12  *    of conditions and the following disclaimer in the documentation and/or other materials
13  *    provided with the distribution.
14  *
15  * 3. Neither the name of the copyright holder nor the names of its contributors may be used
16  *    to endorse or promote products derived from this software without specific prior written
17  *    permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 #include <los_config.h>
33 #include <arpa/inet.h>
34 #include <sys/socket.h>
35 
36 #ifdef LOSCFG_NET_LWIP_SACK
37 #include <lwip/sockets.h>
38 
39 #if !LWIP_COMPAT_SOCKETS
40 
41 #define CHECK_NULL_PTR(ptr) do { if (ptr == NULL) { set_errno(EFAULT); return -1; } } while (0)
42 
accept(int s,struct sockaddr * addr,socklen_t * addrlen)43 int accept(int s, struct sockaddr *addr, socklen_t *addrlen)
44 {
45     return lwip_accept(s, addr, addrlen);
46 }
47 
bind(int s,const struct sockaddr * name,socklen_t namelen)48 int bind(int s, const struct sockaddr *name, socklen_t namelen)
49 {
50     CHECK_NULL_PTR(name);
51     if (namelen < sizeof(*name)) {
52         set_errno(EINVAL);
53         return -1;
54     }
55     return lwip_bind(s, name, namelen);
56 }
57 
shutdown(int s,int how)58 int shutdown(int s, int how)
59 {
60     return lwip_shutdown(s, how);
61 }
62 
getpeername(int s,struct sockaddr * name,socklen_t * namelen)63 int getpeername(int s, struct sockaddr *name, socklen_t *namelen)
64 {
65     CHECK_NULL_PTR(name);
66     CHECK_NULL_PTR(namelen);
67     return lwip_getpeername(s, name, namelen);
68 }
69 
getsockname(int s,struct sockaddr * name,socklen_t * namelen)70 int getsockname(int s, struct sockaddr *name, socklen_t *namelen)
71 {
72     CHECK_NULL_PTR(name);
73     CHECK_NULL_PTR(namelen);
74     return lwip_getsockname(s, name, namelen);
75 }
76 
getsockopt(int s,int level,int optname,void * optval,socklen_t * optlen)77 int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen)
78 {
79     return lwip_getsockopt(s, level, optname, optval, optlen);
80 }
81 
setsockopt(int s,int level,int optname,const void * optval,socklen_t optlen)82 int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen)
83 {
84     return lwip_setsockopt(s, level, optname, optval, optlen);
85 }
86 
closesocket(int s)87 int closesocket(int s)
88 {
89     return lwip_close(s);
90 }
91 
connect(int s,const struct sockaddr * name,socklen_t namelen)92 int connect(int s, const struct sockaddr *name, socklen_t namelen)
93 {
94     CHECK_NULL_PTR(name);
95     if (namelen < sizeof(*name)) {
96         set_errno(EINVAL);
97         return -1;
98     }
99     return lwip_connect(s, name, namelen);
100 }
101 
listen(int s,int backlog)102 int listen(int s, int backlog)
103 {
104     return lwip_listen(s, backlog);
105 }
106 
recv(int s,void * mem,size_t len,int flags)107 ssize_t recv(int s, void *mem, size_t len, int flags)
108 {
109     CHECK_NULL_PTR(mem);
110     return lwip_recv(s, mem, len, flags);
111 }
112 
recvfrom(int s,void * mem,size_t len,int flags,struct sockaddr * from,socklen_t * fromlen)113 ssize_t recvfrom(int s, void *mem, size_t len, int flags,
114                  struct sockaddr *from, socklen_t *fromlen)
115 {
116     CHECK_NULL_PTR(mem);
117     return lwip_recvfrom(s, mem, len, flags, from, fromlen);
118 }
119 
recvmsg(int s,struct msghdr * message,int flags)120 ssize_t recvmsg(int s, struct msghdr *message, int flags)
121 {
122     CHECK_NULL_PTR(message);
123     if (message->msg_iovlen) {
124         CHECK_NULL_PTR(message->msg_iov);
125     }
126     return lwip_recvmsg(s, message, flags);
127 }
128 
send(int s,const void * dataptr,size_t size,int flags)129 ssize_t send(int s, const void *dataptr, size_t size, int flags)
130 {
131     CHECK_NULL_PTR(dataptr);
132     return  lwip_send(s, dataptr, size, flags);
133 }
134 
sendmsg(int s,const struct msghdr * message,int flags)135 ssize_t sendmsg(int s, const struct msghdr *message, int flags)
136 {
137     return lwip_sendmsg(s, message, flags);
138 }
139 
sendto(int s,const void * dataptr,size_t size,int flags,const struct sockaddr * to,socklen_t tolen)140 ssize_t sendto(int s, const void *dataptr, size_t size, int flags,
141                const struct sockaddr *to, socklen_t tolen)
142 {
143     CHECK_NULL_PTR(dataptr);
144     if (to && tolen < sizeof(*to)) {
145         set_errno(EINVAL);
146         return -1;
147     }
148     return lwip_sendto(s, dataptr, size, flags, to, tolen);
149 }
150 
socket(int domain,int type,int protocol)151 int socket(int domain, int type, int protocol)
152 {
153     return lwip_socket(domain, type, protocol);
154 }
155 
inet_ntop(int af,const void * src,char * dst,socklen_t size)156 const char *inet_ntop(int af, const void *src, char *dst, socklen_t size)
157 {
158     return lwip_inet_ntop(af, src, dst, size);
159 }
160 
inet_pton(int af,const char * src,void * dst)161 int inet_pton(int af, const char *src, void *dst)
162 {
163     return lwip_inet_pton(af, src, dst);
164 }
165 
166 #ifndef LWIP_INET_ADDR_FUNC
inet_addr(const char * cp)167 in_addr_t inet_addr(const char* cp)
168 {
169     return ipaddr_addr(cp);
170 }
171 #endif
172 
173 #ifndef LWIP_INET_ATON_FUNC
inet_aton(const char * cp,struct in_addr * inp)174 int inet_aton(const char* cp, struct in_addr* inp)
175 {
176     return ip4addr_aton(cp, (ip4_addr_t*)inp);
177 }
178 #endif
179 
180 #ifndef LWIP_INET_NTOA_FUNC
inet_ntoa(struct in_addr in)181 char* inet_ntoa(struct in_addr in)
182 {
183     return ip4addr_ntoa((const ip4_addr_t*)&(in));
184 }
185 #endif
186 
187 #endif /* !LWIP_COMPAT_SOCKETS */
188 #endif /* LOSCFG_NET_LWIP_SACK */