From 887a22cc4a3bf0372908d5b1b06980953ad803c2 Mon Sep 17 00:00:00 2001 From: Hungming Chen Date: Wed, 9 Feb 2022 14:22:36 +0800 Subject: [PATCH] Move Tether4Key and Tether4Value to common libs EthernetTetheringTest needs to parse BPF map content for IPv4 forwarding rule tests. Move the struct class files to common libs. Compare Tether4{Key, Value}.java between frameworks/libs/net/common and packages/modules/Connectivity/Tethering. There is only the package name change as expected. $ diff packages/modules/Connectivity/Tethering/src/com/android/networkstack/tethering/Tether4Key.java frameworks/libs/net/common/device/com/android/net/module/util/bpf/Tether4Key.java 17c17 < package com.android.networkstack.tethering; --- > package com.android.net.module.util.bpf; $ diff packages/modules/Connectivity/Tethering/src/com/android/networkstack/tethering/Tether4Value.java frameworks/libs/net/common/device/com/android/net/module/util/bpf/Tether4Value.java 17c17 < package com.android.networkstack.tethering; --- > package com.android.net.module.util.bpf; Test: atest TetheringCoverageTests Change-Id: I73c180fa4129aefde1e64ecbafe928f388b061d6 --- .../apishim/api30/BpfCoordinatorShimImpl.java | 4 +- .../apishim/api31/BpfCoordinatorShimImpl.java | 4 +- .../apishim/common/BpfCoordinatorShim.java | 4 +- .../tethering/BpfCoordinator.java | 2 + .../networkstack/tethering/Tether4Key.java | 81 ---------------- .../networkstack/tethering/Tether4Value.java | 97 ------------------- .../unit/src/android/net/ip/IpServerTest.java | 4 +- .../tethering/BpfCoordinatorTest.java | 2 + 8 files changed, 12 insertions(+), 186 deletions(-) delete mode 100644 Tethering/src/com/android/networkstack/tethering/Tether4Key.java delete mode 100644 Tethering/src/com/android/networkstack/tethering/Tether4Value.java diff --git a/Tethering/apishim/30/com/android/networkstack/tethering/apishim/api30/BpfCoordinatorShimImpl.java b/Tethering/apishim/30/com/android/networkstack/tethering/apishim/api30/BpfCoordinatorShimImpl.java index a33af615bb..26040a2887 100644 --- a/Tethering/apishim/30/com/android/networkstack/tethering/apishim/api30/BpfCoordinatorShimImpl.java +++ b/Tethering/apishim/30/com/android/networkstack/tethering/apishim/api30/BpfCoordinatorShimImpl.java @@ -27,10 +27,10 @@ import android.util.SparseArray; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.android.net.module.util.bpf.Tether4Key; +import com.android.net.module.util.bpf.Tether4Value; import com.android.networkstack.tethering.BpfCoordinator.Dependencies; import com.android.networkstack.tethering.BpfCoordinator.Ipv6ForwardingRule; -import com.android.networkstack.tethering.Tether4Key; -import com.android.networkstack.tethering.Tether4Value; import com.android.networkstack.tethering.TetherStatsValue; import java.util.function.BiConsumer; diff --git a/Tethering/apishim/31/com/android/networkstack/tethering/apishim/api31/BpfCoordinatorShimImpl.java b/Tethering/apishim/31/com/android/networkstack/tethering/apishim/api31/BpfCoordinatorShimImpl.java index 7189933a38..e3b1539ff9 100644 --- a/Tethering/apishim/31/com/android/networkstack/tethering/apishim/api31/BpfCoordinatorShimImpl.java +++ b/Tethering/apishim/31/com/android/networkstack/tethering/apishim/api31/BpfCoordinatorShimImpl.java @@ -30,11 +30,11 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.net.module.util.BpfMap; +import com.android.net.module.util.bpf.Tether4Key; +import com.android.net.module.util.bpf.Tether4Value; import com.android.networkstack.tethering.BpfCoordinator.Dependencies; import com.android.networkstack.tethering.BpfCoordinator.Ipv6ForwardingRule; import com.android.networkstack.tethering.BpfUtils; -import com.android.networkstack.tethering.Tether4Key; -import com.android.networkstack.tethering.Tether4Value; import com.android.networkstack.tethering.Tether6Value; import com.android.networkstack.tethering.TetherDevKey; import com.android.networkstack.tethering.TetherDevValue; diff --git a/Tethering/apishim/common/com/android/networkstack/tethering/apishim/common/BpfCoordinatorShim.java b/Tethering/apishim/common/com/android/networkstack/tethering/apishim/common/BpfCoordinatorShim.java index 08ab9caa97..d66396849c 100644 --- a/Tethering/apishim/common/com/android/networkstack/tethering/apishim/common/BpfCoordinatorShim.java +++ b/Tethering/apishim/common/com/android/networkstack/tethering/apishim/common/BpfCoordinatorShim.java @@ -22,10 +22,10 @@ import android.util.SparseArray; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.android.net.module.util.bpf.Tether4Key; +import com.android.net.module.util.bpf.Tether4Value; import com.android.networkstack.tethering.BpfCoordinator.Dependencies; import com.android.networkstack.tethering.BpfCoordinator.Ipv6ForwardingRule; -import com.android.networkstack.tethering.Tether4Key; -import com.android.networkstack.tethering.Tether4Value; import com.android.networkstack.tethering.TetherStatsValue; import java.util.function.BiConsumer; diff --git a/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java b/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java index 8c8a2fd101..40956f7876 100644 --- a/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java +++ b/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java @@ -65,6 +65,8 @@ import com.android.net.module.util.BpfMap; import com.android.net.module.util.CollectionUtils; import com.android.net.module.util.NetworkStackConstants; import com.android.net.module.util.Struct; +import com.android.net.module.util.bpf.Tether4Key; +import com.android.net.module.util.bpf.Tether4Value; import com.android.net.module.util.netlink.ConntrackMessage; import com.android.net.module.util.netlink.NetlinkConstants; import com.android.net.module.util.netlink.NetlinkSocket; diff --git a/Tethering/src/com/android/networkstack/tethering/Tether4Key.java b/Tethering/src/com/android/networkstack/tethering/Tether4Key.java deleted file mode 100644 index a01ea34c68..0000000000 --- a/Tethering/src/com/android/networkstack/tethering/Tether4Key.java +++ /dev/null @@ -1,81 +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. - */ - -package com.android.networkstack.tethering; - -import android.net.MacAddress; - -import androidx.annotation.NonNull; - -import com.android.net.module.util.Struct; -import com.android.net.module.util.Struct.Field; -import com.android.net.module.util.Struct.Type; - -import java.net.Inet4Address; -import java.net.UnknownHostException; -import java.util.Objects; - -/** Key type for downstream & upstream IPv4 forwarding maps. */ -public class Tether4Key extends Struct { - @Field(order = 0, type = Type.U32) - public final long iif; - - @Field(order = 1, type = Type.EUI48) - public final MacAddress dstMac; - - @Field(order = 2, type = Type.U8, padding = 1) - public final short l4proto; - - @Field(order = 3, type = Type.ByteArray, arraysize = 4) - public final byte[] src4; - - @Field(order = 4, type = Type.ByteArray, arraysize = 4) - public final byte[] dst4; - - @Field(order = 5, type = Type.UBE16) - public final int srcPort; - - @Field(order = 6, type = Type.UBE16) - public final int dstPort; - - public Tether4Key(final long iif, @NonNull final MacAddress dstMac, final short l4proto, - final byte[] src4, final byte[] dst4, final int srcPort, - final int dstPort) { - Objects.requireNonNull(dstMac); - - this.iif = iif; - this.dstMac = dstMac; - this.l4proto = l4proto; - this.src4 = src4; - this.dst4 = dst4; - this.srcPort = srcPort; - this.dstPort = dstPort; - } - - @Override - public String toString() { - try { - return String.format( - "iif: %d, dstMac: %s, l4proto: %d, src4: %s, dst4: %s, " - + "srcPort: %d, dstPort: %d", - iif, dstMac, l4proto, - Inet4Address.getByAddress(src4), Inet4Address.getByAddress(dst4), - Short.toUnsignedInt((short) srcPort), Short.toUnsignedInt((short) dstPort)); - } catch (UnknownHostException | IllegalArgumentException e) { - return String.format("Invalid IP address", e); - } - } -} diff --git a/Tethering/src/com/android/networkstack/tethering/Tether4Value.java b/Tethering/src/com/android/networkstack/tethering/Tether4Value.java deleted file mode 100644 index 03a226ce45..0000000000 --- a/Tethering/src/com/android/networkstack/tethering/Tether4Value.java +++ /dev/null @@ -1,97 +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. - */ - -package com.android.networkstack.tethering; - -import android.net.MacAddress; - -import androidx.annotation.NonNull; - -import com.android.net.module.util.Struct; -import com.android.net.module.util.Struct.Field; -import com.android.net.module.util.Struct.Type; - -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.util.Objects; - -/** Value type for downstream & upstream IPv4 forwarding maps. */ -public class Tether4Value extends Struct { - @Field(order = 0, type = Type.U32) - public final long oif; - - // The ethhdr struct which is defined in uapi/linux/if_ether.h - @Field(order = 1, type = Type.EUI48) - public final MacAddress ethDstMac; - @Field(order = 2, type = Type.EUI48) - public final MacAddress ethSrcMac; - @Field(order = 3, type = Type.UBE16) - public final int ethProto; // Packet type ID field. - - @Field(order = 4, type = Type.U16) - public final int pmtu; - - @Field(order = 5, type = Type.ByteArray, arraysize = 16) - public final byte[] src46; - - @Field(order = 6, type = Type.ByteArray, arraysize = 16) - public final byte[] dst46; - - @Field(order = 7, type = Type.UBE16) - public final int srcPort; - - @Field(order = 8, type = Type.UBE16) - public final int dstPort; - - // TODO: consider using U64. - @Field(order = 9, type = Type.U63) - public final long lastUsed; - - public Tether4Value(final long oif, @NonNull final MacAddress ethDstMac, - @NonNull final MacAddress ethSrcMac, final int ethProto, final int pmtu, - final byte[] src46, final byte[] dst46, final int srcPort, - final int dstPort, final long lastUsed) { - Objects.requireNonNull(ethDstMac); - Objects.requireNonNull(ethSrcMac); - - this.oif = oif; - this.ethDstMac = ethDstMac; - this.ethSrcMac = ethSrcMac; - this.ethProto = ethProto; - this.pmtu = pmtu; - this.src46 = src46; - this.dst46 = dst46; - this.srcPort = srcPort; - this.dstPort = dstPort; - this.lastUsed = lastUsed; - } - - @Override - public String toString() { - try { - return String.format( - "oif: %d, ethDstMac: %s, ethSrcMac: %s, ethProto: %d, pmtu: %d, " - + "src46: %s, dst46: %s, srcPort: %d, dstPort: %d, " - + "lastUsed: %d", - oif, ethDstMac, ethSrcMac, ethProto, pmtu, - InetAddress.getByAddress(src46), InetAddress.getByAddress(dst46), - Short.toUnsignedInt((short) srcPort), Short.toUnsignedInt((short) dstPort), - lastUsed); - } catch (UnknownHostException | IllegalArgumentException e) { - return String.format("Invalid IP address", e); - } - } -} diff --git a/Tethering/tests/unit/src/android/net/ip/IpServerTest.java b/Tethering/tests/unit/src/android/net/ip/IpServerTest.java index 267c37650f..a3c46c2fbd 100644 --- a/Tethering/tests/unit/src/android/net/ip/IpServerTest.java +++ b/Tethering/tests/unit/src/android/net/ip/IpServerTest.java @@ -101,11 +101,11 @@ import androidx.test.runner.AndroidJUnit4; import com.android.net.module.util.BpfMap; import com.android.net.module.util.NetworkStackConstants; +import com.android.net.module.util.bpf.Tether4Key; +import com.android.net.module.util.bpf.Tether4Value; import com.android.networkstack.tethering.BpfCoordinator; import com.android.networkstack.tethering.BpfCoordinator.Ipv6ForwardingRule; import com.android.networkstack.tethering.PrivateAddressCoordinator; -import com.android.networkstack.tethering.Tether4Key; -import com.android.networkstack.tethering.Tether4Value; import com.android.networkstack.tethering.Tether6Value; import com.android.networkstack.tethering.TetherDevKey; import com.android.networkstack.tethering.TetherDevValue; diff --git a/Tethering/tests/unit/src/com/android/networkstack/tethering/BpfCoordinatorTest.java b/Tethering/tests/unit/src/com/android/networkstack/tethering/BpfCoordinatorTest.java index d51f6fd4b9..6c7a66dc47 100644 --- a/Tethering/tests/unit/src/com/android/networkstack/tethering/BpfCoordinatorTest.java +++ b/Tethering/tests/unit/src/com/android/networkstack/tethering/BpfCoordinatorTest.java @@ -99,6 +99,8 @@ import com.android.dx.mockito.inline.extended.ExtendedMockito; import com.android.net.module.util.BpfMap; import com.android.net.module.util.CollectionUtils; import com.android.net.module.util.NetworkStackConstants; +import com.android.net.module.util.bpf.Tether4Key; +import com.android.net.module.util.bpf.Tether4Value; import com.android.net.module.util.netlink.ConntrackMessage; import com.android.net.module.util.netlink.NetlinkConstants; import com.android.net.module.util.netlink.NetlinkSocket;