diff --git a/framework/Android.bp b/framework/Android.bp index 74cecdd351..88c174865c 100644 --- a/framework/Android.bp +++ b/framework/Android.bp @@ -23,26 +23,6 @@ package { default_applicable_licenses: ["frameworks_base_license"], } -java_library { - name: "framework-connectivity-protos", - sdk_version: "module_current", - min_sdk_version: "30", - proto: { - type: "nano", - }, - srcs: [ - // TODO: consider moving relevant .proto files directly to the module directory - ":framework-javastream-protos", - ], - apex_available: [ - "com.android.tethering", - ], - jarjar_rules: "jarjar-rules-proto.txt", - visibility: [ - "//visibility:private", - ], -} - filegroup { name: "framework-connectivity-internal-sources", srcs: [ @@ -109,9 +89,6 @@ java_sdk_library { libs: [ "unsupportedappusage", ], - static_libs: [ - "framework-connectivity-protos", - ], jarjar_rules: "jarjar-rules.txt", permitted_packages: ["android.net"], impl_library_visibility: [ @@ -128,8 +105,9 @@ java_sdk_library { ], } -cc_defaults { - name: "libframework-connectivity-defaults", +cc_library_shared { + name: "libframework-connectivity-jni", + min_sdk_version: "30", cflags: [ "-Wall", "-Werror", @@ -140,38 +118,19 @@ cc_defaults { "-Wno-unguarded-availability", "-Wthread-safety", ], + srcs: [ + "jni/android_net_NetworkUtils.cpp", + "jni/onload.cpp", + ], shared_libs: [ + "libandroid", "liblog", "libnativehelper", ], header_libs: [ "dnsproxyd_protocol_headers", ], -} - -cc_library_static { - name: "libconnectivityframeworkutils", - defaults: ["libframework-connectivity-defaults"], - srcs: [ - "jni/android_net_NetworkUtils.cpp", - ], - shared_libs: ["libandroid_net"], - apex_available: [ - "//apex_available:platform", - "com.android.tethering", - ], -} - -cc_library_shared { - name: "libframework-connectivity-jni", - min_sdk_version: "30", - defaults: ["libframework-connectivity-defaults"], - srcs: [ - "jni/android_net_NetworkUtils.cpp", - "jni/onload.cpp", - ], - shared_libs: ["libandroid"], - stl: "libc++_static", + stl: "none", apex_available: [ "com.android.tethering", ], diff --git a/framework/jarjar-rules-proto.txt b/framework/jarjar-rules-proto.txt deleted file mode 100644 index 37b4dec1c3..0000000000 --- a/framework/jarjar-rules-proto.txt +++ /dev/null @@ -1,3 +0,0 @@ -keep android.net.NetworkCapabilitiesProto -keep android.net.NetworkProto -keep android.net.NetworkRequestProto diff --git a/framework/jarjar-rules.txt b/framework/jarjar-rules.txt index 7474c246a2..2e5848cb10 100644 --- a/framework/jarjar-rules.txt +++ b/framework/jarjar-rules.txt @@ -1,11 +1,2 @@ rule com.android.net.module.util.** android.net.connectivity.framework.util.@1 rule android.net.NetworkFactory* android.net.connectivity.framework.NetworkFactory@1 - -# TODO (b/149403767): remove the annotations from net-utils-device-common instead of here -zap android.annotation.** -zap com.android.net.module.annotation.** -zap com.android.internal.annotations.** - -rule android.net.NetworkCapabilitiesProto* android.net.connectivity.proto.NetworkCapabilitiesProto@1 -rule android.net.NetworkProto* android.net.connectivity.proto.NetworkProto@1 -rule android.net.NetworkRequestProto* android.net.connectivity.proto.NetworkRequestProto@1 diff --git a/framework/jni/android_net_NetworkUtils.cpp b/framework/jni/android_net_NetworkUtils.cpp index e8bb42df6a..9bf910b46a 100644 --- a/framework/jni/android_net_NetworkUtils.cpp +++ b/framework/jni/android_net_NetworkUtils.cpp @@ -16,34 +16,19 @@ #define LOG_TAG "NetworkUtils" -#include - #include #include -#include #include -#include #include -#include -#include -#include -#include +#include +#include #include // NETID_USE_LOCAL_NAMESERVERS -#include -#include #include -#include #include -#include #include "jni.h" -extern "C" { -int ifc_enable(const char *ifname); -int ifc_disable(const char *ifname); -} - #define NETUTILS_PKG_NAME "android/net/NetworkUtils" namespace android { @@ -52,6 +37,9 @@ constexpr int MAXPACKETSIZE = 8 * 1024; // FrameworkListener limits the size of commands to 4096 bytes. constexpr int MAXCMDSIZE = 4096; +static volatile jclass class_Network = 0; +static volatile jmethodID method_fromNetworkHandle = 0; + static inline jclass FindClassOrDie(JNIEnv* env, const char* class_name) { jclass clazz = env->FindClass(class_name); LOG_ALWAYS_FATAL_IF(clazz == NULL, "Unable to find class %s", class_name); @@ -138,11 +126,11 @@ static jobject android_net_utils_resNetworkQuery(JNIEnv *env, jobject thiz, jlon // Only allow dname which could be simply formatted to UTF8. // In native layer, res_mkquery would re-format the input char array to packet. - std::vector queryname(byteCountUTF8 + 1, 0); + char queryname[byteCountUTF8 + 1]; + memset(queryname, 0, (byteCountUTF8 + 1) * sizeof(char)); - env->GetStringUTFRegion(dname, 0, javaCharsCount, queryname.data()); - - int fd = android_res_nquery(netHandle, queryname.data(), ns_class, ns_type, flags); + env->GetStringUTFRegion(dname, 0, javaCharsCount, queryname); + int fd = android_res_nquery(netHandle, queryname, ns_class, ns_type, flags); if (fd < 0) { jniThrowErrnoException(env, "resNetworkQuery", -fd); @@ -170,9 +158,9 @@ static jobject android_net_utils_resNetworkSend(JNIEnv *env, jobject thiz, jlong static jobject android_net_utils_resNetworkResult(JNIEnv *env, jobject thiz, jobject javaFd) { int fd = AFileDescriptor_getFD(env, javaFd); int rcode; - std::vector buf(MAXPACKETSIZE, 0); + uint8_t buf[MAXPACKETSIZE] = {0}; - int res = android_res_nresult(fd, &rcode, buf.data(), MAXPACKETSIZE); + int res = android_res_nresult(fd, &rcode, buf, MAXPACKETSIZE); jniSetFileDescriptorOfFD(env, javaFd, -1); if (res < 0) { jniThrowErrnoException(env, "resNetworkResult", -res); @@ -184,8 +172,7 @@ static jobject android_net_utils_resNetworkResult(JNIEnv *env, jobject thiz, job jniThrowErrnoException(env, "resNetworkResult", ENOMEM); return nullptr; } else { - env->SetByteArrayRegion(answer, 0, res, - reinterpret_cast(buf.data())); + env->SetByteArrayRegion(answer, 0, res, reinterpret_cast(buf)); } jclass class_DnsResponse = env->FindClass("android/net/DnsResolver$DnsResponse"); @@ -207,11 +194,14 @@ static jobject android_net_utils_getDnsNetwork(JNIEnv *env, jobject thiz) { return nullptr; } - static jclass class_Network = MakeGlobalRefOrDie( - env, FindClassOrDie(env, "android/net/Network")); - static jmethodID method = env->GetStaticMethodID(class_Network, "fromNetworkHandle", - "(J)Landroid/net/Network;"); - return env->CallStaticObjectMethod(class_Network, method, static_cast(dnsNetHandle)); + if (method_fromNetworkHandle == 0) { + // This may be called multiple times concurrently but that is fine + class_Network = MakeGlobalRefOrDie(env, FindClassOrDie(env, "android/net/Network")); + method_fromNetworkHandle = env->GetStaticMethodID(class_Network, "fromNetworkHandle", + "(J)Landroid/net/Network;"); + } + return env->CallStaticObjectMethod(class_Network, method_fromNetworkHandle, + static_cast(dnsNetHandle)); } static jobject android_net_utils_getTcpRepairWindow(JNIEnv *env, jobject thiz, jobject javaFd) { diff --git a/framework/src/android/net/NetworkRequest.java b/framework/src/android/net/NetworkRequest.java index 5313f08fff..88cbf5c5ea 100644 --- a/framework/src/android/net/NetworkRequest.java +++ b/framework/src/android/net/NetworkRequest.java @@ -655,25 +655,6 @@ public class NetworkRequest implements Parcelable { ", " + networkCapabilities.toString() + " ]"; } - private int typeToProtoEnum(Type t) { - switch (t) { - case NONE: - return NetworkRequestProto.TYPE_NONE; - case LISTEN: - return NetworkRequestProto.TYPE_LISTEN; - case TRACK_DEFAULT: - return NetworkRequestProto.TYPE_TRACK_DEFAULT; - case REQUEST: - return NetworkRequestProto.TYPE_REQUEST; - case BACKGROUND_REQUEST: - return NetworkRequestProto.TYPE_BACKGROUND_REQUEST; - case TRACK_SYSTEM_DEFAULT: - return NetworkRequestProto.TYPE_TRACK_SYSTEM_DEFAULT; - default: - return NetworkRequestProto.TYPE_UNKNOWN; - } - } - public boolean equals(@Nullable Object obj) { if (obj instanceof NetworkRequest == false) return false; NetworkRequest that = (NetworkRequest)obj;