Merge changes I507b7827,Ie7eea383,I7e53e4fd
* changes:
Delete config variables for vnc vsock internals
Dynamically choose the VNC vsock ports in run_cvd
Simplify vm_manager_helpers_ with function pointers
diff --git a/host/commands/assemble_cvd/flags.cc b/host/commands/assemble_cvd/flags.cc
index da1082d..21781bf 100644
--- a/host/commands/assemble_cvd/flags.cc
+++ b/host/commands/assemble_cvd/flags.cc
@@ -171,8 +171,6 @@
"Binary for the configuration server");
DEFINE_int32(config_server_port, vsoc::GetPerInstanceDefault(4680),
"The (vsock) port for the configuration server");
-DEFINE_int32(frames_vsock_port, vsoc::GetPerInstanceDefault(5580),
- "The vsock port to receive frames from the guest on");
DEFINE_bool(enable_tombstone_receiver, true, "Enables the tombstone logger on "
"both the guest and the host");
DEFINE_string(tombstone_receiver_binary,
@@ -180,10 +178,6 @@
"Binary for the tombstone server");
DEFINE_int32(tombstone_receiver_port, vsoc::GetPerInstanceDefault(5630),
"The vsock port for tombstones");
-DEFINE_int32(keyboard_server_port, GetPerInstanceDefault(5540),
- "The port on which the vsock keyboard server should listen");
-DEFINE_int32(touch_server_port, GetPerInstanceDefault(5640),
- "The port on which the vsock touch server should listen");
DEFINE_bool(use_bootloader, false, "Boots the device using a bootloader");
DEFINE_string(bootloader, "", "Bootloader binary path");
DEFINE_string(boot_slot, "", "Force booting into the given slot. If empty, "
@@ -400,15 +394,11 @@
tmp_config_obj.set_logcat_mode(FLAGS_logcat_mode);
tmp_config_obj.set_logcat_vsock_port(FLAGS_logcat_vsock_port);
tmp_config_obj.set_config_server_port(FLAGS_config_server_port);
- tmp_config_obj.set_frames_vsock_port(FLAGS_frames_vsock_port);
tmp_config_obj.set_enable_tombstone_receiver(FLAGS_enable_tombstone_receiver);
tmp_config_obj.set_tombstone_receiver_port(FLAGS_tombstone_receiver_port);
tmp_config_obj.set_tombstone_receiver_binary(FLAGS_tombstone_receiver_binary);
- tmp_config_obj.set_touch_socket_port(FLAGS_touch_server_port);
- tmp_config_obj.set_keyboard_socket_port(FLAGS_keyboard_server_port);
-
tmp_config_obj.set_use_bootloader(FLAGS_use_bootloader);
tmp_config_obj.set_bootloader(FLAGS_bootloader);
diff --git a/host/commands/run_cvd/launch.cc b/host/commands/run_cvd/launch.cc
index e4eb858..0d8aace 100644
--- a/host/commands/run_cvd/launch.cc
+++ b/host/commands/run_cvd/launch.cc
@@ -210,60 +210,63 @@
return server;
}
-cvd::SharedFD CreateVsockVncInputServer(int port) {
- auto server = cvd::SharedFD::VsockServer(port, SOCK_STREAM);
- if (!server->IsOpen()) {
- LOG(ERROR) << "Unable to create vsock input server: "
- << server->StrError();
- return cvd::SharedFD();
+VncServerPorts LaunchVNCServerIfEnabled(
+ const vsoc::CuttlefishConfig& config,
+ cvd::ProcessMonitor* process_monitor,
+ std::function<bool(MonitorEntry*)> callback) {
+ VncServerPorts server_ret;
+ if (!config.enable_vnc_server()) {
+ return {};
}
- return server;
-}
-
-bool LaunchVNCServerIfEnabled(const vsoc::CuttlefishConfig& config,
- cvd::ProcessMonitor* process_monitor,
- std::function<bool(MonitorEntry*)> callback) {
- if (config.enable_vnc_server()) {
- // Launch the vnc server, don't wait for it to complete
- auto port_options = "-port=" + std::to_string(config.vnc_server_port());
- cvd::Command vnc_server(config.vnc_server_binary());
- vnc_server.AddParameter(port_options);
- if (config.vm_manager() == vm_manager::QemuManager::name()) {
- vnc_server.AddParameter("-write_virtio_input");
- }
- // When the ivserver is not enabled, the vnc touch_server needs to serve
- // on sockets and send input events to whoever connects to it (the VMM).
- auto touch_server =
- config.vm_manager() == vm_manager::CrosvmManager::name()
- ? CreateUnixVncInputServer(config.touch_socket_path())
- : CreateVsockVncInputServer(config.touch_socket_port());
- if (!touch_server->IsOpen()) {
- return false;
- }
- vnc_server.AddParameter("-touch_fd=", touch_server);
-
- auto keyboard_server =
- config.vm_manager() == vm_manager::CrosvmManager::name()
- ? CreateUnixVncInputServer(config.keyboard_socket_path())
- : CreateVsockVncInputServer(config.keyboard_socket_port());
- if (!keyboard_server->IsOpen()) {
- return false;
- }
- vnc_server.AddParameter("-keyboard_fd=", keyboard_server);
- // TODO(b/128852363): This should be handled through the wayland mock
- // instead.
- // Additionally it receives the frame updates from a virtual socket
- // instead
- auto frames_server =
- cvd::SharedFD::VsockServer(config.frames_vsock_port(), SOCK_STREAM);
- if (!frames_server->IsOpen()) {
- return false;
- }
- vnc_server.AddParameter("-frame_server_fd=", frames_server);
- process_monitor->StartSubprocess(std::move(vnc_server), callback);
- return true;
+ std::set<std::string> extra_kernel_args;
+ // Launch the vnc server, don't wait for it to complete
+ auto port_options = "-port=" + std::to_string(config.vnc_server_port());
+ cvd::Command vnc_server(config.vnc_server_binary());
+ vnc_server.AddParameter(port_options);
+ if (config.vm_manager() == vm_manager::QemuManager::name()) {
+ vnc_server.AddParameter("-write_virtio_input");
}
- return false;
+ // When the ivserver is not enabled, the vnc touch_server needs to serve
+ // on sockets and send input events to whoever connects to it (the VMM).
+ cvd::SharedFD touch_server;
+ if (config.vm_manager() == vm_manager::CrosvmManager::name()) {
+ touch_server = CreateUnixVncInputServer(config.touch_socket_path());
+ } else {
+ touch_server = cvd::SharedFD::VsockServer(SOCK_STREAM);
+ server_ret.touch_server_vsock_port = touch_server->VsockServerPort();
+ }
+ if (!touch_server->IsOpen()) {
+ LOG(ERROR) << "Could not open touch server: " << touch_server->StrError();
+ return {};
+ }
+ vnc_server.AddParameter("-touch_fd=", touch_server);
+
+ cvd::SharedFD keyboard_server;
+ if (config.vm_manager() == vm_manager::CrosvmManager::name()) {
+ keyboard_server = CreateUnixVncInputServer(config.keyboard_socket_path());
+ } else {
+ keyboard_server = cvd::SharedFD::VsockServer(SOCK_STREAM);
+ server_ret.keyboard_server_vsock_port = keyboard_server->VsockServerPort();
+ }
+ if (!keyboard_server->IsOpen()) {
+ LOG(ERROR) << "Could not open keyboard server: " << keyboard_server->StrError();
+ return {};
+ }
+ vnc_server.AddParameter("-keyboard_fd=", keyboard_server);
+ // TODO(b/128852363): This should be handled through the wayland mock
+ // instead.
+ // Additionally it receives the frame updates from a virtual socket
+ // instead
+ auto frames_server = cvd::SharedFD::VsockServer(SOCK_STREAM);
+ server_ret.frames_server_vsock_port = frames_server->VsockServerPort();
+ if (!frames_server->IsOpen()) {
+ LOG(ERROR) << "Could not open frames server: " << frames_server->StrError();
+ return {};
+ }
+ vnc_server.AddParameter("-frame_server_fd=", frames_server);
+ process_monitor->StartSubprocess(std::move(vnc_server), callback);
+
+ return server_ret;
}
void LaunchAdbConnectorIfEnabled(cvd::ProcessMonitor* process_monitor,
diff --git a/host/commands/run_cvd/launch.h b/host/commands/run_cvd/launch.h
index 4db6e12..42eed0d 100644
--- a/host/commands/run_cvd/launch.h
+++ b/host/commands/run_cvd/launch.h
@@ -1,7 +1,10 @@
#pragma once
#include <functional>
+#include <set>
+#include <string>
+#include "common/libs/fs/shared_fd.h"
#include "common/libs/utils/subprocess.h"
#include "host/commands/run_cvd/process_monitor.h"
#include "host/libs/config/cuttlefish_config.h"
@@ -16,9 +19,6 @@
cvd::ProcessMonitor* process_monitor);
void LaunchUsbServerIfEnabled(const vsoc::CuttlefishConfig& config,
cvd::ProcessMonitor* process_monitor);
-bool LaunchVNCServerIfEnabled(const vsoc::CuttlefishConfig& config,
- cvd::ProcessMonitor* process_monitor,
- std::function<bool(cvd::MonitorEntry*)> callback);
void LaunchAdbConnectorIfEnabled(cvd::ProcessMonitor* process_monitor,
const vsoc::CuttlefishConfig& config,
cvd::SharedFD adbd_events_pipe);
@@ -26,3 +26,13 @@
const vsoc::CuttlefishConfig& config);
void LaunchTombstoneReceiverIfEnabled(const vsoc::CuttlefishConfig& config,
cvd::ProcessMonitor* process_monitor);
+
+struct VncServerPorts {
+ std::optional<int> frames_server_vsock_port;
+ std::optional<int> touch_server_vsock_port;
+ std::optional<int> keyboard_server_vsock_port;
+};
+VncServerPorts LaunchVNCServerIfEnabled(
+ const vsoc::CuttlefishConfig& config,
+ cvd::ProcessMonitor* process_monitor,
+ std::function<bool(cvd::MonitorEntry*)> callback);
diff --git a/host/commands/run_cvd/main.cc b/host/commands/run_cvd/main.cc
index 486a0db..470c0d5 100644
--- a/host/commands/run_cvd/main.cc
+++ b/host/commands/run_cvd/main.cc
@@ -302,9 +302,6 @@
if (config.logcat_mode() == cvd::kLogcatVsockMode) {
kernel_cmdline.push_back(concat("androidboot.vsock_logcat_port=", config.logcat_vsock_port()));
}
- if (config.enable_vnc_server()) {
- kernel_cmdline.push_back(concat("androidboot.vsock_frames_port=", config.frames_vsock_port()));
- }
if (config.enable_tombstone_receiver()) {
kernel_cmdline.push_back("androidboot.tombstone_transmit=1");
kernel_cmdline.push_back(concat(
@@ -328,11 +325,6 @@
}
kernel_cmdline.push_back(concat("androidboot.slot_suffix=", slot_suffix));
}
- if (config.vm_manager() == vm_manager::QemuManager::name()) {
- kernel_cmdline.push_back(concat("androidboot.vsock_touch_port=", config.touch_socket_port()));
- kernel_cmdline.push_back(concat(
- "androidboot.vsock_keyboard_port=", config.keyboard_socket_port()));
- }
kernel_cmdline.push_back(concat("loop.max_part=", config.loop_max_part()));
if (config.guest_enforce_security()) {
kernel_cmdline.push_back("enforcing=1");
@@ -350,6 +342,22 @@
return kernel_cmdline;
}
+std::vector<std::string> KernelCommandLineFromVnc(const VncServerPorts& vnc_ports) {
+ std::vector<std::string> kernel_args;
+ if (vnc_ports.frames_server_vsock_port) {
+ kernel_args.push_back(concat("androidboot.vsock_frames_port=",
+ *vnc_ports.frames_server_vsock_port));
+ }
+ if (vnc_ports.touch_server_vsock_port) {
+ kernel_args.push_back(concat("androidboot.vsock_touch_port=",
+ *vnc_ports.touch_server_vsock_port));
+ }
+ if (vnc_ports.keyboard_server_vsock_port) {
+ kernel_args.push_back(concat("androidboot.vsock_keyboard_port=",
+ *vnc_ports.keyboard_server_vsock_port));
+ }
+ return kernel_args;
+}
} // namespace
@@ -472,6 +480,8 @@
cvd::SharedFD adbd_events_pipe = event_pipes[1];
event_pipes.clear();
+ std::set<std::string> extra_kernel_cmdline;
+
SetUpHandlingOfBootEvents(&process_monitor, boot_events_pipe,
boot_state_machine);
@@ -486,12 +496,15 @@
// The vnc server needs to be launched after the ivserver because it connects
// to it when using qemu. It needs to launch before the VMM because it serves
// on several sockets (input devices, vsock frame server) when using crosvm.
- auto frontend_enabled = LaunchVNCServerIfEnabled(
+ auto vnc_server_config = LaunchVNCServerIfEnabled(
*config, &process_monitor, GetOnSubprocessExitCallback(*config));
+ auto vnc_kernel_args = KernelCommandLineFromVnc(vnc_server_config);
+
+ auto kernel_args = KernelCommandLineFromConfig(*config);
+ kernel_args.insert(kernel_args.end(), vnc_kernel_args.begin(), vnc_kernel_args.end());
// Start the guest VM
- vm_manager->WithFrontend(frontend_enabled);
- auto kernel_args = KernelCommandLineFromConfig(*config);
+ vm_manager->WithFrontend(vnc_kernel_args.size() > 0);
vm_manager->WithKernelCommandLine(android::base::Join(kernel_args, " "));
auto vmm_commands = vm_manager->StartCommands();
for (auto& vmm_cmd: vmm_commands) {
diff --git a/host/libs/config/cuttlefish_config.cpp b/host/libs/config/cuttlefish_config.cpp
index 3b223d9..4b2451c 100644
--- a/host/libs/config/cuttlefish_config.cpp
+++ b/host/libs/config/cuttlefish_config.cpp
@@ -143,7 +143,6 @@
const char* kLogcatMode = "logcat_mode";
const char* kLogcatVsockPort = "logcat_vsock_port";
const char* kConfigServerPort = "config_server_port";
-const char* kFramesVsockPort = "frames_vsock_port";
const char* kLogcatReceiverBinary = "logcat_receiver_binary";
const char* kConfigServerBinary = "config_server_binary";
@@ -156,9 +155,6 @@
const char* kBootSlot = "boot_slot";
-const char* kTouchSocketPort = "touch_socket_port";
-const char* kKeyboardSocketPort = "keyboard_socket_port";
-
const char* kLoopMaxPart = "loop_max_part";
const char* kGuestEnforceSecurity = "guest_enforce_security";
const char* kGuestAuditSecurity = "guest_audit_security";
@@ -718,14 +714,6 @@
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_logcat_receiver_binary(const std::string& binary) {
SetPath(kLogcatReceiverBinary, binary);
}
@@ -798,22 +786,6 @@
return PerInstanceInternalPath("keyboard.sock");
}
-void CuttlefishConfig::set_touch_socket_port(int port) {
- (*dictionary_)[kTouchSocketPort] = port;
-}
-
-int CuttlefishConfig::touch_socket_port() const {
- return (*dictionary_)[kTouchSocketPort].asInt();
-}
-
-void CuttlefishConfig::set_keyboard_socket_port(int port) {
- (*dictionary_)[kKeyboardSocketPort] = port;
-}
-
-int CuttlefishConfig::keyboard_socket_port() const {
- return (*dictionary_)[kKeyboardSocketPort].asInt();
-}
-
void CuttlefishConfig::set_loop_max_part(int loop_max_part) {
(*dictionary_)[kLoopMaxPart] = loop_max_part;
}
diff --git a/host/libs/config/cuttlefish_config.h b/host/libs/config/cuttlefish_config.h
index bf3d231..d6a162a 100644
--- a/host/libs/config/cuttlefish_config.h
+++ b/host/libs/config/cuttlefish_config.h
@@ -288,9 +288,6 @@
void set_config_server_port(int port);
int config_server_port() const;
- void set_frames_vsock_port(int port);
- int frames_vsock_port() const;
-
void set_enable_tombstone_receiver(bool enable_tombstone_receiver);
bool enable_tombstone_receiver() const;
@@ -312,12 +309,6 @@
std::string touch_socket_path() const;
std::string keyboard_socket_path() const;
- void set_touch_socket_port(int touch_socket_port);
- int touch_socket_port() const;
-
- void set_keyboard_socket_port(int keyboard_socket_port);
- int keyboard_socket_port() const;
-
void set_loop_max_part(int loop_max_part);
int loop_max_part() const;
diff --git a/host/libs/vm_manager/vm_manager.cpp b/host/libs/vm_manager/vm_manager.cpp
index 2ab4157..40fa828 100644
--- a/host/libs/vm_manager/vm_manager.cpp
+++ b/host/libs/vm_manager/vm_manager.cpp
@@ -44,32 +44,20 @@
{
QemuManager::name(),
{
- [](const vsoc::CuttlefishConfig* config) {
- return GetManagerSingleton<QemuManager>(config);
- },
- []() { return vsoc::HostSupportsQemuCli(); },
- [](const std::string& gpu_mode) {
- return QemuManager::ConfigureGpu(gpu_mode);
- },
- []() {
- return QemuManager::ConfigureBootDevices();
- }
+ GetManagerSingleton<QemuManager>,
+ vsoc::HostSupportsQemuCli,
+ QemuManager::ConfigureGpu,
+ QemuManager::ConfigureBootDevices,
},
},
{
CrosvmManager::name(),
{
- [](const vsoc::CuttlefishConfig* config) {
- return GetManagerSingleton<CrosvmManager>(config);
- },
+ GetManagerSingleton<CrosvmManager>,
// Same as Qemu for the time being
- []() { return vsoc::HostSupportsQemuCli(); },
- [](const std::string& gpu_mode) {
- return CrosvmManager::ConfigureGpu(gpu_mode);
- },
- []() {
- return CrosvmManager::ConfigureBootDevices();
- }
+ vsoc::HostSupportsQemuCli,
+ CrosvmManager::ConfigureGpu,
+ CrosvmManager::ConfigureBootDevices,
}
}
};