mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2025-12-16 15:25:53 +01:00
ot-br-posix: add recipe for an OpenThread Border Router
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> Signed-off-by: Khem Raj <raj.khem@gmail.com>
This commit is contained in:
parent
b9e440ead8
commit
bb6a70a463
|
|
@ -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
|
||||
|
||||
|
|
@ -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)
|
||||
{
|
||||
|
|
@ -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}/*"
|
||||
Loading…
Reference in New Issue
Block a user