Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 155da485 authored by Remi NGUYEN VAN's avatar Remi NGUYEN VAN
Browse files

Replace InterfaceParams with ifName in DhcpServer

The current code only uses InterfaceParams#name, and InterfaceParams is
defined in services/net which DhcpServer cannot depend on once moved to
a separate app.

Test: atest FrameworksNetTests
Bug: b/112869080
Change-Id: I94c7dce33200c111666a9dddde82ac2e66a6794f
parent fad9571d
Loading
Loading
Loading
Loading
+7 −8
Original line number Original line Diff line number Diff line
@@ -39,7 +39,6 @@ import android.annotation.Nullable;
import android.net.MacAddress;
import android.net.MacAddress;
import android.net.NetworkUtils;
import android.net.NetworkUtils;
import android.net.TrafficStats;
import android.net.TrafficStats;
import android.net.util.InterfaceParams;
import android.net.util.SharedLog;
import android.net.util.SharedLog;
import android.os.Handler;
import android.os.Handler;
import android.os.Looper;
import android.os.Looper;
@@ -85,7 +84,7 @@ public class DhcpServer {
    @NonNull
    @NonNull
    private final ServerHandler mHandler;
    private final ServerHandler mHandler;
    @NonNull
    @NonNull
    private final InterfaceParams mIface;
    private final String mIfName;
    @NonNull
    @NonNull
    private final DhcpLeaseRepository mLeaseRepo;
    private final DhcpLeaseRepository mLeaseRepo;
    @NonNull
    @NonNull
@@ -161,20 +160,20 @@ public class DhcpServer {
        }
        }
    }
    }


    public DhcpServer(@NonNull Looper looper, @NonNull InterfaceParams iface,
    public DhcpServer(@NonNull Looper looper, @NonNull String ifName,
            @NonNull DhcpServingParams params, @NonNull SharedLog log) {
            @NonNull DhcpServingParams params, @NonNull SharedLog log) {
        this(looper, iface, params, log, null);
        this(looper, ifName, params, log, null);
    }
    }


    @VisibleForTesting
    @VisibleForTesting
    DhcpServer(@NonNull Looper looper, @NonNull InterfaceParams iface,
    DhcpServer(@NonNull Looper looper, @NonNull String ifName,
            @NonNull DhcpServingParams params, @NonNull SharedLog log,
            @NonNull DhcpServingParams params, @NonNull SharedLog log,
            @Nullable Dependencies deps) {
            @Nullable Dependencies deps) {
        if (deps == null) {
        if (deps == null) {
            deps = new DependenciesImpl();
            deps = new DependenciesImpl();
        }
        }
        mHandler = new ServerHandler(looper);
        mHandler = new ServerHandler(looper);
        mIface = iface;
        mIfName = ifName;
        mServingParams = params;
        mServingParams = params;
        mLog = log;
        mLog = log;
        mDeps = deps;
        mDeps = deps;
@@ -444,7 +443,7 @@ public class DhcpServer {


    private boolean addArpEntry(@NonNull MacAddress macAddr, @NonNull Inet4Address inetAddr) {
    private boolean addArpEntry(@NonNull MacAddress macAddr, @NonNull Inet4Address inetAddr) {
        try {
        try {
            mDeps.addArpEntry(inetAddr, macAddr, mIface.name, mSocket);
            mDeps.addArpEntry(inetAddr, macAddr, mIfName, mSocket);
            return true;
            return true;
        } catch (IOException e) {
        } catch (IOException e) {
            mLog.e("Error adding client to ARP table", e);
            mLog.e("Error adding client to ARP table", e);
@@ -526,7 +525,7 @@ public class DhcpServer {
                // SO_BINDTODEVICE actually takes a string. This works because the first member
                // SO_BINDTODEVICE actually takes a string. This works because the first member
                // of struct ifreq is a NULL-terminated interface name.
                // of struct ifreq is a NULL-terminated interface name.
                // TODO: add a setsockoptString()
                // TODO: add a setsockoptString()
                Os.setsockoptIfreq(mSocket, SOL_SOCKET, SO_BINDTODEVICE, mIface.name);
                Os.setsockoptIfreq(mSocket, SOL_SOCKET, SO_BINDTODEVICE, mIfName);
                Os.setsockoptInt(mSocket, SOL_SOCKET, SO_BROADCAST, 1);
                Os.setsockoptInt(mSocket, SOL_SOCKET, SO_BROADCAST, 1);
                Os.bind(mSocket, Inet4Address.ANY, DHCP_SERVER);
                Os.bind(mSocket, Inet4Address.ANY, DHCP_SERVER);
                NetworkUtils.protectFromVpn(mSocket);
                NetworkUtils.protectFromVpn(mSocket);
+3 −9
Original line number Original line Diff line number Diff line
@@ -138,9 +138,9 @@ public class IpServer extends StateMachine {
            return NetdService.getInstance();
            return NetdService.getInstance();
        }
        }


        public DhcpServer makeDhcpServer(Looper looper, InterfaceParams iface,
        public DhcpServer makeDhcpServer(Looper looper, String ifName,
                DhcpServingParams params, SharedLog log) {
                DhcpServingParams params, SharedLog log) {
            return new DhcpServer(looper, iface, params, log);
            return new DhcpServer(looper, ifName, params, log);
        }
        }
    }
    }


@@ -256,12 +256,6 @@ public class IpServer extends StateMachine {
        if (mUsingLegacyDhcp) {
        if (mUsingLegacyDhcp) {
            return true;
            return true;
        }
        }

        final InterfaceParams ifaceParams = mDeps.getInterfaceParams(mIfaceName);
        if (ifaceParams == null) {
            Log.e(TAG, "Failed to find interface params for DHCPv4");
            return false;
        }
        final DhcpServingParams params;
        final DhcpServingParams params;
        try {
        try {
            params = new DhcpServingParams.Builder()
            params = new DhcpServingParams.Builder()
@@ -277,7 +271,7 @@ public class IpServer extends StateMachine {
            return false;
            return false;
        }
        }


        mDhcpServer = mDeps.makeDhcpServer(getHandler().getLooper(), ifaceParams, params,
        mDhcpServer = mDeps.makeDhcpServer(getHandler().getLooper(), mIfaceName, params,
                mLog.forSubComponent("DHCP"));
                mLog.forSubComponent("DHCP"));
        mDhcpServer.start();
        mDhcpServer.start();
        return true;
        return true;
+1 −6
Original line number Original line Diff line number Diff line
@@ -25,7 +25,6 @@ import static android.net.dhcp.DhcpPacket.INADDR_BROADCAST;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.assertTrue;


import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.any;
@@ -48,7 +47,6 @@ import android.net.dhcp.DhcpLeaseRepository.InvalidAddressException;
import android.net.dhcp.DhcpLeaseRepository.OutOfAddressesException;
import android.net.dhcp.DhcpLeaseRepository.OutOfAddressesException;
import android.net.dhcp.DhcpServer.Clock;
import android.net.dhcp.DhcpServer.Clock;
import android.net.dhcp.DhcpServer.Dependencies;
import android.net.dhcp.DhcpServer.Dependencies;
import android.net.util.InterfaceParams;
import android.net.util.SharedLog;
import android.net.util.SharedLog;
import android.os.test.TestLooper;
import android.os.test.TestLooper;
import android.support.test.filters.SmallTest;
import android.support.test.filters.SmallTest;
@@ -74,9 +72,6 @@ import java.util.Set;
public class DhcpServerTest {
public class DhcpServerTest {
    private static final String PROP_DEXMAKER_SHARE_CLASSLOADER = "dexmaker.share_classloader";
    private static final String PROP_DEXMAKER_SHARE_CLASSLOADER = "dexmaker.share_classloader";
    private static final String TEST_IFACE = "testiface";
    private static final String TEST_IFACE = "testiface";
    private static final MacAddress TEST_IFACE_MAC = MacAddress.fromString("11:22:33:44:55:66");
    private static final InterfaceParams TEST_IFACEPARAMS =
            new InterfaceParams(TEST_IFACE, 1, TEST_IFACE_MAC);


    private static final Inet4Address TEST_SERVER_ADDR = parseAddr("192.168.0.2");
    private static final Inet4Address TEST_SERVER_ADDR = parseAddr("192.168.0.2");
    private static final LinkAddress TEST_SERVER_LINKADDR = new LinkAddress(TEST_SERVER_ADDR, 20);
    private static final LinkAddress TEST_SERVER_LINKADDR = new LinkAddress(TEST_SERVER_ADDR, 20);
@@ -149,7 +144,7 @@ public class DhcpServerTest {
                .build();
                .build();


        mLooper = new TestLooper();
        mLooper = new TestLooper();
        mServer = new DhcpServer(mLooper.getLooper(), TEST_IFACEPARAMS, servingParams,
        mServer = new DhcpServer(mLooper.getLooper(), TEST_IFACE, servingParams,
                new SharedLog(DhcpServerTest.class.getSimpleName()), mDeps);
                new SharedLog(DhcpServerTest.class.getSimpleName()), mDeps);


        mServer.start();
        mServer.start();
+1 −1
Original line number Original line Diff line number Diff line
@@ -404,7 +404,7 @@ public class IpServerTest {


    private void assertDhcpStarted(IpPrefix expectedPrefix) {
    private void assertDhcpStarted(IpPrefix expectedPrefix) {
        verify(mDependencies, times(1)).makeDhcpServer(
        verify(mDependencies, times(1)).makeDhcpServer(
                eq(mLooper.getLooper()), eq(TEST_IFACE_PARAMS), any(), eq(mSharedLog));
                eq(mLooper.getLooper()), eq(IFACE_NAME), any(), eq(mSharedLog));
        verify(mDhcpServer, times(1)).start();
        verify(mDhcpServer, times(1)).start();
        final DhcpServingParams params = mDhcpParamsCaptor.getValue();
        final DhcpServingParams params = mDhcpParamsCaptor.getValue();
        // Last address byte is random
        // Last address byte is random
+1 −1
Original line number Original line Diff line number Diff line
@@ -245,7 +245,7 @@ public class TetheringTest {
                }
                }


                @Override
                @Override
                public DhcpServer makeDhcpServer(Looper looper, InterfaceParams iface,
                public DhcpServer makeDhcpServer(Looper looper, String ifName,
                        DhcpServingParams params, SharedLog log) {
                        DhcpServingParams params, SharedLog log) {
                    return mDhcpServer;
                    return mDhcpServer;
                }
                }