Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,8 @@ DEFINE_vec(netsim_uwb, fmt::format("{}", CF_DEFAULTS_NETSIM_UWB),
"[Experimental] Connect Uwb radio to netsim.");
DEFINE_vec(netsim_nfc, fmt::format("{}", CF_DEFAULTS_NETSIM_NFC),
"[Experimental] Connect Nfc radio to netsim.");
DEFINE_vec(netsim_modem, fmt::format("{}", CF_DEFAULTS_NETSIM_MODEM),
"[Experimental] Connect Modem radio to netsim.");
DEFINE_string(netsim_args, CF_DEFAULTS_NETSIM_ARGS,
"Space-separated list of netsim args.");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ DECLARE_vec(netsim);
DECLARE_vec(netsim_bt);
DECLARE_vec(netsim_uwb);
DECLARE_vec(netsim_nfc);
DECLARE_vec(netsim_modem);
DECLARE_string(netsim_args);

DECLARE_bool(enable_automotive_proxy);
Expand Down
23 changes: 16 additions & 7 deletions base/cvd/cuttlefish/host/commands/assemble_cvd/bootconfig_args.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@
#include <string_view>
#include <vector>

#include "absl/strings/str_join.h"
#include "absl/strings/str_split.h"
#include "absl/log/log.h"
#include "absl/strings/numbers.h"
#include "absl/strings/str_join.h"
#include "absl/strings/str_split.h"

#include "cuttlefish/common/libs/utils/contains.h"
#include "cuttlefish/common/libs/utils/json.h"
Expand Down Expand Up @@ -156,8 +156,10 @@ Result<void> ValidateBoardBootconfigKeys(
Result<std::unordered_map<std::string, std::string>> BootconfigArgsFromConfig(
const CuttlefishConfig& config,
const CuttlefishConfig::InstanceSpecific& instance,
const std::map<std::string, std::string, std::less<void>> builtin_bootconfig_args) {
CF_EXPECT(ValidateBoardBootconfigKeys(instance.device_type(), builtin_bootconfig_args));
const std::map<std::string, std::string, std::less<void>>
builtin_bootconfig_args) {
CF_EXPECT(ValidateBoardBootconfigKeys(instance.device_type(),
builtin_bootconfig_args));

std::unordered_map<std::string, std::string> bootconfig_args;

Expand Down Expand Up @@ -237,6 +239,10 @@ Result<std::unordered_map<std::string, std::string>> BootconfigArgsFromConfig(
instance.modem_simulator_ports();
}

if (instance.enable_modem_netsim()) {
bootconfig_args["androidboot.netsim_modem"] = "1";
}

// Once all Cuttlefish kernel versions are at least 5.15, filename encryption
// will not need to be set conditionally. HCTR2 will always be available.
// At that point fstab.cf.f2fs.cts and fstab.cf.ext4.cts can be removed.
Expand Down Expand Up @@ -331,7 +337,8 @@ Result<std::unordered_map<std::string, std::string>> BootconfigArgsFromConfig(
bootconfig_args["androidboot.wifi_impl"] = "virt_wifi";
}

if (!builtin_bootconfig_args.count("androidboot.vendor.apex.com.google.emulated.camera.provider.hal")){
if (!builtin_bootconfig_args.count(
"androidboot.vendor.apex.com.google.emulated.camera.provider.hal")) {
bootconfig_args
["androidboot.vendor.apex.com.google.emulated.camera.provider.hal"] =
// Camera configs is only populated for virtio-media host camera
Expand All @@ -343,9 +350,11 @@ Result<std::unordered_map<std::string, std::string>> BootconfigArgsFromConfig(
}

if (instance.device_type() == cuttlefish::DeviceType::Auto) {
if (!builtin_bootconfig_args.count("androidboot.cuttlefish_service_bluetooth_checker")) {
if (!builtin_bootconfig_args.count(
"androidboot.cuttlefish_service_bluetooth_checker")) {
// # TODO (b/405655265) Remove once the BT issue is fixed
bootconfig_args["androidboot.cuttlefish_service_bluetooth_checker"] = "false";
bootconfig_args["androidboot.cuttlefish_service_bluetooth_checker"] =
"false";
}
}

Expand Down
21 changes: 16 additions & 5 deletions base/cvd/cuttlefish/host/commands/assemble_cvd/flags.cc
Original file line number Diff line number Diff line change
Expand Up @@ -486,9 +486,15 @@ Result<CuttlefishConfig> InitializeCuttlefishConfiguration(
std::vector<bool> netsim_nfc_vec = CF_EXPECT(GET_FLAG_BOOL_VALUE(netsim_nfc));
bool any_netsim_nfc = std::any_of(
netsim_nfc_vec.begin(), netsim_nfc_vec.end(), [](bool e) { return e; });
std::vector<bool> netsim_modem_vec =
CF_EXPECT(GET_FLAG_BOOL_VALUE(netsim_modem));
bool any_netsim_modem =
std::any_of(netsim_modem_vec.begin(), netsim_modem_vec.end(),
[](bool e) { return e; });
bool netsim_has_bt = any_netsim_all_radios || any_netsim_bt;
bool netsim_has_uwb = any_netsim_all_radios || any_netsim_uwb;
bool netsim_has_nfc = any_netsim_all_radios || any_netsim_nfc;
bool netsim_has_modem = any_netsim_all_radios || any_netsim_modem;

// These flags inform NetsimServer::ResultSetup which radios it owns.
if (netsim_has_bt) {
Expand All @@ -501,6 +507,9 @@ Result<CuttlefishConfig> InitializeCuttlefishConfiguration(
if (netsim_has_nfc) {
tmp_config_obj.netsim_radio_enable(CuttlefishConfig::NetsimRadio::Nfc);
}
if (netsim_has_modem) {
tmp_config_obj.netsim_radio_enable(CuttlefishConfig::NetsimRadio::Modem);
}

bool any_not_netsim_bt = false;
bool any_not_netsim_uwb = false;
Expand Down Expand Up @@ -1034,9 +1043,12 @@ Result<CuttlefishConfig> InitializeCuttlefishConfiguration(
guest_enforce_security_values.ForIndex(instance_index));
instance.set_pause_in_bootloader(pause_in_bootloader_vec[instance_index]);
instance.set_run_as_daemon(daemon_values.ForIndex(instance_index));
bool is_netsim_all = netsim_all_radios_vec[instance_index];
bool is_modem_netsim = is_netsim_all || netsim_modem_vec[instance_index];
instance.set_enable_modem_simulator(
enable_modem_simulator_vec[instance_index] &&
!enable_minimal_mode_vec[instance_index]);
!enable_minimal_mode_vec[instance_index] && !is_modem_netsim);
instance.set_enable_modem_netsim(is_modem_netsim);
instance.set_modem_simulator_instance_number(
modem_simulator_count_vec[instance_index]);
instance.set_modem_simulator_sim_type(
Expand Down Expand Up @@ -1079,7 +1091,6 @@ Result<CuttlefishConfig> InitializeCuttlefishConfiguration(

// crosvm should create fifos for Bluetooth
bool enable_host_bluetooth = enable_host_bluetooth_vec[instance_index];
bool is_netsim_all = netsim_all_radios_vec[instance_index];
bool is_bt_netsim = is_netsim_all || netsim_bt_vec[instance_index];
// or is_bt_netsim is here for backwards compatibility only
instance.set_has_bluetooth(enable_host_bluetooth || is_bt_netsim);
Expand All @@ -1092,8 +1103,6 @@ Result<CuttlefishConfig> InitializeCuttlefishConfiguration(
instance.set_enable_host_uwb_connector(FLAGS_enable_host_uwb &&
!is_uwb_netsim);

bool is_any_netsim = is_netsim_all || is_bt_netsim || is_uwb_netsim;

instance.set_uuid(uuid_vec[instance_index]);

instance.set_environment_name(environment_name);
Expand Down Expand Up @@ -1284,7 +1293,9 @@ Result<CuttlefishConfig> InitializeCuttlefishConfiguration(
auto port = 8443 + num - 1;
// Change the signaling server port for all instances
tmp_config_obj.set_sig_server_proxy_port(port);
instance.set_start_netsim(is_first_instance && is_any_netsim);
instance.set_start_netsim(is_first_instance &&
(netsim_has_bt || netsim_has_uwb ||
netsim_has_nfc || netsim_has_modem));

instance.set_start_rootcanal(is_first_instance && any_not_netsim_bt &&
(FLAGS_rootcanal_instance_num <= 0));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@
#define CF_DEFAULTS_NETSIM_BT true
#define CF_DEFAULTS_NETSIM_UWB true
#define CF_DEFAULTS_NETSIM_NFC false
#define CF_DEFAULTS_NETSIM_MODEM false

// Netsim default parameters
#define CF_DEFAULTS_NETSIM_ARGS ""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,20 @@ class Chip {
public:
SharedFD fd_in;
SharedFD fd_out;
int sim_type = 1;

Chip(std::string kind) : kind_(kind) {}

// Append the chip information as Json to the command.
void Append(Command& c) const {
c.AppendToLastParameter(R"({"kind":")", kind_, R"(","fdIn":)", fd_in,
R"(,"fdOut":)", fd_out, "}");
R"(,"fdOut":)", fd_out);
if (kind_ == "CELLULAR") {
// simType is defined as int32 in netsim's startup.proto, so do not quote
// it.
c.AppendToLastParameter(R"(,"simType":)", std::to_string(sim_type));
}
c.AppendToLastParameter("}");
}

private:
Expand Down Expand Up @@ -207,6 +214,14 @@ class NetsimServer : public CommandSource {
chip.fd_out = CF_EXPECT(MakeFifo(instance, "nfc_fifo_vm.out"));
device.chips.emplace_back(chip);
}
// Add modem chip if enabled
if (config_.netsim_radio_enabled(CuttlefishConfig::NetsimRadio::Modem)) {
Chip chip("CELLULAR");
chip.fd_in = CF_EXPECT(MakeFifo(instance, "modem_fifo_vm.in"));
chip.fd_out = CF_EXPECT(MakeFifo(instance, "modem_fifo_vm.out"));
chip.sim_type = instance.modem_simulator_sim_type();
device.chips.emplace_back(chip);
}
// Add other chips if enabled
devices_.emplace_back(device);
}
Expand Down
3 changes: 3 additions & 0 deletions base/cvd/cuttlefish/host/libs/config/cuttlefish_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ class CuttlefishConfig {
Wifi = 0b00000010,
Uwb = 0b00000100,
Nfc = 0b00001000,
Modem = 0b00010000,
};

void netsim_radio_enable(NetsimRadio flag);
Expand Down Expand Up @@ -384,6 +385,7 @@ class CuttlefishConfig {

// modem simulator related
std::string modem_simulator_ports() const;
bool enable_modem_netsim() const;

// The device id the webrtc process should use to register with the
// signaling server
Expand Down Expand Up @@ -646,6 +648,7 @@ class CuttlefishConfig {
void set_environment_name(const std::string& env_name);
// modem simulator related
void set_modem_simulator_ports(const std::string& modem_simulator_ports);
void set_enable_modem_netsim(bool enable);
void set_virtual_disk_paths(const std::vector<std::string>& disk_paths);
void set_webrtc_device_id(const std::string& id);
void set_start_rootcanal(bool start);
Expand Down
Loading
Loading