diff options
author | 2025-03-11 22:20:23 -0700 | |
---|---|---|
committer | 2025-03-17 20:09:57 -0700 | |
commit | 533a191ac79727f5f4999d7c9ac40f1a603510ca (patch) | |
tree | 2e19ee78816995d10bd197ccadbbf7fb37bc5dff | |
parent | f51443e4bc465e1169aae55808067f145416028d (diff) |
Fix Secure ranging result processing
Bug: 397619419
Test: atest FrameworksWifiTests
Flag: EXEMPT bug fix
Change-Id: I4500b5e7b99508b9996e56f89adf863f00e60833
4 files changed, 41 insertions, 20 deletions
diff --git a/framework/java/android/net/wifi/rtt/RangingResult.java b/framework/java/android/net/wifi/rtt/RangingResult.java index 8ef3d2de08..09d196ab44 100644 --- a/framework/java/android/net/wifi/rtt/RangingResult.java +++ b/framework/java/android/net/wifi/rtt/RangingResult.java @@ -197,6 +197,14 @@ public final class RangingResult implements Parcelable { mR2iTxLtfRepetitions = other.mR2iTxLtfRepetitions; mNumTxSpatialStreams = other.mNumTxSpatialStreams; mNumRxSpatialStreams = other.mNumRxSpatialStreams; + mIsRangingAuthenticated = other.mIsRangingAuthenticated; + mIsRangingFrameProtected = other.mIsRangingFrameProtected; + mIsSecureHeLtfEnabled = other.mIsSecureHeLtfEnabled; + mSecureHeLtfProtocolVersion = other.mSecureHeLtfProtocolVersion; + if (other.mPasnComebackCookie != null) { + mPasnComebackCookie = other.mPasnComebackCookie.clone(); + mPasnComebackAfterMillis = other.mPasnComebackAfterMillis; + } mVendorData = new ArrayList<>(other.mVendorData); } diff --git a/service/java/com/android/server/wifi/rtt/RttServiceImpl.java b/service/java/com/android/server/wifi/rtt/RttServiceImpl.java index 87ab51926a..10cbe18e11 100644 --- a/service/java/com/android/server/wifi/rtt/RttServiceImpl.java +++ b/service/java/com/android/server/wifi/rtt/RttServiceImpl.java @@ -1452,6 +1452,17 @@ public class RttServiceImpl extends IWifiRttManager.Stub { && !resultForRequest.getVendorData().isEmpty()) { builder.setVendorData(resultForRequest.getVendorData()); } + // set secure ranging fields + builder.setRangingFrameProtected(resultForRequest.isRangingFrameProtected()) + .setRangingAuthenticated(resultForRequest.isRangingAuthenticated()) + .setSecureHeLtfEnabled(resultForRequest.isSecureHeLtfEnabled()) + .setSecureHeLtfProtocolVersion( + resultForRequest.getSecureHeLtfProtocolVersion()); + if (resultForRequest.getPasnComebackCookie() != null) { + builder.setPasnComebackCookie(resultForRequest.getPasnComebackCookie()); + builder.setPasnComebackAfterMillis( + resultForRequest.getPasnComebackAfterMillis()); + } finalResults.add(builder.build()); } } diff --git a/service/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java index be9982e60a..e63c67512f 100644 --- a/service/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java +++ b/service/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java @@ -421,11 +421,15 @@ public class RttServiceImplTest extends WifiBaseTest { assertEquals("Password is not set", "TEST_PASSWORD", halRequest.mRttPeers.get( 1).getSecureRangingConfig().getPasnConfig().getPassword()); + // Verify ranging results are processed correctly + Pair<List<RangingResult>, List<RangingResult>> resultsPair = getDummyRangingResults( + halRequest); mRangingResultsCbCaptor.getValue().onRangingResults(mIntCaptor.getValue(), - getDummyRangingResults(request).second); + resultsPair.first); mMockLooper.dispatchAll(); - verify(mockCallback).onRangingResults(mListCaptor.capture()); + assertTrue(compareListContentsNoOrdering(resultsPair.second, mListCaptor.getValue())); + verifyWakeupCancelled(); verifyNoMoreInteractions(mockRttControllerHal, mockCallback, mAlarmManager.getAlarmManager()); diff --git a/service/tests/wifitests/src/com/android/server/wifi/rtt/RttTestUtils.java b/service/tests/wifitests/src/com/android/server/wifi/rtt/RttTestUtils.java index ecbf2bf585..d19f79b851 100644 --- a/service/tests/wifitests/src/com/android/server/wifi/rtt/RttTestUtils.java +++ b/service/tests/wifitests/src/com/android/server/wifi/rtt/RttTestUtils.java @@ -122,7 +122,7 @@ public class RttTestUtils { .setSecureHeLtfEnabled(true) .build(); config = new ResponderConfig.Builder() - .setMacAddress(MacAddress.fromString("00:11:22:33:44:55")) + .setMacAddress(MacAddress.fromString("00:11:22:33:44:56")) .setResponderType(ResponderConfig.RESPONDER_AP) .setChannelWidth(ScanResult.CHANNEL_WIDTH_80MHZ) .setPreamble(ScanResult.PREAMBLE_HE) @@ -140,7 +140,7 @@ public class RttTestUtils { .build(); config = new ResponderConfig .Builder() - .setMacAddress(MacAddress.fromString("00:11:22:33:44:56")) + .setMacAddress(MacAddress.fromString("00:11:22:33:44:57")) .setResponderType(ResponderConfig.RESPONDER_AP) .setChannelWidth(ScanResult.CHANNEL_WIDTH_80MHZ) .setPreamble(ScanResult.PREAMBLE_HE) @@ -152,7 +152,7 @@ public class RttTestUtils { // Open mode config = new ResponderConfig .Builder() - .setMacAddress(MacAddress.fromString("00:11:22:33:44:57")) + .setMacAddress(MacAddress.fromString("00:11:22:33:44:58")) .setResponderType(ResponderConfig.RESPONDER_AP) .setChannelWidth(ScanResult.CHANNEL_WIDTH_80MHZ) .setPreamble(ScanResult.PREAMBLE_HE) @@ -270,19 +270,6 @@ public class RttTestUtils { if (request != null) { for (ResponderConfig peer : request.mRttPeers) { - halResults.add(new RangingResult.Builder() - .setStatus(RangingResult.STATUS_SUCCESS) - .setMacAddress(peer.getMacAddress()) - .setDistanceMm(rangeCmBase) - .setDistanceStdDevMm(rangeStdDevCmBase) - .setRssi(rssiBase) - .setNumAttemptedMeasurements(8) - .setNumSuccessfulMeasurements(5) - .setRangingTimestampMillis(rangeTimestampBase) - .set80211mcMeasurement(true) - .setMeasurementChannelFrequencyMHz(5180) - .setMeasurementBandwidth(ScanResult.CHANNEL_WIDTH_40MHZ) - .build()); RangingResult.Builder builder = new RangingResult.Builder() .setStatus(RangingResult.STATUS_SUCCESS) .setDistanceMm(rangeCmBase++) @@ -294,13 +281,24 @@ public class RttTestUtils { .set80211mcMeasurement(true) .setMeasurementChannelFrequencyMHz(5180) .setMeasurementBandwidth(ScanResult.CHANNEL_WIDTH_40MHZ); + if (peer.getSecureRangingConfig() != null) { + builder.setRangingAuthenticated(true); + builder.setRangingFrameProtected(true); + builder.setSecureHeLtfEnabled(true); + builder.setSecureHeLtfProtocolVersion(1); + } + halResults.add(builder.setMacAddress(peer.getMacAddress()).build()); if (peer.peerHandle == null) { builder.setMacAddress(peer.getMacAddress()); } else { + // Make sure MAC address null when peer handle is set. + builder.setMacAddress(null); builder.setPeerHandle(peer.peerHandle); } - RangingResult rangingResult = builder.build(); - results.add(rangingResult); + results.add(builder.build()); + rangeCmBase++; + rangeStdDevCmBase++; + rssiBase++; } } else { results.add(new RangingResult.Builder() |