blob: d0b9d90596f16d9fa74d86e864db0f9f93e8ae1e [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/storage/minfs/inspector/disk_struct.h"
#include <zircon/assert.h>
#include <disk_inspector/disk_struct.h>
#include <disk_inspector/type_utils.h>
#include "src/storage/minfs/format.h"
namespace minfs {
std::unique_ptr<disk_inspector::DiskStruct> GetSuperblockStruct() {
static_assert(offsetof(Superblock, reserved) == 120);
std::unique_ptr<disk_inspector::DiskStruct> object =
disk_inspector::DiskStruct::Create("Superblock", sizeof(Superblock));
ADD_FIELD(object, Superblock, magic0);
ADD_FIELD(object, Superblock, magic1);
ADD_FIELD(object, Superblock, major_version);
ADD_FIELD(object, Superblock, checksum);
ADD_FIELD(object, Superblock, generation_count);
ADD_FIELD(object, Superblock, flags);
ADD_FIELD(object, Superblock, block_size);
ADD_FIELD(object, Superblock, inode_size);
ADD_FIELD(object, Superblock, block_count);
ADD_FIELD(object, Superblock, inode_count);
ADD_FIELD(object, Superblock, alloc_block_count);
ADD_FIELD(object, Superblock, alloc_inode_count);
ADD_FIELD(object, Superblock, ibm_block);
ADD_FIELD(object, Superblock, abm_block);
ADD_FIELD(object, Superblock, ino_block);
ADD_FIELD(object, Superblock, integrity_start_block);
ADD_FIELD(object, Superblock, dat_block);
ADD_FIELD(object, Superblock, slice_size);
ADD_FIELD(object, Superblock, ibm_slices);
ADD_FIELD(object, Superblock, abm_slices);
ADD_FIELD(object, Superblock, ino_slices);
ADD_FIELD(object, Superblock, integrity_slices);
ADD_FIELD(object, Superblock, dat_slices);
ADD_FIELD(object, Superblock, unlinked_head);
ADD_FIELD(object, Superblock, unlinked_tail);
ADD_FIELD(object, Superblock, oldest_minor_version);
ADD_ARRAY_FIELD(object, Superblock, reserved, 2018);
return object;
}
std::unique_ptr<disk_inspector::DiskStruct> GetInodeStruct(uint64_t index) {
static_assert(sizeof(Inode) == 256);
std::unique_ptr<disk_inspector::DiskStruct> object =
disk_inspector::DiskStruct::Create("Inode " + std::to_string(index), sizeof(Inode));
ADD_FIELD(object, Inode, magic);
ADD_FIELD(object, Inode, size);
ADD_FIELD(object, Inode, block_count);
ADD_FIELD(object, Inode, link_count);
ADD_FIELD(object, Inode, create_time);
ADD_FIELD(object, Inode, modify_time);
ADD_FIELD(object, Inode, seq_num);
ADD_FIELD(object, Inode, gen_num);
ADD_FIELD(object, Inode, dirent_count);
ADD_FIELD(object, Inode, last_inode);
ADD_FIELD(object, Inode, next_inode);
ADD_ARRAY_FIELD(object, Inode, rsvd, 3);
ADD_ARRAY_FIELD(object, Inode, dnum, kMinfsDirect);
ADD_ARRAY_FIELD(object, Inode, inum, kMinfsIndirect);
ADD_ARRAY_FIELD(object, Inode, dinum, kMinfsDoublyIndirect);
return object;
}
} // namespace minfs