All of lore.kernel.org
 help / color / mirror / Atom feed
* [meta-networking][PATCH v3 1/4] ot-br-posix: add recipe for an OpenThread Border Router
@ 2022-04-07 19:14 Stefan Schmidt
  2022-04-07 19:14 ` [meta-networking][PATCH v3 2/4] ot-daemon: add recipe for OpenThread daemon Stefan Schmidt
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Stefan Schmidt @ 2022-04-07 19:14 UTC (permalink / raw)
  To: openembedded-devel; +Cc: Stefan Schmidt, Stefan Schmidt

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



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [meta-networking][PATCH v3 2/4] ot-daemon: add recipe for OpenThread daemon
  2022-04-07 19:14 [meta-networking][PATCH v3 1/4] ot-br-posix: add recipe for an OpenThread Border Router Stefan Schmidt
@ 2022-04-07 19:14 ` Stefan Schmidt
  2022-04-07 19:14 ` [meta-networking][PATCH v3 3/4] wpantund: add new recipe Stefan Schmidt
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Stefan Schmidt @ 2022-04-07 19:14 UTC (permalink / raw)
  To: openembedded-devel; +Cc: Stefan Schmidt, Stefan Schmidt

From: Stefan Schmidt <stefan.schmidt@huawei.com>

The OpenThread daemon allows Linuxes devices to participate in a Thread
mesh network without acting as a full border router. The device
participates like any other child or router devices within the network.

This same repo is used for range of different modes to run the
OpenThread code. From bare metal over vendor SDKs to posix platforms.
For this recipe the focus is on the Linux posix implementation and we do
not pull in all the git submodules on purpose.

There are openthread enabled recipes in meta-zephyr for people who want
to also use OpenThread on MCU based platforms on top of Zephyr.

Signed-off-by: Stefan Schmidt <stefan.schmidt@huawei.com>
---
 .../openthread/ot-daemon_git.bb               | 27 +++++++++++++++++++
 1 file changed, 27 insertions(+)
 create mode 100644 meta-networking/recipes-connectivity/openthread/ot-daemon_git.bb

diff --git a/meta-networking/recipes-connectivity/openthread/ot-daemon_git.bb b/meta-networking/recipes-connectivity/openthread/ot-daemon_git.bb
new file mode 100644
index 000000000..f3f4c70fa
--- /dev/null
+++ b/meta-networking/recipes-connectivity/openthread/ot-daemon_git.bb
@@ -0,0 +1,27 @@
+# SPDX-FileCopyrightText: Huawei Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+SUMMARY = "OpenThread Daemon is an OpenThread POSIX build mode that runs OpenThread as a service."
+SECTION = "net"
+LICENSE = "BSD-3-Clause & Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=543b6fe90ec5901a683320a36390c65f \
+                    file://third_party/mbedtls/repo/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57 \
+                    "
+DEPENDS = "readline"
+SRCREV = "7dfde1f12923f03c9680be4d838b94b7a2320324"
+PV = "0.1+git${SRCPV}"
+
+SRC_URI = "git://github.com/openthread/openthread.git;protocol=https;branch=main \
+           "
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+EXTRA_OECMAKE = "-DOT_DAEMON=ON \
+                 -DOT_SPINEL_RESET_CONNECTION=ON \
+                 -DOT_THREAD_VERSION=1.2 \
+                 -DOT_COVERAGE=OFF \
+                 -DOT_PLATFORM=posix \
+                 -DCMAKE_BUILD_TYPE=Release \
+                 "
-- 
2.35.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [meta-networking][PATCH v3 3/4] wpantund: add new recipe
  2022-04-07 19:14 [meta-networking][PATCH v3 1/4] ot-br-posix: add recipe for an OpenThread Border Router Stefan Schmidt
  2022-04-07 19:14 ` [meta-networking][PATCH v3 2/4] ot-daemon: add recipe for OpenThread daemon Stefan Schmidt
@ 2022-04-07 19:14 ` Stefan Schmidt
  2022-04-07 19:14 ` [meta-networking][PATCH v3 4/4] MAINTAINERS: add entry for OpenThread Stefan Schmidt
  2022-04-12 13:56 ` [oe] [meta-networking][PATCH v3 1/4] ot-br-posix: add recipe for an OpenThread Border Router Khem Raj
  3 siblings, 0 replies; 6+ messages in thread
From: Stefan Schmidt @ 2022-04-07 19:14 UTC (permalink / raw)
  To: openembedded-devel; +Cc: Stefan Schmidt, Stefan Schmidt

From: Stefan Schmidt <stefan.schmidt@huawei.com>

Wpantund is part of the OpenThread project. It is used in a scenario
where the Thread radio operates as a network co-processor (NCP) that is
connected over SPI/UART/USB to the host.

The project itself is in maintenance-only mode right now as the NCP
architecture has been replaced with radio co-processor (RCP) which is
implemented directly in openthread and ot-br-posix. None the less there
might still be project and products out there using it.

Signed-off-by: Stefan Schmidt <stefan.schmidt@huawei.com>
---
v3:
- Add additional CVE to ignore list that has a fix in the un-released git
  version

 .../openthread/wpantund_git.bb                | 32 +++++++++++++++++++
 1 file changed, 32 insertions(+)
 create mode 100644 meta-networking/recipes-connectivity/openthread/wpantund_git.bb

diff --git a/meta-networking/recipes-connectivity/openthread/wpantund_git.bb b/meta-networking/recipes-connectivity/openthread/wpantund_git.bb
new file mode 100644
index 000000000..bb444d04f
--- /dev/null
+++ b/meta-networking/recipes-connectivity/openthread/wpantund_git.bb
@@ -0,0 +1,32 @@
+# SPDX-FileCopyrightText: Huawei Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+SUMMARY = "wpantund, Userspace WPAN Network Daemon"
+SECTION = "net"
+LICENSE = "Apache-2.0 & MIT & BSL-1.0 & BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e7820bc7f7d1638a6b54fc2e8d7fb103 \
+                    file://third_party/assert-macros/LICENSE;md5=cbf35ecdc8161026afe4da2906fab204 \
+                    file://third_party/boost/LICENSE;md5=e4224ccaecb14d942c71d31bef20d78c \
+                    file://third_party/fgetln/LICENSE;md5=389e03d2254ecad45d0d9bbdefef7129 \
+                    file://third_party/openthread/LICENSE;md5=543b6fe90ec5901a683320a36390c65f \
+                    file://third_party/pt/LICENSE;md5=dcd598b69cad786beea33da7b1ae14b7 \
+                    "
+DEPENDS = "autoconf-archive dbus readline"
+SRCREV = "0fb1f57e4224e2df3e630e146702bfcf63fbf07a"
+PV = "0.07.01+git${SRCPV}"
+
+SRC_URI = "gitsm://github.com/openthread/wpantund.git;protocol=https;branch=master \
+           "
+
+S = "${WORKDIR}/git"
+
+inherit pkgconfig perlnative autotools
+
+# CVE-2020-8916 has been fixed in commit
+# 3f108441e23e033b936e85be5b6877dd0a1fbf1c which is included in the SRCREV
+# CVE-2021-33889 has been fixed in commit
+# a8f3f761f6753b567d1e5ad22cbe6b0ceb6f2649 which is included in the SRCREV
+# There has not been a wpantund release as of yet that includes these fixes.
+# That means cve-check can not match them. Once a new release comes we can
+# remove the ignore statement.
+CVE_CHECK_IGNORE = "CVE-2020-8916 CVE-2021-33889"
-- 
2.35.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [meta-networking][PATCH v3 4/4] MAINTAINERS: add entry for OpenThread
  2022-04-07 19:14 [meta-networking][PATCH v3 1/4] ot-br-posix: add recipe for an OpenThread Border Router Stefan Schmidt
  2022-04-07 19:14 ` [meta-networking][PATCH v3 2/4] ot-daemon: add recipe for OpenThread daemon Stefan Schmidt
  2022-04-07 19:14 ` [meta-networking][PATCH v3 3/4] wpantund: add new recipe Stefan Schmidt
@ 2022-04-07 19:14 ` Stefan Schmidt
  2022-04-12 13:56 ` [oe] [meta-networking][PATCH v3 1/4] ot-br-posix: add recipe for an OpenThread Border Router Khem Raj
  3 siblings, 0 replies; 6+ messages in thread
From: Stefan Schmidt @ 2022-04-07 19:14 UTC (permalink / raw)
  To: openembedded-devel; +Cc: Stefan Schmidt, Stefan Schmidt

From: Stefan Schmidt <stefan.schmidt@huawei.com>

No need to put the pressure of this also on Khem. I am actively working
on this for Oniro and will support this work also upstream here.

Signed-off-by: Stefan Schmidt <stefan.schmidt@huawei.com>
---
 meta-networking/MAINTAINERS | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/meta-networking/MAINTAINERS b/meta-networking/MAINTAINERS
index 77e90668c..ce53ec471 100644
--- a/meta-networking/MAINTAINERS
+++ b/meta-networking/MAINTAINERS
@@ -37,3 +37,7 @@ F:      recipes-*
 NETKIT
 M:      Armin Kuster <akuster808@gmail.com>
 F:      recipes-netkit
+
+OPENTHREAD
+M:      Stefan Schmidt <stefan@datenfreihafen.org>
+F:      recipes-connectivity/openthread/
-- 
2.35.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [oe] [meta-networking][PATCH v3 1/4] ot-br-posix: add recipe for an OpenThread Border Router
  2022-04-07 19:14 [meta-networking][PATCH v3 1/4] ot-br-posix: add recipe for an OpenThread Border Router Stefan Schmidt
                   ` (2 preceding siblings ...)
  2022-04-07 19:14 ` [meta-networking][PATCH v3 4/4] MAINTAINERS: add entry for OpenThread Stefan Schmidt
@ 2022-04-12 13:56 ` Khem Raj
  2022-04-19 10:33   ` Stefan Schmidt
  3 siblings, 1 reply; 6+ messages in thread
From: Khem Raj @ 2022-04-12 13:56 UTC (permalink / raw)
  To: Stefan Schmidt; +Cc: openembeded-devel, Stefan Schmidt

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]
> -=-=-=-=-=-=-=-=-=-=-=-
>


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [oe] [meta-networking][PATCH v3 1/4] ot-br-posix: add recipe for an OpenThread Border Router
  2022-04-12 13:56 ` [oe] [meta-networking][PATCH v3 1/4] ot-br-posix: add recipe for an OpenThread Border Router Khem Raj
@ 2022-04-19 10:33   ` Stefan Schmidt
  0 siblings, 0 replies; 6+ messages in thread
From: Stefan Schmidt @ 2022-04-19 10:33 UTC (permalink / raw)
  To: Khem Raj; +Cc: openembeded-devel, Stefan Schmidt


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


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-04-19 14:22 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-07 19:14 [meta-networking][PATCH v3 1/4] ot-br-posix: add recipe for an OpenThread Border Router Stefan Schmidt
2022-04-07 19:14 ` [meta-networking][PATCH v3 2/4] ot-daemon: add recipe for OpenThread daemon Stefan Schmidt
2022-04-07 19:14 ` [meta-networking][PATCH v3 3/4] wpantund: add new recipe Stefan Schmidt
2022-04-07 19:14 ` [meta-networking][PATCH v3 4/4] MAINTAINERS: add entry for OpenThread Stefan Schmidt
2022-04-12 13:56 ` [oe] [meta-networking][PATCH v3 1/4] ot-br-posix: add recipe for an OpenThread Border Router Khem Raj
2022-04-19 10:33   ` Stefan Schmidt

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.