Change reserveSecurityParameterIndex() to take a remoteAddress
To make the SPI reservation more semantically consistent with the transform creation API, and to ensure that we always create SPI reservations relative to a well-known remote, we should take the SPI request relative to a remote (rather than to a destination). This necessitates that we now consider direction separately, which is used for keying the SA-Id. Bug: 36073210 Test: compilation Change-Id: I81e955c20128c1f8e04fd68eb26669561f827a78 (cherry picked from commit c4f879925b58b1b5ca9a3cfdc898c20cbf56355a)
This commit is contained in:
@@ -81,7 +81,7 @@ public final class IpSecManager {
|
|||||||
|
|
||||||
public static final class SecurityParameterIndex implements AutoCloseable {
|
public static final class SecurityParameterIndex implements AutoCloseable {
|
||||||
private final IIpSecService mService;
|
private final IIpSecService mService;
|
||||||
private final InetAddress mDestinationAddress;
|
private final InetAddress mRemoteAddress;
|
||||||
private final CloseGuard mCloseGuard = CloseGuard.get();
|
private final CloseGuard mCloseGuard = CloseGuard.get();
|
||||||
private int mSpi;
|
private int mSpi;
|
||||||
|
|
||||||
@@ -91,10 +91,10 @@ public final class IpSecManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private SecurityParameterIndex(
|
private SecurityParameterIndex(
|
||||||
IIpSecService service, InetAddress destinationAddress, int spi)
|
IIpSecService service, int direction, InetAddress remoteAddress, int spi)
|
||||||
throws ResourceUnavailableException, SpiUnavailableException {
|
throws ResourceUnavailableException, SpiUnavailableException {
|
||||||
mService = service;
|
mService = service;
|
||||||
mDestinationAddress = destinationAddress;
|
mRemoteAddress = remoteAddress;
|
||||||
mSpi = spi;
|
mSpi = spi;
|
||||||
mCloseGuard.open("open");
|
mCloseGuard.open("open");
|
||||||
}
|
}
|
||||||
@@ -102,13 +102,9 @@ public final class IpSecManager {
|
|||||||
/**
|
/**
|
||||||
* Release an SPI that was previously reserved.
|
* Release an SPI that was previously reserved.
|
||||||
*
|
*
|
||||||
* <p>Release an SPI for use by other users in the system. This will fail if the SPI is
|
* <p>Release an SPI for use by other users in the system. If a SecurityParameterIndex is
|
||||||
* currently in use by an IpSecTransform.
|
* applied to an IpSecTransform, it will become unusable for future transforms but should
|
||||||
*
|
* still be closed to ensure system resources are released.
|
||||||
* @param destinationAddress SPIs must be unique for each combination of SPI and destination
|
|
||||||
* address. Thus, the destinationAddress to which the SPI will communicate must be
|
|
||||||
* supplied.
|
|
||||||
* @param spi the previously reserved SPI to be freed.
|
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
@@ -134,13 +130,13 @@ public final class IpSecManager {
|
|||||||
public static final int INVALID_SECURITY_PARAMETER_INDEX = 0;
|
public static final int INVALID_SECURITY_PARAMETER_INDEX = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reserve an SPI for traffic bound towards the specified destination address.
|
* Reserve an SPI for traffic bound towards the specified remote address.
|
||||||
*
|
*
|
||||||
* <p>If successful, this SPI is guaranteed available until released by a call to {@link
|
* <p>If successful, this SPI is guaranteed available until released by a call to {@link
|
||||||
* SecurityParameterIndex#close()}.
|
* SecurityParameterIndex#close()}.
|
||||||
*
|
*
|
||||||
* @param destinationAddress SPIs must be unique for each combination of SPI and destination
|
* @param direction {@link IpSecTransform#DIRECTION_IN} or {@link IpSecTransform#DIRECTION_OUT}
|
||||||
* address.
|
* @param remoteAddress address of the remote. SPIs must be unique for each remoteAddress.
|
||||||
* @param requestedSpi the requested SPI, or '0' to allocate a random SPI.
|
* @param requestedSpi the requested SPI, or '0' to allocate a random SPI.
|
||||||
* @return the reserved SecurityParameterIndex
|
* @return the reserved SecurityParameterIndex
|
||||||
* @throws ResourceUnavailableException indicating that too many SPIs are currently allocated
|
* @throws ResourceUnavailableException indicating that too many SPIs are currently allocated
|
||||||
@@ -148,9 +144,9 @@ public final class IpSecManager {
|
|||||||
* @throws SpiUnavailableException indicating that a particular SPI cannot be reserved
|
* @throws SpiUnavailableException indicating that a particular SPI cannot be reserved
|
||||||
*/
|
*/
|
||||||
public SecurityParameterIndex reserveSecurityParameterIndex(
|
public SecurityParameterIndex reserveSecurityParameterIndex(
|
||||||
InetAddress destinationAddress, int requestedSpi)
|
int direction, InetAddress remoteAddress, int requestedSpi)
|
||||||
throws SpiUnavailableException, ResourceUnavailableException {
|
throws SpiUnavailableException, ResourceUnavailableException {
|
||||||
return new SecurityParameterIndex(mService, destinationAddress, requestedSpi);
|
return new SecurityParameterIndex(mService, direction, remoteAddress, requestedSpi);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -307,7 +307,7 @@ public final class IpSecTransform implements AutoCloseable {
|
|||||||
* <p>Care should be chosen when selecting an SPI to ensure that is is as unique as
|
* <p>Care should be chosen when selecting an SPI to ensure that is is as unique as
|
||||||
* possible. Random number generation is a reasonable approach to selecting an SPI. For
|
* possible. Random number generation is a reasonable approach to selecting an SPI. For
|
||||||
* outbound SPIs, they must be reserved by calling {@link
|
* outbound SPIs, they must be reserved by calling {@link
|
||||||
* IpSecManager#reserveSecurityParameterIndex(InetAddress, int)}. Otherwise, Transforms will
|
* IpSecManager#reserveSecurityParameterIndex(int, InetAddress, int)}. Otherwise, Transforms will
|
||||||
* fail to build.
|
* fail to build.
|
||||||
*
|
*
|
||||||
* <p>Unless an SPI is set for a given direction, traffic in that direction will be
|
* <p>Unless an SPI is set for a given direction, traffic in that direction will be
|
||||||
@@ -329,7 +329,7 @@ public final class IpSecTransform implements AutoCloseable {
|
|||||||
* <p>Care should be chosen when selecting an SPI to ensure that is is as unique as
|
* <p>Care should be chosen when selecting an SPI to ensure that is is as unique as
|
||||||
* possible. Random number generation is a reasonable approach to selecting an SPI. For
|
* possible. Random number generation is a reasonable approach to selecting an SPI. For
|
||||||
* outbound SPIs, they must be reserved by calling {@link
|
* outbound SPIs, they must be reserved by calling {@link
|
||||||
* IpSecManager#reserveSecurityParameterIndex(InetAddress, int)}. Otherwise, Transforms will
|
* IpSecManager#reserveSecurityParameterIndex(int, InetAddress, int)}. Otherwise, Transforms will
|
||||||
* fail to activate.
|
* fail to activate.
|
||||||
*
|
*
|
||||||
* <p>Unless an SPI is set for a given direction, traffic in that direction will be
|
* <p>Unless an SPI is set for a given direction, traffic in that direction will be
|
||||||
|
|||||||
Reference in New Issue
Block a user