diff --git a/BUILD.gn b/BUILD.gn index e1518d39..240aedb5 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -36,6 +36,8 @@ declare_args() { enable_ohos_kernel_liteos_m_backtrace = true enable_ohos_kernel_liteos_m_test = false enable_ohos_kernel_liteos_m_pm = true + enable_ohos_kernel_liteos_m_lwip = false + ohos_kernel_liteos_m_lwip_path = "components/net/lwip-2.1:lwip" } group("kernel") { @@ -68,4 +70,7 @@ group("kernel") { if (enable_ohos_kernel_liteos_m_test == true) { deps += [ "testsuits:test" ] } + if (enable_ohos_kernel_liteos_m_lwip == true) { + deps += [ ohos_kernel_liteos_m_lwip_path ] + } } diff --git a/components/net/lwip-2.1/BUILD.gn b/components/net/lwip-2.1/BUILD.gn new file mode 100644 index 00000000..ddd7ac73 --- /dev/null +++ b/components/net/lwip-2.1/BUILD.gn @@ -0,0 +1,50 @@ +# Copyright (c) 2021-2021 Huawei Device Co., Ltd. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this list of +# conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, this list +# of conditions and the following disclaimer in the documentation and/or other materials +# provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be used +# to endorse or promote products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import("lwip_porting.gni") +import("//third_party/lwip/lwip.gni") + +config("lwip_depends") { + defines = [ "_BSD_SOURCE = 1" ] +} + +static_library("lwip") { + include_dirs = [ + "//kernel/liteos_m/kal/posix/include", + "//kernel/liteos_m/kernel/arch/include", + ] + + include_dirs += LWIP_PORTING_INCLUDE_DIRS + include_dirs += LWIP_INCLUDE_DIRS + + sources = LWIP_PORTING_FILES + LWIPNOAPPSFILES + + configs += [ ":lwip_depends" ] + + deps = [ "//kernel/liteos_m/kal/posix" ] +} \ No newline at end of file diff --git a/components/net/lwip-2.1/lwip_porting.gni b/components/net/lwip-2.1/lwip_porting.gni new file mode 100644 index 00000000..a57caa09 --- /dev/null +++ b/components/net/lwip-2.1/lwip_porting.gni @@ -0,0 +1,41 @@ +# Copyright (c) 2021-2021 Huawei Device Co., Ltd. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this list of +# conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, this list +# of conditions and the following disclaimer in the documentation and/or other materials +# provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be used +# to endorse or promote products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +LWIP_PORTING_DIR = "//kernel/liteos_m/components/net/lwip-2.1" + +LWIP_PORTING_INCLUDE_DIRS = [ "$LWIP_PORTING_DIR/porting/include" ] + +LWIP_PORTING_FILES = [ + "$LWIP_PORTING_DIR/porting/src/driverif.c", + "$LWIP_PORTING_DIR/porting/src/lwip_init.c", + "$LWIP_PORTING_DIR/porting/src/netdb_porting.c", + "$LWIP_PORTING_DIR/porting/src/sockets_porting.c", + "$LWIP_PORTING_DIR/porting/src/sys_arch.c", + + "$LWIP_PORTING_DIR/enhancement/src/fixme.c", +] \ No newline at end of file diff --git a/components/net/lwip-2.1/porting/src/netdb_porting.c b/components/net/lwip-2.1/porting/src/netdb_porting.c index 804d7e07..292e051c 100644 --- a/components/net/lwip-2.1/porting/src/netdb_porting.c +++ b/components/net/lwip-2.1/porting/src/netdb_porting.c @@ -31,10 +31,31 @@ #include "lwip/netdb.h" +#if LWIP_DNS && LWIP_SOCKET + struct hostent *gethostbyname(const char *name) { if (name == NULL) { return NULL; } return lwip_gethostbyname(name); -} \ No newline at end of file +} + +int gethostbyname_r(const char *name, struct hostent *ret, char *buf, size_t buflen, struct hostent **result, + int *h_errnop) +{ + return lwip_gethostbyname_r(name, ret, buf, buflen, result, h_errnop); +} + +void freeaddrinfo(struct addrinfo *res) +{ + lwip_freeaddrinfo(res); +} + +int getaddrinfo(const char *restrict nodename, const char *restrict servname, const struct addrinfo *restrict hints, + struct addrinfo **restrict res) +{ + return lwip_getaddrinfo(nodename, servname, hints, res); +} + +#endif \ No newline at end of file diff --git a/components/net/lwip-2.1/porting/src/sockets_porting.c b/components/net/lwip-2.1/porting/src/sockets_porting.c index 32deb8fd..bcecdf98 100644 --- a/components/net/lwip-2.1/porting/src/sockets_porting.c +++ b/components/net/lwip-2.1/porting/src/sockets_porting.c @@ -33,6 +33,7 @@ #include #if !LWIP_COMPAT_SOCKETS +#if LWIP_SOCKET #define CHECK_NULL_PTR(ptr) do { if ((ptr) == NULL) { set_errno(EFAULT); return -1; } } while (0) @@ -178,4 +179,10 @@ int poll(struct pollfd *fds, nfds_t nfds, int timeout) } #endif +unsigned int if_nametoindex(const char *ifname) +{ + return lwip_if_nametoindex(ifname); +} + +#endif #endif /* !LWIP_COMPAT_SOCKETS */ \ No newline at end of file diff --git a/components/net/lwip-2.1/porting/src/sys_arch.c b/components/net/lwip-2.1/porting/src/sys_arch.c index 82dadc43..832e4309 100644 --- a/components/net/lwip-2.1/porting/src/sys_arch.c +++ b/components/net/lwip-2.1/porting/src/sys_arch.c @@ -180,7 +180,10 @@ err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg) return ERR_ARG; } -err_t sys_mbox_trypost_fromisr(sys_mbox_t *mbox, void *msg); +err_t sys_mbox_trypost_fromisr(sys_mbox_t *mbox, void *msg) +{ + return ERR_ARG; +} u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeoutMs) {