Message ID | 20220407191438.3696227-1-stefan@datenfreihafen.org |
---|---|
State | New |
Headers | show |
Series | [meta-networking,v3,1/4] ot-br-posix: add recipe for an OpenThread Border Router | expand |
this fails with gcc ( especially with gcc12 ) https://errors.yoctoproject.org/Errors/Details/654559/ On Thu, Apr 7, 2022 at 12:15 PM Stefan Schmidt <stefan@datenfreihafen.org> wrote: > > From: Stefan Schmidt <stefan.schmidt@huawei.com> > > The OpenThread project is an open source implementation of the Thread > low-power mesh network protocol. In a Thread network devices can have > different roles, and of of these roles is a Border Router that allows a > Thread network to be connected with other IP networks. > > Ot-br-posix runs as a systemd service on a standard Linux system to > handle the connection to a Thread network. > > In terms of patches we need a fix to allow building on musl + clang > (CMSG_NXTHDR macro triggers a -Wsign-compare warning) and a systemd > unit file change is OE specific and avoids having service dependencies > implemented as pre exec hooks. > > Signed-off-by: Stefan Schmidt <stefan.schmidt@huawei.com> > --- > v3: > - Dropped the musl include fixed which was merged upstream and we bumped the > version > - Version bump also fixed a C++ deprecated-copy error I saw > - Included new patch to fix CMSG_NXTHDR macro usage on musl+clang > > ...ce.in-remove-pre-exec-hook-for-mdns-.patch | 35 +++++ > .../Turn-off-sign-compare-for-musl-libc.patch | 131 ++++++++++++++++++ > .../openthread/ot-br-posix_git.bb | 59 ++++++++ > 3 files changed, 225 insertions(+) > create mode 100644 meta-networking/recipes-connectivity/openthread/ot-br-posix/0001-otbr-agent.service.in-remove-pre-exec-hook-for-mdns-.patch > create mode 100644 meta-networking/recipes-connectivity/openthread/ot-br-posix/Turn-off-sign-compare-for-musl-libc.patch > create mode 100644 meta-networking/recipes-connectivity/openthread/ot-br-posix_git.bb > > diff --git a/meta-networking/recipes-connectivity/openthread/ot-br-posix/0001-otbr-agent.service.in-remove-pre-exec-hook-for-mdns-.patch b/meta-networking/recipes-connectivity/openthread/ot-br-posix/0001-otbr-agent.service.in-remove-pre-exec-hook-for-mdns-.patch > new file mode 100644 > index 000000000..250de4bdd > --- /dev/null > +++ b/meta-networking/recipes-connectivity/openthread/ot-br-posix/0001-otbr-agent.service.in-remove-pre-exec-hook-for-mdns-.patch > @@ -0,0 +1,35 @@ > +From ed60d4605b81c43b9ba9504a37835109c247c6f8 Mon Sep 17 00:00:00 2001 > +From: Stefan Schmidt <stefan.schmidt@huawei.com> > +Date: Fri, 1 Apr 2022 21:46:03 +0200 > +Subject: [PATCH] otbr-agent.service.in: remove pre exec hook for mdns service > + > +It uses the service command which is not available in all cases under > +Yocto/OE. The upstream project uses this mainly with Ubuntu and Raspian > +as testbeds. > + > +In our case we simply ensure that avahi-daemon is installed on the > +system inside the recipe. > + > +Upstream-Status: Inappropriate [OE specific] > + > +Signed-off-by: Stefan Schmidt <stefan.schmidt@huawei.com> > +--- > + src/agent/otbr-agent.service.in | 2 +- > + 1 file changed, 1 insertion(+), 1 deletion(-) > + > +diff --git a/src/agent/otbr-agent.service.in b/src/agent/otbr-agent.service.in > +index 8314121347..4c97869def 100644 > +--- a/src/agent/otbr-agent.service.in > ++++ b/src/agent/otbr-agent.service.in > +@@ -6,7 +6,7 @@ After=dbus.socket > + > + [Service] > + EnvironmentFile=-@CMAKE_INSTALL_FULL_SYSCONFDIR@/default/otbr-agent > +-@EXEC_START_PRE@ExecStart=@CMAKE_INSTALL_FULL_SBINDIR@/otbr-agent $OTBR_AGENT_OPTS > ++ExecStart=@CMAKE_INSTALL_FULL_SBINDIR@/otbr-agent $OTBR_AGENT_OPTS > + KillMode=mixed > + Restart=on-failure > + RestartSec=5 > +-- > +2.35.1 > + > diff --git a/meta-networking/recipes-connectivity/openthread/ot-br-posix/Turn-off-sign-compare-for-musl-libc.patch b/meta-networking/recipes-connectivity/openthread/ot-br-posix/Turn-off-sign-compare-for-musl-libc.patch > new file mode 100644 > index 000000000..df84550be > --- /dev/null > +++ b/meta-networking/recipes-connectivity/openthread/ot-br-posix/Turn-off-sign-compare-for-musl-libc.patch > @@ -0,0 +1,131 @@ > +From: Stefan Schmidt <stefan.schmidt@huawei.com> > +Subject: Turn off sign compare for musl libc > + > +When building with musl and clang the usage of CMSG_NXTHDR results in > +sign-compare error. Disable the check only in this specific part of the > +code with a #pragma. > + > +| /home/stefan/huawei/yocto-upstream/yoe/workspace/sources/ot-br-posix/third_party/openthread/repo/src/posix/platform/udp.cpp:147:28: fatal error: comparison of integers of different signs: 'unsigned long' and 'long' [-Wsign-compare] > +| cmsg = CMSG_NXTHDR(&msg, cmsg); > +| ^~~~~~~~~~~~~~~~~~~~~~~ > +| /home/stefan/huawei/yocto-upstream/yoe/build/tmp/work/cortexa57-yoe-linux-musl/ot-br-posix/0.3.0+git999-r0/recipe-sysroot/usr/include/sys/socket.h:358:44: note: expanded from macro 'CMSG_NXTHDR' > +| __CMSG_LEN(cmsg) + sizeof(struct cmsghdr) >= __MHDR_END(mhdr) - (unsigned char *)(cmsg) \ > +| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > +| 1 error generated. > + > +Idea and fix taken from > +recipes-devtools/breakpad/breakpad/0001-Turn-off-sign-compare-for-musl-libc.patch > +by Khem Raj. > + > +Upstream-Status: Inappropriate [OE specific] > + > +Signed-off-by: Stefan Schmidt <stefan.schmidt@huawei.com> > + > +diff --git a/src/backbone_router/nd_proxy.cpp b/src/backbone_router/nd_proxy.cpp > +index 7136878c3d..8a223c95c7 100644 > +--- a/src/backbone_router/nd_proxy.cpp > ++++ b/src/backbone_router/nd_proxy.cpp > +@@ -185,9 +185,18 @@ void NdProxyManager::ProcessMulticastNeighborSolicition() > + VerifyOrExit(icmp6header->icmp6_type == ND_NEIGHBOR_SOLICIT, error = OTBR_ERROR_PARSE); > + > + otbrLogDebug("NdProxyManager: Received ND-NS from %s", src.ToString().c_str()); > +- > ++#ifndef __GLIBC__ > ++ // In musl-libc, CMSG_NXTHDR typecasts char* to cmsghdr* which causes > ++ // clang to throw sign-compare warning. This is to suppress the warning > ++ // inline. > ++ #pragma clang diagnostic push > ++ #pragma clang diagnostic ignored "-Wsign-compare" > ++#endif > + for (cmsghdr = CMSG_FIRSTHDR(&msghdr); cmsghdr; cmsghdr = CMSG_NXTHDR(&msghdr, cmsghdr)) > +- { > ++#ifndef __GLIBC__ > ++ #pragma clang diagnostic pop > ++#endif > ++ { > + if (cmsghdr->cmsg_level != IPPROTO_IPV6) > + { > + continue; > +Submodule third_party/openthread/repo contains modified content > +diff --git a/third_party/openthread/repo/src/posix/platform/infra_if.cpp b/third_party/openthread/repo/src/posix/platform/infra_if.cpp > +index 9f93d2b1c..1ed40fe50 100644 > +--- a/third_party/openthread/repo/src/posix/platform/infra_if.cpp > ++++ b/third_party/openthread/repo/src/posix/platform/infra_if.cpp > +@@ -228,7 +228,17 @@ otError InfraNetif::SendIcmp6Nd(uint32_t aInfraIfIndex, > + packetInfo->ipi6_ifindex = mInfraIfIndex; > + > + // Per section 6.1.2 of RFC 4861, we need to send the ICMPv6 message with IP Hop Limit 255. > ++#ifndef __GLIBC__ > ++ // In musl-libc, CMSG_NXTHDR typecasts char* to cmsghdr* which causes > ++ // clang to throw sign-compare warning. This is to suppress the warning > ++ // inline. > ++ #pragma clang diagnostic push > ++ #pragma clang diagnostic ignored "-Wsign-compare" > ++#endif > + cmsgPointer = CMSG_NXTHDR(&msgHeader, cmsgPointer); > ++#ifndef __GLIBC__ > ++ #pragma clang diagnostic pop > ++#endif > + cmsgPointer->cmsg_level = IPPROTO_IPV6; > + cmsgPointer->cmsg_type = IPV6_HOPLIMIT; > + cmsgPointer->cmsg_len = CMSG_LEN(sizeof(hopLimit)); > +@@ -481,7 +491,17 @@ void InfraNetif::ReceiveIcmp6Message(void) > + > + bufferLength = static_cast<uint16_t>(rval); > + > ++#ifndef __GLIBC__ > ++ // In musl-libc, CMSG_NXTHDR typecasts char* to cmsghdr* which causes > ++ // clang to throw sign-compare warning. This is to suppress the warning > ++ // inline. > ++ #pragma clang diagnostic push > ++ #pragma clang diagnostic ignored "-Wsign-compare" > ++#endif > + for (cmh = CMSG_FIRSTHDR(&msg); cmh; cmh = CMSG_NXTHDR(&msg, cmh)) > ++#ifndef __GLIBC__ > ++ #pragma clang diagnostic pop > ++#endif > + { > + if (cmh->cmsg_level == IPPROTO_IPV6 && cmh->cmsg_type == IPV6_PKTINFO && > + cmh->cmsg_len == CMSG_LEN(sizeof(struct in6_pktinfo))) > +diff --git a/third_party/openthread/repo/src/posix/platform/udp.cpp b/third_party/openthread/repo/src/posix/platform/udp.cpp > +index b7aacc5fa..a814fea70 100644 > +--- a/third_party/openthread/repo/src/posix/platform/udp.cpp > ++++ b/third_party/openthread/repo/src/posix/platform/udp.cpp > +@@ -144,8 +144,18 @@ otError transmitPacket(int aFd, uint8_t *aPayload, uint16_t aLength, const otMes > + { > + struct in6_pktinfo pktinfo; > + > ++#ifndef __GLIBC__ > ++ // In musl-libc, CMSG_NXTHDR typecasts char* to cmsghdr* which causes > ++ // clang to throw sign-compare warning. This is to suppress the warning > ++ // inline. > ++ #pragma clang diagnostic push > ++ #pragma clang diagnostic ignored "-Wsign-compare" > ++#endif > + cmsg = CMSG_NXTHDR(&msg, cmsg); > +- cmsg->cmsg_level = IPPROTO_IPV6; > ++#ifndef __GLIBC__ > ++ #pragma clang diagnostic pop > ++#endif > ++ cmsg->cmsg_level = IPPROTO_IPV6; > + cmsg->cmsg_type = IPV6_PKTINFO; > + cmsg->cmsg_len = CMSG_LEN(sizeof(pktinfo)); > + > +@@ -200,7 +210,17 @@ otError receivePacket(int aFd, uint8_t *aPayload, uint16_t &aLength, otMessageIn > + VerifyOrExit(rval > 0, perror("recvmsg")); > + aLength = static_cast<uint16_t>(rval); > + > ++#ifndef __GLIBC__ > ++ // In musl-libc, CMSG_NXTHDR typecasts char* to cmsghdr* which causes > ++ // clang to throw sign-compare warning. This is to suppress the warning > ++ // inline. > ++ #pragma clang diagnostic push > ++ #pragma clang diagnostic ignored "-Wsign-compare" > ++#endif > + for (struct cmsghdr *cmsg = CMSG_FIRSTHDR(&msg); cmsg != nullptr; cmsg = CMSG_NXTHDR(&msg, cmsg)) > ++#ifndef __GLIBC__ > ++ #pragma clang diagnostic pop > ++#endif > + { > + if (cmsg->cmsg_level == IPPROTO_IPV6) > + { > diff --git a/meta-networking/recipes-connectivity/openthread/ot-br-posix_git.bb b/meta-networking/recipes-connectivity/openthread/ot-br-posix_git.bb > new file mode 100644 > index 000000000..d9f558d79 > --- /dev/null > +++ b/meta-networking/recipes-connectivity/openthread/ot-br-posix_git.bb > @@ -0,0 +1,59 @@ > +# SPDX-FileCopyrightText: Huawei Inc. > +# > +# SPDX-License-Identifier: Apache-2.0 > +SUMMARY = "OpenThread Border Router" > +SECTION = "net" > +LICENSE = "BSD-3-Clause & MIT" > +LIC_FILES_CHKSUM = "file://LICENSE;md5=87109e44b2fda96a8991f27684a7349c \ > + file://third_party/Simple-web-server/repo/LICENSE;md5=852b3f7f320b19f6431487b8b2fb1d74 \ > + file://third_party/cJSON/repo/LICENSE;md5=218947f77e8cb8e2fa02918dc41c50d0 \ > + file://third_party/http-parser/repo/LICENSE-MIT;md5=9bfa835d048c194ab30487af8d7b3778 \ > + file://third_party/openthread/repo/LICENSE;md5=543b6fe90ec5901a683320a36390c65f \ > + " > +DEPENDS = "autoconf-archive dbus readline avahi jsoncpp boost libnetfilter-queue" > +SRCREV = "ad6822257ffddbac295db97186e4ab449a2ed32a" > +PV = "0.3.0+git${SRCPV}" > + > +SRC_URI = "gitsm://github.com/openthread/ot-br-posix.git;protocol=https;branch=main \ > + file://0001-otbr-agent.service.in-remove-pre-exec-hook-for-mdns-.patch \ > + file://Turn-off-sign-compare-for-musl-libc.patch \ > + " > + > +S = "${WORKDIR}/git" > +SYSTEMD_SERVICE:${PN} = "otbr-agent.service" > + > +inherit pkgconfig cmake systemd > + > +EXTRA_OECMAKE = "-DBUILD_TESTING=OFF \ > + -DOTBR_DBUS=ON \ > + -DOTBR_REST=ON \ > + -DOTBR_WEB=OFF \ > + -DCMAKE_LIBRARY_PATH=${libdir} \ > + -DOTBR_MDNS=avahi \ > + -DOTBR_BACKBONE_ROUTER=ON \ > + -DOTBR_BORDER_ROUTING=ON \ > + -DOTBR_SRP_ADVERTISING_PROXY=ON \ > + -DOTBR_BORDER_AGENT=ON \ > + -DOT_SPINEL_RESET_CONNECTION=ON \ > + -DOT_TREL=ON \ > + -DOT_MLR=ON \ > + -DOT_SRP_SERVER=ON \ > + -DOT_ECDSA=ON \ > + -DOT_SERVICE=ON \ > + -DOTBR_DUA_ROUTING=ON \ > + -DOT_DUA=ON \ > + -DOT_BORDER_ROUTING_NAT64=ON \ > + -DOTBR_DNSSD_DISCOVERY_PROXY=ON \ > + -DOTBR_INFRA_IF_NAME=eth0 \ > + -DOTBR_NO_AUTO_ATTACH=1 \ > + -DOT_REFERENCE_DEVICE=ON \ > + -DOT_DHCP6_CLIENT=ON \ > + -DOT_DHCP6_SERVER=ON \ > + " > + > +RDEPENDS:${PN} = "iproute2 avahi-daemon" > + > +RCONFLICTS:${PN} = "ot-daemon" > + > +FILES:${PN} += "${systemd_unitdir}/*" > +FILES:${PN} += "${datadir}/*" > -- > 2.35.1 > > > -=-=-=-=-=-=-=-=-=-=-=- > Links: You receive all messages sent to this group. > View/Reply Online (#96455): https://lists.openembedded.org/g/openembedded-devel/message/96455 > Mute This Topic: https://lists.openembedded.org/mt/90320831/1997914 > Group Owner: openembedded-devel+owner@lists.openembedded.org > Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub [raj.khem@gmail.com] > -=-=-=-=-=-=-=-=-=-=-=- >
Hello Khem On 12.04.22 15:56, Khem Raj wrote: > this fails with gcc ( especially with gcc12 ) > > https://errors.yoctoproject.org/Errors/Details/654559/ I saw you fixed this already while I was enjoying my vacation. Thanks! I like the CFLAGS override for the specific clang musl case also a lot better! regards Stefan Schmidt
diff --git a/meta-networking/recipes-connectivity/openthread/ot-br-posix/0001-otbr-agent.service.in-remove-pre-exec-hook-for-mdns-.patch b/meta-networking/recipes-connectivity/openthread/ot-br-posix/0001-otbr-agent.service.in-remove-pre-exec-hook-for-mdns-.patch new file mode 100644 index 000000000..250de4bdd --- /dev/null +++ b/meta-networking/recipes-connectivity/openthread/ot-br-posix/0001-otbr-agent.service.in-remove-pre-exec-hook-for-mdns-.patch @@ -0,0 +1,35 @@ +From ed60d4605b81c43b9ba9504a37835109c247c6f8 Mon Sep 17 00:00:00 2001 +From: Stefan Schmidt <stefan.schmidt@huawei.com> +Date: Fri, 1 Apr 2022 21:46:03 +0200 +Subject: [PATCH] otbr-agent.service.in: remove pre exec hook for mdns service + +It uses the service command which is not available in all cases under +Yocto/OE. The upstream project uses this mainly with Ubuntu and Raspian +as testbeds. + +In our case we simply ensure that avahi-daemon is installed on the +system inside the recipe. + +Upstream-Status: Inappropriate [OE specific] + +Signed-off-by: Stefan Schmidt <stefan.schmidt@huawei.com> +--- + src/agent/otbr-agent.service.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/agent/otbr-agent.service.in b/src/agent/otbr-agent.service.in +index 8314121347..4c97869def 100644 +--- a/src/agent/otbr-agent.service.in ++++ b/src/agent/otbr-agent.service.in +@@ -6,7 +6,7 @@ After=dbus.socket + + [Service] + EnvironmentFile=-@CMAKE_INSTALL_FULL_SYSCONFDIR@/default/otbr-agent +-@EXEC_START_PRE@ExecStart=@CMAKE_INSTALL_FULL_SBINDIR@/otbr-agent $OTBR_AGENT_OPTS ++ExecStart=@CMAKE_INSTALL_FULL_SBINDIR@/otbr-agent $OTBR_AGENT_OPTS + KillMode=mixed + Restart=on-failure + RestartSec=5 +-- +2.35.1 + diff --git a/meta-networking/recipes-connectivity/openthread/ot-br-posix/Turn-off-sign-compare-for-musl-libc.patch b/meta-networking/recipes-connectivity/openthread/ot-br-posix/Turn-off-sign-compare-for-musl-libc.patch new file mode 100644 index 000000000..df84550be --- /dev/null +++ b/meta-networking/recipes-connectivity/openthread/ot-br-posix/Turn-off-sign-compare-for-musl-libc.patch @@ -0,0 +1,131 @@ +From: Stefan Schmidt <stefan.schmidt@huawei.com> +Subject: Turn off sign compare for musl libc + +When building with musl and clang the usage of CMSG_NXTHDR results in +sign-compare error. Disable the check only in this specific part of the +code with a #pragma. + +| /home/stefan/huawei/yocto-upstream/yoe/workspace/sources/ot-br-posix/third_party/openthread/repo/src/posix/platform/udp.cpp:147:28: fatal error: comparison of integers of different signs: 'unsigned long' and 'long' [-Wsign-compare] +| cmsg = CMSG_NXTHDR(&msg, cmsg); +| ^~~~~~~~~~~~~~~~~~~~~~~ +| /home/stefan/huawei/yocto-upstream/yoe/build/tmp/work/cortexa57-yoe-linux-musl/ot-br-posix/0.3.0+git999-r0/recipe-sysroot/usr/include/sys/socket.h:358:44: note: expanded from macro 'CMSG_NXTHDR' +| __CMSG_LEN(cmsg) + sizeof(struct cmsghdr) >= __MHDR_END(mhdr) - (unsigned char *)(cmsg) \ +| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +| 1 error generated. + +Idea and fix taken from +recipes-devtools/breakpad/breakpad/0001-Turn-off-sign-compare-for-musl-libc.patch +by Khem Raj. + +Upstream-Status: Inappropriate [OE specific] + +Signed-off-by: Stefan Schmidt <stefan.schmidt@huawei.com> + +diff --git a/src/backbone_router/nd_proxy.cpp b/src/backbone_router/nd_proxy.cpp +index 7136878c3d..8a223c95c7 100644 +--- a/src/backbone_router/nd_proxy.cpp ++++ b/src/backbone_router/nd_proxy.cpp +@@ -185,9 +185,18 @@ void NdProxyManager::ProcessMulticastNeighborSolicition() + VerifyOrExit(icmp6header->icmp6_type == ND_NEIGHBOR_SOLICIT, error = OTBR_ERROR_PARSE); + + otbrLogDebug("NdProxyManager: Received ND-NS from %s", src.ToString().c_str()); +- ++#ifndef __GLIBC__ ++ // In musl-libc, CMSG_NXTHDR typecasts char* to cmsghdr* which causes ++ // clang to throw sign-compare warning. This is to suppress the warning ++ // inline. ++ #pragma clang diagnostic push ++ #pragma clang diagnostic ignored "-Wsign-compare" ++#endif + for (cmsghdr = CMSG_FIRSTHDR(&msghdr); cmsghdr; cmsghdr = CMSG_NXTHDR(&msghdr, cmsghdr)) +- { ++#ifndef __GLIBC__ ++ #pragma clang diagnostic pop ++#endif ++ { + if (cmsghdr->cmsg_level != IPPROTO_IPV6) + { + continue; +Submodule third_party/openthread/repo contains modified content +diff --git a/third_party/openthread/repo/src/posix/platform/infra_if.cpp b/third_party/openthread/repo/src/posix/platform/infra_if.cpp +index 9f93d2b1c..1ed40fe50 100644 +--- a/third_party/openthread/repo/src/posix/platform/infra_if.cpp ++++ b/third_party/openthread/repo/src/posix/platform/infra_if.cpp +@@ -228,7 +228,17 @@ otError InfraNetif::SendIcmp6Nd(uint32_t aInfraIfIndex, + packetInfo->ipi6_ifindex = mInfraIfIndex; + + // Per section 6.1.2 of RFC 4861, we need to send the ICMPv6 message with IP Hop Limit 255. ++#ifndef __GLIBC__ ++ // In musl-libc, CMSG_NXTHDR typecasts char* to cmsghdr* which causes ++ // clang to throw sign-compare warning. This is to suppress the warning ++ // inline. ++ #pragma clang diagnostic push ++ #pragma clang diagnostic ignored "-Wsign-compare" ++#endif + cmsgPointer = CMSG_NXTHDR(&msgHeader, cmsgPointer); ++#ifndef __GLIBC__ ++ #pragma clang diagnostic pop ++#endif + cmsgPointer->cmsg_level = IPPROTO_IPV6; + cmsgPointer->cmsg_type = IPV6_HOPLIMIT; + cmsgPointer->cmsg_len = CMSG_LEN(sizeof(hopLimit)); +@@ -481,7 +491,17 @@ void InfraNetif::ReceiveIcmp6Message(void) + + bufferLength = static_cast<uint16_t>(rval); + ++#ifndef __GLIBC__ ++ // In musl-libc, CMSG_NXTHDR typecasts char* to cmsghdr* which causes ++ // clang to throw sign-compare warning. This is to suppress the warning ++ // inline. ++ #pragma clang diagnostic push ++ #pragma clang diagnostic ignored "-Wsign-compare" ++#endif + for (cmh = CMSG_FIRSTHDR(&msg); cmh; cmh = CMSG_NXTHDR(&msg, cmh)) ++#ifndef __GLIBC__ ++ #pragma clang diagnostic pop ++#endif + { + if (cmh->cmsg_level == IPPROTO_IPV6 && cmh->cmsg_type == IPV6_PKTINFO && + cmh->cmsg_len == CMSG_LEN(sizeof(struct in6_pktinfo))) +diff --git a/third_party/openthread/repo/src/posix/platform/udp.cpp b/third_party/openthread/repo/src/posix/platform/udp.cpp +index b7aacc5fa..a814fea70 100644 +--- a/third_party/openthread/repo/src/posix/platform/udp.cpp ++++ b/third_party/openthread/repo/src/posix/platform/udp.cpp +@@ -144,8 +144,18 @@ otError transmitPacket(int aFd, uint8_t *aPayload, uint16_t aLength, const otMes + { + struct in6_pktinfo pktinfo; + ++#ifndef __GLIBC__ ++ // In musl-libc, CMSG_NXTHDR typecasts char* to cmsghdr* which causes ++ // clang to throw sign-compare warning. This is to suppress the warning ++ // inline. ++ #pragma clang diagnostic push ++ #pragma clang diagnostic ignored "-Wsign-compare" ++#endif + cmsg = CMSG_NXTHDR(&msg, cmsg); +- cmsg->cmsg_level = IPPROTO_IPV6; ++#ifndef __GLIBC__ ++ #pragma clang diagnostic pop ++#endif ++ cmsg->cmsg_level = IPPROTO_IPV6; + cmsg->cmsg_type = IPV6_PKTINFO; + cmsg->cmsg_len = CMSG_LEN(sizeof(pktinfo)); + +@@ -200,7 +210,17 @@ otError receivePacket(int aFd, uint8_t *aPayload, uint16_t &aLength, otMessageIn + VerifyOrExit(rval > 0, perror("recvmsg")); + aLength = static_cast<uint16_t>(rval); + ++#ifndef __GLIBC__ ++ // In musl-libc, CMSG_NXTHDR typecasts char* to cmsghdr* which causes ++ // clang to throw sign-compare warning. This is to suppress the warning ++ // inline. ++ #pragma clang diagnostic push ++ #pragma clang diagnostic ignored "-Wsign-compare" ++#endif + for (struct cmsghdr *cmsg = CMSG_FIRSTHDR(&msg); cmsg != nullptr; cmsg = CMSG_NXTHDR(&msg, cmsg)) ++#ifndef __GLIBC__ ++ #pragma clang diagnostic pop ++#endif + { + if (cmsg->cmsg_level == IPPROTO_IPV6) + { diff --git a/meta-networking/recipes-connectivity/openthread/ot-br-posix_git.bb b/meta-networking/recipes-connectivity/openthread/ot-br-posix_git.bb new file mode 100644 index 000000000..d9f558d79 --- /dev/null +++ b/meta-networking/recipes-connectivity/openthread/ot-br-posix_git.bb @@ -0,0 +1,59 @@ +# SPDX-FileCopyrightText: Huawei Inc. +# +# SPDX-License-Identifier: Apache-2.0 +SUMMARY = "OpenThread Border Router" +SECTION = "net" +LICENSE = "BSD-3-Clause & MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=87109e44b2fda96a8991f27684a7349c \ + file://third_party/Simple-web-server/repo/LICENSE;md5=852b3f7f320b19f6431487b8b2fb1d74 \ + file://third_party/cJSON/repo/LICENSE;md5=218947f77e8cb8e2fa02918dc41c50d0 \ + file://third_party/http-parser/repo/LICENSE-MIT;md5=9bfa835d048c194ab30487af8d7b3778 \ + file://third_party/openthread/repo/LICENSE;md5=543b6fe90ec5901a683320a36390c65f \ + " +DEPENDS = "autoconf-archive dbus readline avahi jsoncpp boost libnetfilter-queue" +SRCREV = "ad6822257ffddbac295db97186e4ab449a2ed32a" +PV = "0.3.0+git${SRCPV}" + +SRC_URI = "gitsm://github.com/openthread/ot-br-posix.git;protocol=https;branch=main \ + file://0001-otbr-agent.service.in-remove-pre-exec-hook-for-mdns-.patch \ + file://Turn-off-sign-compare-for-musl-libc.patch \ + " + +S = "${WORKDIR}/git" +SYSTEMD_SERVICE:${PN} = "otbr-agent.service" + +inherit pkgconfig cmake systemd + +EXTRA_OECMAKE = "-DBUILD_TESTING=OFF \ + -DOTBR_DBUS=ON \ + -DOTBR_REST=ON \ + -DOTBR_WEB=OFF \ + -DCMAKE_LIBRARY_PATH=${libdir} \ + -DOTBR_MDNS=avahi \ + -DOTBR_BACKBONE_ROUTER=ON \ + -DOTBR_BORDER_ROUTING=ON \ + -DOTBR_SRP_ADVERTISING_PROXY=ON \ + -DOTBR_BORDER_AGENT=ON \ + -DOT_SPINEL_RESET_CONNECTION=ON \ + -DOT_TREL=ON \ + -DOT_MLR=ON \ + -DOT_SRP_SERVER=ON \ + -DOT_ECDSA=ON \ + -DOT_SERVICE=ON \ + -DOTBR_DUA_ROUTING=ON \ + -DOT_DUA=ON \ + -DOT_BORDER_ROUTING_NAT64=ON \ + -DOTBR_DNSSD_DISCOVERY_PROXY=ON \ + -DOTBR_INFRA_IF_NAME=eth0 \ + -DOTBR_NO_AUTO_ATTACH=1 \ + -DOT_REFERENCE_DEVICE=ON \ + -DOT_DHCP6_CLIENT=ON \ + -DOT_DHCP6_SERVER=ON \ + " + +RDEPENDS:${PN} = "iproute2 avahi-daemon" + +RCONFLICTS:${PN} = "ot-daemon" + +FILES:${PN} += "${systemd_unitdir}/*" +FILES:${PN} += "${datadir}/*"