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 kPrefsP2PEnabled[];
     58 extern const char kPrefsP2PFirstAttemptTimestamp[];
     59 extern const char kPrefsP2PNumAttempts[];
     60 extern const char kPrefsPayloadAttemptNumber[];
     61 extern const char kPrefsPreviousVersion[];
     62 extern const char kPrefsResumedUpdateFailures[];
     63 extern const char kPrefsRollbackVersion[];
     64 extern const char kPrefsChannelOnSlotPrefix[];
     65 extern const char kPrefsSystemUpdatedMarker[];
     66 extern const char kPrefsTargetVersionAttempt[];
     67 extern const char kPrefsTargetVersionInstalledFrom[];
     68 extern const char kPrefsTargetVersionUniqueId[];
     69 extern const char kPrefsTotalBytesDownloaded[];
     70 extern const char kPrefsUpdateCheckCount[];
     71 extern const char kPrefsUpdateCheckResponseHash[];
     72 extern const char kPrefsUpdateCompletedBootTime[];
     73 extern const char kPrefsUpdateCompletedOnBootId[];
     74 extern const char kPrefsUpdateDurationUptime[];
     75 extern const char kPrefsUpdateFirstSeenAt[];
     76 extern const char kPrefsUpdateOverCellularPermission[];
     77 extern const char kPrefsUpdateServerCertificate[];
     78 extern const char kPrefsUpdateStateNextDataLength[];
     79 extern const char kPrefsUpdateStateNextDataOffset[];
     80 extern const char kPrefsUpdateStateNextOperation[];
     81 extern const char kPrefsUpdateStateSHA256Context[];
     82 extern const char kPrefsUpdateStateSignatureBlob[];
     83 extern const char kPrefsUpdateStateSignedSHA256Context[];
     84 extern const char kPrefsUpdateTimestampStart[];
     85 extern const char kPrefsUrlSwitchCount[];
     86 extern const char kPrefsWallClockWaitPeriod[];
     87 
     88 // Keys used when storing and loading payload properties.
     89 extern const char kPayloadPropertyFileSize[];
     90 extern const char kPayloadPropertyFileHash[];
     91 extern const char kPayloadPropertyMetadataSize[];
     92 extern const char kPayloadPropertyMetadataHash[];
     93 extern const char kPayloadPropertyAuthorization[];
     94 extern const char kPayloadPropertyUserAgent[];
     95 extern const char kPayloadPropertyPowerwash[];
     96 extern const char kPayloadPropertyNetworkId[];
     97 
     98 // A download source is any combination of protocol and server (that's of
     99 // interest to us when looking at UMA metrics) using which we may download
    100 // the payload.
    101 typedef enum {
    102   kDownloadSourceHttpsServer,  // UMA Binary representation: 0001
    103   kDownloadSourceHttpServer,   // UMA Binary representation: 0010
    104   kDownloadSourceHttpPeer,     // UMA Binary representation: 0100
    105 
    106   // Note: Add new sources only above this line.
    107   kNumDownloadSources
    108 } DownloadSource;
    109 
    110 // A payload can be a Full or Delta payload. In some cases, a Full payload is
    111 // used even when a Delta payload was available for the update, called here
    112 // ForcedFull. The PayloadType enum is only used to send UMA metrics about the
    113 // successfully applied payload.
    114 typedef enum {
    115   kPayloadTypeFull,
    116   kPayloadTypeDelta,
    117   kPayloadTypeForcedFull,
    118 
    119   // Note: Add new payload types only above this line.
    120   kNumPayloadTypes
    121 } PayloadType;
    122 
    123 // Maximum number of times we'll allow using p2p for the same update payload.
    124 const int kMaxP2PAttempts = 10;
    125 
    126 // Maximum wallclock time we allow attempting to update using p2p for
    127 // the same update payload - five days.
    128 const int kMaxP2PAttemptTimeSeconds = 5 * 24 * 60 * 60;
    129 
    130 // The maximum amount of time to spend waiting for p2p-client(1) to
    131 // return while waiting in line to use the LAN - six hours.
    132 const int kMaxP2PNetworkWaitTimeSeconds = 6 * 60 * 60;
    133 
    134 // The maximum number of payload files to keep in /var/cache/p2p.
    135 const int kMaxP2PFilesToKeep = 3;
    136 
    137 // The maximum number of days to keep a p2p file;
    138 const int kMaxP2PFileAgeDays = 5;
    139 
    140 // The default number of UMA buckets for metrics.
    141 const int kNumDefaultUmaBuckets = 50;
    142 
    143 // General constants
    144 const int kNumBytesInOneMiB = 1024 * 1024;
    145 
    146 // Number of redirects allowed when downloading.
    147 const int kDownloadMaxRedirects = 10;
    148 
    149 // The minimum average speed that downloads must sustain...
    150 //
    151 // This is set low because some devices may have very poor
    152 // connectivity and we want to make as much forward progress as
    153 // possible. For p2p this is high (25 kB/second) since we can assume
    154 // high bandwidth (same LAN) and we want to fail fast.
    155 const int kDownloadLowSpeedLimitBps = 1;
    156 const int kDownloadP2PLowSpeedLimitBps = 25 * 1000;
    157 
    158 // ... measured over this period.
    159 //
    160 // For non-official builds (e.g. typically built on a developer's
    161 // workstation and served via devserver) bump this since it takes time
    162 // for the workstation to generate the payload. For p2p, make this
    163 // relatively low since we want to fail fast.
    164 const int kDownloadLowSpeedTimeSeconds = 90;
    165 const int kDownloadDevModeLowSpeedTimeSeconds = 180;
    166 const int kDownloadP2PLowSpeedTimeSeconds = 60;
    167 
    168 // The maximum amount of HTTP server reconnect attempts.
    169 //
    170 // This is set high in order to maximize the attempt's chance of
    171 // succeeding. When using p2p, this is low in order to fail fast.
    172 const int kDownloadMaxRetryCount = 20;
    173 const int kDownloadMaxRetryCountOobeNotComplete = 3;
    174 const int kDownloadP2PMaxRetryCount = 5;
    175 
    176 // The connect timeout, in seconds.
    177 //
    178 // This is set high because some devices may have very poor
    179 // connectivity and we may be using HTTPS which involves complicated
    180 // multi-roundtrip setup. For p2p, this is set low because we can
    181 // the server is on the same LAN and we want to fail fast.
    182 const int kDownloadConnectTimeoutSeconds = 30;
    183 const int kDownloadP2PConnectTimeoutSeconds = 5;
    184 
    185 }  // namespace chromeos_update_engine
    186 
    187 #endif  // UPDATE_ENGINE_COMMON_CONSTANTS_H_
    188