Skip to content
Merged
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 @@ -131,8 +131,9 @@ DEFINE_vec(
pause_in_bootloader, CF_DEFAULTS_PAUSE_IN_BOOTLOADER?"true":"false",
"Stop the bootflow in u-boot. You can continue the boot by connecting "
"to the device console and typing in \"boot\".");
DEFINE_bool(enable_host_bluetooth, CF_DEFAULTS_ENABLE_HOST_BLUETOOTH,
"Enable the rootcanal which is Bluetooth emulator in the host.");
DEFINE_vec(enable_host_bluetooth,
fmt::format("{}", CF_DEFAULTS_ENABLE_HOST_BLUETOOTH),
"Enable the rootcanal which is Bluetooth emulator in the host.");
DEFINE_int32(
rootcanal_instance_num, CF_DEFAULTS_ROOTCANAL_INSTANCE_NUM,
"If it is greater than 0, use an existing rootcanal instance which is "
Expand All @@ -156,13 +157,13 @@ DEFINE_int32(
"If it is greater than 0, use an existing pica instance which is "
"launched from cuttlefish instance "
"with pica_instance_num. Else, launch a new pica instance");
DEFINE_bool(netsim, CF_DEFAULTS_NETSIM,
"[Experimental] Connect all radios to netsim.");

DEFINE_bool(netsim_bt, CF_DEFAULTS_NETSIM_BT,
"Connect Bluetooth radio to netsim.");
DEFINE_bool(netsim_uwb, CF_DEFAULTS_NETSIM_UWB,
"[Experimental] Connect Uwb radio to netsim.");
DEFINE_vec(netsim, fmt::format("{}", CF_DEFAULTS_NETSIM),
"[Experimental] Connect all radios to netsim.");
DEFINE_vec(netsim_bt, fmt::format("{}", CF_DEFAULTS_NETSIM_BT),
"Connect Bluetooth radio to netsim.");
DEFINE_vec(netsim_uwb, fmt::format("{}", CF_DEFAULTS_NETSIM_UWB),
"[Experimental] Connect Uwb radio to netsim.");
DEFINE_string(netsim_args, CF_DEFAULTS_NETSIM_ARGS,
"Space-separated list of netsim args.");

Expand Down Expand Up @@ -420,7 +421,8 @@ DEFINE_vec(crosvm_v4l2_proxy, CF_DEFAULTS_CROSVM_V4L2_PROXY,
DEFINE_vec(use_pmem, "true",
"Make this flag false to disable pmem with crosvm");

DEFINE_bool(enable_wifi, true, "Enables the guest WIFI. Mainly for Minidroid");
DEFINE_vec(enable_wifi, fmt::format("{}", CF_DEFAULTS_ENABLE_WIFI),
"Enables the guest WIFI. Mainly for Minidroid");

DEFINE_vec(device_external_network, CF_DEFAULTS_DEVICE_EXTERNAL_NETWORK,
"The mechanism to connect to the public internet.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,18 +62,18 @@ DECLARE_vec(use_allocd);
DECLARE_vec(use_cvdalloc);
DECLARE_vec(enable_minimal_mode);
DECLARE_vec(pause_in_bootloader);
DECLARE_bool(enable_host_bluetooth);
DECLARE_vec(enable_host_bluetooth);
DECLARE_int32(rootcanal_instance_num);
DECLARE_string(rootcanal_args);
DECLARE_bool(enable_host_nfc);
DECLARE_int32(casimir_instance_num);
DECLARE_string(casimir_args);
DECLARE_bool(enable_host_uwb);
DECLARE_int32(pica_instance_num);
DECLARE_bool(netsim);
DECLARE_vec(netsim);

DECLARE_bool(netsim_bt);
DECLARE_bool(netsim_uwb);
DECLARE_vec(netsim_bt);
DECLARE_vec(netsim_uwb);
DECLARE_string(netsim_args);

DECLARE_bool(enable_automotive_proxy);
Expand Down Expand Up @@ -192,7 +192,7 @@ DECLARE_vec(crosvm_v4l2_proxy);

DECLARE_vec(use_pmem);

DECLARE_bool(enable_wifi);
DECLARE_vec(enable_wifi);

DECLARE_vec(device_external_network);

Expand Down
95 changes: 64 additions & 31 deletions base/cvd/cuttlefish/host/commands/assemble_cvd/flags.cc
Original file line number Diff line number Diff line change
Expand Up @@ -411,33 +411,51 @@ Result<CuttlefishConfig> InitializeCuttlefishConfiguration(
tmp_config_obj.set_ap_rootfs_image(ap_rootfs_image);
tmp_config_obj.set_ap_kernel_image(FLAGS_ap_kernel_image);

// netsim flags allow all radios or selecting a specific radio
bool is_any_netsim = FLAGS_netsim || FLAGS_netsim_bt || FLAGS_netsim_uwb;
bool is_bt_netsim = FLAGS_netsim || FLAGS_netsim_bt;
bool is_uwb_netsim = FLAGS_netsim || FLAGS_netsim_uwb;

// crosvm should create fifos for Bluetooth
tmp_config_obj.set_enable_host_bluetooth(FLAGS_enable_host_bluetooth ||
is_bt_netsim);

// rootcanal and bt_connector should handle Bluetooth (instead of netsim)
tmp_config_obj.set_enable_host_bluetooth_connector(FLAGS_enable_host_bluetooth && !is_bt_netsim);

tmp_config_obj.set_enable_host_nfc(FLAGS_enable_host_nfc);
tmp_config_obj.set_enable_host_nfc_connector(FLAGS_enable_host_nfc);

// get flag default values and store into map
auto name_to_default_value = CurrentFlagsToDefaultValue();
// old flags but vectorized for multi-device instances
int32_t instances_size = instance_nums.size();

// netsim flags allow all radios or selecting a specific radio
std::vector<bool> netsim_all_radios_vec =
CF_EXPECT(GET_FLAG_BOOL_VALUE(netsim));
bool any_netsim_all_radios =
std::any_of(netsim_all_radios_vec.begin(), netsim_all_radios_vec.end(),
[](bool e) { return e; });
std::vector<bool> netsim_bt_vec = CF_EXPECT(GET_FLAG_BOOL_VALUE(netsim_bt));
bool any_netsim_bt = std::any_of(netsim_bt_vec.begin(), netsim_bt_vec.end(),
[](bool e) { return e; });
std::vector<bool> netsim_uwb_vec = CF_EXPECT(GET_FLAG_BOOL_VALUE(netsim_uwb));
bool any_netsim_uwb = std::any_of(
netsim_uwb_vec.begin(), netsim_uwb_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;

// These flags inform NetsimServer::ResultSetup which radios it owns.
if (is_bt_netsim) {
if (netsim_has_bt) {
tmp_config_obj.netsim_radio_enable(CuttlefishConfig::NetsimRadio::Bluetooth);
}
if (netsim_has_uwb) {
tmp_config_obj.netsim_radio_enable(CuttlefishConfig::NetsimRadio::Uwb);
}

bool any_not_netsim_bt = false;
bool any_not_netsim_uwb = false;
for (int32_t i = 0; i < instances_size; ++i) {
any_not_netsim_bt |= !netsim_all_radios_vec[i] && !netsim_bt_vec[i];
any_not_netsim_uwb |= !netsim_all_radios_vec[i] && !netsim_uwb_vec[i];
}

std::vector<bool> enable_host_bluetooth_vec =
CF_EXPECT(GET_FLAG_BOOL_VALUE(enable_host_bluetooth));

// end of vectorize ap_rootfs_image, ap_kernel_image, wmediumd_config

tmp_config_obj.set_enable_automotive_proxy(FLAGS_enable_automotive_proxy);

// get flag default values and store into map
auto name_to_default_value = CurrentFlagsToDefaultValue();
// old flags but vectorized for multi-device instances
int32_t instances_size = instance_nums.size();
std::vector<std::string> gnss_file_paths =
CF_EXPECT(GET_FLAG_STR_VALUE(gnss_file_path));
std::vector<std::string> fixed_location_file_paths =
Expand Down Expand Up @@ -642,15 +660,7 @@ Result<CuttlefishConfig> InitializeCuttlefishConfiguration(
if (FLAGS_pica_instance_num > 0) {
pica_instance_num = FLAGS_pica_instance_num - 1;
}
tmp_config_obj.set_enable_host_uwb(FLAGS_enable_host_uwb || is_uwb_netsim);

// netsim has its own connector for uwb
tmp_config_obj.set_enable_host_uwb_connector(FLAGS_enable_host_uwb &&
!is_uwb_netsim);

if (is_uwb_netsim) {
tmp_config_obj.netsim_radio_enable(CuttlefishConfig::NetsimRadio::Uwb);
}
tmp_config_obj.set_enable_host_uwb(FLAGS_enable_host_uwb || any_netsim_uwb);

tmp_config_obj.set_pica_uci_port(7000 + pica_instance_num);
LOG(DEBUG) << "launch pica: " << (FLAGS_pica_instance_num <= 0);
Expand Down Expand Up @@ -688,7 +698,11 @@ Result<CuttlefishConfig> InitializeCuttlefishConfiguration(

mutable_env_config.set_group_uuid(std::time(0));

mutable_env_config.set_enable_wifi(FLAGS_enable_wifi);
std::vector<bool> enable_wifi_vec =
CF_EXPECT(GET_FLAG_BOOL_VALUE(enable_wifi));
bool enable_wifi = std::any_of(enable_wifi_vec.begin(), enable_wifi_vec.end(),
[](bool e) { return e; });
mutable_env_config.set_enable_wifi(enable_wifi);

mutable_env_config.set_vhost_user_mac80211_hwsim(
FLAGS_vhost_user_mac80211_hwsim);
Expand All @@ -699,7 +713,7 @@ Result<CuttlefishConfig> InitializeCuttlefishConfiguration(
// vhost_user_mac80211_hwsim is not specified.
const bool start_wmediumd = tmp_config_obj.virtio_mac80211_hwsim() &&
FLAGS_vhost_user_mac80211_hwsim.empty() &&
FLAGS_enable_wifi;
enable_wifi;
if (start_wmediumd) {
auto vhost_user_socket_path =
env_config.PerEnvironmentUdsPath("vhost_user_mac80211");
Expand Down Expand Up @@ -958,6 +972,7 @@ Result<CuttlefishConfig> InitializeCuttlefishConfiguration(
instance.set_gem5_checkpoint_dir(gem5_checkpoint_dir_vec[instance_index]);
instance.set_data_policy(data_policy_vec[instance_index]);

instance.set_has_wifi_card(enable_wifi_vec[instance_index]);
instance.set_mobile_bridge_name(StrForInstance("cvd-mbr-", num));
instance.set_wifi_bridge_name("cvd-wbr");
instance.set_ethernet_bridge_name("cvd-ebr");
Expand All @@ -977,6 +992,23 @@ Result<CuttlefishConfig> InitializeCuttlefishConfiguration(

instance.set_ethernet_tap_name(iface_config.ethernet_tap.name);

// 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);
// rootcanal and bt_connector should handle Bluetooth (instead of netsim)
instance.set_enable_host_bluetooth_connector(enable_host_bluetooth &&
!is_bt_netsim);

bool is_uwb_netsim = is_netsim_all || netsim_uwb_vec[instance_index];
// netsim has its own connector for uwb
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(FLAGS_uuid);

instance.set_environment_name(environment_name);
Expand Down Expand Up @@ -1161,12 +1193,13 @@ Result<CuttlefishConfig> InitializeCuttlefishConfiguration(
tmp_config_obj.set_sig_server_proxy_port(port);
instance.set_start_netsim(is_first_instance && is_any_netsim);

instance.set_start_rootcanal(is_first_instance && !is_bt_netsim &&
instance.set_start_rootcanal(is_first_instance && any_not_netsim_bt &&
(FLAGS_rootcanal_instance_num <= 0));

instance.set_start_casimir(is_first_instance && FLAGS_casimir_instance_num <= 0);
instance.set_start_casimir(is_first_instance &&
FLAGS_casimir_instance_num <= 0);

instance.set_start_pica(is_first_instance && !is_uwb_netsim &&
instance.set_start_pica(is_first_instance && any_not_netsim_uwb &&
FLAGS_pica_instance_num <= 0);
instance.set_start_vhal_proxy_server(
is_first_instance && enable_vhal_proxy_server &&
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@
#define CF_DEFAULTS_NETSIM_ARGS ""

// Wifi default parameters
#define CF_DEFAULTS_ENABLE_WIFI true
#define CF_DEFAULTS_AP_KERNEL_IMAGE CF_DEFAULTS_DYNAMIC_STRING
#define CF_DEFAULTS_AP_ROOTFS_IMAGE CF_DEFAULTS_DYNAMIC_STRING
#define CF_DEFAULTS_VHOST_NET false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ namespace cuttlefish {
Result<std::optional<MonitorCommand>> BluetoothConnector(
const CuttlefishConfig& config,
const CuttlefishConfig::InstanceSpecific& instance) {
if (!config.enable_host_bluetooth_connector()) {
if (!instance.enable_host_bluetooth_connector()) {
return {};
}
std::vector<std::string> fifo_paths = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,8 @@ class RootCanal : public CommandSource {
// SetupFeature
std::string Name() const override { return "RootCanal"; }
bool Enabled() const override {
return config_.enable_host_bluetooth_connector() && instance_.start_rootcanal();
return instance_.enable_host_bluetooth_connector() &&
instance_.start_rootcanal();
}

private:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ namespace cuttlefish {
Result<std::optional<MonitorCommand>> UwbConnector(
const CuttlefishConfig& config,
const CuttlefishConfig::InstanceSpecific& instance) {
if (!config.enable_host_uwb_connector()) {
if (!instance.enable_host_uwb_connector()) {
return {};
}
std::vector<std::string> fifo_paths = {
Expand Down
25 changes: 0 additions & 25 deletions base/cvd/cuttlefish/host/libs/config/cuttlefish_config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -195,14 +195,6 @@ bool CuttlefishConfig::enable_host_uwb() const {
return (*dictionary_)[kEnableHostUwb].asBool();
}

static constexpr char kEnableHostUwbConnector[] = "enable_host_uwb_connector";
void CuttlefishConfig::set_enable_host_uwb_connector(bool enable_host_uwb) {
(*dictionary_)[kEnableHostUwbConnector] = enable_host_uwb;
}
bool CuttlefishConfig::enable_host_uwb_connector() const {
return (*dictionary_)[kEnableHostUwbConnector].asBool();
}

static constexpr char kPicaUciPort[] = "pica_uci_port";
int CuttlefishConfig::pica_uci_port() const {
return (*dictionary_)[kPicaUciPort].asInt();
Expand All @@ -211,23 +203,6 @@ void CuttlefishConfig::set_pica_uci_port(int pica_uci_port) {
(*dictionary_)[kPicaUciPort] = pica_uci_port;
}

static constexpr char kEnableHostBluetooth[] = "enable_host_bluetooth";
void CuttlefishConfig::set_enable_host_bluetooth(bool enable_host_bluetooth) {
(*dictionary_)[kEnableHostBluetooth] = enable_host_bluetooth;
}
bool CuttlefishConfig::enable_host_bluetooth() const {
return (*dictionary_)[kEnableHostBluetooth].asBool();
}

static constexpr char kEnableHostBluetoothConnector[] =
"enable_host_bluetooth_connector";
void CuttlefishConfig::set_enable_host_bluetooth_connector(bool enable_host_bluetooth) {
(*dictionary_)[kEnableHostBluetoothConnector] = enable_host_bluetooth;
}
bool CuttlefishConfig::enable_host_bluetooth_connector() const {
return (*dictionary_)[kEnableHostBluetoothConnector].asBool();
}

static constexpr char kEnableAutomotiveProxy[] = "enable_automotive_proxy";
void CuttlefishConfig::set_enable_automotive_proxy(
bool enable_automotive_proxy) {
Expand Down
20 changes: 10 additions & 10 deletions base/cvd/cuttlefish/host/libs/config/cuttlefish_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,23 +122,13 @@ class CuttlefishConfig {
void set_enable_host_uwb(bool enable_host_uwb);
bool enable_host_uwb() const;

void set_enable_host_uwb_connector(bool enable_host_uwb);
bool enable_host_uwb_connector() const;

void set_enable_host_bluetooth(bool enable_host_bluetooth);
bool enable_host_bluetooth() const;

void set_enable_automotive_proxy(bool enable_automotive_proxy);
bool enable_automotive_proxy() const;

// The vsock port used by vhal_proxy_server
void set_vhal_proxy_server_port(int port);
int vhal_proxy_server_port() const;

// Bluetooth is enabled by bt_connector and rootcanal
void set_enable_host_bluetooth_connector(bool enable_host_bluetooth);
bool enable_host_bluetooth_connector() const;

void set_enable_host_nfc(bool enable_host_nfc);
bool enable_host_nfc() const;

Expand Down Expand Up @@ -314,6 +304,7 @@ class CuttlefishConfig {
std::string mobile_bridge_name() const;
std::string mobile_tap_name() const;
std::string mobile_mac() const;
bool has_wifi_card() const;
std::string wifi_bridge_name() const;
std::string wifi_tap_name() const;
std::string wifi_mac() const;
Expand All @@ -322,6 +313,11 @@ class CuttlefishConfig {
std::string ethernet_bridge_name() const;
std::string ethernet_mac() const;
std::string ethernet_ipv6() const;
bool has_bluetooth() const;
// Bluetooth is enabled by bt_connector and rootcanal
bool enable_host_bluetooth_connector() const;
bool enable_host_uwb_connector() const;

uint32_t session_id() const;
bool use_allocd() const;
bool use_cvdalloc() const;
Expand Down Expand Up @@ -664,6 +660,7 @@ class CuttlefishConfig {
void set_mobile_bridge_name(const std::string& mobile_bridge_name);
void set_mobile_tap_name(const std::string& mobile_tap_name);
void set_mobile_mac(const std::string& mac);
void set_has_wifi_card(bool has_wifi_card);
void set_wifi_bridge_name(const std::string& wifi_bridge_name);
void set_wifi_tap_name(const std::string& wifi_tap_name);
void set_wifi_mac(const std::string& mac);
Expand All @@ -672,6 +669,9 @@ class CuttlefishConfig {
void set_ethernet_bridge_name(const std::string& set_ethernet_bridge_name);
void set_ethernet_mac(const std::string& mac);
void set_ethernet_ipv6(const std::string& ip);
void set_has_bluetooth(bool has_bluetooth);
void set_enable_host_bluetooth_connector(bool enable_host_bluetooth);
void set_enable_host_uwb_connector(bool enable_host_uwb);
void set_session_id(uint32_t session_id);
void set_use_allocd(bool use_allocd);
void set_use_cvdalloc(bool use_cvdalloc);
Expand Down
Loading
Loading