[Aware] End ndp and clean up after timeout.

Keep trying to get link-local address and verify usablity until time
out.

Bug: 165775713
Test: atest com.android.server.wifi

Merged-In: I3c6f0e832b8afb8f8dd79c8e31e58fc491732238
Change-Id: I3c6f0e832b8afb8f8dd79c8e31e58fc491732238
(cherry picked from commit 6e91d1d9cfa58699c93e9cab80c467a23727bcce)
diff --git a/service/java/com/android/server/wifi/aware/WifiAwareDataPathStateManager.java b/service/java/com/android/server/wifi/aware/WifiAwareDataPathStateManager.java
index e190a24..2263040 100644
--- a/service/java/com/android/server/wifi/aware/WifiAwareDataPathStateManager.java
+++ b/service/java/com/android/server/wifi/aware/WifiAwareDataPathStateManager.java
@@ -654,16 +654,9 @@
                 sNetworkCapabilitiesFilter);
         LinkProperties linkProperties = new LinkProperties();
         getInet6Address(nnri, mac);
-        if (nnri.peerIpv6 != null) {
-            final WifiAwareNetworkInfo ni = new WifiAwareNetworkInfo(
-                    nnri.peerIpv6, nnri.peerPort, nnri.peerTransportProtocol);
-            ncBuilder.setTransportInfo(ni);
-            if (VDBG) {
-                Log.v(TAG, "onDataPathConfirm: AwareNetworkInfo=" + ni);
-            }
-        }
-        if (!(mNiWrapper.configureAgentProperties(nnri, nnri.equivalentRequests, ndpId,
-                ncBuilder, linkProperties) && mNiWrapper.isAddressUsable(linkProperties))) {
+        if (!(nnri.peerIpv6 != null && mNiWrapper.configureAgentProperties(nnri,
+                nnri.equivalentRequests, ndpId, ncBuilder, linkProperties)
+                && mNiWrapper.isAddressUsable(linkProperties))) {
             if (VDBG) {
                 Log.d(TAG, "Failed address validation");
             }
@@ -674,6 +667,12 @@
             }
             return;
         }
+        final WifiAwareNetworkInfo ni = new WifiAwareNetworkInfo(
+                nnri.peerIpv6, nnri.peerPort, nnri.peerTransportProtocol);
+        ncBuilder.setTransportInfo(ni);
+        if (VDBG) {
+            Log.v(TAG, "onDataPathConfirm: AwareNetworkInfo=" + ni);
+        }
         final NetworkAgentConfig naConfig = new NetworkAgentConfig.Builder()
                 .setLegacyType(ConnectivityManager.TYPE_NONE)
                 .setLegacyTypeName(NETWORK_TAG)
@@ -691,6 +690,8 @@
         if (mClock.getElapsedSinceBootMillis() - nnri.startValidationTimestamp
                 > ADDRESS_VALIDATION_TIMEOUT_MS) {
             Log.e(TAG, "Timed-out while waiting for IPv6 address to be usable");
+            mMgr.endDataPath(ndpId);
+            nnri.state = AwareNetworkRequestInformation.STATE_TERMINATING;
             declareUnfullfillableAndEndDp(nnri, ndpId);
             return true;
         }
@@ -1486,17 +1487,13 @@
             try {
                 ni = NetworkInterface.getByName(nnri.interfaceName);
             } catch (SocketException e) {
-                Log.e(TAG, "onDataPathConfirm: ACCEPT nnri=" + nnri
+                Log.v(TAG, "onDataPathConfirm: ACCEPT nnri=" + nnri
                         + ": can't get network interface - " + e);
-                mMgr.endDataPath(ndpId);
-                nnri.state = AwareNetworkRequestInformation.STATE_TERMINATING;
                 return false;
             }
             if (ni == null) {
-                Log.e(TAG, "onDataPathConfirm: ACCEPT nnri=" + nnri
+                Log.v(TAG, "onDataPathConfirm: ACCEPT nnri=" + nnri
                         + ": can't get network interface (null)");
-                mMgr.endDataPath(ndpId);
-                nnri.state = AwareNetworkRequestInformation.STATE_TERMINATING;
                 return false;
             }
             Enumeration<InetAddress> addresses = ni.getInetAddresses();
@@ -1509,9 +1506,7 @@
             }
 
             if (linkLocal == null) {
-                Log.e(TAG, "onDataPathConfirm: ACCEPT nnri=" + nnri + ": no link local addresses");
-                mMgr.endDataPath(ndpId);
-                nnri.state = AwareNetworkRequestInformation.STATE_TERMINATING;
+                Log.v(TAG, "onDataPathConfirm: ACCEPT nnri=" + nnri + ": no link local addresses");
                 return false;
             }