ClatdTracker - do not store pointer to NetworkController
Test: build, atest libbpf_android_test libnetdbpf_test netd_integration_test netd_unit_test netdutils_test resolv_integration_test resolv_unit_test
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I677f40fa5f3694ecdc33be999996768e4e851480
diff --git a/server/ClatdController.cpp b/server/ClatdController.cpp
index 50880f8..77eaf5a 100644
--- a/server/ClatdController.cpp
+++ b/server/ClatdController.cpp
@@ -342,14 +342,9 @@
}
// Initializes a ClatdTracker for the specified interface.
-int ClatdController::ClatdTracker::init(const std::string& interface,
+int ClatdController::ClatdTracker::init(unsigned networkId, const std::string& interface,
const std::string& nat64Prefix) {
- netId = netCtrl->getNetworkForInterface(interface.c_str());
- if (netId == NETID_UNSET) {
- ALOGE("Interface %s not assigned to any netId", interface.c_str());
- errno = ENODEV;
- return -errno;
- }
+ netId = networkId;
fwmark.netId = netId;
fwmark.explicitlySelected = true;
@@ -406,11 +401,17 @@
return -errno;
}
- ClatdTracker tracker(mNetCtrl);
- if (int ret = tracker.init(interface, nat64Prefix)) {
- return ret;
+ unsigned networkId = mNetCtrl->getNetworkForInterface(interface.c_str());
+ if (networkId == NETID_UNSET) {
+ ALOGE("Interface %s not assigned to any netId", interface.c_str());
+ errno = ENODEV;
+ return -errno;
}
+ ClatdTracker tracker;
+ int ret = tracker.init(networkId, interface, nat64Prefix);
+ if (ret) return ret;
+
std::string progname("clatd-");
progname += tracker.iface;