Merge "Use RFC 7217 stable privacy addresses"
This commit is contained in:
@@ -96,6 +96,12 @@ interface INetworkManagementService
|
|||||||
*/
|
*/
|
||||||
void enableIpv6(String iface);
|
void enableIpv6(String iface);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set IPv6 autoconf address generation mode.
|
||||||
|
* This is a no-op if an unsupported mode is requested.
|
||||||
|
*/
|
||||||
|
void setIPv6AddrGenMode(String iface, int mode);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enables or enables IPv6 ND offload.
|
* Enables or enables IPv6 ND offload.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1028,6 +1028,15 @@ public class NetworkManagementService extends INetworkManagementService.Stub
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setIPv6AddrGenMode(String iface, int mode) throws ServiceSpecificException {
|
||||||
|
try {
|
||||||
|
mNetdService.setIPv6AddrGenMode(iface, mode);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
throw e.rethrowAsRuntimeException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void disableIpv6(String iface) {
|
public void disableIpv6(String iface) {
|
||||||
mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
|
mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
|
||||||
|
|||||||
@@ -20,16 +20,17 @@ import com.android.internal.util.MessageUtils;
|
|||||||
import com.android.internal.util.WakeupMessage;
|
import com.android.internal.util.WakeupMessage;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.apf.ApfCapabilities;
|
|
||||||
import android.net.apf.ApfFilter;
|
|
||||||
import android.net.DhcpResults;
|
import android.net.DhcpResults;
|
||||||
|
import android.net.INetd;
|
||||||
import android.net.InterfaceConfiguration;
|
import android.net.InterfaceConfiguration;
|
||||||
import android.net.LinkAddress;
|
import android.net.LinkAddress;
|
||||||
import android.net.LinkProperties;
|
|
||||||
import android.net.LinkProperties.ProvisioningChange;
|
import android.net.LinkProperties.ProvisioningChange;
|
||||||
|
import android.net.LinkProperties;
|
||||||
import android.net.ProxyInfo;
|
import android.net.ProxyInfo;
|
||||||
import android.net.RouteInfo;
|
import android.net.RouteInfo;
|
||||||
import android.net.StaticIpConfiguration;
|
import android.net.StaticIpConfiguration;
|
||||||
|
import android.net.apf.ApfCapabilities;
|
||||||
|
import android.net.apf.ApfFilter;
|
||||||
import android.net.dhcp.DhcpClient;
|
import android.net.dhcp.DhcpClient;
|
||||||
import android.net.metrics.IpConnectivityLog;
|
import android.net.metrics.IpConnectivityLog;
|
||||||
import android.net.metrics.IpManagerEvent;
|
import android.net.metrics.IpManagerEvent;
|
||||||
@@ -38,7 +39,9 @@ import android.os.INetworkManagementService;
|
|||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.ServiceManager;
|
import android.os.ServiceManager;
|
||||||
|
import android.os.ServiceSpecificException;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
|
import android.system.OsConstants;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.LocalLog;
|
import android.util.LocalLog;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -319,6 +322,16 @@ public class IpManager extends StateMachine {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Builder withIPv6AddrGenModeEUI64() {
|
||||||
|
mConfig.mIPv6AddrGenMode = INetd.IPV6_ADDR_GEN_MODE_EUI64;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder withIPv6AddrGenModeStablePrivacy() {
|
||||||
|
mConfig.mIPv6AddrGenMode = INetd.IPV6_ADDR_GEN_MODE_STABLE_PRIVACY;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public ProvisioningConfiguration build() {
|
public ProvisioningConfiguration build() {
|
||||||
return new ProvisioningConfiguration(mConfig);
|
return new ProvisioningConfiguration(mConfig);
|
||||||
}
|
}
|
||||||
@@ -331,6 +344,7 @@ public class IpManager extends StateMachine {
|
|||||||
/* package */ StaticIpConfiguration mStaticIpConfig;
|
/* package */ StaticIpConfiguration mStaticIpConfig;
|
||||||
/* package */ ApfCapabilities mApfCapabilities;
|
/* package */ ApfCapabilities mApfCapabilities;
|
||||||
/* package */ int mProvisioningTimeoutMs = DEFAULT_TIMEOUT_MS;
|
/* package */ int mProvisioningTimeoutMs = DEFAULT_TIMEOUT_MS;
|
||||||
|
/* package */ int mIPv6AddrGenMode = INetd.IPV6_ADDR_GEN_MODE_STABLE_PRIVACY;
|
||||||
|
|
||||||
public ProvisioningConfiguration() {}
|
public ProvisioningConfiguration() {}
|
||||||
|
|
||||||
@@ -354,6 +368,7 @@ public class IpManager extends StateMachine {
|
|||||||
.add("mStaticIpConfig: " + mStaticIpConfig)
|
.add("mStaticIpConfig: " + mStaticIpConfig)
|
||||||
.add("mApfCapabilities: " + mApfCapabilities)
|
.add("mApfCapabilities: " + mApfCapabilities)
|
||||||
.add("mProvisioningTimeoutMs: " + mProvisioningTimeoutMs)
|
.add("mProvisioningTimeoutMs: " + mProvisioningTimeoutMs)
|
||||||
|
.add("mIPv6AddrGenMode: " + mIPv6AddrGenMode)
|
||||||
.toString();
|
.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1044,16 +1059,25 @@ public class IpManager extends StateMachine {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setIPv6AddrGenModeIfSupported() throws RemoteException {
|
||||||
|
try {
|
||||||
|
mNwService.setIPv6AddrGenMode(mInterfaceName, mConfiguration.mIPv6AddrGenMode);
|
||||||
|
} catch (ServiceSpecificException e) {
|
||||||
|
if (e.errorCode != OsConstants.EOPNOTSUPP) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private boolean startIPv6() {
|
private boolean startIPv6() {
|
||||||
// Set privacy extensions.
|
// Set privacy extensions.
|
||||||
try {
|
try {
|
||||||
mNwService.setInterfaceIpv6PrivacyExtensions(mInterfaceName, true);
|
mNwService.setInterfaceIpv6PrivacyExtensions(mInterfaceName, true);
|
||||||
|
|
||||||
|
setIPv6AddrGenModeIfSupported();
|
||||||
mNwService.enableIpv6(mInterfaceName);
|
mNwService.enableIpv6(mInterfaceName);
|
||||||
} catch (RemoteException re) {
|
} catch (IllegalStateException | RemoteException | ServiceSpecificException e) {
|
||||||
logError("Unable to change interface settings: %s", re);
|
logError("Unable to change interface settings: %s", e);
|
||||||
return false;
|
|
||||||
} catch (IllegalStateException ie) {
|
|
||||||
logError("Unable to change interface settings: %s", ie);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user