diff options
| author | paulhu <paulhu@google.com> | 2020-12-15 11:03:52 +0800 |
|---|---|---|
| committer | paulhu <paulhu@google.com> | 2021-01-18 16:03:28 +0800 |
| commit | dcadba54be95a1f679465d5c6ce549825cb820c8 (patch) | |
| tree | 8f0554e362ab1a7fa988b917a840c05abf70106d /ResolverController.cpp | |
| parent | 34c67cbd7801abcae091d5e85ebabe9d3077bee5 (diff) | |
[DRUEL04] Implement unsolicited NAT64 prefix event
Implement unsolicited NAT64 prefix event that will report to the
listener when change NAT64 prefix.
Bug: 173485754
Test: atest resolv_integration_test resolv_unit_test\
resolv_stress_test resolv_stats_test_utils_test
Change-Id: If20353529969ffa956b56d19345519f286046e25
Diffstat (limited to 'ResolverController.cpp')
| -rw-r--r-- | ResolverController.cpp | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/ResolverController.cpp b/ResolverController.cpp index 7b181e2e..b193af11 100644 --- a/ResolverController.cpp +++ b/ResolverController.cpp @@ -35,6 +35,8 @@ #include "stats.h" using aidl::android::net::ResolverParamsParcel; +using aidl::android::net::resolv::aidl::IDnsResolverUnsolicitedEventListener; +using aidl::android::net::resolv::aidl::Nat64PrefixEventParcel; namespace android { @@ -45,14 +47,30 @@ namespace net { namespace { void sendNat64PrefixEvent(const Dns64Configuration::Nat64PrefixInfo& args) { + LOG(DEBUG) << "Sending Nat64Prefix " << (args.added ? "added" : "removed") << " event on netId " + << args.netId << " with address {" << args.prefixString << "(" << args.prefixLength + << ")}"; + // Send a nat64 prefix event to NetdEventListenerService. const auto& listeners = ResolverEventReporter::getInstance().getListeners(); - if (listeners.size() == 0) { - LOG(ERROR) << __func__ << ": No available listener. dropping NAT64 prefix event"; - return; + if (listeners.empty()) { + LOG(ERROR) << __func__ << ": No available listener. Skipping NAT64 prefix event"; } for (const auto& it : listeners) { it->onNat64PrefixEvent(args.netId, args.added, args.prefixString, args.prefixLength); } + + const auto& unsolEventListeners = ResolverEventReporter::getInstance().getUnsolEventListeners(); + const Nat64PrefixEventParcel nat64PrefixEvent = { + .netId = static_cast<int32_t>(args.netId), + .prefixOperation = + args.added ? IDnsResolverUnsolicitedEventListener::PREFIX_OPERATION_ADDED + : IDnsResolverUnsolicitedEventListener::PREFIX_OPERATION_REMOVED, + .prefixAddress = args.prefixString, + .prefixLength = args.prefixLength, + }; + for (const auto& it : unsolEventListeners) { + it->onNat64PrefixEvent(nat64PrefixEvent); + } } int getDnsInfo(unsigned netId, std::vector<std::string>* servers, std::vector<std::string>* domains, |
