Refactor Tether4Key to use Inet4Address
Change the type of src4 and dst4 from byte[] to Inet4Address in the Tether4Key class. This simplifies the code by removing the need for conversions between byte arrays and Inet4Address objects. Bug: 392509494 Test: atest TetheringTests Flag: EXEMPT refactor Change-Id: I3072a8520c93042a25d1f60aa41bdfa5485062f6
This commit is contained in:
parent
bc8c8c040e
commit
f7adba65b3
4 changed files with 30 additions and 38 deletions
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue