aboutsummaryrefslogtreecommitdiff
path: root/ResolverController.cpp
diff options
context:
space:
mode:
authorpaulhu <paulhu@google.com>2020-12-15 11:03:52 +0800
committerpaulhu <paulhu@google.com>2021-01-18 16:03:28 +0800
commitdcadba54be95a1f679465d5c6ce549825cb820c8 (patch)
tree8f0554e362ab1a7fa988b917a840c05abf70106d /ResolverController.cpp
parent34c67cbd7801abcae091d5e85ebabe9d3077bee5 (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.cpp24
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,