summaryrefslogtreecommitdiff
path: root/host/libs/config/cuttlefish_config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'host/libs/config/cuttlefish_config.cpp')
-rw-r--r--host/libs/config/cuttlefish_config.cpp1019
1 files changed, 0 insertions, 1019 deletions
diff --git a/host/libs/config/cuttlefish_config.cpp b/host/libs/config/cuttlefish_config.cpp
deleted file mode 100644
index 1952335b..00000000
--- a/host/libs/config/cuttlefish_config.cpp
+++ /dev/null
@@ -1,1019 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "host/libs/config/cuttlefish_config.h"
-
-#include <algorithm>
-#include <climits>
-#include <cstdlib>
-#include <cstring>
-#include <fstream>
-#include <iomanip>
-#include <iterator>
-#include <sstream>
-#include <string>
-
-#include <glog/logging.h>
-#include <json/json.h>
-
-#include "common/libs/utils/environment.h"
-#include "common/libs/utils/files.h"
-#include "host/libs/vm_manager/qemu_manager.h"
-
-
-namespace {
-
-int InstanceFromEnvironment() {
- static constexpr char kInstanceEnvironmentVariable[] = "CUTTLEFISH_INSTANCE";
- static constexpr int kDefaultInstance = 1;
-
- // CUTTLEFISH_INSTANCE environment variable
- const char* instance_str = std::getenv(kInstanceEnvironmentVariable);
- if (!instance_str) {
- // Try to get it from the user instead
- instance_str = std::getenv("USER");
-
- if (!instance_str || std::strncmp(instance_str, vsoc::kVsocUserPrefix,
- sizeof(vsoc::kVsocUserPrefix) - 1)) {
- // No user or we don't recognize this user
- LOG(WARNING) << "No user or non-vsoc user, returning default config";
- return kDefaultInstance;
- }
- instance_str += sizeof(vsoc::kVsocUserPrefix) - 1;
-
- // Set the environment variable so that child processes see it
- setenv(kInstanceEnvironmentVariable, instance_str, 0);
- }
-
- int instance = std::atoi(instance_str);
- if (instance <= 0) {
- instance = kDefaultInstance;
- }
-
- return instance;
-}
-
-const char* kSerialNumber = "serial_number";
-const char* kInstanceDir = "instance_dir";
-const char* kVmManager = "vm_manager";
-const char* const kGpuMode = "gpu_mode";
-const char* const kWaylandSocket = "wayland_socket";
-const char* const kXDisplay = "x_display";
-const char* kHardwareName = "hardware_name";
-const char* kDeviceTitle = "device_title";
-
-const char* kCpus = "cpus";
-const char* kMemoryMb = "memory_mb";
-const char* kDpi = "dpi";
-const char* kXRes = "x_res";
-const char* kYRes = "y_res";
-const char* kNumScreenBuffers = "num_screen_buffers";
-const char* kRefreshRateHz = "refresh_rate_hz";
-
-const char* kKernelImagePath = "kernel_image_path";
-const char* kUseUnpackedKernel = "use_unpacked_kernel";
-const char* kDecompressedKernelImagePath = "decompressed_kernel_image_path";
-const char* kDecompressKernel = "decompress_kernel";
-const char* kGdbFlag = "gdb_flag";
-const char* kKernelCmdline = "kernel_cmdline";
-const char* kRamdiskImagePath = "ramdisk_image_path";
-
-const char* kVirtualDiskPaths = "virtual_disk_paths";
-const char* kUsbV1SocketName = "usb_v1_socket_name";
-const char* kVhciPort = "vhci_port";
-const char* kUsbIpSocketName = "usb_ip_socket_name";
-const char* kKernelLogPipeName = "kernel_log_pipe_name";
-const char* kConsolePipeName = "console_pipe_name";
-const char* kDeprecatedBootCompleted = "deprecated_boot_completed";
-const char* kConsolePath = "console_path";
-const char* kLogcatPath = "logcat_path";
-const char* kLauncherLogPath = "launcher_log_path";
-const char* kLauncherMonitorPath = "launcher_monitor_socket";
-const char* kDtbPath = "dtb_path";
-const char* kGsiFstabPath = "gsi.fstab_path";
-
-const char* kMempath = "mempath";
-const char* kIvshmemQemuSocketPath = "ivshmem_qemu_socket_path";
-const char* kIvshmemClientSocketPath = "ivshmem_client_socket_path";
-const char* kIvshmemVectorCount = "ivshmem_vector_count";
-
-const char* kMobileBridgeName = "mobile_bridge_name";
-const char* kMobileTapName = "mobile_tap_name";
-const char* kWifiTapName = "wifi_tap_name";
-const char* kWifiGuestMacAddr = "wifi_guest_mac_addr";
-const char* kWifiHostMacAddr = "wifi_host_mac_addr";
-const char* kEntropySource = "entropy_source";
-const char* kVsockGuestCid = "vsock_guest_cid";
-
-const char* kUuid = "uuid";
-const char* kCuttlefishEnvPath = "cuttlefish_env_path";
-
-const char* kAdbMode = "adb_mode";
-const char* kAdbIPAndPort = "adb_ip_and_port";
-const char* kSetupWizardMode = "setupwizard_mode";
-
-const char* kQemuBinary = "qemu_binary";
-const char* kCrosvmBinary = "crosvm_binary";
-const char* kConsoleForwarderBinary = "console_forwarder_binary";
-const char* kIvServerBinary = "ivserver_binary";
-const char* kKernelLogMonitorBinary = "kernel_log_monitor_binary";
-
-const char* kEnableVncServer = "enable_vnc_server";
-const char* kVncServerBinary = "vnc_server_binary";
-const char* kVncServerPort = "vnc_server_port";
-
-const char* kEnableStreamAudio = "enable_stream_audio";
-const char* kStreamAudioBinary = "stream_audio_binary";
-const char* kStreamAudioPort = "stream_audio_port";
-
-const char* kRestartSubprocesses = "restart_subprocesses";
-const char* kRunAdbConnector = "run_adb_connector";
-const char* kAdbConnectorBinary = "adb_connector_binary";
-const char* kVirtualUsbManagerBinary = "virtual_usb_manager_binary";
-const char* kSocketForwardProxyBinary = "socket_forward_proxy_binary";
-const char* kSocketVsockProxyBinary = "socket_vsock_proxy_binary";
-
-const char* kRunAsDaemon = "run_as_daemon";
-const char* kRunE2eTest = "run_e2e_test";
-const char* kE2eTestBinary = "e2e_test_binary";
-
-const char* kDataPolicy = "data_policy";
-const char* kBlankDataImageMb = "blank_data_image_mb";
-const char* kBlankDataImageFmt = "blank_data_image_fmt";
-
-const char* kLogcatVsockPort = "logcat_vsock_port";
-const char* kConfigServerPort = "config_server_port";
-const char* kFramesVsockPort = "frames_vsock_port";
-const char* kConfigServerBinary = "config_server_binary";
-
-const char* kRunTombstoneReceiver = "enable_tombstone_logger";
-const char* kTombstoneReceiverPort = "tombstone_logger_port";
-const char* kTombstoneReceiverBinary = "tombstone_receiver_binary";
-} // namespace
-
-namespace vsoc {
-
-const char* const kGpuModeGuestSwiftshader = "guest_swiftshader";
-const char* const kGpuModeDrmVirgl = "drm_virgl";
-
-std::string DefaultEnvironmentPath(const char* environment_key,
- const char* default_value,
- const char* subpath) {
- return cvd::StringFromEnv(environment_key, default_value) + "/" + subpath;
-}
-
-
-std::string CuttlefishConfig::instance_dir() const {
- return (*dictionary_)[kInstanceDir].asString();
-}
-void CuttlefishConfig::set_instance_dir(const std::string& instance_dir) {
- (*dictionary_)[kInstanceDir] = instance_dir;
-}
-
-std::string CuttlefishConfig::vm_manager() const {
- return (*dictionary_)[kVmManager].asString();
-}
-void CuttlefishConfig::set_vm_manager(const std::string& name) {
- (*dictionary_)[kVmManager] = name;
-}
-
-std::string CuttlefishConfig::gpu_mode() const {
- return (*dictionary_)[kGpuMode].asString();
-}
-void CuttlefishConfig::set_gpu_mode(const std::string& name) {
- (*dictionary_)[kGpuMode] = name;
-}
-
-std::string CuttlefishConfig::wayland_socket() const {
- // Don't use SetPath here: the path is already fully formed.
- return (*dictionary_)[kWaylandSocket].asString();
-}
-void CuttlefishConfig::set_wayland_socket(const std::string& path) {
- (*dictionary_)[kWaylandSocket] = path;
-}
-
-std::string CuttlefishConfig::x_display() const {
- return (*dictionary_)[kXDisplay].asString();
-}
-void CuttlefishConfig::set_x_display(const std::string& address) {
- (*dictionary_)[kXDisplay] = address;
-}
-
-std::string CuttlefishConfig::hardware_name() const {
- return (*dictionary_)[kHardwareName].asString();
-}
-void CuttlefishConfig::set_hardware_name(const std::string& name) {
- (*dictionary_)[kHardwareName] = name;
-}
-
-std::string CuttlefishConfig::serial_number() const {
- return (*dictionary_)[kSerialNumber].asString();
-}
-void CuttlefishConfig::set_serial_number(const std::string& serial_number) {
- (*dictionary_)[kSerialNumber] = serial_number;
-}
-
-int CuttlefishConfig::cpus() const { return (*dictionary_)[kCpus].asInt(); }
-void CuttlefishConfig::set_cpus(int cpus) { (*dictionary_)[kCpus] = cpus; }
-
-int CuttlefishConfig::memory_mb() const {
- return (*dictionary_)[kMemoryMb].asInt();
-}
-void CuttlefishConfig::set_memory_mb(int memory_mb) {
- (*dictionary_)[kMemoryMb] = memory_mb;
-}
-
-int CuttlefishConfig::dpi() const { return (*dictionary_)[kDpi].asInt(); }
-void CuttlefishConfig::set_dpi(int dpi) { (*dictionary_)[kDpi] = dpi; }
-
-int CuttlefishConfig::x_res() const { return (*dictionary_)[kXRes].asInt(); }
-void CuttlefishConfig::set_x_res(int x_res) { (*dictionary_)[kXRes] = x_res; }
-
-int CuttlefishConfig::y_res() const { return (*dictionary_)[kYRes].asInt(); }
-void CuttlefishConfig::set_y_res(int y_res) { (*dictionary_)[kYRes] = y_res; }
-
-int CuttlefishConfig::num_screen_buffers() const {
- return (*dictionary_)[kNumScreenBuffers].asInt();
-}
-void CuttlefishConfig::set_num_screen_buffers(int num_screen_buffers) {
- (*dictionary_)[kNumScreenBuffers] = num_screen_buffers;
-}
-
-int CuttlefishConfig::refresh_rate_hz() const {
- return (*dictionary_)[kRefreshRateHz].asInt();
-}
-void CuttlefishConfig::set_refresh_rate_hz(int refresh_rate_hz) {
- (*dictionary_)[kRefreshRateHz] = refresh_rate_hz;
-}
-
-std::string CuttlefishConfig::kernel_image_path() const {
- return (*dictionary_)[kKernelImagePath].asString();
-}
-
-void CuttlefishConfig::SetPath(const std::string& key,
- const std::string& path) {
- if (!path.empty()) {
- (*dictionary_)[key] = cvd::AbsolutePath(path);
- }
-}
-
-void CuttlefishConfig::set_kernel_image_path(
- const std::string& kernel_image_path) {
- SetPath(kKernelImagePath, kernel_image_path);
-}
-
-bool CuttlefishConfig::use_unpacked_kernel() const {
- return (*dictionary_)[kUseUnpackedKernel].asBool();
-}
-
-void CuttlefishConfig::set_use_unpacked_kernel(bool use_unpacked_kernel) {
- (*dictionary_)[kUseUnpackedKernel] = use_unpacked_kernel;
-}
-
-bool CuttlefishConfig::decompress_kernel() const {
- return (*dictionary_)[kDecompressKernel].asBool();
-}
-void CuttlefishConfig::set_decompress_kernel(bool decompress_kernel) {
- (*dictionary_)[kDecompressKernel] = decompress_kernel;
-}
-
-std::string CuttlefishConfig::decompressed_kernel_image_path() const {
- return (*dictionary_)[kDecompressedKernelImagePath].asString();
-}
-void CuttlefishConfig::set_decompressed_kernel_image_path(
- const std::string& path) {
- SetPath(kDecompressedKernelImagePath, path);
-}
-
-std::string CuttlefishConfig::gdb_flag() const {
- return (*dictionary_)[kGdbFlag].asString();
-}
-
-void CuttlefishConfig::set_gdb_flag(const std::string& device) {
- (*dictionary_)[kGdbFlag] = device;
-}
-
-std::set<std::string> CuttlefishConfig::kernel_cmdline() const {
- std::set<std::string> args_set;
- auto args_json_obj = (*dictionary_)[kKernelCmdline];
- std::transform(args_json_obj.begin(), args_json_obj.end(),
- std::inserter(args_set, args_set.begin()),
- [](const Json::Value& it) { return it.asString(); });
- return args_set;
-}
-void CuttlefishConfig::set_kernel_cmdline(
- const std::set<std::string>& kernel_cmdline) {
- Json::Value args_json_obj(Json::arrayValue);
- for (const auto& arg : kernel_cmdline) {
- args_json_obj.append(arg);
- }
- (*dictionary_)[kKernelCmdline] = args_json_obj;
-}
-void CuttlefishConfig::add_kernel_cmdline(
- const std::set<std::string>& extra_args) {
- std::set<std::string> cmdline = kernel_cmdline();
- for (const auto& arg : extra_args) {
- if (cmdline.count(arg)) {
- LOG(ERROR) << "Kernel argument " << arg << " is duplicated";
- }
- cmdline.insert(arg);
- }
- set_kernel_cmdline(cmdline);
-}
-void CuttlefishConfig::add_kernel_cmdline(const std::string& kernel_cmdline) {
- std::stringstream args_stream(kernel_cmdline);
- std::set<std::string> kernel_cmdline_set;
- using is_iter = std::istream_iterator<std::string>;
- std::copy(is_iter(args_stream), is_iter(),
- std::inserter(kernel_cmdline_set, kernel_cmdline_set.begin()));
- add_kernel_cmdline(kernel_cmdline_set);
-}
-std::string CuttlefishConfig::kernel_cmdline_as_string() const {
- auto args_set = kernel_cmdline();
- std::stringstream output;
- std::copy(args_set.begin(), args_set.end(),
- std::ostream_iterator<std::string>(output, " "));
- return output.str();
-}
-
-std::string CuttlefishConfig::ramdisk_image_path() const {
- return (*dictionary_)[kRamdiskImagePath].asString();
-}
-void CuttlefishConfig::set_ramdisk_image_path(
- const std::string& ramdisk_image_path) {
- SetPath(kRamdiskImagePath, ramdisk_image_path);
-}
-
-std::vector<std::string> CuttlefishConfig::virtual_disk_paths() const {
- std::vector<std::string> virtual_disks;
- auto virtual_disks_json_obj = (*dictionary_)[kVirtualDiskPaths];
- for (const auto& disk : virtual_disks_json_obj) {
- virtual_disks.push_back(disk.asString());
- }
- return virtual_disks;
-}
-void CuttlefishConfig::set_virtual_disk_paths(
- const std::vector<std::string>& virtual_disk_paths) {
- Json::Value virtual_disks_json_obj(Json::arrayValue);
- for (const auto& arg : virtual_disk_paths) {
- virtual_disks_json_obj.append(arg);
- }
- (*dictionary_)[kVirtualDiskPaths] = virtual_disks_json_obj;
-}
-
-std::string CuttlefishConfig::dtb_path() const {
- return (*dictionary_)[kDtbPath].asString();
-}
-void CuttlefishConfig::set_dtb_path(const std::string& dtb_path) {
- SetPath(kDtbPath, dtb_path);
-}
-
-std::string CuttlefishConfig::gsi_fstab_path() const {
- return (*dictionary_)[kGsiFstabPath].asString();
-}
-void CuttlefishConfig::set_gsi_fstab_path(const std::string& path){
- SetPath(kGsiFstabPath, path);
-}
-
-std::string CuttlefishConfig::mempath() const {
- return (*dictionary_)[kMempath].asString();
-}
-void CuttlefishConfig::set_mempath(const std::string& mempath) {
- SetPath(kMempath, mempath);
-}
-
-std::string CuttlefishConfig::ivshmem_qemu_socket_path() const {
- return (*dictionary_)[kIvshmemQemuSocketPath].asString();
-}
-void CuttlefishConfig::set_ivshmem_qemu_socket_path(
- const std::string& ivshmem_qemu_socket_path) {
- SetPath(kIvshmemQemuSocketPath, ivshmem_qemu_socket_path);
-}
-
-std::string CuttlefishConfig::ivshmem_client_socket_path() const {
- return (*dictionary_)[kIvshmemClientSocketPath].asString();
-}
-void CuttlefishConfig::set_ivshmem_client_socket_path(
- const std::string& ivshmem_client_socket_path) {
- SetPath(kIvshmemClientSocketPath, ivshmem_client_socket_path);
-}
-
-int CuttlefishConfig::ivshmem_vector_count() const {
- return (*dictionary_)[kIvshmemVectorCount].asInt();
-}
-void CuttlefishConfig::set_ivshmem_vector_count(int ivshmem_vector_count) {
- (*dictionary_)[kIvshmemVectorCount] = ivshmem_vector_count;
-}
-
-std::string CuttlefishConfig::usb_v1_socket_name() const {
- return (*dictionary_)[kUsbV1SocketName].asString();
-}
-void CuttlefishConfig::set_usb_v1_socket_name(
- const std::string& usb_v1_socket_name) {
- (*dictionary_)[kUsbV1SocketName] = usb_v1_socket_name;
-}
-
-int CuttlefishConfig::vhci_port() const {
- return (*dictionary_)[kVhciPort].asInt();
-}
-void CuttlefishConfig::set_vhci_port(int vhci_port) {
- (*dictionary_)[kVhciPort] = vhci_port;
-}
-
-std::string CuttlefishConfig::usb_ip_socket_name() const {
- return (*dictionary_)[kUsbIpSocketName].asString();
-}
-void CuttlefishConfig::set_usb_ip_socket_name(
- const std::string& usb_ip_socket_name) {
- (*dictionary_)[kUsbIpSocketName] = usb_ip_socket_name;
-}
-
-std::string CuttlefishConfig::kernel_log_pipe_name() const {
- return (*dictionary_)[kKernelLogPipeName].asString();
-}
-void CuttlefishConfig::set_kernel_log_pipe_name(
- const std::string& kernel_log_pipe_name) {
- (*dictionary_)[kKernelLogPipeName] = kernel_log_pipe_name;
-}
-
-std::string CuttlefishConfig::console_pipe_name() const {
- return (*dictionary_)[kConsolePipeName].asString();
-}
-void CuttlefishConfig::set_console_pipe_name(
- const std::string& console_pipe_name) {
- SetPath(kConsolePipeName, console_pipe_name);
-}
-
-bool CuttlefishConfig::deprecated_boot_completed() const {
- return (*dictionary_)[kDeprecatedBootCompleted].asBool();
-}
-void CuttlefishConfig::set_deprecated_boot_completed(
- bool deprecated_boot_completed) {
- (*dictionary_)[kDeprecatedBootCompleted] = deprecated_boot_completed;
-}
-
-std::string CuttlefishConfig::console_path() const {
- return (*dictionary_)[kConsolePath].asString();
-}
-void CuttlefishConfig::set_console_path(const std::string& console_path) {
- SetPath(kConsolePath, console_path);
-}
-
-std::string CuttlefishConfig::logcat_path() const {
- return (*dictionary_)[kLogcatPath].asString();
-}
-void CuttlefishConfig::set_logcat_path(const std::string& logcat_path) {
- SetPath(kLogcatPath, logcat_path);
-}
-
-std::string CuttlefishConfig::launcher_monitor_socket_path() const {
- return (*dictionary_)[kLauncherMonitorPath].asString();
-}
-void CuttlefishConfig::set_launcher_monitor_socket_path(
- const std::string& launcher_monitor_path) {
- SetPath(kLauncherMonitorPath, launcher_monitor_path);
-}
-
-std::string CuttlefishConfig::launcher_log_path() const {
- return (*dictionary_)[kLauncherLogPath].asString();
-}
-void CuttlefishConfig::set_launcher_log_path(
- const std::string& launcher_log_path) {
- (*dictionary_)[kLauncherLogPath] = launcher_log_path;
-}
-
-std::string CuttlefishConfig::mobile_bridge_name() const {
- return (*dictionary_)[kMobileBridgeName].asString();
-}
-void CuttlefishConfig::set_mobile_bridge_name(
- const std::string& mobile_bridge_name) {
- (*dictionary_)[kMobileBridgeName] = mobile_bridge_name;
-}
-
-std::string CuttlefishConfig::wifi_guest_mac_addr() const {
- return (*dictionary_)[kWifiGuestMacAddr].asString();
-}
-void CuttlefishConfig::set_wifi_guest_mac_addr(
- const std::string& wifi_guest_mac_addr) {
- (*dictionary_)[kWifiGuestMacAddr] = wifi_guest_mac_addr;
-}
-
-std::string CuttlefishConfig::wifi_host_mac_addr() const {
- return (*dictionary_)[kWifiHostMacAddr].asString();
-}
-void CuttlefishConfig::set_wifi_host_mac_addr(
- const std::string& wifi_host_mac_addr) {
- (*dictionary_)[kWifiHostMacAddr] = wifi_host_mac_addr;
-}
-
-std::string CuttlefishConfig::mobile_tap_name() const {
- return (*dictionary_)[kMobileTapName].asString();
-}
-void CuttlefishConfig::set_mobile_tap_name(const std::string& mobile_tap_name) {
- (*dictionary_)[kMobileTapName] = mobile_tap_name;
-}
-
-std::string CuttlefishConfig::wifi_tap_name() const {
- return (*dictionary_)[kWifiTapName].asString();
-}
-void CuttlefishConfig::set_wifi_tap_name(const std::string& wifi_tap_name) {
- (*dictionary_)[kWifiTapName] = wifi_tap_name;
-}
-
-std::string CuttlefishConfig::entropy_source() const {
- return (*dictionary_)[kEntropySource].asString();
-}
-void CuttlefishConfig::set_entropy_source(const std::string& entropy_source) {
- (*dictionary_)[kEntropySource] = entropy_source;
-}
-
-int CuttlefishConfig::vsock_guest_cid() const {
- return (*dictionary_)[kVsockGuestCid].asInt();
-}
-
-void CuttlefishConfig::set_vsock_guest_cid(int vsock_guest_cid) {
- (*dictionary_)[kVsockGuestCid] = vsock_guest_cid;
-}
-
-std::string CuttlefishConfig::uuid() const {
- return (*dictionary_)[kUuid].asString();
-}
-void CuttlefishConfig::set_uuid(const std::string& uuid) {
- (*dictionary_)[kUuid] = uuid;
-}
-
-void CuttlefishConfig::set_cuttlefish_env_path(const std::string& path) {
- SetPath(kCuttlefishEnvPath, path);
-}
-std::string CuttlefishConfig::cuttlefish_env_path() const {
- return (*dictionary_)[kCuttlefishEnvPath].asString();
-}
-
-static AdbMode stringToAdbMode(std::string mode) {
- std::transform(mode.begin(), mode.end(), mode.begin(), ::tolower);
- if (mode == "tunnel") {
- return AdbMode::Tunnel;
- } else if (mode == "vsock_tunnel") {
- return AdbMode::VsockTunnel;
- } else if (mode == "vsock_half_tunnel") {
- return AdbMode::VsockHalfTunnel;
- } else if (mode == "native_vsock") {
- return AdbMode::NativeVsock;
- } else if (mode == "usb") {
- return AdbMode::Usb;
- } else {
- return AdbMode::Unknown;
- }
-}
-
-std::set<AdbMode> CuttlefishConfig::adb_mode() const {
- std::set<AdbMode> args_set;
- for (auto& mode : (*dictionary_)[kAdbMode]) {
- args_set.insert(stringToAdbMode(mode.asString()));
- }
- return args_set;
-}
-
-void CuttlefishConfig::set_adb_mode(const std::set<std::string>& mode) {
- Json::Value mode_json_obj(Json::arrayValue);
- for (const auto& arg : mode) {
- mode_json_obj.append(arg);
- }
- (*dictionary_)[kAdbMode] = mode_json_obj;
-}
-
-std::string CuttlefishConfig::adb_ip_and_port() const {
- return (*dictionary_)[kAdbIPAndPort].asString();
-}
-
-void CuttlefishConfig::set_adb_ip_and_port(const std::string& ip_port) {
- (*dictionary_)[kAdbIPAndPort] = ip_port;
-}
-
-std::string CuttlefishConfig::adb_device_name() const {
- // TODO(schuffelen): Deal with duplication between here and launch.cc
- bool tunnelMode = adb_mode().count(AdbMode::Tunnel) > 0;
- bool vsockTunnel = adb_mode().count(AdbMode::VsockTunnel) > 0;
- bool vsockHalfProxy = adb_mode().count(AdbMode::VsockHalfTunnel) > 0;
- bool nativeVsock = adb_mode().count(AdbMode::NativeVsock) > 0;
- if (tunnelMode || vsockTunnel || vsockHalfProxy || nativeVsock) {
- return adb_ip_and_port();
- } else if (adb_mode().count(AdbMode::Usb) > 0) {
- return serial_number();
- }
- LOG(ERROR) << "no adb_mode found, returning bad device name";
- return "NO_ADB_MODE_SET_NO_VALID_DEVICE_NAME";
-}
-
-std::string CuttlefishConfig::device_title() const {
- return (*dictionary_)[kDeviceTitle].asString();
-}
-
-void CuttlefishConfig::set_device_title(const std::string& title) {
- (*dictionary_)[kDeviceTitle] = title;
-}
-
-std::string CuttlefishConfig::setupwizard_mode() const {
- return (*dictionary_)[kSetupWizardMode].asString();
-}
-
-void CuttlefishConfig::set_setupwizard_mode(const std::string& mode) {
- (*dictionary_)[kSetupWizardMode] = mode;
-}
-
-std::string CuttlefishConfig::qemu_binary() const {
- return (*dictionary_)[kQemuBinary].asString();
-}
-
-void CuttlefishConfig::set_qemu_binary(const std::string& qemu_binary) {
- (*dictionary_)[kQemuBinary] = qemu_binary;
-}
-
-std::string CuttlefishConfig::crosvm_binary() const {
- return (*dictionary_)[kCrosvmBinary].asString();
-}
-
-void CuttlefishConfig::set_crosvm_binary(const std::string& crosvm_binary) {
- (*dictionary_)[kCrosvmBinary] = crosvm_binary;
-}
-
-std::string CuttlefishConfig::console_forwarder_binary() const {
- return (*dictionary_)[kConsoleForwarderBinary].asString();
-}
-
-void CuttlefishConfig::set_console_forwarder_binary(
- const std::string& binary) {
- (*dictionary_)[kConsoleForwarderBinary] = binary;
-}
-
-std::string CuttlefishConfig::ivserver_binary() const {
- return (*dictionary_)[kIvServerBinary].asString();
-}
-
-void CuttlefishConfig::set_ivserver_binary(const std::string& ivserver_binary) {
- (*dictionary_)[kIvServerBinary] = ivserver_binary;
-}
-
-std::string CuttlefishConfig::kernel_log_monitor_binary() const {
- return (*dictionary_)[kKernelLogMonitorBinary].asString();
-}
-
-void CuttlefishConfig::set_kernel_log_monitor_binary(
- const std::string& kernel_log_monitor_binary) {
- (*dictionary_)[kKernelLogMonitorBinary] = kernel_log_monitor_binary;
-}
-
-bool CuttlefishConfig::enable_vnc_server() const {
- return (*dictionary_)[kEnableVncServer].asBool();
-}
-
-void CuttlefishConfig::set_enable_vnc_server(bool enable_vnc_server) {
- (*dictionary_)[kEnableVncServer] = enable_vnc_server;
-}
-
-std::string CuttlefishConfig::vnc_server_binary() const {
- return (*dictionary_)[kVncServerBinary].asString();
-}
-
-void CuttlefishConfig::set_vnc_server_binary(
- const std::string& vnc_server_binary) {
- (*dictionary_)[kVncServerBinary] = vnc_server_binary;
-}
-
-int CuttlefishConfig::vnc_server_port() const {
- return (*dictionary_)[kVncServerPort].asInt();
-}
-
-void CuttlefishConfig::set_vnc_server_port(int vnc_server_port) {
- (*dictionary_)[kVncServerPort] = vnc_server_port;
-}
-
-bool CuttlefishConfig::enable_stream_audio() const {
- return (*dictionary_)[kEnableStreamAudio].asBool();
-}
-
-void CuttlefishConfig::set_enable_stream_audio(bool enable_stream_audio) {
- (*dictionary_)[kEnableStreamAudio] = enable_stream_audio;
-}
-
-std::string CuttlefishConfig::stream_audio_binary() const {
- return (*dictionary_)[kStreamAudioBinary].asString();
-}
-
-void CuttlefishConfig::set_stream_audio_binary(
- const std::string& stream_audio_binary) {
- (*dictionary_)[kStreamAudioBinary] = stream_audio_binary;
-}
-
-int CuttlefishConfig::stream_audio_port() const {
- return (*dictionary_)[kStreamAudioPort].asInt();
-}
-
-void CuttlefishConfig::set_stream_audio_port(int stream_audio_port) {
- (*dictionary_)[kStreamAudioPort] = stream_audio_port;
-}
-
-bool CuttlefishConfig::restart_subprocesses() const {
- return (*dictionary_)[kRestartSubprocesses].asBool();
-}
-
-void CuttlefishConfig::set_restart_subprocesses(bool restart_subprocesses) {
- (*dictionary_)[kRestartSubprocesses] = restart_subprocesses;
-}
-
-bool CuttlefishConfig::run_adb_connector() const {
- return (*dictionary_)[kRunAdbConnector].asBool();
-}
-
-void CuttlefishConfig::set_run_adb_connector(bool run_adb_connector) {
- (*dictionary_)[kRunAdbConnector] = run_adb_connector;
-}
-
-std::string CuttlefishConfig::adb_connector_binary() const {
- return (*dictionary_)[kAdbConnectorBinary].asString();
-}
-
-void CuttlefishConfig::set_adb_connector_binary(
- const std::string& adb_connector_binary) {
- (*dictionary_)[kAdbConnectorBinary] = adb_connector_binary;
-}
-
-std::string CuttlefishConfig::virtual_usb_manager_binary() const {
- return (*dictionary_)[kVirtualUsbManagerBinary].asString();
-}
-
-void CuttlefishConfig::set_virtual_usb_manager_binary(
- const std::string& virtual_usb_manager_binary) {
- (*dictionary_)[kVirtualUsbManagerBinary] = virtual_usb_manager_binary;
-}
-
-std::string CuttlefishConfig::socket_forward_proxy_binary() const {
- return (*dictionary_)[kSocketForwardProxyBinary].asString();
-}
-
-void CuttlefishConfig::set_socket_forward_proxy_binary(
- const std::string& socket_forward_proxy_binary) {
- (*dictionary_)[kSocketForwardProxyBinary] = socket_forward_proxy_binary;
-}
-
-std::string CuttlefishConfig::socket_vsock_proxy_binary() const {
- return (*dictionary_)[kSocketVsockProxyBinary].asString();
-}
-
-void CuttlefishConfig::set_socket_vsock_proxy_binary(
- const std::string& socket_vsock_proxy_binary) {
- (*dictionary_)[kSocketVsockProxyBinary] = socket_vsock_proxy_binary;
-}
-
-bool CuttlefishConfig::run_as_daemon() const {
- return (*dictionary_)[kRunAsDaemon].asBool();
-}
-
-void CuttlefishConfig::set_run_as_daemon(bool run_as_daemon) {
- (*dictionary_)[kRunAsDaemon] = run_as_daemon;
-}
-
-bool CuttlefishConfig::run_e2e_test() const {
- return (*dictionary_)[kRunE2eTest].asBool();
-}
-
-void CuttlefishConfig::set_run_e2e_test(bool run_e2e_test) {
- (*dictionary_)[kRunE2eTest] = run_e2e_test;
-}
-
-std::string CuttlefishConfig::e2e_test_binary() const {
- return (*dictionary_)[kE2eTestBinary].asString();
-}
-
-void CuttlefishConfig::set_e2e_test_binary(const std::string& e2e_test_binary) {
- (*dictionary_)[kE2eTestBinary] = e2e_test_binary;
-}
-
-std::string CuttlefishConfig::data_policy() const {
- return (*dictionary_)[kDataPolicy].asString();
-}
-
-void CuttlefishConfig::set_data_policy(const std::string& data_policy) {
- (*dictionary_)[kDataPolicy] = data_policy;
-}
-
-int CuttlefishConfig::blank_data_image_mb() const {
- return (*dictionary_)[kBlankDataImageMb].asInt();
-}
-
-void CuttlefishConfig::set_blank_data_image_mb(int blank_data_image_mb) {
- (*dictionary_)[kBlankDataImageMb] = blank_data_image_mb;
-}
-
-std::string CuttlefishConfig::blank_data_image_fmt() const {
- return (*dictionary_)[kBlankDataImageFmt].asString();
-}
-
-void CuttlefishConfig::set_blank_data_image_fmt(const std::string& blank_data_image_fmt) {
- (*dictionary_)[kBlankDataImageFmt] = blank_data_image_fmt;
-}
-
-void CuttlefishConfig::set_logcat_serial_port(const std::string& port) {
- (*dictionary_)[kLogcatVsockPort] = port;
-}
-
-std::string CuttlefishConfig::logcat_serial_port() const {
- return (*dictionary_)[kLogcatVsockPort].asString();
-}
-
-void CuttlefishConfig::set_config_server_port(int port) {
- (*dictionary_)[kConfigServerPort] = port;
-}
-
-int CuttlefishConfig::config_server_port() const {
- return (*dictionary_)[kConfigServerPort].asInt();
-}
-
-void CuttlefishConfig::set_frames_vsock_port(int port) {
- (*dictionary_)[kFramesVsockPort] = port;
-}
-
-int CuttlefishConfig::frames_vsock_port() const {
- return (*dictionary_)[kFramesVsockPort].asInt();
-}
-
-void CuttlefishConfig::set_config_server_binary(const std::string& binary) {
- SetPath(kConfigServerBinary, binary);
-}
-
-std::string CuttlefishConfig::config_server_binary() const {
- return (*dictionary_)[kConfigServerBinary].asString();
-}
-
-bool CuttlefishConfig::enable_tombstone_receiver() const {
- return (*dictionary_)[kRunTombstoneReceiver].asBool();
-}
-
-void CuttlefishConfig::set_enable_tombstone_receiver(bool enable_tombstone_receiver) {
- (*dictionary_)[kRunTombstoneReceiver] = enable_tombstone_receiver;
-}
-
-std::string CuttlefishConfig::tombstone_receiver_binary() const {
- return (*dictionary_)[kTombstoneReceiverBinary].asString();
-}
-
-void CuttlefishConfig::set_tombstone_receiver_binary(const std::string& e2e_test_binary) {
- (*dictionary_)[kTombstoneReceiverBinary] = e2e_test_binary;
-}
-
-void CuttlefishConfig::set_tombstone_receiver_port(int port) {
- (*dictionary_)[kTombstoneReceiverPort] = port;
-}
-
-int CuttlefishConfig::tombstone_receiver_port() const {
- return (*dictionary_)[kTombstoneReceiverPort].asInt();
-}
-
-bool CuttlefishConfig::enable_ivserver() const {
- return hardware_name() == "cutf_ivsh";
-}
-
-std::string CuttlefishConfig::touch_socket_path() const {
- return PerInstancePath("touch.sock");
-}
-
-std::string CuttlefishConfig::keyboard_socket_path() const {
- return PerInstancePath("keyboard.sock");
-}
-
-// Creates the (initially empty) config object and populates it with values from
-// the config file if the CUTTLEFISH_CONFIG_FILE env variable is present.
-// Returns nullptr if there was an error loading from file
-/*static*/ CuttlefishConfig* CuttlefishConfig::BuildConfigImpl() {
- auto config_file_path = cvd::StringFromEnv(kCuttlefishConfigEnvVarName,
- vsoc::GetGlobalConfigFileLink());
- auto ret = new CuttlefishConfig();
- if (ret) {
- auto loaded = ret->LoadFromFile(config_file_path.c_str());
- if (!loaded) {
- delete ret;
- return nullptr;
- }
- }
- return ret;
-}
-
-/*static*/ CuttlefishConfig* CuttlefishConfig::Get() {
- static std::shared_ptr<CuttlefishConfig> config(BuildConfigImpl());
- return config.get();
-}
-
-CuttlefishConfig::CuttlefishConfig() : dictionary_(new Json::Value()) {}
-// Can't use '= default' on the header because the compiler complains of
-// Json::Value being an incomplete type
-CuttlefishConfig::~CuttlefishConfig() {}
-
-bool CuttlefishConfig::LoadFromFile(const char* file) {
- auto real_file_path = cvd::AbsolutePath(file);
- if (real_file_path.empty()) {
- LOG(ERROR) << "Could not get real path for file " << file;
- return false;
- }
- Json::Reader reader;
- std::ifstream ifs(real_file_path);
- if (!reader.parse(ifs, *dictionary_)) {
- LOG(ERROR) << "Could not read config file " << file << ": "
- << reader.getFormattedErrorMessages();
- return false;
- }
- return true;
-}
-bool CuttlefishConfig::SaveToFile(const std::string& file) const {
- std::ofstream ofs(file);
- if (!ofs.is_open()) {
- LOG(ERROR) << "Unable to write to file " << file;
- return false;
- }
- ofs << *dictionary_;
- return !ofs.fail();
-}
-
-std::string CuttlefishConfig::PerInstancePath(const char* file_name) const {
- return (instance_dir() + "/") + file_name;
-}
-
-std::string CuttlefishConfig::instance_name() const {
- return GetPerInstanceDefault("cvd-");
-}
-
-int GetInstance() {
- static int instance_id = InstanceFromEnvironment();
- return instance_id;
-}
-
-std::string GetGlobalConfigFileLink() {
- return cvd::StringFromEnv("HOME", ".") + "/.cuttlefish_config.json";
-}
-
-std::string GetDomain() {
- return CuttlefishConfig::Get()->ivshmem_client_socket_path();
-}
-
-std::string GetPerInstanceDefault(const char* prefix) {
- std::ostringstream stream;
- stream << prefix << std::setfill('0') << std::setw(2) << GetInstance();
- return stream.str();
-}
-int GetPerInstanceDefault(int base) { return base + GetInstance() - 1; }
-
-std::string GetDefaultPerInstanceDir() {
- std::ostringstream stream;
- stream << std::getenv("HOME") << "/cuttlefish_runtime";
- return stream.str();
-}
-
-std::string GetDefaultMempath() {
- return GetPerInstanceDefault("/var/run/shm/cvd-");
-}
-
-int GetDefaultPerInstanceVsockCid() {
- constexpr int kFirstGuestCid = 3;
- return vsoc::HostSupportsVsock() ? GetPerInstanceDefault(kFirstGuestCid) : 0;
-}
-
-std::string DefaultHostArtifactsPath(const std::string& file_name) {
- return (cvd::StringFromEnv("ANDROID_HOST_OUT",
- cvd::StringFromEnv("HOME", ".")) +
- "/") +
- file_name;
-}
-
-std::string DefaultGuestImagePath(const std::string& file_name) {
- return (cvd::StringFromEnv("ANDROID_PRODUCT_OUT",
- cvd::StringFromEnv("HOME", ".")) +
- "/") +
- file_name;
-}
-
-bool HostSupportsQemuCli() {
- static bool supported =
- std::system(
- "/usr/lib/cuttlefish-common/bin/capability_query.py qemu_cli") == 0;
- return supported;
-}
-
-bool HostSupportsVsock() {
- static bool supported =
- std::system(
- "/usr/lib/cuttlefish-common/bin/capability_query.py vsock") == 0;
- return supported;
-}
-} // namespace vsoc