Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add mdnsresponder package and update openthread-br to use it by default #25

Merged
merged 2 commits into from
Nov 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .config.ci
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ CONFIG_PACKAGE_wpad-basic-openssl=n
CONFIG_PACKAGE_wpad-basic-wolfssl=n
CONFIG_PACKAGE_wpad-openssl=y
CONFIG_PACKAGE_matter-netman=y
CONFIG_PACKAGE_mdnsresponder=y
CONFIG_PACKAGE_openthread-br=y
171 changes: 171 additions & 0 deletions third_party/mdnsresponder/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
# Copyright (c) 2024 Apple Inc.
# Copyright (c) 2024 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

include $(TOPDIR)/rules.mk

PKG_NAME:=mDNSResponder
PKG_VERSION:=2200.140.11
PKG_RELEASE:=1

PKG_SOURCE:=mDNSResponder-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/apple-oss-distributions/mDNSResponder/archive/refs/tags
PKG_HASH:=f52963497e8baf650e6640fb5769ffbad7c6e45eea833dec2a0ca86a3ca55928

# Use local source dir for development
# USE_SOURCE_DIR:=$(HOME)/workspace/mDNSResponder

PKG_LICENSE:=Apache-2.0
PKG_LICENSE_FILES:=LICENSE

PKG_BUILD_PARALLEL:=1
PKG_CONFIG_DEPENDS:=CONFIG_MDNSD_DEBUG_LOGGING

include $(INCLUDE_DIR)/package.mk

define Package/mdnsresponder/Default
SECTION:=net
CATEGORY:=Network
SUBMENU:=IP Addresses and Names
URL:=https://github.com/apple-oss-distributions/mDNSResponder
endef

define Package/mdnsresponder/Default/description
The mDNS Responder suite consists of a set of daemons, tools, and
libraries that implement Multicast DNS and DNS-SD service discovery.
endef


define Package/mdnsresponder
$(call Package/mdnsresponder/Default)
TITLE:=mDNS Responder suite (meta package)
DEPENDS:=+mdnsd +libdnssd +mdns-utils
endef

define Package/mdnsresponder/description
$(call Package/mdnsresponder/Default/description)

This meta-package selects all packages in the mDNS Responder suite.
endef


define Package/mdnsd
$(call Package/mdnsresponder/Default)
TITLE:=mDNS Responder daemon
MENU:=1
endef

define Package/mdnsd/config
if PACKAGE_mdnsd
config MDNSD_DEBUG_LOGGING
bool "Enable debug logging"
default n
endif
endef

define Package/mdnsd/description
$(call Package/mdnsresponder/Default/description)

The mDNS Responder daemon serves both as resolver for information
published using multicast DNS (mDNS), and as a publisher of mDNS
information.
endef


define Package/libdnssd
$(call Package/mdnsresponder/Default)
SECTION:=libs
CATEGORY:=Libraries
SUBMENU:=
TITLE:=mDNS Responder DNS-SD client library
CONFLICTS:=libavahi-compat-libdnssd
DEPENDS:=+mdnsd
endef

define Package/libdnssd/description
The DNS-SD client library allows applications to make use of the
functionality provided by mDNSResponder. This includes publishing,
browsing, and resolving of DNS-SD services.
endef


define Package/mdns-utils
$(call Package/mdnsresponder/Default)
TITLE:=mDNS Responder utilities
DEPENDS:=+libdnssd
endef

define Package/mdns-utils/description
This package contains the dns-sd utility.
endef


# The GitHub archive tarball has the wrong prefix due to the tag including the package name
TAR_CMD=$(HOST_TAR) -C $(1) --strip-components 1 $(TAR_OPTIONS)

# Build with os=linux-uclibc ("not glibc") because musl does not support nss.
# Build without debug options or stripping, both are handled via the OpenWrt build system.
# Use gcc as the linker front-end so libssp gets linked automatically if needed.
MAKE_PATH:=mDNSPosix
OUT_DIR:=$(PKG_BUILD_DIR)/$(MAKE_PATH)/build/prod
CLIENTS_OUT_DIR:=$(PKG_BUILD_DIR)/Clients/build
MAKE_FLAGS+=os=linux-uclibc tls=no CFLAGS_DEBUGGING= LD="$(TARGET_CC)" STRIP=:
TARGET_CFLAGS+=\
-DmDNSResponderVersion=$(PKG_VERSION)-$(PKG_RELEASE) \
-DMDNS_VERSIONSTR_NODTS \
-DUNICAST_DISABLED \
-DMDNS_DEBUGMSGS=$(if CONFIG_MDNSD_DEBUG_LOGGING,1,0)

# No configure step as such, but make clean on config changes
define Build/Configure
[ -f $(STAMP_CONFIGURED) ] || $(MAKE) -C $(PKG_BUILD_DIR)/$(MAKE_PATH) clean
endef

define Build/Compile
$(call Build/Compile/Default,Daemon libdns_sd Clients)
endef

define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include $(1)/usr/lib
$(CP) $(PKG_BUILD_DIR)/mDNSShared/dns_sd.h $(1)/usr/include/
$(CP) $(OUT_DIR)/libdns_sd.so $(1)/usr/lib/
endef

# make install is not suitable for a cross-compilation environment,
# pick up files directly from the build directory instead.
Build/Install:=$(empty)


Package/mdnsresponder/install:=$(empty)

define Package/mdnsd/install
$(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/init.d
$(INSTALL_BIN) $(OUT_DIR)/mdnsd $(1)/usr/sbin
$(INSTALL_BIN) ./files/mdnsd.init $(1)/etc/init.d/mdnsd
endef

define Package/libdnssd/install
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(OUT_DIR)/libdns_sd.so $(1)/usr/lib/
endef

define Package/mdns-utils/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(CLIENTS_OUT_DIR)/dns-sd $(1)/usr/bin
endef

$(eval $(call BuildPackage,mdnsresponder))
$(eval $(call BuildPackage,mdnsd))
$(eval $(call BuildPackage,libdnssd))
$(eval $(call BuildPackage,mdns-utils))
28 changes: 28 additions & 0 deletions third_party/mdnsresponder/files/mdnsd.init
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/bin/sh /etc/rc.common

# Copyright (c) 2024 Apple Inc.
# Copyright (c) 2024 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

START=50

USE_PROCD=1
PROG=/usr/sbin/mdnsd

start_service() {
procd_open_instance
procd_set_param command "$PROG"
procd_set_param respawn
procd_close_instance
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
From a3a7a5aed8bab31a9b9bc7f564d062e143a83d71 Mon Sep 17 00:00:00 2001
From: Karsten Sperling <[email protected]>
Date: Tue, 24 Sep 2024 19:47:40 +1200
Subject: [PATCH] mDNSResponderVersion and MDNS_VERSIONSTR_NODTS handling

---
mDNSPosix/PosixDaemon.c | 18 +++++++++++++-----
mDNSShared/dnssd_clientlib.c | 6 +++++-
2 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/mDNSPosix/PosixDaemon.c b/mDNSPosix/PosixDaemon.c
index 9a0f692..beda41e 100644
--- a/mDNSPosix/PosixDaemon.c
+++ b/mDNSPosix/PosixDaemon.c
@@ -270,10 +270,18 @@ asm (".desc ___crashreporter_info__, 0x10");
#endif

// For convenience when using the "strings" command, this is the last thing in the file
-#if mDNSResponderVersion > 1
-mDNSexport const char mDNSResponderVersionString_SCCS[] = "@(#) mDNSResponder-" STRINGIFY(mDNSResponderVersion) " (" __DATE__ " " __TIME__ ")";
-#elif MDNS_VERSIONSTR_NODTS
-mDNSexport const char mDNSResponderVersionString_SCCS[] = "@(#) mDNSResponder (Engineering Build)";
+#ifndef STRINGIFY
+#define STRINGIFY_ARGUMENT_WITHOUT_EXPANSION(s) # s
+#define STRINGIFY(s) STRINGIFY_ARGUMENT_WITHOUT_EXPANSION(s)
+#endif
+
+mDNSexport const char mDNSResponderVersionString_SCCS[] = "@(#) mDNSResponder"
+#ifdef mDNSResponderVersion
+ "-" STRINGIFY(mDNSResponderVersion)
#else
-mDNSexport const char mDNSResponderVersionString_SCCS[] = "@(#) mDNSResponder (Engineering Build) (" __DATE__ " " __TIME__ ")";
+ " (Engineering Build)"
+#endif
+#if !MDNS_VERSIONSTR_NODTS
+ " (" __DATE__ " " __TIME__ ")"
#endif
+;
diff --git a/mDNSShared/dnssd_clientlib.c b/mDNSShared/dnssd_clientlib.c
index a1d98d9..75bece2 100644
--- a/mDNSShared/dnssd_clientlib.c
+++ b/mDNSShared/dnssd_clientlib.c
@@ -372,7 +372,11 @@ DNSServiceErrorType DNSSD_API TXTRecordGetItemAtIndex
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdate-time"
#endif
-const char VersionString_SCCS_libdnssd[] DNSSD_USED = "@(#) libdns_sd " STRINGIFY(mDNSResponderVersion) " (" __DATE__ " " __TIME__ ")";
+const char VersionString_SCCS_libdnssd[] DNSSD_USED = "@(#) libdns_sd " STRINGIFY(mDNSResponderVersion)
+#if !MDNS_VERSIONSTR_NODTS
+ " (" __DATE__ " " __TIME__ ")"
+#endif
+;
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif
--
2.39.2

Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
From edf0afdd8378fd2ce6a2aca050dfdb8a79eab372 Mon Sep 17 00:00:00 2001
From: Karsten Sperling <[email protected]>
Date: Tue, 24 Sep 2024 19:48:17 +1200
Subject: [PATCH] Avoid strcmp with null

---
mDNSShared/mDNSDebug.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mDNSShared/mDNSDebug.c b/mDNSShared/mDNSDebug.c
index 7a4ca19..d449dde 100644
--- a/mDNSShared/mDNSDebug.c
+++ b/mDNSShared/mDNSDebug.c
@@ -71,7 +71,7 @@ mDNSlocal void LogMsgWithLevelv(os_log_t category, os_log_type_t level, const ch
mDNSlocal void LogMsgWithLevelv(const char *category, mDNSLogLevel_t level, const char *format, va_list args)
{
// Do not print the logs if the log category is MDNS_LOG_CATEGORY_DISABLED.
- if (strcmp(category, MDNS_LOG_CATEGORY_DISABLED) == 0)
+ if (category && strcmp(category, MDNS_LOG_CATEGORY_DISABLED) == 0)
{
return;
}
--
2.39.2

Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
From b1aff590a9adbc6133819e56aef197fd768134a2 Mon Sep 17 00:00:00 2001
From: Karsten Sperling <[email protected]>
Date: Wed, 25 Sep 2024 12:40:17 +1200
Subject: [PATCH] Ignore irrelevant config files with UNICAST_DISABLED

---
mDNSCore/uDNS.c | 2 +-
mDNSPosix/PosixDaemon.c | 4 ++++
mDNSPosix/mDNSPosix.c | 2 ++
3 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/mDNSCore/uDNS.c b/mDNSCore/uDNS.c
index c9e9bcd..fe8d372 100644
--- a/mDNSCore/uDNS.c
+++ b/mDNSCore/uDNS.c
@@ -7277,7 +7277,7 @@ mDNSexport mStatus mDNS_SetSecretForDomain(mDNS *m, DomainAuthInfo *info, const
return mStatus_UnsupportedErr;
}

-mDNSexport domainname *uDNS_GetNextSearchDomain(mDNSInterfaceID InterfaceID, mDNSs8 *searchIndex, mDNSBool ignoreDotLocal)
+mDNSexport domainname *uDNS_GetNextSearchDomain(mDNSInterfaceID InterfaceID, int *searchIndex, mDNSBool ignoreDotLocal)
{
(void) InterfaceID;
(void) searchIndex;
diff --git a/mDNSPosix/PosixDaemon.c b/mDNSPosix/PosixDaemon.c
index beda41e..c9867ef 100644
--- a/mDNSPosix/PosixDaemon.c
+++ b/mDNSPosix/PosixDaemon.c
@@ -50,9 +50,11 @@ extern int daemon(int, int);
#include "uds_daemon.h"
#include "PlatformCommon.h"

+#ifndef UNICAST_DISABLED
#define CONFIG_FILE "/etc/mdnsd.conf"
static domainname DynDNSZone; // Default wide-area zone for service registration
static domainname DynDNSHostname;
+#endif

#define RR_CACHE_SIZE 500
static CacheEntity gRRCache[RR_CACHE_SIZE];
@@ -87,6 +89,7 @@ mDNSlocal void mDNS_StatusCallback(mDNS *const m, mStatus result)

static void Reconfigure(mDNS *m)
{
+#ifndef UNICAST_DISABLED
mDNSAddr DynDNSIP;
const mDNSAddr dummy = { mDNSAddrType_IPv4, { { { 1, 1, 1, 1 } } } };;
mDNS_SetPrimaryInterfaceInfo(m, NULL, NULL, NULL);
@@ -96,6 +99,7 @@ static void Reconfigure(mDNS *m)
mDNSPlatformSourceAddrForDest(&DynDNSIP, &dummy);
if (DynDNSHostname.c[0]) mDNS_AddDynDNSHostName(m, &DynDNSHostname, NULL, NULL);
if (DynDNSIP.type) mDNS_SetPrimaryInterfaceInfo(m, &DynDNSIP, NULL, NULL);
+#endif
mDNS_ConfigChanged(m);
}

diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
index 3b761d0..51cbd9b 100644
--- a/mDNSPosix/mDNSPosix.c
+++ b/mDNSPosix/mDNSPosix.c
@@ -1852,10 +1852,12 @@ mDNSexport mStatus mDNSPlatformInit(mDNS *const m)
// Tell mDNS core about the network interfaces on this machine.
if (err == mStatus_NoError) err = SetupInterfaceList(m);

+#ifndef UNICAST_DISABLED
// Tell mDNS core about DNS Servers
mDNS_Lock(m);
if (err == mStatus_NoError) ParseDNSServers(m, uDNS_SERVERS_FILE);
mDNS_Unlock(m);
+#endif

if (err == mStatus_NoError)
{
--
2.39.2

Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
From 9506c22107cb110abeeb94bb6ddeda15c8fc38db Mon Sep 17 00:00:00 2001
From: Karsten Sperling <[email protected]>
Date: Wed, 25 Sep 2024 18:13:45 +1200
Subject: [PATCH] Run in foreground under procd

---
mDNSPosix/PosixDaemon.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mDNSPosix/PosixDaemon.c b/mDNSPosix/PosixDaemon.c
index c9867ef..4861895 100644
--- a/mDNSPosix/PosixDaemon.c
+++ b/mDNSPosix/PosixDaemon.c
@@ -113,7 +113,7 @@ mDNSlocal void ParseCmdLineArgs(int argc, char **argv)
}
if (!mDNS_DebugMode)
{
- int result = daemon(0, 0);
+ int result = 0; //daemon(0, 0);
if (result != 0) { LogMsg("Could not run as daemon - exiting"); exit(result); }
#if __APPLE__
LogMsg("The POSIX mdnsd should only be used on OS X for testing - exiting");
--
2.39.2

Loading
Loading