diff --git a/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java b/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java index 89edc32cb8..2dba4d29be 100644 --- a/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java +++ b/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java @@ -1066,7 +1066,7 @@ public class BpfCoordinator { // Find the rules which are related with the given client. mBpfCoordinatorShim.tetherOffloadRuleForEach(UPSTREAM, (k, v) -> { - if (Arrays.equals(k.src4, clientAddr.getAddress())) { + if (Objects.equals(k.src4, clientAddr)) { deleteUpstreamRuleKeys.add(k); } }); @@ -1560,9 +1560,9 @@ public class BpfCoordinator { final String src4, public4, dst4; final int publicPort; try { - src4 = InetAddress.getByAddress(key.src4).getHostAddress(); + src4 = key.src4.getHostAddress(); if (downstream) { - public4 = InetAddress.getByAddress(key.dst4).getHostAddress(); + public4 = key.dst4.getHostAddress(); publicPort = key.dstPort; } else { public4 = InetAddress.getByAddress(value.src46).getHostAddress(); @@ -2120,16 +2120,16 @@ public class BpfCoordinator { private Tether4Key makeTetherUpstream4Key( @NonNull ConntrackEvent e, @NonNull ClientInfo c) { return new Tether4Key(c.downstreamIfindex, c.downstreamMac, - e.tupleOrig.protoNum, e.tupleOrig.srcIp.getAddress(), - e.tupleOrig.dstIp.getAddress(), e.tupleOrig.srcPort, e.tupleOrig.dstPort); + e.tupleOrig.protoNum, e.tupleOrig.srcIp, e.tupleOrig.dstIp, + e.tupleOrig.srcPort, e.tupleOrig.dstPort); } @NonNull private Tether4Key makeTetherDownstream4Key( @NonNull ConntrackEvent e, @NonNull ClientInfo c, int upstreamIndex) { return new Tether4Key(upstreamIndex, NULL_MAC_ADDRESS /* dstMac (rawip) */, - e.tupleReply.protoNum, e.tupleReply.srcIp.getAddress(), - e.tupleReply.dstIp.getAddress(), e.tupleReply.srcPort, e.tupleReply.dstPort); + e.tupleReply.protoNum, e.tupleReply.srcIp, e.tupleReply.dstIp, + e.tupleReply.srcPort, e.tupleReply.dstPort); } @NonNull @@ -2541,9 +2541,8 @@ public class BpfCoordinator { // both directions for TCP. mBpfCoordinatorShim.tetherOffloadRuleForEach(UPSTREAM, (k, v) -> { if ((now - v.lastUsed) / 1_000_000 < CONNTRACK_TIMEOUT_UPDATE_INTERVAL_MS) { - updateConntrackTimeout((byte) k.l4proto, - parseIPv4Address(k.src4), (short) k.srcPort, - parseIPv4Address(k.dst4), (short) k.dstPort); + updateConntrackTimeout((byte) k.l4proto, k.src4, (short) k.srcPort, k.dst4, + (short) k.dstPort); } }); diff --git a/Tethering/tests/integration/src/android/net/EthernetTetheringTest.java b/Tethering/tests/integration/src/android/net/EthernetTetheringTest.java index 3dd9a212dc..3327364ce0 100644 --- a/Tethering/tests/integration/src/android/net/EthernetTetheringTest.java +++ b/Tethering/tests/integration/src/android/net/EthernetTetheringTest.java @@ -1020,9 +1020,9 @@ public class EthernetTetheringTest extends EthernetTetheringTestBase { final Tether4Key upstream4Key = rule.getKey(); assertEquals(IPPROTO_UDP, upstream4Key.l4proto); - assertTrue(Arrays.equals(tethered.ipv4Addr.getAddress(), upstream4Key.src4)); + assertEquals(tethered.ipv4Addr, upstream4Key.src4); assertEquals(LOCAL_PORT, upstream4Key.srcPort); - assertTrue(Arrays.equals(REMOTE_IP4_ADDR.getAddress(), upstream4Key.dst4)); + assertEquals(REMOTE_IP4_ADDR, upstream4Key.dst4); assertEquals(REMOTE_PORT, upstream4Key.dstPort); final Tether4Value upstream4Value = rule.getValue(); 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 f985e1b282..f4a8b4b688 100644 --- a/Tethering/tests/unit/src/com/android/networkstack/tethering/BpfCoordinatorTest.java +++ b/Tethering/tests/unit/src/com/android/networkstack/tethering/BpfCoordinatorTest.java @@ -301,8 +301,8 @@ public class BpfCoordinatorTest { private int mIif = DOWNSTREAM_IFINDEX; private MacAddress mDstMac = DOWNSTREAM_MAC; private short mL4proto = (short) IPPROTO_TCP; - private byte[] mSrc4 = PRIVATE_ADDR.getAddress(); - private byte[] mDst4 = REMOTE_ADDR.getAddress(); + private Inet4Address mSrc4 = PRIVATE_ADDR; + private Inet4Address mDst4 = REMOTE_ADDR; private int mSrcPort = PRIVATE_PORT; private int mDstPort = REMOTE_PORT; @@ -325,8 +325,8 @@ public class BpfCoordinatorTest { private int mIif = UPSTREAM_IFINDEX; private MacAddress mDstMac = MacAddress.ALL_ZEROS_ADDRESS /* dstMac (rawip) */; private short mL4proto = (short) IPPROTO_TCP; - private byte[] mSrc4 = REMOTE_ADDR.getAddress(); - private byte[] mDst4 = PUBLIC_ADDR.getAddress(); + private Inet4Address mSrc4 = REMOTE_ADDR; + private Inet4Address mDst4 = PUBLIC_ADDR; private int mSrcPort = REMOTE_PORT; private int mDstPort = PUBLIC_PORT; @@ -2430,15 +2430,14 @@ public class BpfCoordinatorTest { private static Tether4Key makeUpstream4Key(final int downstreamIfindex, @NonNull final MacAddress downstreamMac, @NonNull final Inet4Address privateAddr, final short privatePort) { - return new Tether4Key(downstreamIfindex, downstreamMac, (short) IPPROTO_TCP, - privateAddr.getAddress(), REMOTE_ADDR.getAddress(), privatePort, REMOTE_PORT); + return new Tether4Key(downstreamIfindex, downstreamMac, (short) IPPROTO_TCP, privateAddr, + REMOTE_ADDR, privatePort, REMOTE_PORT); } @NonNull private static Tether4Key makeDownstream4Key(final short publicPort) { return new Tether4Key(UPSTREAM_IFINDEX, MacAddress.ALL_ZEROS_ADDRESS /* dstMac (rawip) */, - (short) IPPROTO_TCP, REMOTE_ADDR.getAddress(), PUBLIC_ADDR.getAddress(), - REMOTE_PORT, publicPort); + (short) IPPROTO_TCP, REMOTE_ADDR, PUBLIC_ADDR, REMOTE_PORT, publicPort); } @NonNull diff --git a/common/src/com/android/net/module/util/bpf/Tether4Key.java b/common/src/com/android/net/module/util/bpf/Tether4Key.java index 738256a039..edde572bb8 100644 --- a/common/src/com/android/net/module/util/bpf/Tether4Key.java +++ b/common/src/com/android/net/module/util/bpf/Tether4Key.java @@ -21,11 +21,8 @@ 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. */ @@ -39,11 +36,11 @@ public class Tether4Key extends Struct { @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 = 3, type = Type.Ipv4Address) + public final Inet4Address src4; - @Field(order = 4, type = Type.ByteArray, arraysize = 4) - public final byte[] dst4; + @Field(order = 4, type = Type.Ipv4Address) + public final Inet4Address dst4; @Field(order = 5, type = Type.UBE16) public final int srcPort; @@ -52,9 +49,11 @@ public class Tether4Key extends Struct { public final int dstPort; public Tether4Key(final int iif, @NonNull final MacAddress dstMac, final short l4proto, - final byte[] src4, final byte[] dst4, final int srcPort, + @NonNull final Inet4Address src4, @NonNull final Inet4Address dst4, final int srcPort, final int dstPort) { Objects.requireNonNull(dstMac); + Objects.requireNonNull(src4); + Objects.requireNonNull(dst4); this.iif = iif; this.dstMac = dstMac; @@ -67,15 +66,10 @@ public class Tether4Key extends Struct { @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 "Invalid IP address" + e; - } + return String.format( + "iif: %d, dstMac: %s, l4proto: %d, src4: %s, dst4: %s, " + + "srcPort: %d, dstPort: %d", + iif, dstMac, l4proto, src4, dst4, + Short.toUnsignedInt((short) srcPort), Short.toUnsignedInt((short) dstPort)); } }