Add simple NetdService util class
Hopefully we can avoid a small amount of repeated wrapper code.
Bug: 21859053
Bug: 28135208
Change-Id: I00f404f19c14a1726071e62e558f551dccf8b915
diff --git a/services/core/java/com/android/server/connectivity/tethering/IPv6TetheringInterfaceServices.java b/services/core/java/com/android/server/connectivity/tethering/IPv6TetheringInterfaceServices.java
index 7525f30..c2c1a8c 100644
--- a/services/core/java/com/android/server/connectivity/tethering/IPv6TetheringInterfaceServices.java
+++ b/services/core/java/com/android/server/connectivity/tethering/IPv6TetheringInterfaceServices.java
@@ -25,6 +25,7 @@
import android.net.RouteInfo;
import android.net.ip.RouterAdvertisementDaemon;
import android.net.ip.RouterAdvertisementDaemon.RaParams;
+import android.net.util.NetdService;
import android.os.INetworkManagementService;
import android.os.ServiceSpecificException;
import android.os.RemoteException;
@@ -193,7 +194,7 @@
private void configureLocalDns(
HashSet<Inet6Address> deprecatedDnses, HashSet<Inet6Address> newDnses) {
- INetd netd = getNetdServiceOrNull();
+ final INetd netd = NetdService.getInstance();
if (netd == null) {
if (newDnses != null) newDnses.clear();
Log.e(TAG, "No netd service instance available; not setting local IPv6 addresses");
@@ -265,18 +266,6 @@
return localRoutes;
}
- private INetd getNetdServiceOrNull() {
- if (mNMService != null) {
- try {
- return mNMService.getNetdService();
- } catch (RemoteException ignored) {
- // This blocks until netd can be reached, but it can return
- // null during a netd crash.
- }
- }
- return null;
- }
-
// Given a prefix like 2001:db8::/64 return 2001:db8::1.
private static Inet6Address getLocalDnsIpFor(IpPrefix localPrefix) {
final byte[] dnsBytes = localPrefix.getRawAddress();
diff --git a/services/net/Android.mk b/services/net/Android.mk
index 336bc45..920f7c0ab 100644
--- a/services/net/Android.mk
+++ b/services/net/Android.mk
@@ -5,6 +5,10 @@
LOCAL_MODULE := services.net
LOCAL_SRC_FILES += \
- $(call all-java-files-under,java)
+ $(call all-java-files-under,java) \
+ ../../../../system/netd/server/binder/android/net/INetd.aidl
+
+LOCAL_AIDL_INCLUDES += \
+ system/netd/server/binder
include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/services/net/java/android/net/util/NetdService.java b/services/net/java/android/net/util/NetdService.java
new file mode 100644
index 0000000..153cb50
--- /dev/null
+++ b/services/net/java/android/net/util/NetdService.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package android.net.util;
+
+import android.net.INetd;
+import android.os.ServiceManager;
+import android.util.Log;
+
+
+/**
+ * @hide
+ */
+public class NetdService {
+ private static final String TAG = NetdService.class.getSimpleName();
+ private static final String NETD_SERVICE_NAME = "netd";
+
+ /**
+ * It is the caller's responsibility to check for a null return value
+ * and to handle RemoteException errors from invocations on the returned
+ * interface if, for example, netd dies and is restarted.
+ *
+ * @return an INetd instance or null.
+ */
+ public static INetd getInstance() {
+ final INetd netdInstance = INetd.Stub.asInterface(
+ ServiceManager.getService(NETD_SERVICE_NAME));
+ if (netdInstance == null) {
+ Log.w(TAG, "WARNING: returning null INetd instance.");
+ }
+ return netdInstance;
+ }
+}