First pass on multinetwork framework
Starting to switch netd to use NetId. Adding the Network identifying class bug:13550136 Change-Id: Ie0db4fb17c9300bfafb63329adfa02339911b33d
This commit is contained in:
@@ -408,6 +408,11 @@ public class ConnectivityManager {
|
|||||||
*/
|
*/
|
||||||
public static final int CONNECTIVITY_CHANGE_DELAY_DEFAULT = 3000;
|
public static final int CONNECTIVITY_CHANGE_DELAY_DEFAULT = 3000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public final static int INVALID_NET_ID = 0;
|
||||||
|
|
||||||
private final IConnectivityManager mService;
|
private final IConnectivityManager mService;
|
||||||
|
|
||||||
private final String mPackageName;
|
private final String mPackageName;
|
||||||
|
|||||||
59
core/java/android/net/Network.java
Normal file
59
core/java/android/net/Network.java
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2014 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package android.net;
|
||||||
|
|
||||||
|
import android.os.Parcelable;
|
||||||
|
import android.os.Parcel;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Identifies the Network.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public class Network implements Parcelable {
|
||||||
|
|
||||||
|
public final int netId;
|
||||||
|
|
||||||
|
public Network(int netId) {
|
||||||
|
this.netId = netId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Network(Network that) {
|
||||||
|
this.netId = that.netId;
|
||||||
|
}
|
||||||
|
|
||||||
|
// implement the Parcelable interface
|
||||||
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
|
dest.writeInt(netId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final Creator<Network> CREATOR =
|
||||||
|
new Creator<Network>() {
|
||||||
|
public Network createFromParcel(Parcel in) {
|
||||||
|
int netId = in.readInt();
|
||||||
|
|
||||||
|
return new Network(netId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Network[] newArray(int size) {
|
||||||
|
return new Network[size];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -65,6 +65,7 @@ import android.net.LinkProperties;
|
|||||||
import android.net.LinkProperties.CompareResult;
|
import android.net.LinkProperties.CompareResult;
|
||||||
import android.net.LinkQualityInfo;
|
import android.net.LinkQualityInfo;
|
||||||
import android.net.MobileDataStateTracker;
|
import android.net.MobileDataStateTracker;
|
||||||
|
import android.net.Network;
|
||||||
import android.net.NetworkConfig;
|
import android.net.NetworkConfig;
|
||||||
import android.net.NetworkInfo;
|
import android.net.NetworkInfo;
|
||||||
import android.net.NetworkInfo.DetailedState;
|
import android.net.NetworkInfo.DetailedState;
|
||||||
@@ -165,6 +166,8 @@ import javax.net.ssl.HostnameVerifier;
|
|||||||
import javax.net.ssl.HttpsURLConnection;
|
import javax.net.ssl.HttpsURLConnection;
|
||||||
import javax.net.ssl.SSLSession;
|
import javax.net.ssl.SSLSession;
|
||||||
|
|
||||||
|
import static android.net.ConnectivityManager.INVALID_NET_ID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
@@ -442,6 +445,10 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||||||
|
|
||||||
TelephonyManager mTelephonyManager;
|
TelephonyManager mTelephonyManager;
|
||||||
|
|
||||||
|
private final static int MIN_NET_ID = 10; // some reserved marks
|
||||||
|
private final static int MAX_NET_ID = 65535;
|
||||||
|
private int mNextNetId = MIN_NET_ID;
|
||||||
|
|
||||||
public ConnectivityService(Context context, INetworkManagementService netd,
|
public ConnectivityService(Context context, INetworkManagementService netd,
|
||||||
INetworkStatsService statsService, INetworkPolicyManager policyManager) {
|
INetworkStatsService statsService, INetworkPolicyManager policyManager) {
|
||||||
// Currently, omitting a NetworkFactory will create one internally
|
// Currently, omitting a NetworkFactory will create one internally
|
||||||
@@ -706,6 +713,12 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||||||
mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
|
mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private synchronized int nextNetId() {
|
||||||
|
int netId = mNextNetId;
|
||||||
|
if (++mNextNetId > MAX_NET_ID) mNextNetId = MIN_NET_ID;
|
||||||
|
return netId;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Factory that creates {@link NetworkStateTracker} instances using given
|
* Factory that creates {@link NetworkStateTracker} instances using given
|
||||||
* {@link NetworkConfig}.
|
* {@link NetworkConfig}.
|
||||||
@@ -1984,6 +1997,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||||||
int prevNetType = info.getType();
|
int prevNetType = info.getType();
|
||||||
|
|
||||||
mNetTrackers[prevNetType].setTeardownRequested(false);
|
mNetTrackers[prevNetType].setTeardownRequested(false);
|
||||||
|
int thisNetId = mNetTrackers[prevNetType].getNetwork().netId;
|
||||||
|
|
||||||
// Remove idletimer previously setup in {@code handleConnect}
|
// Remove idletimer previously setup in {@code handleConnect}
|
||||||
if (mNetConfigs[prevNetType].isDefault()) {
|
if (mNetConfigs[prevNetType].isDefault()) {
|
||||||
@@ -2069,6 +2083,13 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||||||
sendConnectedBroadcastDelayed(mNetTrackers[mActiveDefaultNetwork].getNetworkInfo(),
|
sendConnectedBroadcastDelayed(mNetTrackers[mActiveDefaultNetwork].getNetworkInfo(),
|
||||||
getConnectivityChangeDelay());
|
getConnectivityChangeDelay());
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
mNetd.removeNetwork(thisNetId);
|
||||||
|
} catch (Exception e) {
|
||||||
|
loge("Exception removing network: " + e);
|
||||||
|
} finally {
|
||||||
|
mNetTrackers[prevNetType].setNetId(INVALID_NET_ID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void tryFailover(int prevNetType) {
|
private void tryFailover(int prevNetType) {
|
||||||
@@ -2336,17 +2357,23 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||||||
if (mNetConfigs[newNetType].isDefault()) {
|
if (mNetConfigs[newNetType].isDefault()) {
|
||||||
if (mActiveDefaultNetwork != -1 && mActiveDefaultNetwork != newNetType) {
|
if (mActiveDefaultNetwork != -1 && mActiveDefaultNetwork != newNetType) {
|
||||||
if (isNewNetTypePreferredOverCurrentNetType(newNetType)) {
|
if (isNewNetTypePreferredOverCurrentNetType(newNetType)) {
|
||||||
// tear down the other
|
String teardownPolicy = SystemProperties.get("net.teardownPolicy");
|
||||||
NetworkStateTracker otherNet =
|
if (TextUtils.equals(teardownPolicy, "keep") == false) {
|
||||||
mNetTrackers[mActiveDefaultNetwork];
|
// tear down the other
|
||||||
if (DBG) {
|
NetworkStateTracker otherNet =
|
||||||
log("Policy requires " + otherNet.getNetworkInfo().getTypeName() +
|
mNetTrackers[mActiveDefaultNetwork];
|
||||||
" teardown");
|
if (DBG) {
|
||||||
}
|
log("Policy requires " + otherNet.getNetworkInfo().getTypeName() +
|
||||||
if (!teardown(otherNet)) {
|
" teardown");
|
||||||
loge("Network declined teardown request");
|
}
|
||||||
teardown(thisNet);
|
if (!teardown(otherNet)) {
|
||||||
return;
|
loge("Network declined teardown request");
|
||||||
|
teardown(thisNet);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//TODO - remove
|
||||||
|
loge("network teardown skipped due to net.teardownPolicy setting");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// don't accept this one
|
// don't accept this one
|
||||||
@@ -2358,6 +2385,15 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
int thisNetId = nextNetId();
|
||||||
|
thisNet.setNetId(thisNetId);
|
||||||
|
try {
|
||||||
|
mNetd.createNetwork(thisNetId, thisIface);
|
||||||
|
} catch (Exception e) {
|
||||||
|
loge("Exception creating network :" + e);
|
||||||
|
teardown(thisNet);
|
||||||
|
return;
|
||||||
|
}
|
||||||
setupDataActivityTracking(newNetType);
|
setupDataActivityTracking(newNetType);
|
||||||
synchronized (ConnectivityService.this) {
|
synchronized (ConnectivityService.this) {
|
||||||
// have a new default network, release the transition wakelock in a second
|
// have a new default network, release the transition wakelock in a second
|
||||||
@@ -2380,6 +2416,16 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||||||
// Don't do this - if we never sign in stay, grey
|
// Don't do this - if we never sign in stay, grey
|
||||||
//reportNetworkCondition(mActiveDefaultNetwork, 100);
|
//reportNetworkCondition(mActiveDefaultNetwork, 100);
|
||||||
updateNetworkSettings(thisNet);
|
updateNetworkSettings(thisNet);
|
||||||
|
} else {
|
||||||
|
int thisNetId = nextNetId();
|
||||||
|
thisNet.setNetId(thisNetId);
|
||||||
|
try {
|
||||||
|
mNetd.createNetwork(thisNetId, thisIface);
|
||||||
|
} catch (Exception e) {
|
||||||
|
loge("Exception creating network :" + e);
|
||||||
|
teardown(thisNet);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
thisNet.setTeardownRequested(false);
|
thisNet.setTeardownRequested(false);
|
||||||
updateMtuSizeSettings(thisNet);
|
updateMtuSizeSettings(thisNet);
|
||||||
|
|||||||
Reference in New Issue
Block a user