All of lore.kernel.org
 help / color / mirror / Atom feed
From: Khem Raj <raj.khem@gmail.com>
To: Stefan Schmidt <stefan@datenfreihafen.org>
Cc: openembeded-devel <openembedded-devel@lists.openembedded.org>,
	Stefan Schmidt <stefan.schmidt@huawei.com>
Subject: Re: [oe] [meta-networking][PATCH v3 1/4] ot-br-posix: add recipe for an OpenThread Border Router
Date: Tue, 12 Apr 2022 06:56:18 -0700	[thread overview]
Message-ID: <CAMKF1sqT2ZBRU7q9ojY-Jq_PAJGEH5ntfU_ZbEixNRYFi3btvA@mail.gmail.com> (raw)
In-Reply-To: <20220407191438.3696227-1-stefan@datenfreihafen.org>

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


  parent reply	other threads:[~2022-04-12 16:46 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 ` Khem Raj [this message]
2022-04-19 10:33   ` [oe] [meta-networking][PATCH v3 1/4] ot-br-posix: add recipe for an OpenThread Border Router Stefan Schmidt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAMKF1sqT2ZBRU7q9ojY-Jq_PAJGEH5ntfU_ZbEixNRYFi3btvA@mail.gmail.com \
    --to=raj.khem@gmail.com \
    --cc=openembedded-devel@lists.openembedded.org \
    --cc=stefan.schmidt@huawei.com \
    --cc=stefan@datenfreihafen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.