Implementation of Eth Connect & Disconnect Network
Implementation of EthernetService APIs for ConnectNetwork() and DisconnectNetwork(). Bug: 210485380 Test: atest EthernetServiceTests Change-Id: I4c3e361d052206cb28b97fc439bfeac8e7e0fec0
This commit is contained in:
@@ -252,8 +252,13 @@ public class EthernetNetworkFactory extends NetworkFactory {
|
||||
}
|
||||
|
||||
/** Returns true if state has been modified */
|
||||
boolean updateInterfaceLinkState(String ifaceName, boolean up) {
|
||||
@VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
|
||||
protected boolean updateInterfaceLinkState(@NonNull final String ifaceName, final boolean up,
|
||||
@Nullable final IInternalNetworkManagementListener listener) {
|
||||
if (!mTrackingInterfaces.containsKey(ifaceName)) {
|
||||
maybeSendNetworkManagementCallback(listener, null,
|
||||
new InternalNetworkManagementException(
|
||||
ifaceName + " can't be updated as it is not available."));
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -262,7 +267,7 @@ public class EthernetNetworkFactory extends NetworkFactory {
|
||||
}
|
||||
|
||||
NetworkInterfaceState iface = mTrackingInterfaces.get(ifaceName);
|
||||
return iface.updateLinkState(up);
|
||||
return iface.updateLinkState(up, listener);
|
||||
}
|
||||
|
||||
boolean hasInterface(String ifaceName) {
|
||||
@@ -615,16 +620,27 @@ public class EthernetNetworkFactory extends NetworkFactory {
|
||||
}
|
||||
|
||||
/** Returns true if state has been modified */
|
||||
boolean updateLinkState(boolean up) {
|
||||
if (mLinkUp == up) return false;
|
||||
boolean updateLinkState(final boolean up,
|
||||
@Nullable final IInternalNetworkManagementListener listener) {
|
||||
if (mLinkUp == up) {
|
||||
EthernetNetworkFactory.maybeSendNetworkManagementCallback(listener, null,
|
||||
new InternalNetworkManagementException(
|
||||
"No changes with requested link state " + up + " for " + name));
|
||||
return false;
|
||||
}
|
||||
mLinkUp = up;
|
||||
|
||||
if (!up) { // was up, goes down
|
||||
// Save an instance of the current network to use with the callback before stop().
|
||||
final Network network = mNetworkAgent != null ? mNetworkAgent.getNetwork() : null;
|
||||
// Send an abort on a provisioning request callback if necessary before stopping.
|
||||
maybeSendNetworkManagementCallbackForAbort();
|
||||
stop();
|
||||
// If only setting the interface down, send a callback to signal completion.
|
||||
EthernetNetworkFactory.maybeSendNetworkManagementCallback(listener, network, null);
|
||||
} else { // was down, goes up
|
||||
stop();
|
||||
start();
|
||||
start(listener);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -243,6 +243,7 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
|
||||
@Nullable final IInternalNetworkManagementListener listener) {
|
||||
Log.i(TAG, "connectNetwork called with: iface=" + iface + ", listener=" + listener);
|
||||
validateNetworkManagementState(iface, "connectNetwork()");
|
||||
mTracker.connectNetwork(iface, listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -250,5 +251,6 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
|
||||
@Nullable final IInternalNetworkManagementListener listener) {
|
||||
Log.i(TAG, "disconnectNetwork called with: iface=" + iface + ", listener=" + listener);
|
||||
validateNetworkManagementState(iface, "disconnectNetwork()");
|
||||
mTracker.disconnectNetwork(iface, listener);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -190,6 +190,18 @@ public class EthernetTracker {
|
||||
mFactory.updateInterface(iface, ipConfig, capabilities, listener));
|
||||
}
|
||||
|
||||
@VisibleForTesting(visibility = PACKAGE)
|
||||
protected void connectNetwork(@NonNull final String iface,
|
||||
@Nullable final IInternalNetworkManagementListener listener) {
|
||||
mHandler.post(() -> updateInterfaceState(iface, true, listener));
|
||||
}
|
||||
|
||||
@VisibleForTesting(visibility = PACKAGE)
|
||||
protected void disconnectNetwork(@NonNull final String iface,
|
||||
@Nullable final IInternalNetworkManagementListener listener) {
|
||||
mHandler.post(() -> updateInterfaceState(iface, false, listener));
|
||||
}
|
||||
|
||||
IpConfiguration getIpConfiguration(String iface) {
|
||||
return mIpConfigurations.get(iface);
|
||||
}
|
||||
@@ -354,9 +366,14 @@ public class EthernetTracker {
|
||||
}
|
||||
|
||||
private void updateInterfaceState(String iface, boolean up) {
|
||||
updateInterfaceState(iface, up, null /* listener */);
|
||||
}
|
||||
|
||||
private void updateInterfaceState(@NonNull final String iface, final boolean up,
|
||||
@Nullable final IInternalNetworkManagementListener listener) {
|
||||
final int mode = getInterfaceMode(iface);
|
||||
final boolean factoryLinkStateUpdated = (mode == INTERFACE_MODE_CLIENT)
|
||||
&& mFactory.updateInterfaceLinkState(iface, up);
|
||||
&& mFactory.updateInterfaceLinkState(iface, up, listener);
|
||||
|
||||
if (factoryLinkStateUpdated) {
|
||||
boolean restricted = isRestrictedInterface(iface);
|
||||
|
||||
Reference in New Issue
Block a user