blob: 9011bb38e674ff6132d9ded2601eda984ec0bc58 [file] [log] [blame]
Ken Sumrall7574c032012-01-06 19:09:42 -08001/*
2 * Copyright (C) 2012 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 __CORE_FS_MGR_PRIV_H
18#define __CORE_FS_MGR_PRIV_H
19
Jinguang Dong9d344962017-06-13 10:20:34 +080020#include <chrono>
21#include <string>
22
bowgotsai47878de2017-01-23 14:04:34 +080023#include <android-base/logging.h>
Jinguang Dong9d344962017-06-13 10:20:34 +080024
25#include "fs_mgr.h"
Sandeep Patil9de748f2017-02-16 19:15:29 -080026#include "fs_mgr_priv_boot_config.h"
Ken Sumrall7574c032012-01-06 19:09:42 -080027
bowgotsaib51722b2017-01-11 22:21:38 +080028/* The CHECK() in logging.h will use program invocation name as the tag.
29 * Thus, the log will have prefix "init: " when libfs_mgr is statically
30 * linked in the init process. This might be opaque when debugging.
31 * Appends "in libfs_mgr" at the end of the abort message to explicitly
32 * indicate the check happens in fs_mgr.
33 */
34#define FS_MGR_CHECK(x) CHECK(x) << "in libfs_mgr "
bowgotsai47878de2017-01-23 14:04:34 +080035
36#define FS_MGR_TAG "[libfs_mgr]"
37
38// Logs a message to kernel
39#define LINFO LOG(INFO) << FS_MGR_TAG
40#define LWARNING LOG(WARNING) << FS_MGR_TAG
41#define LERROR LOG(ERROR) << FS_MGR_TAG
42
43// Logs a message with strerror(errno) at the end
44#define PINFO PLOG(INFO) << FS_MGR_TAG
45#define PWARNING PLOG(WARNING) << FS_MGR_TAG
46#define PERROR PLOG(ERROR) << FS_MGR_TAG
bowgotsaib51722b2017-01-11 22:21:38 +080047
Paul Lawrence7fdcbdf2018-04-13 12:28:42 -070048#define CRYPTO_TMPFS_OPTIONS "size=512m,mode=0771,uid=1000,gid=1000"
Ken Sumrall7574c032012-01-06 19:09:42 -080049
Ken Sumrall7574c032012-01-06 19:09:42 -080050/* fstab has the following format:
51 *
52 * Any line starting with a # is a comment and ignored
53 *
54 * Any blank line is ignored
55 *
56 * All other lines must be in this format:
57 * <source> <mount_point> <fs_type> <mount_flags> <fs_options> <fs_mgr_options>
58 *
59 * <mount_flags> is a comma separated list of flags that can be passed to the
60 * mount command. The list includes noatime, nosuid, nodev, nodiratime,
61 * ro, rw, remount, defaults.
62 *
63 * <fs_options> is a comma separated list of options accepted by the filesystem being
64 * mounted. It is passed directly to mount without being parsed
65 *
66 * <fs_mgr_options> is a comma separated list of flags that control the operation of
67 * the fs_mgr program. The list includes "wait", which will wait till
Wei Wang254f4432016-08-23 11:58:09 -070068 * the <source> file exists, and "check", which requests that the fs_mgr
Ken Sumrall7574c032012-01-06 19:09:42 -080069 * run an fscheck program on the <source> before mounting the filesystem.
70 * If check is specifed on a read-only filesystem, it is ignored.
71 * Also, "encryptable" means that filesystem can be encrypted.
Ken Sumrallab6b8522013-02-13 12:58:40 -080072 * The "encryptable" flag _MUST_ be followed by a = and a string which
73 * is the location of the encryption keys. It can either be a path
Ken Sumrall7574c032012-01-06 19:09:42 -080074 * to a file or partition which contains the keys, or the word "footer"
75 * which means the keys are in the last 16 Kbytes of the partition
76 * containing the filesystem.
77 *
78 * When the fs_mgr is requested to mount all filesystems, it will first mount all the
79 * filesystems that do _NOT_ specify check (including filesystems that are read-only and
80 * specify check, because check is ignored in that case) and then it will check and mount
81 * filesystem marked with check.
82 *
83 */
84
Jeff Sharkey6d896102016-12-14 12:00:51 -070085#define MF_WAIT 0x1
86#define MF_CHECK 0x2
87#define MF_CRYPT 0x4
88#define MF_NONREMOVABLE 0x8
89#define MF_VOLDMANAGED 0x10
90#define MF_LENGTH 0x20
91#define MF_RECOVERYONLY 0x40
92#define MF_SWAPPRIO 0x80
93#define MF_ZRAMSIZE 0x100
94#define MF_VERIFY 0x200
95#define MF_FORCECRYPT 0x400
96#define MF_NOEMULATEDSD 0x800 /* no emulated sdcard daemon, sd card is the only
97 external storage */
98#define MF_NOTRIM 0x1000
99#define MF_FILEENCRYPTION 0x2000
100#define MF_FORMATTABLE 0x4000
101#define MF_SLOTSELECT 0x8000
102#define MF_FORCEFDEORFBE 0x10000
103#define MF_LATEMOUNT 0x20000
104#define MF_NOFAIL 0x40000
105#define MF_VERIFYATBOOT 0x80000
Jin Qian0067e032016-11-18 16:37:53 -0800106#define MF_MAX_COMP_STREAMS 0x100000
Jeff Sharkey6d896102016-12-14 12:00:51 -0700107#define MF_RESERVEDSIZE 0x200000
108#define MF_QUOTA 0x400000
Connor O'Brien46fec482017-01-24 17:50:39 -0800109#define MF_ERASEBLKSIZE 0x800000
110#define MF_LOGICALBLKSIZE 0X1000000
bowgotsaib51722b2017-01-11 22:21:38 +0800111#define MF_AVB 0X2000000
Jaegeuk Kimefd3b9c2018-02-22 18:10:05 -0800112#define MF_KEYDIRECTORY 0X4000000
113#define MF_SYSFS 0X8000000
Geremy Condra3ad3d1c2013-02-22 18:11:41 -0800114
115#define DM_BUF_SIZE 4096
Ken Sumrall7574c032012-01-06 19:09:42 -0800116
Jinguang Dong9d344962017-06-13 10:20:34 +0800117using namespace std::chrono_literals;
118
Sami Tolvanen214f33b2014-12-18 16:15:30 +0000119int fs_mgr_set_blk_ro(const char *blockdev);
Jinguang Dong9d344962017-06-13 10:20:34 +0800120bool fs_mgr_wait_for_file(const std::string& filename,
121 const std::chrono::milliseconds relative_timeout);
Bowgo Tsai87d08362017-04-05 00:02:33 +0800122bool fs_mgr_update_for_slotselect(struct fstab *fstab);
Bowgo Tsaid1fe3bd2017-07-05 15:37:15 +0800123bool fs_mgr_is_device_unlocked();
Yu Ningc01022a2017-07-26 17:54:08 +0800124const std::string& get_android_dt_dir();
Sandeep Patile396c602017-02-24 11:04:49 -0800125bool is_dt_compatible();
Bowgo Tsaiaaf70e72017-03-02 00:03:56 +0800126int load_verity_state(struct fstab_rec* fstab, int* mode);
Sami Tolvanen214f33b2014-12-18 16:15:30 +0000127
Ken Sumrall7574c032012-01-06 19:09:42 -0800128#endif /* __CORE_FS_MGR_PRIV_H */