blob: 56a168a48c725b77c93d867872f8d019d9300ef7 [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.
#ifndef SRC_STORAGE_FSHOST_EXTRACT_METADATA_H_
#define SRC_STORAGE_FSHOST_EXTRACT_METADATA_H_
#include <lib/zx/time.h>
#include <cstdint>
#include <string>
#include <fbl/unique_fd.h>
#include <fs-management/format.h>
namespace devmgr {
struct DumpMetadataOptions {
// A string to uniquely identify hex dump strings. This helps in grepping the logs for dump
// messages. EIL may stand for Extracted Image Log but the string is mostly chosen because of
// strings rarity in the code base.
// Try to keep this string as short as possible.
// |tag| and |bytes_per_line| together decide how long each generated dump line will be. Syslog
// has its own buffer limit. If a dumped log crosses syslog's limit then syslog might
// choose to wrap, trucante, or drop the message. We try here to keep tag small and
// |bytes_per_row| and |stream_buffer_size| large to improve density of the dumped log but still
// within syslog's limits.
std::string tag = "EIL";
// Format of the disk to be extracted.
disk_format_t disk_format = DISK_FORMAT_UNKNOWN;
// How long to wait before and after dumping for logs to settle.
zx::duration log_settle_time = zx::sec(10);
// Number of bytes to print per line. See comments for |tag|.
uint16_t bytes_per_line = 64;
// Number of bytes to buffer before writing to serial log. See comments for |tag|.
size_t stream_buffer_size = 10240;
};
// This function returns true if extraction is enabled.
// We link extractor library only in specific build types.
bool ExtractMetadataEnabled();
void MaybeDumpMetadata(fbl::unique_fd device_fd, DumpMetadataOptions options = {});
} // namespace devmgr
#endif // SRC_STORAGE_FSHOST_EXTRACT_METADATA_H_