Skip to content

Commit d7a908e

Browse files
kkasperczyk-noDamian-Nordic
authored andcommitted
[nrf fromlist] Added argument allowing to bypass caching DNS-SD.
DNS-SD records are cached, so in case of device IP address change and trying to resolve address again the cached value is used instead of the new one. Added argument that allows to bypass reading DNS-SD services data from cache.
1 parent 44b7d27 commit d7a908e

File tree

11 files changed

+27
-18
lines changed

11 files changed

+27
-18
lines changed

examples/chip-tool/commands/discover/Commands.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class Resolve : public DiscoverCommand, public chip::Dnssd::ResolverDelegate
3636
chip::Dnssd::Resolver::Instance().SetResolverDelegate(this);
3737
ChipLogProgress(chipTool, "Dnssd: Searching for NodeId: %" PRIx64 " FabricId: %" PRIx64 " ...", remoteId, fabricId);
3838
return chip::Dnssd::Resolver::Instance().ResolveNodeId(chip::PeerId().SetNodeId(remoteId).SetCompressedFabricId(fabricId),
39-
chip::Inet::IPAddressType::kAny);
39+
chip::Inet::IPAddressType::kAny, true);
4040
}
4141

4242
void OnNodeIdResolved(const chip::Dnssd::ResolvedNodeData & nodeData) override

src/app/OperationalDeviceProxy.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ CHIP_ERROR OperationalDeviceProxy::Connect(Callback::Callback<OnDeviceConnected>
5151
break;
5252

5353
case State::NeedsAddress:
54-
err = Dnssd::Resolver::Instance().ResolveNodeId(mPeerId, chip::Inet::IPAddressType::kAny);
54+
err = Dnssd::Resolver::Instance().ResolveNodeId(mPeerId, chip::Inet::IPAddressType::kAny, false);
5555
EnqueueConnectionCallbacks(onConnection, onFailure);
5656
break;
5757

src/controller/CHIPDeviceController.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ CHIP_ERROR DeviceController::UpdateDevice(NodeId deviceId)
295295
{
296296
#if CHIP_DEVICE_CONFIG_ENABLE_DNSSD
297297
return Dnssd::Resolver::Instance().ResolveNodeId(PeerId().SetCompressedFabricId(GetCompressedFabricId()).SetNodeId(deviceId),
298-
chip::Inet::IPAddressType::kAny);
298+
chip::Inet::IPAddressType::kAny, true);
299299
#else
300300
return CHIP_ERROR_UNSUPPORTED_CHIP_FEATURE;
301301
#endif // CHIP_DEVICE_CONFIG_ENABLE_DNSSD
@@ -1900,7 +1900,7 @@ void DeviceCommissioner::AdvanceCommissioningStage(CHIP_ERROR err)
19001900
RendezvousCleanup(CHIP_NO_ERROR);
19011901
#if CHIP_DEVICE_CONFIG_ENABLE_DNSSD
19021902
ChipLogProgress(Controller, "Finding node on operational network");
1903-
Dnssd::Resolver::Instance().ResolveNodeId(peerId, Inet::IPAddressType::kAny);
1903+
Dnssd::Resolver::Instance().ResolveNodeId(peerId, Inet::IPAddressType::kAny, false);
19041904
#endif
19051905
}
19061906
break;

src/controller/python/chip/discovery/NodeResolution.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ extern "C" ChipError::StorageType pychip_discovery_resolve(uint64_t fabricId, ui
100100
Resolver::Instance().SetResolverDelegate(&gPythonResolverDelegate);
101101

102102
result = Resolver::Instance().ResolveNodeId(chip::PeerId().SetCompressedFabricId(fabricId).SetNodeId(nodeId),
103-
chip::Inet::IPAddressType::kAny);
103+
chip::Inet::IPAddressType::kAny, false);
104104
});
105105

106106
return result.AsInteger();

src/controller/tests/TestCommissionableNodeController.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@ class MockResolver : public Resolver
3434
CHIP_ERROR Init(chip::Inet::InetLayer * inetLayer) override { return InitStatus; }
3535
void Shutdown() override {}
3636
void SetResolverDelegate(ResolverDelegate *) override {}
37-
CHIP_ERROR ResolveNodeId(const PeerId & peerId, Inet::IPAddressType type) override { return ResolveNodeIdStatus; }
37+
CHIP_ERROR ResolveNodeId(const PeerId & peerId, Inet::IPAddressType type, bool dnssdCacheBypass) override
38+
{
39+
return ResolveNodeIdStatus;
40+
}
3841
CHIP_ERROR FindCommissioners(DiscoveryFilter filter = DiscoveryFilter()) override { return FindCommissionersStatus; }
3942
CHIP_ERROR FindCommissionableNodes(DiscoveryFilter filter = DiscoveryFilter()) override { return CHIP_ERROR_NOT_IMPLEMENTED; }
4043

src/lib/dnssd/Discovery_ImplPlatform.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -454,17 +454,20 @@ CHIP_ERROR DiscoveryImplPlatform::FinalizeServiceUpdate()
454454
return ChipDnssdFinalizeServiceUpdate();
455455
}
456456

457-
CHIP_ERROR DiscoveryImplPlatform::ResolveNodeId(const PeerId & peerId, Inet::IPAddressType type)
457+
CHIP_ERROR DiscoveryImplPlatform::ResolveNodeId(const PeerId & peerId, Inet::IPAddressType type, bool dnssdCacheBypass)
458458
{
459459
ReturnErrorOnFailure(InitImpl());
460460

461461
#if CHIP_CONFIG_MDNS_CACHE_SIZE > 0
462-
/* see if the entry is cached and use it.... */
463-
ResolvedNodeData nodeData;
464-
if (sDnssdCache.Lookup(peerId, nodeData) == CHIP_NO_ERROR)
462+
if (!dnssdCacheBypass)
465463
{
466-
mResolverDelegate->OnNodeIdResolved(nodeData);
467-
return CHIP_NO_ERROR;
464+
/* see if the entry is cached and use it.... */
465+
ResolvedNodeData nodeData;
466+
if (sDnssdCache.Lookup(peerId, nodeData) == CHIP_NO_ERROR)
467+
{
468+
mResolverDelegate->OnNodeIdResolved(nodeData);
469+
return CHIP_NO_ERROR;
470+
}
468471
}
469472
#endif
470473

src/lib/dnssd/Discovery_ImplPlatform.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class DiscoveryImplPlatform : public ServiceAdvertiser, public Resolver
4949

5050
// Members that implement Resolver interface.
5151
void SetResolverDelegate(ResolverDelegate * delegate) override { mResolverDelegate = delegate; }
52-
CHIP_ERROR ResolveNodeId(const PeerId & peerId, Inet::IPAddressType type) override;
52+
CHIP_ERROR ResolveNodeId(const PeerId & peerId, Inet::IPAddressType type, bool dnssdCacheBypass) override;
5353
CHIP_ERROR FindCommissionableNodes(DiscoveryFilter filter = DiscoveryFilter()) override;
5454
CHIP_ERROR FindCommissioners(DiscoveryFilter filter = DiscoveryFilter()) override;
5555

src/lib/dnssd/Resolver.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,11 +286,14 @@ class Resolver
286286
/**
287287
* Requests resolution of the given operational node service.
288288
*
289+
* If `dnssdCacheBypass` is set it forces resolution of the given node and bypass option
290+
* of using DNS-SD cache.
291+
*
289292
* When the operation succeeds or fails, and a resolver delegate has been registered,
290293
* the result of the operation is passed to the delegate's `OnNodeIdResolved` or
291294
* `OnNodeIdResolutionFailed` method, respectively.
292295
*/
293-
virtual CHIP_ERROR ResolveNodeId(const PeerId & peerId, Inet::IPAddressType type) = 0;
296+
virtual CHIP_ERROR ResolveNodeId(const PeerId & peerId, Inet::IPAddressType type, bool dnssdCacheBypass) = 0;
294297

295298
/**
296299
* Finds all commissionable nodes matching the given filter.

src/lib/dnssd/Resolver_ImplMinimalMdns.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ class MinMdnsResolver : public Resolver, public MdnsPacketDelegate
344344
CHIP_ERROR Init(chip::Inet::InetLayer * inetLayer) override;
345345
void Shutdown() override;
346346
void SetResolverDelegate(ResolverDelegate * delegate) override { mDelegate = delegate; }
347-
CHIP_ERROR ResolveNodeId(const PeerId & peerId, Inet::IPAddressType type) override;
347+
CHIP_ERROR ResolveNodeId(const PeerId & peerId, Inet::IPAddressType type, bool dnssdCacheBypass) override;
348348
CHIP_ERROR FindCommissionableNodes(DiscoveryFilter filter = DiscoveryFilter()) override;
349349
CHIP_ERROR FindCommissioners(DiscoveryFilter filter = DiscoveryFilter()) override;
350350

@@ -499,7 +499,7 @@ CHIP_ERROR MinMdnsResolver::BrowseNodes(DiscoveryType type, DiscoveryFilter filt
499499
return SendQuery(qname, mdns::Minimal::QType::ANY);
500500
}
501501

502-
CHIP_ERROR MinMdnsResolver::ResolveNodeId(const PeerId & peerId, Inet::IPAddressType type)
502+
CHIP_ERROR MinMdnsResolver::ResolveNodeId(const PeerId & peerId, Inet::IPAddressType type, bool dnssdCacheBypass)
503503
{
504504
mDiscoveryType = DiscoveryType::kOperational;
505505
mActiveResolves.MarkPending(peerId);

src/lib/dnssd/Resolver_ImplNone.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class NoneResolver : public Resolver
3030
void Shutdown() override {}
3131
void SetResolverDelegate(ResolverDelegate *) override {}
3232

33-
CHIP_ERROR ResolveNodeId(const PeerId & peerId, Inet::IPAddressType type) override
33+
CHIP_ERROR ResolveNodeId(const PeerId & peerId, Inet::IPAddressType type, bool dnssdCacheBypass) override
3434
{
3535
ChipLogError(Discovery, "Failed to resolve node ID: dnssd resolving not available");
3636
return CHIP_ERROR_NOT_IMPLEMENTED;

0 commit comments

Comments
 (0)