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

Commit f7705c3e authored by xinhe's avatar xinhe
Browse files

Initial codes for Quality network selection

    In this change list, the old WifiAutojoin module is
    refactored initially. The old WifiAutojoinController is
    replaced with a new WifiQualifiedNetworkSelector.
    WifiConfiguration, WifiConfigureStore and
    WifiStateMachine have been modified accordingly. The new
    network selection logic is refactored with a more clear
    and deterministci one. To refer to thedescribed in
    details, in "Quality Network Selection and Connectivity
    Scan Management in N". The link of the document is:
    https://docs.google.com/document/d
    /1JPTa2NEk-PgjCJ16fIrR6ohV-kDKveDlYDOeiMCB2_c

cherry-picked from 8d106780
and make changes on WiFiConfigurationSerializer.java since
it is not on mm-wireless-dev
Bug:26012244
Change-Id: I44e454544b630b891c9a58a18b5a028edcce580f
parent 4fce6666
Loading
Loading
Loading
Loading
+14 −10
Original line number Diff line number Diff line
@@ -413,22 +413,26 @@
    <!-- Boolean indicating whether or not wifi firmware debugging is enabled -->
    <bool translatable="false" name="config_wifi_enable_wifi_firmware_debugging">true</bool>

    <!-- Integer specifying the basic autojoin parameters -->
    <!-- Integer specifying the basic Quality Network Selection parameters -->
    <integer translatable="false" name="config_wifi_framework_5GHz_preference_boost_threshold">-65</integer>
    <integer translatable="false" name="config_wifi_framework_5GHz_preference_boost_factor">5</integer>
    <integer translatable="false" name="config_wifi_framework_5GHz_preference_boost_factor">40</integer>
    <integer translatable="false" name="config_wifi_framework_current_association_hysteresis_high">16</integer>
    <integer translatable="false" name="config_wifi_framework_current_association_hysteresis_low">10</integer>
    <integer translatable="false" name="config_wifi_framework_5GHz_preference_penalty_threshold">-75</integer>
    <integer translatable="false" name="config_wifi_framework_5GHz_preference_penalty_factor">2</integer>

    <integer translatable="false" name="config_wifi_framework_RSSI_SCORE_OFFSET">85</integer>
    <integer translatable="false" name="config_wifi_framework_RSSI_SCORE_SLOPE">4</integer>
    <integer translatable="false" name="config_wifi_framework_SAME_BSSID_AWARD">24</integer>
    <integer translatable="false" name="config_wifi_framework_LAST_SELECTION_AWARD">480</integer>
    <integer translatable="false" name="config_wifi_framework_PASSPOINT_SECURITY_AWARD">40</integer>
    <integer translatable="false" name="config_wifi_framework_SECURITY_AWARD">80</integer>
    <!-- Integer parameters of the wifi to cellular handover feature
         wifi should not stick to bad networks -->
    <integer translatable="false" name="config_wifi_framework_wifi_score_bad_rssi_threshold_5GHz">-82</integer>
    <integer translatable="false" name="config_wifi_framework_wifi_score_low_rssi_threshold_5GHz">-72</integer>
    <integer translatable="false" name="config_wifi_framework_wifi_score_good_rssi_threshold_5GHz">-60</integer>
    <integer translatable="false" name="config_wifi_framework_wifi_score_bad_rssi_threshold_24GHz">-87</integer>
    <integer translatable="false" name="config_wifi_framework_wifi_score_low_rssi_threshold_24GHz">-77</integer>
    <integer translatable="false" name="config_wifi_framework_wifi_score_good_rssi_threshold_24GHz">-65</integer>
    <integer translatable="false" name="config_wifi_framework_wifi_score_low_rssi_threshold_5GHz">-70</integer>
    <integer translatable="false" name="config_wifi_framework_wifi_score_good_rssi_threshold_5GHz">-57</integer>
    <integer translatable="false" name="config_wifi_framework_wifi_score_bad_rssi_threshold_24GHz">-85</integer>
    <integer translatable="false" name="config_wifi_framework_wifi_score_low_rssi_threshold_24GHz">-73</integer>
    <integer translatable="false" name="config_wifi_framework_wifi_score_good_rssi_threshold_24GHz">-60</integer>
    <integer translatable="false" name="config_wifi_framework_wifi_score_bad_link_speed_24">6</integer>
    <integer translatable="false" name="config_wifi_framework_wifi_score_bad_link_speed_5">12</integer>
    <integer translatable="false" name="config_wifi_framework_wifi_score_good_link_speed_24">24</integer>
@@ -502,7 +506,7 @@
    <integer translatable="false" name="config_wifi_framework_network_black_list_min_time_milli">120000</integer>

    <!-- Integer indicating RSSI boost given to current network -->
    <integer translatable="false" name="config_wifi_framework_current_network_boost">25</integer>
    <integer translatable="false" name="config_wifi_framework_current_network_boost">16</integer>

    <!-- Integer indicating how to handle beacons with uninitialized RSSI value of 0 -->
    <integer translatable="false" name="config_wifi_framework_scan_result_rssi_level_patchup_value">-85</integer>
+6 −1
Original line number Diff line number Diff line
@@ -310,7 +310,12 @@
  <java-symbol type="integer" name="config_wifi_framework_current_association_hysteresis_high" />
  <java-symbol type="integer" name="config_wifi_framework_current_association_hysteresis_low" />
  <java-symbol type="integer" name="config_wifi_framework_5GHz_preference_penalty_threshold" />
  <java-symbol type="integer" name="config_wifi_framework_5GHz_preference_penalty_factor" />
  <java-symbol type="integer" name="config_wifi_framework_RSSI_SCORE_OFFSET" />
  <java-symbol type="integer" name="config_wifi_framework_RSSI_SCORE_SLOPE" />
  <java-symbol type="integer" name="config_wifi_framework_SAME_BSSID_AWARD" />
  <java-symbol type="integer" name="config_wifi_framework_LAST_SELECTION_AWARD" />
  <java-symbol type="integer" name="config_wifi_framework_PASSPOINT_SECURITY_AWARD" />
  <java-symbol type="integer" name="config_wifi_framework_SECURITY_AWARD" />
  <java-symbol type="integer" name="config_wifi_disconnected_short_scan_interval" />
  <java-symbol type="integer" name="config_wifi_disconnected_long_scan_interval" />
  <java-symbol type="integer" name="config_wifi_associated_short_scan_interval" />
+30 −59
Original line number Diff line number Diff line
@@ -394,34 +394,21 @@ public class AccessPoint implements Comparable<AccessPoint> {
            summary.append(String.format(format, mConfig.providerFriendlyName));
        } else if (mConfig != null && mConfig.hasNoInternetAccess()) {
            summary.append(mContext.getString(R.string.wifi_no_internet));
        } else if (mConfig != null && ((mConfig.status == WifiConfiguration.Status.DISABLED &&
                mConfig.disableReason != WifiConfiguration.DISABLED_UNKNOWN_REASON)
               || mConfig.autoJoinStatus
                >= WifiConfiguration.AUTO_JOIN_DISABLED_ON_AUTH_FAILURE)) {
            if (mConfig.autoJoinStatus
                    >= WifiConfiguration.AUTO_JOIN_DISABLED_ON_AUTH_FAILURE) {
                if (mConfig.disableReason == WifiConfiguration.DISABLED_DHCP_FAILURE) {
                    summary.append(mContext.getString(R.string.wifi_disabled_network_failure));
                } else if (mConfig.disableReason == WifiConfiguration.DISABLED_AUTH_FAILURE) {
                    summary.append(mContext.getString(R.string.wifi_disabled_password_failure));
                } else {
                    summary.append(mContext.getString(R.string.wifi_disabled_wifi_failure));
                }
            } else {
                switch (mConfig.disableReason) {
                    case WifiConfiguration.DISABLED_AUTH_FAILURE:
        } else if (mConfig != null && !mConfig.getNetworkSelectionStatus().isNetworkEnabled()) {
            WifiConfiguration.NetworkSelectionStatus networkStatus =
                    mConfig.getNetworkSelectionStatus();
            switch (networkStatus.getNetworkSelectionDisableReason()) {
                case WifiConfiguration.NetworkSelectionStatus.DISABLED_AUTHENTICATION_FAILURE:
                    summary.append(mContext.getString(R.string.wifi_disabled_password_failure));
                    break;
                    case WifiConfiguration.DISABLED_DHCP_FAILURE:
                    case WifiConfiguration.DISABLED_DNS_FAILURE:
                case WifiConfiguration.NetworkSelectionStatus.DISABLED_DHCP_FAILURE:
                case WifiConfiguration.NetworkSelectionStatus.DISABLED_DNS_FAILURE:
                    summary.append(mContext.getString(R.string.wifi_disabled_network_failure));
                    break;
                    case WifiConfiguration.DISABLED_UNKNOWN_REASON:
                    case WifiConfiguration.DISABLED_ASSOCIATION_REJECT:
                case WifiConfiguration.NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION:
                    summary.append(mContext.getString(R.string.wifi_disabled_generic));
                    break;
            }
            }
        } else if (mRssi == Integer.MAX_VALUE) { // Wifi out of range
            summary.append(mContext.getString(R.string.wifi_not_in_range));
        } else { // In range, not disabled.
@@ -437,11 +424,11 @@ public class AccessPoint implements Comparable<AccessPoint> {
                summary.append(" f=" + Integer.toString(mInfo.getFrequency()));
            }
            summary.append(" " + getVisibilityStatus());
            if (mConfig != null && mConfig.autoJoinStatus > 0) {
                summary.append(" (" + mConfig.autoJoinStatus);
                if (mConfig.blackListTimestamp > 0) {
            if (mConfig != null && !mConfig.getNetworkSelectionStatus().isNetworkEnabled()) {
                summary.append(" (" + mConfig.getNetworkSelectionStatus().getNetworkStatusString());
                if (mConfig.getNetworkSelectionStatus().getDisableTime() > 0) {
                    long now = System.currentTimeMillis();
                    long diff = (now - mConfig.blackListTimestamp)/1000;
                    long diff = (now - mConfig.getNetworkSelectionStatus().getDisableTime()) / 1000;
                    long sec = diff%60; //seconds
                    long min = (diff/60)%60; //minutes
                    long hour = (min/60)%60; //hours
@@ -452,17 +439,19 @@ public class AccessPoint implements Comparable<AccessPoint> {
                }
                summary.append(")");
            }
            if (mConfig != null && mConfig.numIpConfigFailures > 0) {
                summary.append(" ipf=").append(mConfig.numIpConfigFailures);
            }
            if (mConfig != null && mConfig.numConnectionFailures > 0) {
                summary.append(" cf=").append(mConfig.numConnectionFailures);

            if (mConfig != null) {
                WifiConfiguration.NetworkSelectionStatus networkStatus =
                        mConfig.getNetworkSelectionStatus();
                for (int index = WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_ENABLE;
                        index < WifiConfiguration.NetworkSelectionStatus
                        .NETWORK_SELECTION_DISABLED_MAX; index++) {
                    if (networkStatus.getDisableReasonCounter(index) != 0) {
                        summary.append(" " + WifiConfiguration.NetworkSelectionStatus
                                .getNetworkDisableReasonString(index) + "="
                                + networkStatus.getDisableReasonCounter(index));
                    }
            if (mConfig != null && mConfig.numAuthFailures > 0) {
                summary.append(" authf=").append(mConfig.numAuthFailures);
                }
            if (mConfig != null && mConfig.numNoInternetAccessReports > 0) {
                summary.append(" noInt=").append(mConfig.numNoInternetAccessReports);
            }
        }
        return summary.toString();
@@ -508,10 +497,6 @@ public class AccessPoint implements Comparable<AccessPoint> {
        Map<String, ScanResult> list = mScanResultCache.snapshot();
        // TODO: sort list by RSSI or age
        for (ScanResult result : list.values()) {
            if (result.seen == 0)
                continue;

            if (result.autoJoinStatus != ScanResult.ENABLED) numBlackListed++;

            if (result.frequency >= LOWER_FREQ_5GHZ
                    && result.frequency <= HIGHER_FREQ_5GHZ) {
@@ -525,8 +510,6 @@ public class AccessPoint implements Comparable<AccessPoint> {
                num24 = num24 + 1;
            }

            // Ignore results seen, older than 20 seconds
            if (now - result.seen > VISIBILITY_OUTDATED_AGE_IN_MILLI) continue;

            if (result.frequency >= LOWER_FREQ_5GHZ
                    && result.frequency <= HIGHER_FREQ_5GHZ) {
@@ -539,12 +522,6 @@ public class AccessPoint implements Comparable<AccessPoint> {
                    if (bssid != null && result.BSSID.equals(bssid)) scans5GHz.append("*");
                    scans5GHz.append("=").append(result.frequency);
                    scans5GHz.append(",").append(result.level);
                    if (result.autoJoinStatus != 0) {
                        scans5GHz.append(",st=").append(result.autoJoinStatus);
                    }
                    if (result.numIpConfigFailures != 0) {
                        scans5GHz.append(",ipf=").append(result.numIpConfigFailures);
                    }
                    scans5GHz.append("}");
                    n5++;
                }
@@ -559,12 +536,6 @@ public class AccessPoint implements Comparable<AccessPoint> {
                    if (bssid != null && result.BSSID.equals(bssid)) scans24GHz.append("*");
                    scans24GHz.append("=").append(result.frequency);
                    scans24GHz.append(",").append(result.level);
                    if (result.autoJoinStatus != 0) {
                        scans24GHz.append(",st=").append(result.autoJoinStatus);
                    }
                    if (result.numIpConfigFailures != 0) {
                        scans24GHz.append(",ipf=").append(result.numIpConfigFailures);
                    }
                    scans24GHz.append("}");
                    n24++;
                }
+36 −19
Original line number Diff line number Diff line
@@ -48,6 +48,23 @@ public class WiFiConfigurationSerializer {
     */
    private static int STATE_VERSION = 1;

    /**
     * write the Network selecton status to Byte Array
     */
    private static void writeNetworkSelectionStatus(WifiConfiguration config, DataOutputStream dest)
            throws IOException {
        WifiConfiguration.NetworkSelectionStatus status = config.getNetworkSelectionStatus();

        dest.writeInt(status.getNetworkSelectionStatus());
        dest.writeInt(status.getNetworkSelectionDisableReason());
        for (int index = WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_ENABLE;
                index < WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_DISABLED_MAX;
                index++) {
            dest.writeInt(status.getDisableReasonCounter(index));
        }
        dest.writeLong(status.getDisableTime());
        writeString(dest, status.getNetworkSelectionBSSID());
    }

    /**
     * Marshals a WifiConfig object into a byte-array.
@@ -64,12 +81,11 @@ public class WiFiConfigurationSerializer {
                out.writeInt(STATE_VERSION);
                out.writeInt(wifiConfig.networkId);
                out.writeInt(wifiConfig.status);
                out.writeInt(wifiConfig.disableReason);
                writeNetworkSelectionStatus(wifiConfig, out);
                writeString(out, wifiConfig.SSID);
                writeString(out, wifiConfig.BSSID);
                out.writeInt(wifiConfig.apBand);
                out.writeInt(wifiConfig.apChannel);
                writeString(out, wifiConfig.autoJoinBSSID);
                writeString(out, wifiConfig.FQDN);
                writeString(out, wifiConfig.providerFriendlyName);
                out.writeInt(wifiConfig.roamingConsortiumIds.length);
@@ -98,7 +114,6 @@ public class WiFiConfigurationSerializer {

                writeString(out, wifiConfig.dhcpServer);
                writeString(out, wifiConfig.defaultGwMacAddress);
                out.writeInt(wifiConfig.autoJoinStatus);
                out.writeInt(wifiConfig.selfAdded ? 1 : 0);
                out.writeInt(wifiConfig.didSelfAdd ? 1 : 0);
                out.writeInt(wifiConfig.validatedInternetAccess ? 1 : 0);
@@ -108,14 +123,9 @@ public class WiFiConfigurationSerializer {
                out.writeInt(wifiConfig.lastUpdateUid);
                writeString(out, wifiConfig.creatorName);
                writeString(out, wifiConfig.lastUpdateName);
                out.writeLong(wifiConfig.blackListTimestamp);
                out.writeLong(wifiConfig.lastConnectionFailure);
                out.writeLong(wifiConfig.lastRoamingFailure);
                out.writeInt(wifiConfig.lastRoamingFailureReason);
                out.writeLong(wifiConfig.roamingFailureBlackListTimeMilli);
                out.writeLong(wifiConfig.numConnectionFailures);
                out.writeLong(wifiConfig.numIpConfigFailures);
                out.writeInt(wifiConfig.numAuthFailures);
                out.writeInt(wifiConfig.numScorerOverride);
                out.writeInt(wifiConfig.numScorerOverrideAndSwitchedNetwork);
                out.writeInt(wifiConfig.numAssociation);
@@ -126,8 +136,6 @@ public class WiFiConfigurationSerializer {
                out.writeInt(wifiConfig.numTicksAtBadRSSI);
                out.writeInt(wifiConfig.numTicksAtNotHighRSSI);
                out.writeInt(wifiConfig.numUserTriggeredJoinAttempts);
                out.writeInt(wifiConfig.autoJoinUseAggressiveJoinAttemptThreshold);
                out.writeInt(wifiConfig.autoJoinBailedDueToLowRssi ? 1 : 0);
                out.writeInt(wifiConfig.userApproved);
                out.writeInt(wifiConfig.numNoInternetAccessReports);
                out.writeInt(wifiConfig.noInternetAccessExpected ? 1 : 0);
@@ -139,6 +147,23 @@ public class WiFiConfigurationSerializer {
        return baos.toByteArray();
    }

    /**
     *
     */
    private static void readNetworkSelectionStatusFromByteArray(DataInputStream in,
            WifiConfiguration config, int version) throws IOException {
        WifiConfiguration.NetworkSelectionStatus status = config.getNetworkSelectionStatus();
        status.setNetworkSelectionStatus(in.readInt());
        status.setNetworkSelectionDisableReason(in.readInt());
        for (int index = WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_ENABLE;
                index < WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_DISABLED_MAX;
                index++) {
            status.setDisableReasonCounter(index, in.readInt());
        }
        status.setDisableTime(in.readLong());
        status.setNetworkSelectionBSSID(readString(in, version));
    }

    /**
     * Unmarshals a byte array into a WifiConfig Object
     *
@@ -157,12 +182,11 @@ public class WiFiConfigurationSerializer {

            config.networkId = in.readInt();
            config.status = in.readInt();
            config.disableReason = in.readInt();
            readNetworkSelectionStatusFromByteArray(in, config, version);
            config.SSID = readString(in, version);
            config.BSSID = readString(in, version);
            config.apBand = in.readInt();
            config.apChannel = in.readInt();
            config.autoJoinBSSID = readString(in, version);
            config.FQDN = readString(in, version);
            config.providerFriendlyName = readString(in, version);
            int numRoamingConsortiumIds = in.readInt();
@@ -195,7 +219,6 @@ public class WiFiConfigurationSerializer {

            config.dhcpServer = readString(in, version);
            config.defaultGwMacAddress = readString(in, version);
            config.autoJoinStatus = in.readInt();
            config.selfAdded = in.readInt() != 0;
            config.didSelfAdd = in.readInt() != 0;
            config.validatedInternetAccess = in.readInt() != 0;
@@ -205,14 +228,10 @@ public class WiFiConfigurationSerializer {
            config.lastUpdateUid = in.readInt();
            config.creatorName = readString(in, version);
            config.lastUpdateName = readString(in, version);
            config.blackListTimestamp = in.readLong();
            config.lastConnectionFailure = in.readLong();
            config.lastRoamingFailure = in.readLong();
            config.lastRoamingFailureReason = in.readInt();
            config.roamingFailureBlackListTimeMilli = in.readLong();
            config.numConnectionFailures = in.readInt();
            config.numIpConfigFailures = in.readInt();
            config.numAuthFailures = in.readInt();
            config.numScorerOverride = in.readInt();
            config.numScorerOverrideAndSwitchedNetwork = in.readInt();
            config.numAssociation = in.readInt();
@@ -223,8 +242,6 @@ public class WiFiConfigurationSerializer {
            config.numTicksAtBadRSSI = in.readInt();
            config.numTicksAtNotHighRSSI = in.readInt();
            config.numUserTriggeredJoinAttempts = in.readInt();
            config.autoJoinUseAggressiveJoinAttemptThreshold = in.readInt();
            config.autoJoinBailedDueToLowRssi = in.readInt() != 0;
            config.userApproved = in.readInt();
            config.numNoInternetAccessReports = in.readInt();
            config.noInternetAccessExpected = in.readInt() != 0;
+396 −259

File changed.

Preview size limit exceeded, changes collapsed.