Merge "Automatically set IPsec tunnel interface as up" am: 1f1da2083a
Change-Id: I068814590192decaf353cdd8c46cc7f65badc746
This commit is contained in:
@@ -48,6 +48,7 @@ import android.net.TrafficStats;
|
|||||||
import android.net.util.NetdService;
|
import android.net.util.NetdService;
|
||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
|
import android.os.INetworkManagementService;
|
||||||
import android.os.ParcelFileDescriptor;
|
import android.os.ParcelFileDescriptor;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.ServiceSpecificException;
|
import android.os.ServiceSpecificException;
|
||||||
@@ -76,6 +77,7 @@ import java.net.InetSocketAddress;
|
|||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A service to manage multiple clients that want to access the IpSec API. The service is
|
* A service to manage multiple clients that want to access the IpSec API. The service is
|
||||||
@@ -115,6 +117,9 @@ public class IpSecService extends IIpSecService.Stub {
|
|||||||
/* Binder context for this service */
|
/* Binder context for this service */
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
|
|
||||||
|
/* NetworkManager instance */
|
||||||
|
private final INetworkManagementService mNetworkManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The next non-repeating global ID for tracking resources between users, this service, and
|
* The next non-repeating global ID for tracking resources between users, this service, and
|
||||||
* kernel data structures. Accessing this variable is not thread safe, so it is only read or
|
* kernel data structures. Accessing this variable is not thread safe, so it is only read or
|
||||||
@@ -993,12 +998,13 @@ public class IpSecService extends IIpSecService.Stub {
|
|||||||
*
|
*
|
||||||
* @param context Binder context for this service
|
* @param context Binder context for this service
|
||||||
*/
|
*/
|
||||||
private IpSecService(Context context) {
|
private IpSecService(Context context, INetworkManagementService networkManager) {
|
||||||
this(context, IpSecServiceConfiguration.GETSRVINSTANCE);
|
this(context, networkManager, IpSecServiceConfiguration.GETSRVINSTANCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static IpSecService create(Context context) throws InterruptedException {
|
static IpSecService create(Context context, INetworkManagementService networkManager)
|
||||||
final IpSecService service = new IpSecService(context);
|
throws InterruptedException {
|
||||||
|
final IpSecService service = new IpSecService(context, networkManager);
|
||||||
service.connectNativeNetdService();
|
service.connectNativeNetdService();
|
||||||
return service;
|
return service;
|
||||||
}
|
}
|
||||||
@@ -1012,9 +1018,11 @@ public class IpSecService extends IIpSecService.Stub {
|
|||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public IpSecService(Context context, IpSecServiceConfiguration config) {
|
public IpSecService(Context context, INetworkManagementService networkManager,
|
||||||
|
IpSecServiceConfiguration config) {
|
||||||
this(
|
this(
|
||||||
context,
|
context,
|
||||||
|
networkManager,
|
||||||
config,
|
config,
|
||||||
(fd, uid) -> {
|
(fd, uid) -> {
|
||||||
try {
|
try {
|
||||||
@@ -1028,9 +1036,10 @@ public class IpSecService extends IIpSecService.Stub {
|
|||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public IpSecService(
|
public IpSecService(Context context, INetworkManagementService networkManager,
|
||||||
Context context, IpSecServiceConfiguration config, UidFdTagger uidFdTagger) {
|
IpSecServiceConfiguration config, UidFdTagger uidFdTagger) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
|
mNetworkManager = Objects.requireNonNull(networkManager);
|
||||||
mSrvConfig = config;
|
mSrvConfig = config;
|
||||||
mUidFdTagger = uidFdTagger;
|
mUidFdTagger = uidFdTagger;
|
||||||
}
|
}
|
||||||
@@ -1309,6 +1318,10 @@ public class IpSecService extends IIpSecService.Stub {
|
|||||||
final INetd netd = mSrvConfig.getNetdInstance();
|
final INetd netd = mSrvConfig.getNetdInstance();
|
||||||
netd.ipSecAddTunnelInterface(intfName, localAddr, remoteAddr, ikey, okey, resourceId);
|
netd.ipSecAddTunnelInterface(intfName, localAddr, remoteAddr, ikey, okey, resourceId);
|
||||||
|
|
||||||
|
Binder.withCleanCallingIdentity(() -> {
|
||||||
|
mNetworkManager.setInterfaceUp(intfName);
|
||||||
|
});
|
||||||
|
|
||||||
for (int selAddrFamily : ADDRESS_FAMILIES) {
|
for (int selAddrFamily : ADDRESS_FAMILIES) {
|
||||||
// Always send down correct local/remote addresses for template.
|
// Always send down correct local/remote addresses for template.
|
||||||
netd.ipSecAddSecurityPolicy(
|
netd.ipSecAddSecurityPolicy(
|
||||||
|
|||||||
Reference in New Issue
Block a user