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

Commit 3df28755 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Use fine-grained enums to represent MAC_ADDRESS_CHANGED failure."

parents 28f249dc b8eaac8c
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -410,7 +410,8 @@ public class IpReachabilityMonitor {
                    + " to: " + event.macAddr;
            mLog.w(logMsg);
            mCallback.notifyLost(event.ip, logMsg);
            logNudFailed(event, NudEventType.NUD_MAC_ADDRESS_CHANGED);
            logNudFailed(event,
                    getMacAddressChangedEventType(isFromProbe(), isNudFailureDueToRoam()));
            return;
        }
        maybeRestoreNeighborParameters();
@@ -645,6 +646,19 @@ public class IpReachabilityMonitor {
                        : NudEventType.NUD_CONFIRM_FAILED;
    }

    /**
     * Returns the NUD failure event type code due to neighbor's MAC address has changed
     * corresponding to the given conditions.
     */
    private static NudEventType getMacAddressChangedEventType(boolean isFromProbe,
            boolean isDueToRoam) {
        return isFromProbe
                ? isDueToRoam
                        ? NudEventType.NUD_POST_ROAMING_MAC_ADDRESS_CHANGED
                        : NudEventType.NUD_CONFIRM_MAC_ADDRESS_CHANGED
                : NudEventType.NUD_ORGANIC_MAC_ADDRESS_CHANGED;
    }

    /**
     * Log NUD failure metrics with new Westworld APIs while the function using mMetricsLog API
     * still sends the legacy metrics, @see #logNudFailed.
+41 −15
Original line number Diff line number Diff line
@@ -37,11 +37,13 @@ import android.stats.connectivity.IpType.IPV6
import android.stats.connectivity.NudEventType
import android.stats.connectivity.NudEventType.NUD_CONFIRM_FAILED
import android.stats.connectivity.NudEventType.NUD_CONFIRM_FAILED_CRITICAL
import android.stats.connectivity.NudEventType.NUD_MAC_ADDRESS_CHANGED
import android.stats.connectivity.NudEventType.NUD_CONFIRM_MAC_ADDRESS_CHANGED
import android.stats.connectivity.NudEventType.NUD_POST_ROAMING_FAILED
import android.stats.connectivity.NudEventType.NUD_POST_ROAMING_FAILED_CRITICAL
import android.stats.connectivity.NudEventType.NUD_POST_ROAMING_MAC_ADDRESS_CHANGED
import android.stats.connectivity.NudEventType.NUD_ORGANIC_FAILED
import android.stats.connectivity.NudEventType.NUD_ORGANIC_FAILED_CRITICAL
import android.stats.connectivity.NudEventType.NUD_ORGANIC_MAC_ADDRESS_CHANGED
import android.stats.connectivity.NudNeighborType
import android.stats.connectivity.NudNeighborType.NUD_NEIGHBOR_BOTH
import android.stats.connectivity.NudNeighborType.NUD_NEIGHBOR_DNS
@@ -329,10 +331,9 @@ class IpReachabilityMonitorTest {
        verifyNudFailureMetrics(eventType, ipType, lostNeighborType)
    }

    private fun runNeighborReachableButMacAddrChangedTest(
    private fun prepareNeighborReachableButMacAddrChangedTest(
        newLp: LinkProperties,
        neighbor: InetAddress,
        ipType: IpType
        neighbor: InetAddress
    ) {
        doReturn(true).`when`(dependencies).isFeatureEnabled(anyObject(),
                eq(IP_REACHABILITY_MCAST_RESOLICIT_VERSION), anyBoolean())
@@ -343,13 +344,6 @@ class IpReachabilityMonitorTest {
                "001122334455" /* oldMac */))
        handlerThread.waitForIdle(TEST_TIMEOUT_MS)
        verify(callback, never()).notifyLost(eq(neighbor), anyString())

        reachabilityMonitor.probeAll(true /* dueToRoam */)

        neighborMonitor.enqueuePacket(makeNewNeighMessage(neighbor, NUD_REACHABLE,
                "1122334455aa" /* newMac */))
        verify(callback, timeout(TEST_TIMEOUT_MS)).notifyLost(eq(neighbor), anyString())
        verifyNudFailureMetrics(NUD_MAC_ADDRESS_CHANGED, ipType, NUD_NEIGHBOR_GATEWAY)
    }

    @Test
@@ -548,13 +542,45 @@ class IpReachabilityMonitorTest {
        verifyNudFailureMetrics(NUD_CONFIRM_FAILED_CRITICAL, IPV6, NUD_NEIGHBOR_GATEWAY)
    }

    private fun verifyNudMacAddrChangedType(
        neighbor: InetAddress,
        eventType: NudEventType,
        ipType: IpType
    ) {
        neighborMonitor.enqueuePacket(makeNewNeighMessage(neighbor, NUD_REACHABLE,
                "1122334455aa" /* newMac */))
        verify(callback, timeout(TEST_TIMEOUT_MS)).notifyLost(eq(neighbor), anyString())
        verifyNudFailureMetrics(eventType, ipType, NUD_NEIGHBOR_GATEWAY)
    }

    @Test
    fun testNudProbeFailedMetrics_defaultIPv6GatewayMacAddrChanged() {
        runNeighborReachableButMacAddrChangedTest(TEST_LINK_PROPERTIES, TEST_IPV6_GATEWAY, IPV6)
    fun testNudProbeFailedMetrics_defaultIPv6GatewayMacAddrChangedAfterRoaming() {
        prepareNeighborReachableButMacAddrChangedTest(TEST_LINK_PROPERTIES, TEST_IPV6_GATEWAY)

        reachabilityMonitor.probeAll(true /* dueToRoam */)
        verifyNudMacAddrChangedType(TEST_IPV6_GATEWAY, NUD_POST_ROAMING_MAC_ADDRESS_CHANGED, IPV6)
    }

    @Test
    fun testNudProbeFailedMetrics_defaultIPv4GatewayMacAddrChanged() {
        runNeighborReachableButMacAddrChangedTest(TEST_LINK_PROPERTIES, TEST_IPV4_GATEWAY, IPV4)
    fun testNudProbeFailedMetrics_defaultIPv4GatewayMacAddrChangedAfterRoaming() {
        prepareNeighborReachableButMacAddrChangedTest(TEST_LINK_PROPERTIES, TEST_IPV4_GATEWAY)

        reachabilityMonitor.probeAll(true /* dueToRoam */)
        verifyNudMacAddrChangedType(TEST_IPV4_GATEWAY, NUD_POST_ROAMING_MAC_ADDRESS_CHANGED, IPV4)
    }

    @Test
    fun testNudProbeFailedMetrics_defaultIPv6GatewayMacAddrChangedAfterConfirm() {
        prepareNeighborReachableButMacAddrChangedTest(TEST_LINK_PROPERTIES, TEST_IPV6_GATEWAY)

        reachabilityMonitor.probeAll(false /* dueToRoam */)
        verifyNudMacAddrChangedType(TEST_IPV6_GATEWAY, NUD_CONFIRM_MAC_ADDRESS_CHANGED, IPV6)
    }

    @Test
    fun testNudProbeFailedMetrics_defaultIPv6GatewayMacAddrChangedAfterOrganic() {
        prepareNeighborReachableButMacAddrChangedTest(TEST_LINK_PROPERTIES, TEST_IPV6_GATEWAY)

        verifyNudMacAddrChangedType(TEST_IPV6_GATEWAY, NUD_ORGANIC_MAC_ADDRESS_CHANGED, IPV6)
    }
}