Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 66ad9bb7 authored by Robert Greenwalt's avatar Robert Greenwalt Committed by Android (Google) Code Review
Browse files

Merge "Always try to set/remove default routes"

parents 9168f0b1 c76b8fa9
Loading
Loading
Loading
Loading
+54 −77
Original line number Diff line number Diff line
@@ -605,7 +605,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                        !network.isTeardownRequested()) {
                    if (ni.isConnected() == true) {
                        // add the pid-specific dns
                        handleDnsConfigurationChange();
                        handleDnsConfigurationChange(networkType);
                        if (DBG) Slog.d(TAG, "special network already active");
                        return Phone.APN_ALREADY_ACTIVE;
                    }
@@ -967,7 +967,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
            }
        }
        // do this before we broadcast the change
        handleConnectivityChange();
        handleConnectivityChange(prevNetType);

        sendStickyBroadcast(intent);
        /*
@@ -1123,9 +1123,6 @@ public class ConnectivityService extends IConnectivityManager.Stub {
            }
        }

        // do this before we broadcast the change
        handleConnectivityChange();

        sendStickyBroadcast(intent);
        /*
         * If the failover network is already connected, then immediately send
@@ -1204,7 +1201,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        }
        thisNet.setTeardownRequested(false);
        updateNetworkSettings(thisNet);
        handleConnectivityChange();
        handleConnectivityChange(type);
        sendConnectedBroadcast(info);
    }

@@ -1231,26 +1228,18 @@ public class ConnectivityService extends IConnectivityManager.Stub {
    }

    /**
     * After any kind of change in the connectivity state of any network,
     * make sure that anything that depends on the connectivity state of
     * more than one network is set up correctly. We're mainly concerned
     * with making sure that the list of DNS servers is set up  according
     * to which networks are connected, and ensuring that the right routing
     * table entries exist.
     * After a change in the connectivity state of a network. We're mainly
     * concerned with making sure that the list of DNS servers is set up
     * according to which networks are connected, and ensuring that the
     * right routing table entries exist.
     */
    private void handleConnectivityChange() {
    private void handleConnectivityChange(int netType) {
        /*
         * If a non-default network is enabled, add the host routes that
         * will allow it's DNS servers to be accessed.  Only
         * If both mobile and wifi are enabled, add the host routes that
         * will allow MMS traffic to pass on the mobile network. But
         * remove the default route for the mobile network, so that there
         * will be only one default route, to ensure that all traffic
         * except MMS will travel via Wi-Fi.
         * will allow it's DNS servers to be accessed.
         */
        handleDnsConfigurationChange();
        handleDnsConfigurationChange(netType);

        for (int netType : mPriorityList) {
        if (mNetTrackers[netType].getNetworkInfo().isConnected()) {
            if (mNetAttributes[netType].isDefault()) {
                addDefaultRoute(mNetTrackers[netType]);
@@ -1265,7 +1254,6 @@ public class ConnectivityService extends IConnectivityManager.Stub {
            }
        }
    }
    }

    private void addPrivateDnsRoutes(NetworkStateTracker nt) {
        boolean privateDnsRouteSet = nt.isPrivateDnsRouteSet();
@@ -1310,18 +1298,13 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        if (p == null) return;
        String interfaceName = p.getInterfaceName();
        InetAddress defaultGatewayAddr = p.getGateway();
        boolean defaultRouteSet = nt.isDefaultRouteSet();

        if ((interfaceName != null) && (defaultGatewayAddr != null ) &&
                (defaultRouteSet == false)) {
            boolean error = (NetworkUtils.setDefaultRoute(interfaceName, defaultGatewayAddr) < 0);

            if (DBG && !error) {
        if ((interfaceName != null) && (defaultGatewayAddr != null )) {
            if ((NetworkUtils.setDefaultRoute(interfaceName, defaultGatewayAddr) >= 0) && DBG) {
                NetworkInfo networkInfo = nt.getNetworkInfo();
                Slog.d(TAG, "addDefaultRoute for " + networkInfo.getTypeName() +
                        " (" + interfaceName + "), GatewayAddr=" + defaultGatewayAddr);
            }
            nt.defaultRouteSet(!error);
        }
    }

@@ -1330,16 +1313,13 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        NetworkProperties p = nt.getNetworkProperties();
        if (p == null) return;
        String interfaceName = p.getInterfaceName();
        boolean defaultRouteSet = nt.isDefaultRouteSet();

        if (interfaceName != null && defaultRouteSet == true) {
            boolean error = (NetworkUtils.removeDefaultRoute(interfaceName) < 0);
            if (DBG && !error) {
        if (interfaceName != null) {
            if ((NetworkUtils.removeDefaultRoute(interfaceName) >= 0) && DBG) {
                NetworkInfo networkInfo = nt.getNetworkInfo();
                Slog.d(TAG, "removeDefaultRoute for " + networkInfo.getTypeName() + " (" +
                        interfaceName + ")");
            }
            nt.defaultRouteSet(error);
        }
    }

@@ -1480,15 +1460,12 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        SystemProperties.set("net.dnschange", "" + (n+1));
    }

    private void handleDnsConfigurationChange() {
    private void handleDnsConfigurationChange(int netType) {
        // add default net's dns entries
        for (int x = mPriorityList.length-1; x>= 0; x--) {
            int netType = mPriorityList[x];
        NetworkStateTracker nt = mNetTrackers[netType];
            if (nt != null && nt.getNetworkInfo().isConnected() &&
                    !nt.isTeardownRequested()) {
        if (nt != null && nt.getNetworkInfo().isConnected() && !nt.isTeardownRequested()) {
            NetworkProperties p = nt.getNetworkProperties();
                if (p == null) continue;
            if (p == null) return;
            Collection<InetAddress> dnses = p.getDnses();
            if (mNetAttributes[netType].isDefault()) {
                int j = 1;
@@ -1512,11 +1489,9 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                    writePidDns(dnses, pid.intValue());
                }
            }
            }
        }

            bumpDns();
        }
    }

    private int getRestoreDefaultNetworkDelay() {
        String restoreDefaultNetworkDelayStr = SystemProperties.get(
@@ -1654,9 +1629,11 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                            (Notification) msg.obj);

                case NetworkStateTracker.EVENT_CONFIGURATION_CHANGED:
                    handleDnsConfigurationChange();
                    // TODO - make this handle ip/proxy/gateway/dns changes
                    info = (NetworkInfo) msg.obj;
                    type = info.getType();
                    handleDnsConfigurationChange(type);
                    break;

                case NetworkStateTracker.EVENT_ROAMING_CHANGED:
                    // fill me in
                    break;