Home | History | Annotate | Download | only in common
      1 //
      2 // Copyright (C) 2013 The Android Open Source Project
      3 //
      4 // Licensed under the Apache License, Version 2.0 (the "License");
      5 // you may not use this file except in compliance with the License.
      6 // You may obtain a copy of the License at
      7 //
      8 //      http://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unless required by applicable law or agreed to in writing, software
     11 // distributed under the License is distributed on an "AS IS" BASIS,
     12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 // See the License for the specific language governing permissions and
     14 // limitations under the License.
     15 //
     16 
     17 #ifndef UPDATE_ENGINE_COMMON_CONSTANTS_H_
     18 #define UPDATE_ENGINE_COMMON_CONSTANTS_H_
     19 
     20 namespace chromeos_update_engine {
     21 
     22 // Directory for AU prefs that are preserved across powerwash.
     23 extern const char kPowerwashSafePrefsSubDirectory[];
     24 
     25 // The location where we store the AU preferences (state etc).
     26 extern const char kPrefsSubDirectory[];
     27 
     28 // Path to the post install command, relative to the partition.
     29 extern const char kPostinstallDefaultScript[];
     30 
     31 // Path to the stateful partition on the root filesystem.
     32 extern const char kStatefulPartition[];
     33 
     34 // Constants related to preferences.
     35 extern const char kPrefsAttemptInProgress[];
     36 extern const char kPrefsBackoffExpiryTime[];
     37 extern const char kPrefsBootId[];
     38 extern const char kPrefsCurrentBytesDownloaded[];
     39 extern const char kPrefsCurrentResponseSignature[];
     40 extern const char kPrefsCurrentUrlFailureCount[];
     41 extern const char kPrefsCurrentUrlIndex[];
     42 extern const char kPrefsDailyMetricsLastReportedAt[];
     43 extern const char kPrefsDeltaUpdateFailures[];
     44 extern const char kPrefsFullPayloadAttemptNumber[];
     45 extern const char kPrefsInstallDateDays[];
     46 extern const char kPrefsLastActivePingDay[];
     47 extern const char kPrefsLastRollCallPingDay[];
     48 extern const char kPrefsManifestMetadataSize[];
     49 extern const char kPrefsManifestSignatureSize[];
     50 extern const char kPrefsMetricsAttemptLastReportingTime[];
     51 extern const char kPrefsMetricsCheckLastReportingTime[];
     52 extern const char kPrefsNumReboots[];
     53 extern const char kPrefsNumResponsesSeen[];
     54 extern const char kPrefsOmahaCohort[];
     55 extern const char kPrefsOmahaCohortHint[];
     56 extern const char kPrefsOmahaCohortName[];
     57 extern const char kPrefsOmahaEolStatus[];
     58 extern const char kPrefsP2PEnabled[];
     59 extern const char kPrefsP2PFirstAttemptTimestamp[];
     60 extern const char kPrefsP2PNumAttempts[];
     61 extern const char kPrefsPayloadAttemptNumber[];
     62 extern const char kPrefsPostInstallSucceeded[];
     63 extern const char kPrefsPreviousVersion[];
     64 extern const char kPrefsResumedUpdateFailures[];
     65 extern const char kPrefsRollbackVersion[];
     66 extern const char kPrefsChannelOnSlotPrefix[];
     67 extern const char kPrefsSystemUpdatedMarker[];
     68 extern const char kPrefsTargetVersionAttempt[];
     69 extern const char kPrefsTargetVersionInstalledFrom[];
     70 extern const char kPrefsTargetVersionUniqueId[];
     71 extern const char kPrefsTotalBytesDownloaded[];
     72 extern const char kPrefsUpdateCheckCount[];
     73 extern const char kPrefsUpdateCheckResponseHash[];
     74 extern const char kPrefsUpdateCompletedBootTime[];
     75 extern const char kPrefsUpdateCompletedOnBootId[];
     76 extern const char kPrefsUpdateDurationUptime[];
     77 extern const char kPrefsUpdateFirstSeenAt[];
     78 extern const char kPrefsUpdateOverCellularPermission[];
     79 extern const char kPrefsUpdateServerCertificate[];
     80 extern const char kPrefsUpdateStateNextDataLength[];
     81 extern const char kPrefsUpdateStateNextDataOffset[];
     82 extern const char kPrefsUpdateStateNextOperation[];
     83 extern const char kPrefsUpdateStatePayloadIndex[];
     84 extern const char kPrefsUpdateStateSHA256Context[];
     85 extern const char kPrefsUpdateStateSignatureBlob[];
     86 extern const char kPrefsUpdateStateSignedSHA256Context[];
     87 extern const char kPrefsUpdateTimestampStart[];
     88 extern const char kPrefsUrlSwitchCount[];
     89 extern const char kPrefsWallClockWaitPeriod[];
     90 
     91 // Keys used when storing and loading payload properties.
     92 extern const char kPayloadPropertyFileSize[];
     93 extern const char kPayloadPropertyFileHash[];
     94 extern const char kPayloadPropertyMetadataSize[];
     95 extern const char kPayloadPropertyMetadataHash[];
     96 extern const char kPayloadPropertyAuthorization[];
     97 extern const char kPayloadPropertyUserAgent[];
     98 extern const char kPayloadPropertyPowerwash[];
     99 extern const char kPayloadPropertyNetworkId[];
    100 extern const char kPayloadPropertySwitchSlotOnReboot[];
    101 extern const char kPayloadPropertyRunPostInstall[];
    102 
    103 // A download source is any combination of protocol and server (that's of
    104 // interest to us when looking at UMA metrics) using which we may download
    105 // the payload.
    106 typedef enum {
    107   kDownloadSourceHttpsServer,  // UMA Binary representation: 0001
    108   kDownloadSourceHttpServer,   // UMA Binary representation: 0010
    109   kDownloadSourceHttpPeer,     // UMA Binary representation: 0100
    110 
    111   // Note: Add new sources only above this line.
    112   kNumDownloadSources
    113 } DownloadSource;
    114 
    115 // A payload can be a Full or Delta payload. In some cases, a Full payload is
    116 // used even when a Delta payload was available for the update, called here
    117 // ForcedFull. The PayloadType enum is only used to send UMA metrics about the
    118 // successfully applied payload.
    119 typedef enum {
    120   kPayloadTypeFull,
    121   kPayloadTypeDelta,
    122   kPayloadTypeForcedFull,
    123 
    124   // Note: Add new payload types only above this line.
    125   kNumPayloadTypes
    126 } PayloadType;
    127 
    128 // Maximum number of times we'll allow using p2p for the same update payload.
    129 const int kMaxP2PAttempts = 10;
    130 
    131 // Maximum wallclock time we allow attempting to update using p2p for
    132 // the same update payload - five days.
    133 const int kMaxP2PAttemptTimeSeconds = 5 * 24 * 60 * 60;
    134 
    135 // The maximum amount of time to spend waiting for p2p-client(1) to
    136 // return while waiting in line to use the LAN - six hours.
    137 const int kMaxP2PNetworkWaitTimeSeconds = 6 * 60 * 60;
    138 
    139 // The maximum number of payload files to keep in /var/cache/p2p.
    140 const int kMaxP2PFilesToKeep = 3;
    141 
    142 // The maximum number of days to keep a p2p file;
    143 const int kMaxP2PFileAgeDays = 5;
    144 
    145 // The default number of UMA buckets for metrics.
    146 const int kNumDefaultUmaBuckets = 50;
    147 
    148 // General constants
    149 const int kNumBytesInOneMiB = 1024 * 1024;
    150 
    151 // Number of redirects allowed when downloading.
    152 const int kDownloadMaxRedirects = 10;
    153 
    154 // The minimum average speed that downloads must sustain...
    155 //
    156 // This is set low because some devices may have very poor
    157 // connectivity and we want to make as much forward progress as
    158 // possible. For p2p this is high (25 kB/second) since we can assume
    159 // high bandwidth (same LAN) and we want to fail fast.
    160 const int kDownloadLowSpeedLimitBps = 1;
    161 const int kDownloadP2PLowSpeedLimitBps = 25 * 1000;
    162 
    163 // ... measured over this period.
    164 //
    165 // For non-official builds (e.g. typically built on a developer's
    166 // workstation and served via devserver) bump this since it takes time
    167 // for the workstation to generate the payload. For p2p, make this
    168 // relatively low since we want to fail fast.
    169 const int kDownloadLowSpeedTimeSeconds = 90;
    170 const int kDownloadDevModeLowSpeedTimeSeconds = 180;
    171 const int kDownloadP2PLowSpeedTimeSeconds = 60;
    172 
    173 // The maximum amount of HTTP server reconnect attempts.
    174 //
    175 // This is set high in order to maximize the attempt's chance of
    176 // succeeding. When using p2p, this is low in order to fail fast.
    177 const int kDownloadMaxRetryCount = 20;
    178 const int kDownloadMaxRetryCountOobeNotComplete = 3;
    179 const int kDownloadMaxRetryCountInteractive = 3;
    180 const int kDownloadP2PMaxRetryCount = 5;
    181 
    182 // The connect timeout, in seconds.
    183 //
    184 // This is set high because some devices may have very poor
    185 // connectivity and we may be using HTTPS which involves complicated
    186 // multi-roundtrip setup. For p2p, this is set low because we can
    187 // the server is on the same LAN and we want to fail fast.
    188 const int kDownloadConnectTimeoutSeconds = 30;
    189 const int kDownloadP2PConnectTimeoutSeconds = 5;
    190 
    191 }  // namespace chromeos_update_engine
    192 
    193 #endif  // UPDATE_ENGINE_COMMON_CONSTANTS_H_
    194