Merge "Automatically set IPsec tunnel interface as up" am: 1f1da2083a

Change-Id: I068814590192decaf353cdd8c46cc7f65badc746
This commit is contained in:
Benedict Wong
2020-03-25 04:35:03 +00:00
committed by Automerger Merge Worker

View File

@@ -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(