summaryrefslogtreecommitdiff
path: root/common/native/bpfmapjni
diff options
context:
space:
mode:
Diffstat (limited to 'common/native/bpfmapjni')
-rw-r--r--common/native/bpfmapjni/Android.bp52
-rw-r--r--common/native/bpfmapjni/com_android_net_module_util_BpfMap.cpp144
-rw-r--r--common/native/bpfmapjni/com_android_net_module_util_TcUtils.cpp121
3 files changed, 0 insertions, 317 deletions
diff --git a/common/native/bpfmapjni/Android.bp b/common/native/bpfmapjni/Android.bp
deleted file mode 100644
index 8babcce3..00000000
--- a/common/native/bpfmapjni/Android.bp
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (C) 2021 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 {
- default_applicable_licenses: ["Android-Apache-2.0"],
-}
-
-cc_library_static {
- name: "libnet_utils_device_common_bpfjni",
- srcs: [
- "com_android_net_module_util_BpfMap.cpp",
- "com_android_net_module_util_TcUtils.cpp",
- ],
- header_libs: [
- "bpf_headers",
- "jni_headers",
- ],
- shared_libs: [
- "liblog",
- "libnativehelper_compat_libc++",
- ],
- whole_static_libs: [
- "libtcutils",
- ],
- cflags: [
- "-Wall",
- "-Werror",
- "-Wno-unused-parameter",
- ],
- sdk_version: "30",
- min_sdk_version: "30",
- apex_available: [
- "com.android.tethering",
- "//apex_available:platform",
- ],
- visibility: [
- "//packages/modules/Connectivity:__subpackages__",
- // TODO: remove after NetworkStatsService moves to the module.
- "//frameworks/base/packages/ConnectivityT/service",
- ],
-}
diff --git a/common/native/bpfmapjni/com_android_net_module_util_BpfMap.cpp b/common/native/bpfmapjni/com_android_net_module_util_BpfMap.cpp
deleted file mode 100644
index f93d6e17..00000000
--- a/common/native/bpfmapjni/com_android_net_module_util_BpfMap.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (C) 2020 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.
- */
-
-#include <errno.h>
-#include <jni.h>
-#include <nativehelper/JNIHelp.h>
-#include <nativehelper/ScopedLocalRef.h>
-
-#include "nativehelper/scoped_primitive_array.h"
-#include "nativehelper/scoped_utf_chars.h"
-
-#define BPF_FD_JUST_USE_INT
-#include "BpfSyscallWrappers.h"
-
-#include "bpf/KernelUtils.h"
-
-namespace android {
-
-static jint com_android_net_module_util_BpfMap_nativeBpfFdGet(JNIEnv *env, jclass clazz,
- jstring path, jint mode, jint keySize, jint valueSize) {
- ScopedUtfChars pathname(env, path);
-
- jint fd = bpf::bpfFdGet(pathname.c_str(), static_cast<unsigned>(mode));
-
- if (fd < 0) {
- jniThrowErrnoException(env, "nativeBpfFdGet", errno);
- return -1;
- }
-
- if (bpf::isAtLeastKernelVersion(4, 14, 0)) {
- // These likely fail with -1 and set errno to EINVAL on <4.14
- if (bpf::bpfGetFdKeySize(fd) != keySize) {
- close(fd);
- jniThrowErrnoException(env, "nativeBpfFdGet KeySize", EBADFD);
- return -1;
- }
- if (bpf::bpfGetFdValueSize(fd) != valueSize) {
- close(fd);
- jniThrowErrnoException(env, "nativeBpfFdGet ValueSize", EBADFD);
- return -1;
- }
- }
-
- return fd;
-}
-
-static void com_android_net_module_util_BpfMap_nativeWriteToMapEntry(JNIEnv *env, jobject self,
- jint fd, jbyteArray key, jbyteArray value, jint flags) {
- ScopedByteArrayRO keyRO(env, key);
- ScopedByteArrayRO valueRO(env, value);
-
- int ret = bpf::writeToMapEntry(static_cast<int>(fd), keyRO.get(), valueRO.get(),
- static_cast<int>(flags));
-
- if (ret) jniThrowErrnoException(env, "nativeWriteToMapEntry", errno);
-}
-
-static jboolean throwIfNotEnoent(JNIEnv *env, const char* functionName, int ret, int err) {
- if (ret == 0) return true;
-
- if (err != ENOENT) jniThrowErrnoException(env, functionName, err);
- return false;
-}
-
-static jboolean com_android_net_module_util_BpfMap_nativeDeleteMapEntry(JNIEnv *env, jobject self,
- jint fd, jbyteArray key) {
- ScopedByteArrayRO keyRO(env, key);
-
- // On success, zero is returned. If the element is not found, -1 is returned and errno is set
- // to ENOENT.
- int ret = bpf::deleteMapEntry(static_cast<int>(fd), keyRO.get());
-
- return throwIfNotEnoent(env, "nativeDeleteMapEntry", ret, errno);
-}
-
-static jboolean com_android_net_module_util_BpfMap_nativeGetNextMapKey(JNIEnv *env, jobject self,
- jint fd, jbyteArray key, jbyteArray nextKey) {
- // If key is found, the operation returns zero and sets the next key pointer to the key of the
- // next element. If key is not found, the operation returns zero and sets the next key pointer
- // to the key of the first element. If key is the last element, -1 is returned and errno is
- // set to ENOENT. Other possible errno values are ENOMEM, EFAULT, EPERM, and EINVAL.
- ScopedByteArrayRW nextKeyRW(env, nextKey);
- int ret;
- if (key == nullptr) {
- // Called by getFirstKey. Find the first key in the map.
- ret = bpf::getNextMapKey(static_cast<int>(fd), nullptr, nextKeyRW.get());
- } else {
- ScopedByteArrayRO keyRO(env, key);
- ret = bpf::getNextMapKey(static_cast<int>(fd), keyRO.get(), nextKeyRW.get());
- }
-
- return throwIfNotEnoent(env, "nativeGetNextMapKey", ret, errno);
-}
-
-static jboolean com_android_net_module_util_BpfMap_nativeFindMapEntry(JNIEnv *env, jobject self,
- jint fd, jbyteArray key, jbyteArray value) {
- ScopedByteArrayRO keyRO(env, key);
- ScopedByteArrayRW valueRW(env, value);
-
- // If an element is found, the operation returns zero and stores the element's value into
- // "value". If no element is found, the operation returns -1 and sets errno to ENOENT.
- int ret = bpf::findMapEntry(static_cast<int>(fd), keyRO.get(), valueRW.get());
-
- return throwIfNotEnoent(env, "nativeFindMapEntry", ret, errno);
-}
-
-/*
- * JNI registration.
- */
-static const JNINativeMethod gMethods[] = {
- /* name, signature, funcPtr */
- { "nativeBpfFdGet", "(Ljava/lang/String;III)I",
- (void*) com_android_net_module_util_BpfMap_nativeBpfFdGet },
- { "nativeWriteToMapEntry", "(I[B[BI)V",
- (void*) com_android_net_module_util_BpfMap_nativeWriteToMapEntry },
- { "nativeDeleteMapEntry", "(I[B)Z",
- (void*) com_android_net_module_util_BpfMap_nativeDeleteMapEntry },
- { "nativeGetNextMapKey", "(I[B[B)Z",
- (void*) com_android_net_module_util_BpfMap_nativeGetNextMapKey },
- { "nativeFindMapEntry", "(I[B[B)Z",
- (void*) com_android_net_module_util_BpfMap_nativeFindMapEntry },
-
-};
-
-int register_com_android_net_module_util_BpfMap(JNIEnv* env, char const* class_name) {
- return jniRegisterNativeMethods(env,
- class_name,
- gMethods, NELEM(gMethods));
-}
-
-}; // namespace android
diff --git a/common/native/bpfmapjni/com_android_net_module_util_TcUtils.cpp b/common/native/bpfmapjni/com_android_net_module_util_TcUtils.cpp
deleted file mode 100644
index cb06afbd..00000000
--- a/common/native/bpfmapjni/com_android_net_module_util_TcUtils.cpp
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2022 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.
- */
-
-#include <jni.h>
-#include <nativehelper/JNIHelp.h>
-#include <nativehelper/scoped_utf_chars.h>
-#include <tcutils/tcutils.h>
-
-namespace android {
-
-static void throwIOException(JNIEnv *env, const char *msg, int error) {
- jniThrowExceptionFmt(env, "java/io/IOException", "%s: %s", msg,
- strerror(error));
-}
-
-static jboolean com_android_net_module_util_TcUtils_isEthernet(JNIEnv *env,
- jobject clazz,
- jstring iface) {
- ScopedUtfChars interface(env, iface);
- bool result = false;
- int error = isEthernet(interface.c_str(), result);
- if (error) {
- throwIOException(
- env, "com_android_net_module_util_TcUtils_isEthernet error: ", -error);
- }
- // result is not touched when error is returned; leave false.
- return result;
-}
-
-// tc filter add dev .. in/egress prio 1 protocol ipv6/ip bpf object-pinned
-// /sys/fs/bpf/... direct-action
-static void com_android_net_module_util_TcUtils_tcFilterAddDevBpf(
- JNIEnv *env, jobject clazz, jint ifIndex, jboolean ingress, jshort prio,
- jshort proto, jstring bpfProgPath) {
- ScopedUtfChars pathname(env, bpfProgPath);
- int error = tcAddBpfFilter(ifIndex, ingress, prio, proto, pathname.c_str());
- if (error) {
- throwIOException(
- env,
- "com_android_net_module_util_TcUtils_tcFilterAddDevBpf error: ", -error);
- }
-}
-
-// tc filter add dev .. ingress prio .. protocol .. matchall \
-// action police rate .. burst .. conform-exceed pipe/continue \
-// action bpf object-pinned .. \
-// drop
-static void com_android_net_module_util_TcUtils_tcFilterAddDevIngressPolice(
- JNIEnv *env, jobject clazz, jint ifIndex, jshort prio, jshort proto,
- jint rateInBytesPerSec, jstring bpfProgPath) {
- ScopedUtfChars pathname(env, bpfProgPath);
- int error = tcAddIngressPoliceFilter(ifIndex, prio, proto, rateInBytesPerSec,
- pathname.c_str());
- if (error) {
- throwIOException(env,
- "com_android_net_module_util_TcUtils_"
- "tcFilterAddDevIngressPolice error: ",
- -error);
- }
-}
-
-// tc filter del dev .. in/egress prio .. protocol ..
-static void com_android_net_module_util_TcUtils_tcFilterDelDev(
- JNIEnv *env, jobject clazz, jint ifIndex, jboolean ingress, jshort prio,
- jshort proto) {
- int error = tcDeleteFilter(ifIndex, ingress, prio, proto);
- if (error) {
- throwIOException(
- env,
- "com_android_net_module_util_TcUtils_tcFilterDelDev error: ", -error);
- }
-}
-
-// tc qdisc add dev .. clsact
-static void com_android_net_module_util_TcUtils_tcQdiscAddDevClsact(JNIEnv *env,
- jobject clazz,
- jint ifIndex) {
- int error = tcAddQdiscClsact(ifIndex);
- if (error) {
- throwIOException(
- env,
- "com_android_net_module_util_TcUtils_tcQdiscAddDevClsact error: ", -error);
- }
-}
-
-/*
- * JNI registration.
- */
-static const JNINativeMethod gMethods[] = {
- /* name, signature, funcPtr */
- {"isEthernet", "(Ljava/lang/String;)Z",
- (void *)com_android_net_module_util_TcUtils_isEthernet},
- {"tcFilterAddDevBpf", "(IZSSLjava/lang/String;)V",
- (void *)com_android_net_module_util_TcUtils_tcFilterAddDevBpf},
- {"tcFilterAddDevIngressPolice", "(ISSILjava/lang/String;)V",
- (void *)com_android_net_module_util_TcUtils_tcFilterAddDevIngressPolice},
- {"tcFilterDelDev", "(IZSS)V",
- (void *)com_android_net_module_util_TcUtils_tcFilterDelDev},
- {"tcQdiscAddDevClsact", "(I)V",
- (void *)com_android_net_module_util_TcUtils_tcQdiscAddDevClsact},
-};
-
-int register_com_android_net_module_util_TcUtils(JNIEnv *env,
- char const *class_name) {
- return jniRegisterNativeMethods(env, class_name, gMethods, NELEM(gMethods));
-}
-
-}; // namespace android