123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869 |
- #ifndef __UBIFS_MEDIA_H__
- #define __UBIFS_MEDIA_H__
- #include <asm/byteorder.h>
- #define UBIFS_NODE_MAGIC 0x06101831
- #define UBIFS_FORMAT_VERSION 5
- #define UBIFS_RO_COMPAT_VERSION 0
- #define UBIFS_MIN_LEB_SZ (15*1024)
- #define UBIFS_CRC32_INIT 0xFFFFFFFFU
- #define UBIFS_MIN_COMPR_LEN 128
- #define UBIFS_MIN_COMPRESS_DIFF 64
- #define UBIFS_ROOT_INO 1
- #define UBIFS_FIRST_INO 64
- #define UBIFS_MAX_NLEN 255
- #define UBIFS_MAX_JHEADS 1
- #define UBIFS_BLOCK_SIZE 4096
- #define UBIFS_BLOCK_SHIFT 12
- #define UBIFS_PADDING_BYTE 0xCE
- #define UBIFS_MAX_KEY_LEN 16
- #define UBIFS_SK_LEN 8
- #define UBIFS_MIN_FANOUT 3
- #define UBIFS_MAX_LEVELS 512
- #define UBIFS_MAX_INO_DATA UBIFS_BLOCK_SIZE
- #define UBIFS_LPT_FANOUT 4
- #define UBIFS_LPT_FANOUT_SHIFT 2
- #define UBIFS_LPT_CRC_BITS 16
- #define UBIFS_LPT_CRC_BYTES 2
- #define UBIFS_LPT_TYPE_BITS 4
- #define UBIFS_KEY_OFFSET offsetof(struct ubifs_ino_node, key)
- #define UBIFS_GC_HEAD 0
- #define UBIFS_BASE_HEAD 1
- #define UBIFS_DATA_HEAD 2
- enum {
- UBIFS_LPT_PNODE,
- UBIFS_LPT_NNODE,
- UBIFS_LPT_LTAB,
- UBIFS_LPT_LSAVE,
- UBIFS_LPT_NODE_CNT,
- UBIFS_LPT_NOT_A_NODE = (1 << UBIFS_LPT_TYPE_BITS) - 1,
- };
- enum {
- UBIFS_ITYPE_REG,
- UBIFS_ITYPE_DIR,
- UBIFS_ITYPE_LNK,
- UBIFS_ITYPE_BLK,
- UBIFS_ITYPE_CHR,
- UBIFS_ITYPE_FIFO,
- UBIFS_ITYPE_SOCK,
- UBIFS_ITYPES_CNT,
- };
- enum {
- UBIFS_KEY_HASH_R5,
- UBIFS_KEY_HASH_TEST,
- };
- enum {
- UBIFS_SIMPLE_KEY_FMT,
- };
- #define UBIFS_S_KEY_BLOCK_BITS 29
- #define UBIFS_S_KEY_BLOCK_MASK 0x1FFFFFFF
- #define UBIFS_S_KEY_HASH_BITS UBIFS_S_KEY_BLOCK_BITS
- #define UBIFS_S_KEY_HASH_MASK UBIFS_S_KEY_BLOCK_MASK
- enum {
- UBIFS_INO_KEY,
- UBIFS_DATA_KEY,
- UBIFS_DENT_KEY,
- UBIFS_XENT_KEY,
- UBIFS_KEY_TYPES_CNT,
- };
- #define UBIFS_SB_LEBS 1
- #define UBIFS_MST_LEBS 2
- #define UBIFS_SB_LNUM 0
- #define UBIFS_MST_LNUM (UBIFS_SB_LNUM + UBIFS_SB_LEBS)
- #define UBIFS_LOG_LNUM (UBIFS_MST_LNUM + UBIFS_MST_LEBS)
- #define UBIFS_MIN_LOG_LEBS 2
- #define UBIFS_MIN_BUD_LEBS 3
- #define UBIFS_MIN_JNL_LEBS (UBIFS_MIN_LOG_LEBS + UBIFS_MIN_BUD_LEBS)
- #define UBIFS_MIN_LPT_LEBS 2
- #define UBIFS_MIN_ORPH_LEBS 1
- #define UBIFS_MIN_MAIN_LEBS (UBIFS_MIN_BUD_LEBS + 6)
- #define UBIFS_MIN_LEB_CNT (UBIFS_SB_LEBS + UBIFS_MST_LEBS + \
- UBIFS_MIN_LOG_LEBS + UBIFS_MIN_LPT_LEBS + \
- UBIFS_MIN_ORPH_LEBS + UBIFS_MIN_MAIN_LEBS)
- #define UBIFS_CH_SZ sizeof(struct ubifs_ch)
- #define UBIFS_INO_NODE_SZ sizeof(struct ubifs_ino_node)
- #define UBIFS_DATA_NODE_SZ sizeof(struct ubifs_data_node)
- #define UBIFS_DENT_NODE_SZ sizeof(struct ubifs_dent_node)
- #define UBIFS_TRUN_NODE_SZ sizeof(struct ubifs_trun_node)
- #define UBIFS_PAD_NODE_SZ sizeof(struct ubifs_pad_node)
- #define UBIFS_SB_NODE_SZ sizeof(struct ubifs_sb_node)
- #define UBIFS_MST_NODE_SZ sizeof(struct ubifs_mst_node)
- #define UBIFS_REF_NODE_SZ sizeof(struct ubifs_ref_node)
- #define UBIFS_IDX_NODE_SZ sizeof(struct ubifs_idx_node)
- #define UBIFS_CS_NODE_SZ sizeof(struct ubifs_cs_node)
- #define UBIFS_ORPH_NODE_SZ sizeof(struct ubifs_orph_node)
- #define UBIFS_AUTH_NODE_SZ sizeof(struct ubifs_auth_node)
- #define UBIFS_SIG_NODE_SZ sizeof(struct ubifs_sig_node)
- #define UBIFS_XENT_NODE_SZ UBIFS_DENT_NODE_SZ
- #define UBIFS_BRANCH_SZ sizeof(struct ubifs_branch)
- #define UBIFS_MAX_DATA_NODE_SZ (UBIFS_DATA_NODE_SZ + UBIFS_BLOCK_SIZE)
- #define UBIFS_MAX_INO_NODE_SZ (UBIFS_INO_NODE_SZ + UBIFS_MAX_INO_DATA)
- #define UBIFS_MAX_DENT_NODE_SZ (UBIFS_DENT_NODE_SZ + UBIFS_MAX_NLEN + 1)
- #define UBIFS_MAX_XENT_NODE_SZ UBIFS_MAX_DENT_NODE_SZ
- #define UBIFS_MAX_NODE_SZ UBIFS_MAX_INO_NODE_SZ
- #define UBIFS_MAX_HASH_LEN 64
- #define UBIFS_MAX_HMAC_LEN 64
- #define UBIFS_XATTR_NAME_ENCRYPTION_CONTEXT "c"
- #define UBIFS_SIGNATURE_TYPE_PKCS7 1
- enum {
- UBIFS_COMPR_FL = 0x01,
- UBIFS_SYNC_FL = 0x02,
- UBIFS_IMMUTABLE_FL = 0x04,
- UBIFS_APPEND_FL = 0x08,
- UBIFS_DIRSYNC_FL = 0x10,
- UBIFS_XATTR_FL = 0x20,
- UBIFS_CRYPT_FL = 0x40,
- };
- #define UBIFS_FL_MASK 0x0000001F
- enum {
- UBIFS_COMPR_NONE,
- UBIFS_COMPR_LZO,
- UBIFS_COMPR_ZLIB,
- UBIFS_COMPR_ZSTD,
- UBIFS_COMPR_TYPES_CNT,
- };
- enum {
- UBIFS_INO_NODE,
- UBIFS_DATA_NODE,
- UBIFS_DENT_NODE,
- UBIFS_XENT_NODE,
- UBIFS_TRUN_NODE,
- UBIFS_PAD_NODE,
- UBIFS_SB_NODE,
- UBIFS_MST_NODE,
- UBIFS_REF_NODE,
- UBIFS_IDX_NODE,
- UBIFS_CS_NODE,
- UBIFS_ORPH_NODE,
- UBIFS_AUTH_NODE,
- UBIFS_SIG_NODE,
- UBIFS_NODE_TYPES_CNT,
- };
- enum {
- UBIFS_MST_DIRTY = 1,
- UBIFS_MST_NO_ORPHS = 2,
- UBIFS_MST_RCVRY = 4,
- };
- enum {
- UBIFS_NO_NODE_GROUP = 0,
- UBIFS_IN_NODE_GROUP,
- UBIFS_LAST_OF_NODE_GROUP,
- };
- enum {
- UBIFS_FLG_BIGLPT = 0x02,
- UBIFS_FLG_SPACE_FIXUP = 0x04,
- UBIFS_FLG_DOUBLE_HASH = 0x08,
- UBIFS_FLG_ENCRYPTION = 0x10,
- UBIFS_FLG_AUTHENTICATION = 0x20,
- };
- #define UBIFS_FLG_MASK (UBIFS_FLG_BIGLPT | UBIFS_FLG_SPACE_FIXUP | \
- UBIFS_FLG_DOUBLE_HASH | UBIFS_FLG_ENCRYPTION | \
- UBIFS_FLG_AUTHENTICATION)
- struct ubifs_ch {
- __le32 magic;
- __le32 crc;
- __le64 sqnum;
- __le32 len;
- __u8 node_type;
- __u8 group_type;
- __u8 padding[2];
- } __attribute__ ((packed));
- union ubifs_dev_desc {
- __le32 new;
- __le64 huge;
- } __attribute__ ((packed));
- struct ubifs_ino_node {
- struct ubifs_ch ch;
- __u8 key[UBIFS_MAX_KEY_LEN];
- __le64 creat_sqnum;
- __le64 size;
- __le64 atime_sec;
- __le64 ctime_sec;
- __le64 mtime_sec;
- __le32 atime_nsec;
- __le32 ctime_nsec;
- __le32 mtime_nsec;
- __le32 nlink;
- __le32 uid;
- __le32 gid;
- __le32 mode;
- __le32 flags;
- __le32 data_len;
- __le32 xattr_cnt;
- __le32 xattr_size;
- __u8 padding1[4];
- __le32 xattr_names;
- __le16 compr_type;
- __u8 padding2[26];
- __u8 data[];
- } __attribute__ ((packed));
- struct ubifs_dent_node {
- struct ubifs_ch ch;
- __u8 key[UBIFS_MAX_KEY_LEN];
- __le64 inum;
- __u8 padding1;
- __u8 type;
- __le16 nlen;
- __le32 cookie;
- __u8 name[];
- } __attribute__ ((packed));
- struct ubifs_data_node {
- struct ubifs_ch ch;
- __u8 key[UBIFS_MAX_KEY_LEN];
- __le32 size;
- __le16 compr_type;
- __le16 compr_size;
- __u8 data[];
- } __attribute__ ((packed));
- struct ubifs_trun_node {
- struct ubifs_ch ch;
- __le32 inum;
- __u8 padding[12];
- __le64 old_size;
- __le64 new_size;
- } __attribute__ ((packed));
- struct ubifs_pad_node {
- struct ubifs_ch ch;
- __le32 pad_len;
- } __attribute__ ((packed));
- struct ubifs_sb_node {
- struct ubifs_ch ch;
- __u8 padding[2];
- __u8 key_hash;
- __u8 key_fmt;
- __le32 flags;
- __le32 min_io_size;
- __le32 leb_size;
- __le32 leb_cnt;
- __le32 max_leb_cnt;
- __le64 max_bud_bytes;
- __le32 log_lebs;
- __le32 lpt_lebs;
- __le32 orph_lebs;
- __le32 jhead_cnt;
- __le32 fanout;
- __le32 lsave_cnt;
- __le32 fmt_version;
- __le16 default_compr;
- __u8 padding1[2];
- __le32 rp_uid;
- __le32 rp_gid;
- __le64 rp_size;
- __le32 time_gran;
- __u8 uuid[16];
- __le32 ro_compat_version;
- __u8 hmac[UBIFS_MAX_HMAC_LEN];
- __u8 hmac_wkm[UBIFS_MAX_HMAC_LEN];
- __le16 hash_algo;
- __u8 hash_mst[UBIFS_MAX_HASH_LEN];
- __u8 padding2[3774];
- } __attribute__ ((packed));
- struct ubifs_mst_node {
- struct ubifs_ch ch;
- __le64 highest_inum;
- __le64 cmt_no;
- __le32 flags;
- __le32 log_lnum;
- __le32 root_lnum;
- __le32 root_offs;
- __le32 root_len;
- __le32 gc_lnum;
- __le32 ihead_lnum;
- __le32 ihead_offs;
- __le64 index_size;
- __le64 total_free;
- __le64 total_dirty;
- __le64 total_used;
- __le64 total_dead;
- __le64 total_dark;
- __le32 lpt_lnum;
- __le32 lpt_offs;
- __le32 nhead_lnum;
- __le32 nhead_offs;
- __le32 ltab_lnum;
- __le32 ltab_offs;
- __le32 lsave_lnum;
- __le32 lsave_offs;
- __le32 lscan_lnum;
- __le32 empty_lebs;
- __le32 idx_lebs;
- __le32 leb_cnt;
- __u8 hash_root_idx[UBIFS_MAX_HASH_LEN];
- __u8 hash_lpt[UBIFS_MAX_HASH_LEN];
- __u8 hmac[UBIFS_MAX_HMAC_LEN];
- __u8 padding[152];
- } __attribute__ ((packed));
- struct ubifs_ref_node {
- struct ubifs_ch ch;
- __le32 lnum;
- __le32 offs;
- __le32 jhead;
- __u8 padding[28];
- } __attribute__ ((packed));
- struct ubifs_auth_node {
- struct ubifs_ch ch;
- __u8 hmac[];
- } __attribute__ ((packed));
- struct ubifs_sig_node {
- struct ubifs_ch ch;
- __le32 type;
- __le32 len;
- __u8 padding[32];
- __u8 sig[];
- } __attribute__ ((packed));
- struct ubifs_branch {
- __le32 lnum;
- __le32 offs;
- __le32 len;
- __u8 key[];
- } __attribute__ ((packed));
- struct ubifs_idx_node {
- struct ubifs_ch ch;
- __le16 child_cnt;
- __le16 level;
- __u8 branches[];
- } __attribute__ ((packed));
- struct ubifs_cs_node {
- struct ubifs_ch ch;
- __le64 cmt_no;
- } __attribute__ ((packed));
- struct ubifs_orph_node {
- struct ubifs_ch ch;
- __le64 cmt_no;
- __le64 inos[];
- } __attribute__ ((packed));
- #endif
|