diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-05-12 18:46:43 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-05-12 18:46:43 +0000 |
commit | 8037e486ef5a5029ca8f8a71084fdcdd449d3214 (patch) | |
tree | 54aada10011b17c300209626c15fe0ade9d0ece1 | |
parent | 127b7a878ce815e3dc18164271183bdd09548eff (diff) | |
parent | ef5e791312fbed4ead02809893039d8e21b43a03 (diff) | |
download | net-main-cg-testing-release.tar.gz |
Snap for 8580505 from ef5e791312fbed4ead02809893039d8e21b43a03 to main-cg-testing-releasemain-cg-testing-release
Change-Id: Ic90ec8213051ee65e913a36143b6e5588b158dac
-rw-r--r-- | common/device/com/android/net/module/util/BpfMap.java | 32 | ||||
-rw-r--r-- | common/native/bpfmapjni/com_android_net_module_util_BpfMap.cpp | 11 |
2 files changed, 16 insertions, 27 deletions
diff --git a/common/device/com/android/net/module/util/BpfMap.java b/common/device/com/android/net/module/util/BpfMap.java index f1420c21..0ee862ac 100644 --- a/common/device/com/android/net/module/util/BpfMap.java +++ b/common/device/com/android/net/module/util/BpfMap.java @@ -18,6 +18,7 @@ package com.android.net.module.util; import static android.system.OsConstants.EEXIST; import static android.system.OsConstants.ENOENT; +import android.os.ParcelFileDescriptor; import android.system.ErrnoException; import androidx.annotation.NonNull; @@ -26,6 +27,7 @@ import androidx.annotation.VisibleForTesting; import com.android.net.module.util.Struct; +import java.io.IOException; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.NoSuchElementException; @@ -57,7 +59,7 @@ public class BpfMap<K extends Struct, V extends Struct> implements IBpfMap<K, V> private static final int BPF_NOEXIST = 1; private static final int BPF_EXIST = 2; - private final int mMapFd; + private final ParcelFileDescriptor mMapFd; private final Class<K> mKeyClass; private final Class<V> mValueClass; private final int mKeySize; @@ -72,8 +74,7 @@ public class BpfMap<K extends Struct, V extends Struct> implements IBpfMap<K, V> */ public BpfMap(@NonNull final String path, final int flag, final Class<K> key, final Class<V> value) throws ErrnoException, NullPointerException { - mMapFd = bpfFdGet(path, flag); - + mMapFd = ParcelFileDescriptor.adoptFd(bpfFdGet(path, flag)); mKeyClass = key; mValueClass = value; mKeySize = Struct.getSize(key); @@ -85,10 +86,11 @@ public class BpfMap<K extends Struct, V extends Struct> implements IBpfMap<K, V> * The derived class implements an internal mocked map. It need to implement all functions * which are related with the native BPF map because the BPF map handler is not initialized. * See BpfCoordinatorTest#TestBpfMap. + * TODO: remove once TestBpfMap derive from IBpfMap. */ @VisibleForTesting protected BpfMap(final Class<K> key, final Class<V> value) { - mMapFd = -1; + mMapFd = ParcelFileDescriptor.adoptFd(-1 /*invalid*/); // unused mKeyClass = key; mValueClass = value; mKeySize = Struct.getSize(key); @@ -101,7 +103,7 @@ public class BpfMap<K extends Struct, V extends Struct> implements IBpfMap<K, V> */ @Override public void updateEntry(K key, V value) throws ErrnoException { - writeToMapEntry(mMapFd, key.writeToBytes(), value.writeToBytes(), BPF_ANY); + writeToMapEntry(mMapFd.getFd(), key.writeToBytes(), value.writeToBytes(), BPF_ANY); } /** @@ -112,7 +114,7 @@ public class BpfMap<K extends Struct, V extends Struct> implements IBpfMap<K, V> public void insertEntry(K key, V value) throws ErrnoException, IllegalStateException { try { - writeToMapEntry(mMapFd, key.writeToBytes(), value.writeToBytes(), BPF_NOEXIST); + writeToMapEntry(mMapFd.getFd(), key.writeToBytes(), value.writeToBytes(), BPF_NOEXIST); } catch (ErrnoException e) { if (e.errno == EEXIST) throw new IllegalStateException(key + " already exists"); @@ -128,7 +130,7 @@ public class BpfMap<K extends Struct, V extends Struct> implements IBpfMap<K, V> public void replaceEntry(K key, V value) throws ErrnoException, NoSuchElementException { try { - writeToMapEntry(mMapFd, key.writeToBytes(), value.writeToBytes(), BPF_EXIST); + writeToMapEntry(mMapFd.getFd(), key.writeToBytes(), value.writeToBytes(), BPF_EXIST); } catch (ErrnoException e) { if (e.errno == ENOENT) throw new NoSuchElementException(key + " not found"); @@ -146,13 +148,13 @@ public class BpfMap<K extends Struct, V extends Struct> implements IBpfMap<K, V> public boolean insertOrReplaceEntry(K key, V value) throws ErrnoException { try { - writeToMapEntry(mMapFd, key.writeToBytes(), value.writeToBytes(), BPF_NOEXIST); + writeToMapEntry(mMapFd.getFd(), key.writeToBytes(), value.writeToBytes(), BPF_NOEXIST); return true; /* insert succeeded */ } catch (ErrnoException e) { if (e.errno != EEXIST) throw e; } try { - writeToMapEntry(mMapFd, key.writeToBytes(), value.writeToBytes(), BPF_EXIST); + writeToMapEntry(mMapFd.getFd(), key.writeToBytes(), value.writeToBytes(), BPF_EXIST); return false; /* replace succeeded */ } catch (ErrnoException e) { if (e.errno != ENOENT) throw e; @@ -169,7 +171,7 @@ public class BpfMap<K extends Struct, V extends Struct> implements IBpfMap<K, V> /** Remove existing key from eBpf map. Return false if map was not modified. */ @Override public boolean deleteEntry(K key) throws ErrnoException { - return deleteMapEntry(mMapFd, key.writeToBytes()); + return deleteMapEntry(mMapFd.getFd(), key.writeToBytes()); } /** Returns {@code true} if this map contains no elements. */ @@ -202,7 +204,7 @@ public class BpfMap<K extends Struct, V extends Struct> implements IBpfMap<K, V> private byte[] getNextRawKey(@Nullable final byte[] key) throws ErrnoException { byte[] nextKey = new byte[mKeySize]; - if (getNextMapKey(mMapFd, key, nextKey)) return nextKey; + if (getNextMapKey(mMapFd.getFd(), key, nextKey)) return nextKey; return null; } @@ -237,7 +239,7 @@ public class BpfMap<K extends Struct, V extends Struct> implements IBpfMap<K, V> private byte[] getRawValue(final byte[] key) throws ErrnoException { byte[] value = new byte[mValueSize]; - if (findMapEntry(mMapFd, key, value)) return value; + if (findMapEntry(mMapFd.getFd(), key, value)) return value; return null; } @@ -262,8 +264,8 @@ public class BpfMap<K extends Struct, V extends Struct> implements IBpfMap<K, V> } @Override - public void close() throws ErrnoException { - closeMap(mMapFd); + public void close() throws IOException { + mMapFd.close(); } /** @@ -281,8 +283,6 @@ public class BpfMap<K extends Struct, V extends Struct> implements IBpfMap<K, V> } } - private static native int closeMap(int fd) throws ErrnoException; - private native int bpfFdGet(String path, int mode) throws ErrnoException, NullPointerException; private native void writeToMapEntry(int fd, byte[] key, byte[] value, int flags) diff --git a/common/native/bpfmapjni/com_android_net_module_util_BpfMap.cpp b/common/native/bpfmapjni/com_android_net_module_util_BpfMap.cpp index e25e17de..e3f48e56 100644 --- a/common/native/bpfmapjni/com_android_net_module_util_BpfMap.cpp +++ b/common/native/bpfmapjni/com_android_net_module_util_BpfMap.cpp @@ -27,15 +27,6 @@ namespace android { -static jint com_android_net_module_util_BpfMap_closeMap(JNIEnv *env, jobject clazz, - jint fd) { - int ret = close(fd); - - if (ret) jniThrowErrnoException(env, "closeMap", errno); - - return ret; -} - static jint com_android_net_module_util_BpfMap_bpfFdGet(JNIEnv *env, jobject clazz, jstring path, jint mode) { ScopedUtfChars pathname(env, path); @@ -112,8 +103,6 @@ static jboolean com_android_net_module_util_BpfMap_findMapEntry(JNIEnv *env, job */ static const JNINativeMethod gMethods[] = { /* name, signature, funcPtr */ - { "closeMap", "(I)I", - (void*) com_android_net_module_util_BpfMap_closeMap }, { "bpfFdGet", "(Ljava/lang/String;I)I", (void*) com_android_net_module_util_BpfMap_bpfFdGet }, { "writeToMapEntry", "(I[B[BI)V", |