Merge "Stop prefix discovery if an RA prefix arrives in DISCOVERING" am: c44ca579ad am: d0359ea573
Change-Id: If6dd56d2860611586af3c434af3ddc4b6df76ab3
This commit is contained in:
@@ -195,6 +195,9 @@ public class Nat464Xlat extends BaseNetworkObserver {
|
|||||||
} catch (ClassCastException | IllegalArgumentException | NullPointerException e) {
|
} catch (ClassCastException | IllegalArgumentException | NullPointerException e) {
|
||||||
Slog.e(TAG, "Invalid IPv6 address " + addrStr);
|
Slog.e(TAG, "Invalid IPv6 address " + addrStr);
|
||||||
}
|
}
|
||||||
|
if (mPrefixDiscoveryRunning && !isPrefixDiscoveryNeeded()) {
|
||||||
|
stopPrefixDiscovery();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -221,12 +224,11 @@ public class Nat464Xlat extends BaseNetworkObserver {
|
|||||||
if (isPrefixDiscoveryNeeded()) {
|
if (isPrefixDiscoveryNeeded()) {
|
||||||
if (!mPrefixDiscoveryRunning) {
|
if (!mPrefixDiscoveryRunning) {
|
||||||
startPrefixDiscovery();
|
startPrefixDiscovery();
|
||||||
} else {
|
|
||||||
// Prefix discovery is already running. Nothing to do.
|
|
||||||
mState = State.DISCOVERING;
|
|
||||||
}
|
}
|
||||||
|
mState = State.DISCOVERING;
|
||||||
} else {
|
} else {
|
||||||
stopPrefixDiscovery(); // Enters IDLE state.
|
stopPrefixDiscovery();
|
||||||
|
mState = State.IDLE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -287,7 +289,6 @@ public class Nat464Xlat extends BaseNetworkObserver {
|
|||||||
} catch (RemoteException | ServiceSpecificException e) {
|
} catch (RemoteException | ServiceSpecificException e) {
|
||||||
Slog.e(TAG, "Error starting prefix discovery on netId " + getNetId() + ": " + e);
|
Slog.e(TAG, "Error starting prefix discovery on netId " + getNetId() + ": " + e);
|
||||||
}
|
}
|
||||||
mState = State.DISCOVERING;
|
|
||||||
mPrefixDiscoveryRunning = true;
|
mPrefixDiscoveryRunning = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -297,7 +298,6 @@ public class Nat464Xlat extends BaseNetworkObserver {
|
|||||||
} catch (RemoteException | ServiceSpecificException e) {
|
} catch (RemoteException | ServiceSpecificException e) {
|
||||||
Slog.e(TAG, "Error stopping prefix discovery on netId " + getNetId() + ": " + e);
|
Slog.e(TAG, "Error stopping prefix discovery on netId " + getNetId() + ": " + e);
|
||||||
}
|
}
|
||||||
mState = State.IDLE;
|
|
||||||
mPrefixDiscoveryRunning = false;
|
mPrefixDiscoveryRunning = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -330,6 +330,7 @@ public class Nat464Xlat extends BaseNetworkObserver {
|
|||||||
case IDLE:
|
case IDLE:
|
||||||
if (isPrefixDiscoveryNeeded()) {
|
if (isPrefixDiscoveryNeeded()) {
|
||||||
startPrefixDiscovery(); // Enters DISCOVERING state.
|
startPrefixDiscovery(); // Enters DISCOVERING state.
|
||||||
|
mState = State.DISCOVERING;
|
||||||
} else if (requiresClat(mNetwork)) {
|
} else if (requiresClat(mNetwork)) {
|
||||||
start(); // Enters STARTING state.
|
start(); // Enters STARTING state.
|
||||||
}
|
}
|
||||||
@@ -344,6 +345,7 @@ public class Nat464Xlat extends BaseNetworkObserver {
|
|||||||
if (!requiresClat(mNetwork)) {
|
if (!requiresClat(mNetwork)) {
|
||||||
// IPv4 address added. Go back to IDLE state.
|
// IPv4 address added. Go back to IDLE state.
|
||||||
stopPrefixDiscovery();
|
stopPrefixDiscovery();
|
||||||
|
mState = State.IDLE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -6228,6 +6228,22 @@ public class ConnectivityServiceTest {
|
|||||||
inOrder.verify(mMockNetd).clatdStop(iface);
|
inOrder.verify(mMockNetd).clatdStop(iface);
|
||||||
inOrder.verify(mMockDnsResolver).startPrefix64Discovery(netId);
|
inOrder.verify(mMockDnsResolver).startPrefix64Discovery(netId);
|
||||||
|
|
||||||
|
// If the RA prefix appears while DNS discovery is in progress, discovery is stopped and
|
||||||
|
// clatd is started with the prefix from the RA.
|
||||||
|
lp.setNat64Prefix(pref64FromRa);
|
||||||
|
mCellNetworkAgent.sendLinkProperties(lp);
|
||||||
|
expectNat64PrefixChange(callback, mCellNetworkAgent, pref64FromRa);
|
||||||
|
inOrder.verify(mMockNetd).clatdStart(iface, pref64FromRa.toString());
|
||||||
|
inOrder.verify(mMockDnsResolver).stopPrefix64Discovery(netId);
|
||||||
|
|
||||||
|
// Withdraw the RA prefix so we can test the case where an RA prefix appears after DNS
|
||||||
|
// discovery has succeeded.
|
||||||
|
lp.setNat64Prefix(null);
|
||||||
|
mCellNetworkAgent.sendLinkProperties(lp);
|
||||||
|
expectNat64PrefixChange(callback, mCellNetworkAgent, null);
|
||||||
|
inOrder.verify(mMockNetd).clatdStop(iface);
|
||||||
|
inOrder.verify(mMockDnsResolver).startPrefix64Discovery(netId);
|
||||||
|
|
||||||
mService.mNetdEventCallback.onNat64PrefixEvent(netId, true /* added */,
|
mService.mNetdEventCallback.onNat64PrefixEvent(netId, true /* added */,
|
||||||
pref64FromDnsStr, 96);
|
pref64FromDnsStr, 96);
|
||||||
expectNat64PrefixChange(callback, mCellNetworkAgent, pref64FromDns);
|
expectNat64PrefixChange(callback, mCellNetworkAgent, pref64FromDns);
|
||||||
|
|||||||
Reference in New Issue
Block a user