diff --git a/.github/workflows/java-tests.yaml b/.github/workflows/java-tests.yaml index ad95d3dec7ad03..9d6e96a9385331 100644 --- a/.github/workflows/java-tests.yaml +++ b/.github/workflows/java-tests.yaml @@ -111,7 +111,7 @@ jobs: scripts/run_in_python_env.sh out/venv \ './scripts/tests/run_java_test.py \ --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ + --app-args "--discriminator 3840" \ --tool-path out/linux-x64-java-matter-controller \ --tool-cluster "discover" \ --tool-args "commissionables" \ @@ -124,7 +124,7 @@ jobs: scripts/run_in_python_env.sh out/venv \ './scripts/tests/run_java_test.py \ --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ + --app-args "--discriminator 3840" \ --tool-path out/linux-x64-java-matter-controller \ --tool-cluster "pairing" \ --tool-args "onnetwork-long --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \ @@ -137,7 +137,7 @@ jobs: scripts/run_in_python_env.sh out/venv \ './scripts/tests/run_java_test.py \ --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ + --app-args "--discriminator 3840" \ --tool-path out/linux-x64-java-matter-controller \ --tool-cluster "im" \ --tool-args "onnetwork-long-im-invoke --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \ @@ -150,7 +150,7 @@ jobs: scripts/run_in_python_env.sh out/venv \ './scripts/tests/run_java_test.py \ --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ + --app-args "--discriminator 3840" \ --tool-path out/linux-x64-java-matter-controller \ --tool-cluster "im" \ --tool-args "onnetwork-long-im-extendable-invoke --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \ @@ -163,7 +163,7 @@ jobs: scripts/run_in_python_env.sh out/venv \ './scripts/tests/run_java_test.py \ --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ + --app-args "--discriminator 3840" \ --tool-path out/linux-x64-java-matter-controller \ --tool-cluster "im" \ --tool-args "onnetwork-long-im-read --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 3000" \ @@ -176,7 +176,7 @@ jobs: scripts/run_in_python_env.sh out/venv \ './scripts/tests/run_java_test.py \ --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ + --app-args "--discriminator 3840" \ --tool-path out/linux-x64-java-matter-controller \ --tool-cluster "im" \ --tool-args "onnetwork-long-im-write --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \ @@ -189,7 +189,7 @@ jobs: scripts/run_in_python_env.sh out/venv \ './scripts/tests/run_java_test.py \ --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ + --app-args "--discriminator 3840" \ --tool-path out/linux-x64-java-matter-controller \ --tool-cluster "im" \ --tool-args "onnetwork-long-im-subscribe --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 3000" \ @@ -202,7 +202,7 @@ jobs: scripts/run_in_python_env.sh out/venv \ './scripts/tests/run_java_test.py \ --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ + --app-args "--discriminator 3840" \ --tool-path out/linux-x64-java-matter-controller \ --tool-cluster "pairing" \ --tool-args "already-discovered --nodeid 1 --setup-pin-code 20202021 --address ::1 --port 5540 -t 1000" \ @@ -215,7 +215,7 @@ jobs: scripts/run_in_python_env.sh out/venv \ './scripts/tests/run_java_test.py \ --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ + --app-args "--discriminator 3840" \ --tool-path out/linux-x64-java-matter-controller \ --tool-cluster "pairing" \ --tool-args "address-paseonly --nodeid 1 --setup-pin-code 20202021 --address ::1 --port 5540 -t 1000" \ @@ -228,7 +228,7 @@ jobs: scripts/run_in_python_env.sh out/venv \ './scripts/tests/run_java_test.py \ --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ + --app-args "--discriminator 3840" \ --tool-path out/linux-x64-java-matter-controller \ --tool-cluster "pairing" \ --tool-args "code --nodeid 1 --setup-payload MT:-24J0AFN00KA0648G00 --discover-once 1 --use-only-onnetwork-discovery 0 -t 1000" \ @@ -241,7 +241,7 @@ jobs: scripts/run_in_python_env.sh out/venv \ './scripts/tests/run_java_test.py \ --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ + --app-args "--discriminator 3840" \ --tool-path out/linux-x64-java-matter-controller \ --tool-cluster "pairing" \ --tool-args "code --nodeid 1 --setup-payload 34970112332 --discover-once 1 --use-only-onnetwork-discovery 0 -t 1000" \ @@ -254,7 +254,7 @@ jobs: scripts/run_in_python_env.sh out/venv \ './scripts/tests/run_java_test.py \ --app out/linux-x64-lit-icd-ipv6only/lit-icd-app \ - --app-args "--discriminator 3840 --interface-id -1" \ + --app-args "--discriminator 3840" \ --tool-path out/linux-x64-java-matter-controller \ --tool-cluster "pairing" \ --tool-args "onnetwork-long --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \ @@ -267,7 +267,7 @@ jobs: scripts/run_in_python_env.sh out/venv \ './scripts/tests/run_java_test.py \ --app out/linux-x64-ota-requestor/chip-ota-requestor-app \ - --app-args "--discriminator 3840 --interface-id -1" \ + --app-args "--discriminator 3840" \ --tool-path out/linux-x64-java-matter-controller \ --tool-cluster "ota" \ --tool-args "onnetwork-long-ota-over-bdx --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \ @@ -278,7 +278,7 @@ jobs: scripts/run_in_python_env.sh out/venv \ './scripts/tests/run_java_test.py \ --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1 --crash_log ./crashLog.log --end_user_support_log ./enduser.log --network_diagnostics_log ./network.log" \ + --app-args "--discriminator 3840 --crash_log ./crashLog.log --end_user_support_log ./enduser.log --network_diagnostics_log ./network.log" \ --tool-path out/linux-x64-java-matter-controller \ --tool-cluster "bdx" \ --tool-args "onnetwork-long-downloadLog --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 3000 --logType CrashLogs --fileName ./crashLog.log" \ @@ -291,7 +291,7 @@ jobs: scripts/run_in_python_env.sh out/venv \ './scripts/tests/run_kotlin_test.py \ --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ + --app-args "--discriminator 3840" \ --tool-path out/linux-x64-kotlin-matter-controller \ --tool-cluster "pairing" \ --tool-args "onnetwork-long --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \ @@ -304,7 +304,7 @@ jobs: scripts/run_in_python_env.sh out/venv \ './scripts/tests/run_kotlin_test.py \ --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ + --app-args "--discriminator 3840" \ --tool-path out/linux-x64-kotlin-matter-controller \ --tool-cluster "im" \ --tool-args "onnetwork-long-im-invoke --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \ @@ -317,7 +317,7 @@ jobs: scripts/run_in_python_env.sh out/venv \ './scripts/tests/run_kotlin_test.py \ --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ + --app-args "--discriminator 3840" \ --tool-path out/linux-x64-kotlin-matter-controller \ --tool-cluster "im" \ --tool-args "onnetwork-long-im-read --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 3000" \ @@ -330,7 +330,7 @@ jobs: scripts/run_in_python_env.sh out/venv \ './scripts/tests/run_kotlin_test.py \ --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ + --app-args "--discriminator 3840" \ --tool-path out/linux-x64-kotlin-matter-controller \ --tool-cluster "im" \ --tool-args "onnetwork-long-im-write --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 1000" \ @@ -343,7 +343,7 @@ jobs: scripts/run_in_python_env.sh out/venv \ './scripts/tests/run_kotlin_test.py \ --app out/linux-x64-all-clusters-ipv6only-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app \ - --app-args "--discriminator 3840 --interface-id -1" \ + --app-args "--discriminator 3840" \ --tool-path out/linux-x64-kotlin-matter-controller \ --tool-cluster "im" \ --tool-args "onnetwork-long-im-subscribe --nodeid 1 --setup-pin-code 20202021 --discriminator 3840 -t 3000" \ diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 1ac9f82f88374d..def4039625991a 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -622,7 +622,7 @@ jobs: " - name: Run Tests run: | - scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/darwin-x64-all-clusters-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factory-reset --quiet --app-args "--discriminator 3840 --interface-id -1" --script-args "-t 3600 --disable-test ClusterObjectTests.TestTimedRequestTimeout"' + scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --app out/darwin-x64-all-clusters-no-ble-no-wifi-tsan-clang-test/chip-all-clusters-app --factory-reset --quiet --app-args "--discriminator 3840" --script-args "-t 3600 --disable-test ClusterObjectTests.TestTimedRequestTimeout"' - name: Uploading core files uses: actions/upload-artifact@v4 if: ${{ failure() && !env.ACT }} diff --git a/scripts/tests/chiptest/test_definition.py b/scripts/tests/chiptest/test_definition.py index bdb0680010c5b1..72fbb3be2e1e22 100644 --- a/scripts/tests/chiptest/test_definition.py +++ b/scripts/tests/chiptest/test_definition.py @@ -111,18 +111,16 @@ def wait(self, timeout=None): self.cv_stopped.wait() def __startServer(self, runner, command): - app_cmd = command + ['--interface-id', str(-1)] - if not self.options: logging.debug('Executing application under test with default args') else: logging.debug('Executing application under test with the following args:') for key, value in self.options.items(): logging.debug(' %s: %s' % (key, value)) - app_cmd = app_cmd + [key, value] + command = command + [key, value] if key == '--KVS': self.kvsPathSet.add(value) - return runner.RunSubprocess(app_cmd, name='APP ', wait=False) + return runner.RunSubprocess(command, name='APP ', wait=False) def __waitFor(self, waitForString, server_process, outpipe, timeoutInSeconds=10): logging.debug('Waiting for %s' % waitForString) diff --git a/src/app/server/BUILD.gn b/src/app/server/BUILD.gn index 040c7b2227ff2a..c31336c365d4f4 100644 --- a/src/app/server/BUILD.gn +++ b/src/app/server/BUILD.gn @@ -16,6 +16,7 @@ import("//build_overrides/chip.gni") import("${chip_root}/src/access/access.gni") import("${chip_root}/src/app/common_flags.gni") import("${chip_root}/src/app/icd/icd.gni") +import("${chip_root}/src/platform/device.gni") config("server_config") { defines = [] @@ -23,6 +24,12 @@ config("server_config") { if (chip_app_use_echo) { defines += [ "CHIP_APP_USE_ECHO" ] } + + if (chip_mdns_minimal) { + defines += [ "CHIP_MDNS_MINIMAL=1" ] + } else { + defines += [ "CHIP_MDNS_MINIMAL=0" ] + } } source_set("terms_and_conditions") { @@ -85,6 +92,11 @@ static_library("server") { "${chip_root}/src/transport", ] + if (chip_mdns_minimal) { + public_deps += + [ "${chip_root}/src/lib/dnssd/minimal_mdns:singleinterface_policy" ] + } + if (chip_terms_and_conditions_required) { public_deps += [ ":terms_and_conditions" ] } diff --git a/src/app/server/Server.cpp b/src/app/server/Server.cpp index 3cc918f91416d0..3ef2ce149ec753 100644 --- a/src/app/server/Server.cpp +++ b/src/app/server/Server.cpp @@ -52,6 +52,9 @@ #if CHIP_ENABLE_ROTATING_DEVICE_ID && defined(CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID) #include #endif +#if defined(CHIP_MDNS_MINIMAL) +#include // nogncheck +#endif #include #include #include @@ -116,6 +119,14 @@ CHIP_ERROR Server::Init(const ServerInitParams & initParams) mUserDirectedCommissioningPort = initParams.userDirectedCommissioningPort; mInterfaceId = initParams.interfaceId; +#if defined(CHIP_MDNS_MINIMAL) + if (mInterfaceId != chip::Inet::InterfaceId::Null()) + { + static mdns::Minimal::SingleInterfaceAddressPolicy policy(mdns::Minimal::GetAddressPolicy(), mInterfaceId); + mdns::Minimal::SetAddressPolicy(&policy); + } +#endif + #if INET_CONFIG_ENABLE_TCP_ENDPOINT auto tcpListenParams = TcpListenParameters(DeviceLayer::TCPEndPointManager()) .SetAddressType(IPAddressType::kIPv6) diff --git a/src/darwin/Framework/CHIPTests/TestHelpers/MTRTestCase+ServerAppRunner.m b/src/darwin/Framework/CHIPTests/TestHelpers/MTRTestCase+ServerAppRunner.m index b63ad84804dfbd..052dd88913518b 100644 --- a/src/darwin/Framework/CHIPTests/TestHelpers/MTRTestCase+ServerAppRunner.m +++ b/src/darwin/Framework/CHIPTests/TestHelpers/MTRTestCase+ServerAppRunner.m @@ -51,9 +51,6 @@ + (NSTask *)doStartAppWithName:(NSString *)name arguments:(NSArray * __auto_type * appTask = [self createTaskForPath:executable]; __auto_type * forcedArguments = @[ - // Make sure we only advertise on the local interface. - @"--interface-id", - @"-1", @"--secured-device-port", [NSString stringWithFormat:@"%u", kBasePort + discriminator.unsignedShortValue], @"--discriminator", diff --git a/src/lib/dnssd/MinimalMdnsServer.cpp b/src/lib/dnssd/MinimalMdnsServer.cpp index 2fbe9fd7e6776b..8cb366c53ceada 100644 --- a/src/lib/dnssd/MinimalMdnsServer.cpp +++ b/src/lib/dnssd/MinimalMdnsServer.cpp @@ -15,25 +15,7 @@ * limitations under the License. */ #include "MinimalMdnsServer.h" - #include - -#ifndef CHIP_MINMDNS_DEFAULT_POLICY -#define CHIP_MINMDNS_DEFAULT_POLICY 0 -#endif - -#ifndef CHIP_MINMDNS_LIBNL_POLICY -#define CHIP_MINMDNS_LIBNL_POLICY 0 -#endif - -#if CHIP_MINMDNS_DEFAULT_POLICY -#include // nogncheck -#endif - -#if CHIP_MINMDNS_LIBNL_POLICY -#include // nogncheck -#endif - namespace chip { namespace Dnssd { @@ -43,14 +25,6 @@ using chip::Platform::UniquePtr; GlobalMinimalMdnsServer::GlobalMinimalMdnsServer() { mServer.SetDelegate(this); - -#if CHIP_MINMDNS_DEFAULT_POLICY - mdns::Minimal::SetDefaultAddressPolicy(); -#endif - -#if CHIP_MINMDNS_LIBNL_POLICY - mdns::Minimal::LibNl::SetAddressPolicy(); -#endif } GlobalMinimalMdnsServer & GlobalMinimalMdnsServer::Instance() diff --git a/src/lib/dnssd/minimal_mdns/AddressPolicy.cpp b/src/lib/dnssd/minimal_mdns/AddressPolicy.cpp index a3362fd2f832b6..7e45239aa7fd0d 100644 --- a/src/lib/dnssd/minimal_mdns/AddressPolicy.cpp +++ b/src/lib/dnssd/minimal_mdns/AddressPolicy.cpp @@ -25,9 +25,22 @@ namespace { AddressPolicy * gAddressPolicy = nullptr; } // namespace +// This will be resolved at link time if a default policy is set +#ifndef CHIP_MINMDNS_NONE_POLICY +AddressPolicy * GetDefaultAddressPolicy(); +#endif + AddressPolicy * GetAddressPolicy() { - VerifyOrDie(gAddressPolicy != nullptr); +#ifndef CHIP_MINMDNS_NONE_POLICY + // The GetDefaultAddressPolicy() function should be defined by a compile-defined default policy. + if (gAddressPolicy == nullptr) + { + auto p = GetDefaultAddressPolicy(); + VerifyOrDie(p != nullptr); + SetAddressPolicy(p); + } +#endif return gAddressPolicy; } diff --git a/src/lib/dnssd/minimal_mdns/AddressPolicy.h b/src/lib/dnssd/minimal_mdns/AddressPolicy.h index da8dd33f08e14f..2a289895570222 100644 --- a/src/lib/dnssd/minimal_mdns/AddressPolicy.h +++ b/src/lib/dnssd/minimal_mdns/AddressPolicy.h @@ -47,6 +47,7 @@ AddressPolicy * GetAddressPolicy(); /// Update the global address policy. /// +/// If no default address policy is set at compile time, this function /// MUST be called before any minmdns functionality is used (e.g. server /// startup) void SetAddressPolicy(AddressPolicy * policy); diff --git a/src/lib/dnssd/minimal_mdns/AddressPolicy_DefaultImpl.cpp b/src/lib/dnssd/minimal_mdns/AddressPolicy_BuiltinImpl.cpp similarity index 97% rename from src/lib/dnssd/minimal_mdns/AddressPolicy_DefaultImpl.cpp rename to src/lib/dnssd/minimal_mdns/AddressPolicy_BuiltinImpl.cpp index 0710c2249496c2..3e9148431aa136 100644 --- a/src/lib/dnssd/minimal_mdns/AddressPolicy_DefaultImpl.cpp +++ b/src/lib/dnssd/minimal_mdns/AddressPolicy_BuiltinImpl.cpp @@ -200,7 +200,7 @@ bool AllInterfaces::CurrentInterfaceHasAddressOfType(chip::Inet::IPAddressType t return false; } -class DefaultAddressPolicy : public AddressPolicy +class BuiltinAddressPolicy : public AddressPolicy { public: chip::Platform::UniquePtr GetListenEndpoints() override @@ -215,13 +215,12 @@ class DefaultAddressPolicy : public AddressPolicy } }; -DefaultAddressPolicy gDefaultAddressPolicy; - } // namespace -void SetDefaultAddressPolicy() +AddressPolicy * GetDefaultAddressPolicy() { - SetAddressPolicy(&gDefaultAddressPolicy); + static BuiltinAddressPolicy gAddressPolicy; + return &gAddressPolicy; } } // namespace Minimal diff --git a/src/lib/dnssd/minimal_mdns/AddressPolicy_DefaultImpl.h b/src/lib/dnssd/minimal_mdns/AddressPolicy_BuiltinImpl.h similarity index 88% rename from src/lib/dnssd/minimal_mdns/AddressPolicy_DefaultImpl.h rename to src/lib/dnssd/minimal_mdns/AddressPolicy_BuiltinImpl.h index dddf32c80799e2..0589712c6d1022 100644 --- a/src/lib/dnssd/minimal_mdns/AddressPolicy_DefaultImpl.h +++ b/src/lib/dnssd/minimal_mdns/AddressPolicy_BuiltinImpl.h @@ -16,10 +16,12 @@ */ #pragma once +#include + namespace mdns { namespace Minimal { -void SetDefaultAddressPolicy(); +AddressPolicy * GetDefaultAddressPolicy(); } // namespace Minimal } // namespace mdns diff --git a/src/lib/dnssd/minimal_mdns/AddressPolicy_LibNlImpl.cpp b/src/lib/dnssd/minimal_mdns/AddressPolicy_LibNlImpl.cpp index b1802c8d25dffa..2cc932277a8553 100644 --- a/src/lib/dnssd/minimal_mdns/AddressPolicy_LibNlImpl.cpp +++ b/src/lib/dnssd/minimal_mdns/AddressPolicy_LibNlImpl.cpp @@ -24,7 +24,6 @@ namespace mdns { namespace Minimal { -namespace LibNl { namespace { @@ -415,25 +414,28 @@ CHIP_ERROR ValidIpAddressIterator::DecodeCurrentAddress(IPAddress & dest) return CHIP_NO_ERROR; } -LibNl_AddressPolicy gAddressPolicy; - -} // namespace - -UniquePtr LibNl_AddressPolicy::GetListenEndpoints() +class LibNl_AddressPolicy : public AddressPolicy { - return UniquePtr(chip::Platform::New()); -} +public: + chip::Platform::UniquePtr GetListenEndpoints() override + { + return UniquePtr(chip::Platform::New()); + } -UniquePtr LibNl_AddressPolicy::GetIpAddressesForEndpoint(InterfaceId interfaceId, IPAddressType type) -{ - return UniquePtr(chip::Platform::New(interfaceId, type)); -} + chip::Platform::UniquePtr GetIpAddressesForEndpoint(chip::Inet::InterfaceId interfaceId, + chip::Inet::IPAddressType type) override + { + return UniquePtr(chip::Platform::New(interfaceId, type)); + } +}; + +} // namespace -void SetAddressPolicy() +AddressPolicy * GetDefaultAddressPolicy() { - SetAddressPolicy(&gAddressPolicy); + static LibNl_AddressPolicy gAddressPolicy; + return &gAddressPolicy; } -} // namespace LibNl } // namespace Minimal } // namespace mdns diff --git a/src/lib/dnssd/minimal_mdns/AddressPolicy_LibNlImpl.h b/src/lib/dnssd/minimal_mdns/AddressPolicy_LibNlImpl.h index 5299510e73c7d0..3aaf09f08fbfdc 100644 --- a/src/lib/dnssd/minimal_mdns/AddressPolicy_LibNlImpl.h +++ b/src/lib/dnssd/minimal_mdns/AddressPolicy_LibNlImpl.h @@ -20,19 +20,7 @@ namespace mdns { namespace Minimal { -namespace LibNl { -class LibNl_AddressPolicy : public mdns::Minimal::AddressPolicy -{ -public: - chip::Platform::UniquePtr GetListenEndpoints() override; - - chip::Platform::UniquePtr GetIpAddressesForEndpoint(chip::Inet::InterfaceId interfaceId, - chip::Inet::IPAddressType type) override; -}; - -void SetAddressPolicy(); - -} // namespace LibNl +AddressPolicy * GetDefaultAddressPolicy(); } // namespace Minimal } // namespace mdns diff --git a/src/lib/dnssd/minimal_mdns/AddressPolicy_SingleInterface.cpp b/src/lib/dnssd/minimal_mdns/AddressPolicy_SingleInterface.cpp new file mode 100644 index 00000000000000..bc78054cdf2878 --- /dev/null +++ b/src/lib/dnssd/minimal_mdns/AddressPolicy_SingleInterface.cpp @@ -0,0 +1,80 @@ +/* + * + * Copyright (c) 2025 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 "AddressPolicy_SingleInterface.h" +#include +#include + +namespace mdns { +namespace Minimal { +namespace { +class SingleInterface : public mdns::Minimal::ListenIterator +{ +public: + SingleInterface(chip::Platform::UniquePtr parent, chip::Inet::InterfaceId & selectedIface) : + mParent(std::move(parent)), mSelectedIface(selectedIface) + {} + + bool Next(chip::Inet::InterfaceId * out_id, chip::Inet::IPAddressType * out_type) override + { + chip::Inet::InterfaceId id; + chip::Inet::IPAddressType type; + + if (!mParent->Next(&id, &type)) + { + return false; + } + + while (id != mSelectedIface) + { + if (!mParent->Next(&id, &type)) + { + return false; + } + } + + *out_id = id; + *out_type = type; + return true; + } + +private: + chip::Platform::UniquePtr mParent; + chip::Inet::InterfaceId & mSelectedIface; +}; + +} // namespace + +SingleInterfaceAddressPolicy::SingleInterfaceAddressPolicy(AddressPolicy * parentPolicy, chip::Inet::InterfaceId & selectedIface) : + mParentPolicy(parentPolicy), mSelectedIface(&selectedIface) +{} + +chip::Platform::UniquePtr SingleInterfaceAddressPolicy::GetListenEndpoints() +{ + VerifyOrDie(mParentPolicy != nullptr); + return chip::Platform::UniquePtr( + chip::Platform::New(mParentPolicy->GetListenEndpoints(), *mSelectedIface)); +} + +chip::Platform::UniquePtr +SingleInterfaceAddressPolicy::GetIpAddressesForEndpoint(chip::Inet::InterfaceId interfaceId, chip::Inet::IPAddressType type) +{ + return mParentPolicy->GetIpAddressesForEndpoint(interfaceId, type); +} + +} // namespace Minimal +} // namespace mdns diff --git a/src/lib/dnssd/minimal_mdns/AddressPolicy_SingleInterface.h b/src/lib/dnssd/minimal_mdns/AddressPolicy_SingleInterface.h new file mode 100644 index 00000000000000..2f83ced869c818 --- /dev/null +++ b/src/lib/dnssd/minimal_mdns/AddressPolicy_SingleInterface.h @@ -0,0 +1,45 @@ +/* + * + * Copyright (c) 2025 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. + */ +#pragma once + +#include +#include +#include + +namespace mdns { +namespace Minimal { + +class SingleInterfaceAddressPolicy : public AddressPolicy +{ +public: + SingleInterfaceAddressPolicy() = default; + + SingleInterfaceAddressPolicy(AddressPolicy * parentPolicy, chip::Inet::InterfaceId & selectedIface); + + chip::Platform::UniquePtr GetListenEndpoints() override; + chip::Platform::UniquePtr GetIpAddressesForEndpoint(chip::Inet::InterfaceId interfaceId, + chip::Inet::IPAddressType type) override; + + ~SingleInterfaceAddressPolicy() override = default; + +private: + mdns::Minimal::AddressPolicy * mParentPolicy; + chip::Inet::InterfaceId * mSelectedIface; +}; + +} // namespace Minimal +} // namespace mdns diff --git a/src/lib/dnssd/minimal_mdns/BUILD.gn b/src/lib/dnssd/minimal_mdns/BUILD.gn index af74ce381fa7fc..11c02d02412537 100644 --- a/src/lib/dnssd/minimal_mdns/BUILD.gn +++ b/src/lib/dnssd/minimal_mdns/BUILD.gn @@ -36,11 +36,11 @@ declare_args() { # MinMdns address policy to be compiled in. # Supported values: - # - "default" will compile in AddressPolicy_DefaultImpl.h/cpp + # - "builtin" will compile in AddressPolicy_BuiltinImpl.h/cpp # - "libnl" will compile in AddressPolicy_LibNlImpl.h/cpp (linux only) # - "none" will NOT compile any default policy, app is expected to call # SetAddressPolicy apropriately - chip_minmdns_default_policy = "default" + chip_minmdns_default_policy = "builtin" } config("config") { @@ -58,20 +58,20 @@ config("config") { defines += [ "CHIP_MINMDNS_HIGH_VERBOSITY=0" ] } - if (chip_minmdns_default_policy == "default") { - defines += [ "CHIP_MINMDNS_DEFAULT_POLICY=1" ] + if (chip_minmdns_default_policy == "builtin") { + defines += [ "CHIP_MINMDNS_BUILTIN_POLICY=1" ] } else if (chip_minmdns_default_policy == "libnl") { assert(current_os == "linux", "LibNL only supported on linux") defines += [ "CHIP_MINMDNS_LIBNL_POLICY=1" ] + } else if (chip_minmdns_default_policy == "none") { + defines += [ "CHIP_MINMDNS_NONE_POLICY=1" ] } else { - assert(chip_minmdns_default_policy == "none", - "minmdns default policy should be a supported value") + assert(0 == 1, "minmdns default policy should be a supported value") } } -source_set("address_policy") { +source_set("address_policy_headers") { sources = [ - "AddressPolicy.cpp", "AddressPolicy.h", "ListenIterator.h", "ServerIPAddresses.h", @@ -83,20 +83,32 @@ source_set("address_policy") { ] } -static_library("default_policy") { +static_library("builtin_policy") { sources = [ - "AddressPolicy_DefaultImpl.cpp", - "AddressPolicy_DefaultImpl.h", + "AddressPolicy_BuiltinImpl.cpp", + "AddressPolicy_BuiltinImpl.h", ] public_deps = [ - ":address_policy", + ":address_policy_headers", "${chip_root}/src/inet", ] cflags = [ "-Wconversion" ] } +static_library("singleinterface_policy") { + sources = [ + "AddressPolicy_SingleInterface.cpp", + "AddressPolicy_SingleInterface.h", + ] + + public_deps = [ + ":address_policy_headers", + "${chip_root}/src/inet", + ] +} + if (current_os == "linux" && chip_minmdns_default_policy == "libnl") { import("${build_root}/config/linux/pkg_config.gni") @@ -114,7 +126,7 @@ if (current_os == "linux" && chip_minmdns_default_policy == "libnl") { ] public_deps = [ - ":address_policy", + ":address_policy_headers", "${chip_root}/src/inet", ] @@ -122,6 +134,13 @@ if (current_os == "linux" && chip_minmdns_default_policy == "libnl") { } } +static_library("address_policy") { + sources = [ "AddressPolicy.cpp" ] + + # this should be ifdef'd + public_deps = [ ":address_policy_headers" ] +} + static_library("minimal_mdns") { sources = [ "Logging.h", @@ -152,8 +171,8 @@ static_library("minimal_mdns") { "${chip_root}/src/platform", ] - if (chip_minmdns_default_policy == "default") { - public_deps += [ ":default_policy" ] + if (chip_minmdns_default_policy == "builtin") { + public_deps += [ ":builtin_policy" ] } else if (chip_minmdns_default_policy == "libnl") { public_deps += [ ":libnl_policy" ] } diff --git a/src/lib/dnssd/minimal_mdns/responders/tests/BUILD.gn b/src/lib/dnssd/minimal_mdns/responders/tests/BUILD.gn index 3c8437c068cc84..49d0cbfa52fd25 100644 --- a/src/lib/dnssd/minimal_mdns/responders/tests/BUILD.gn +++ b/src/lib/dnssd/minimal_mdns/responders/tests/BUILD.gn @@ -32,7 +32,7 @@ chip_test_suite("tests") { "${chip_root}/src/lib/core", "${chip_root}/src/lib/core:string-builder-adapters", "${chip_root}/src/lib/dnssd/minimal_mdns", - "${chip_root}/src/lib/dnssd/minimal_mdns:default_policy", + "${chip_root}/src/lib/dnssd/minimal_mdns:builtin_policy", "${chip_root}/src/lib/dnssd/minimal_mdns/responders", ] } diff --git a/src/lib/dnssd/minimal_mdns/responders/tests/TestIPResponder.cpp b/src/lib/dnssd/minimal_mdns/responders/tests/TestIPResponder.cpp index 691a458c9343d6..d45a04cc1e2cf7 100644 --- a/src/lib/dnssd/minimal_mdns/responders/tests/TestIPResponder.cpp +++ b/src/lib/dnssd/minimal_mdns/responders/tests/TestIPResponder.cpp @@ -21,7 +21,7 @@ #include #include -#include +#include #include namespace { @@ -61,11 +61,7 @@ InterfaceId FindValidInterfaceId() class TestIPResponder : public ::testing::Test { public: - static void SetUpTestSuite() - { - mdns::Minimal::SetDefaultAddressPolicy(); - ASSERT_EQ(chip::Platform::MemoryInit(), CHIP_NO_ERROR); - } + static void SetUpTestSuite() { ASSERT_EQ(chip::Platform::MemoryInit(), CHIP_NO_ERROR); } static void TearDownTestSuite() { chip::Platform::MemoryShutdown(); } }; diff --git a/src/platform/tests/TestDnssd.cpp b/src/platform/tests/TestDnssd.cpp index 5aa7565274f657..6201f45d2ac42c 100644 --- a/src/platform/tests/TestDnssd.cpp +++ b/src/platform/tests/TestDnssd.cpp @@ -25,7 +25,6 @@ #include "platform/PlatformManager.h" #include #include -#include #include #include #include @@ -188,8 +187,6 @@ void TestDnssdBrowse_DnssdInitCallback(void * context, CHIP_ERROR error) // services by querying for all of these records separately. TEST_F(TestDnssd, TestDnssdBrowse) { - mdns::Minimal::SetDefaultAddressPolicy(); - mdns::Minimal::Server<10> server; mdns::Minimal::QNamePart serverName[] = { "resolve-tester", "_mock", chip::Dnssd::kCommissionProtocol, chip::Dnssd::kLocalDomain };