diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index f9423db..ce4f253 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
// send out another legacy broadcast - currently only used for suspend/unsuspend
// toggle
public void update(NetworkAgentInfo nai) {
@@ -3299,6 +3211,9 @@
nai.getCurrentScoreAsValidated())) {
return false;
}
+ if(nai.getCurrentScore()>0 && nai.networkInfo.getType()==ConnectivityManager.TYPE_ETHERNET){
+ return false;
+ }
}
return true;
}
@@ -5621,6 +5536,70 @@
updateUids(nai, null, nai.networkCapabilities);
}
+ private final static String nullIpInfo = "0.0.0.0";
+ private void saveEthernetInformation(LinkProperties mLinkProperties,boolean up) {//分别保存双网口ip地址信息
+ Log.i(TAG, "saveEthernetInformation " + mLinkProperties.getInterfaceName());
+ Log.i(TAG, "saveEthernetInformation up " +up);
+ if(up){
+ SystemProperties.set("dhcp."+ mLinkProperties.getInterfaceName() +".ipaddress",getLinkIpAddress(mLinkProperties));
+ SystemProperties.set("dhcp."+ mLinkProperties.getInterfaceName() +".mask",getLinkNetmask(mLinkProperties));
+ SystemProperties.set("dhcp."+ mLinkProperties.getInterfaceName() +".gateway",getLinkGateway(mLinkProperties));
+ SystemProperties.set("dhcp."+ mLinkProperties.getInterfaceName() +".dns1",getLinkDns(mLinkProperties));
+ }else{
+ SystemProperties.set("dhcp."+ mLinkProperties.getInterfaceName() +".ipaddress",null);
+ SystemProperties.set("dhcp."+ mLinkProperties.getInterfaceName() +".mask",null);
+ SystemProperties.set("dhcp."+ mLinkProperties.getInterfaceName() +".gateway",null);
+ SystemProperties.set("dhcp."+ mLinkProperties.getInterfaceName() +".dns1",null);
+ }
+ Log.i(TAG, "saveEthernetInformation ipaddress " +SystemProperties.get("dhcp."+ mLinkProperties.getInterfaceName() +".ipaddress")+" ="+mLinkProperties.getInterfaceName());
+ }
+ private String getLinkIpAddress(LinkProperties mLinkProperties) {
+ for (LinkAddress l : mLinkProperties.getLinkAddresses()) {
+ InetAddress source = l.getAddress();
+ //Log.d(TAG, "getIpAddress: " + source.getHostAddress());
+ if (source instanceof Inet4Address) {
+ return source.getHostAddress();
+ }
+ }
+ return "";
+ }
+ private String getLinkNetmask(LinkProperties mLinkProperties) {
+ for (LinkAddress l : mLinkProperties.getLinkAddresses()) {
+ InetAddress source = l.getAddress();
+ if (source instanceof Inet4Address) {
+ return linkprefix2netmask(l.getPrefixLength());
+ }
+ }
+ return "";
+ }
+ private String linkprefix2netmask(int prefix) {
+ // convert prefix to netmask
+ if (true) {
+ int mask = 0xFFFFFFFF << (32 - prefix);
+ //Log.d(TAG, "mask = " + mask + " prefix = " + prefix);
+ return ((mask>>>24) & 0xff) + "." + ((mask>>>16) & 0xff) + "." + ((mask>>>8) & 0xff) + "." + ((mask) & 0xff);
+ } else {
+ return NetworkUtils.intToInetAddress(NetworkUtils.prefixLengthToNetmaskInt(prefix)).getHostName();
+ }
+ }
+ private String getLinkGateway(LinkProperties mLinkProperties) {
+ for (RouteInfo route : mLinkProperties.getRoutes()) {
+ if (route.hasGateway()) {
+ InetAddress gateway = route.getGateway();
+ if (route.isIPv4Default()) {
+ return gateway.getHostAddress();
+ }
+ }
+ }
+ return "";
+ }
+ private String getLinkDns(LinkProperties mLinkProperties) {
+ String dns = "";
+ for (InetAddress nameserver : mLinkProperties.getDnsServers()) {
+ dns += nameserver.getHostAddress();
+ }
+ return dns;
+ }
private void updateLinkProperties(NetworkAgentInfo networkAgent, LinkProperties newLp,
LinkProperties oldLp) {
int netId = networkAgent.network.netId;
@@ -5647,6 +5626,26 @@
updateRoutes(newLp, oldLp, netId);
updateDnses(newLp, oldLp, netId);
+ saveEthernetInformation(newLp,true);
+
+ int NetworkType = networkAgent.networkInfo.getType();
+ if(NetworkType == ConnectivityManager.TYPE_ETHERNET) {
+ CompareResult<RouteInfo> routeDiff = new CompareResult<RouteInfo>();
+ for (RouteInfo route : newLp.getAllRoutes()) {
+ if (route.hasGateway()) continue;
+ if (!(route.getDestination().getAddress() instanceof Inet4Address)) continue;
+ try {
+ mNMS.addLegacyRouteForNetId(netId, route, getCallingUid());
+
+ } catch (Exception e) {
+ // never crash - catch them all
+ loge("Exception trying to add a route: " + e);
+ }
+ }
+ }
// Make sure LinkProperties represents the latest private DNS status.
// This does not need to be done before updateDnses because the
// LinkProperties are not the source of the private DNS configuration.
本文档介绍了在Android 10中如何处理双以太网连接,特别是更新 ConnectivityService.java 文件来处理网络状态。内容包括更新网络代理信息、保存和更新双网口的IP、子网掩码、网关和DNS信息,以及添加特定路由的逻辑。
1005

被折叠的 条评论
为什么被折叠?



