1*cf78ab8cSAndroid Build Coastguard Worker // Copyright 2023 Google LLC 2*cf78ab8cSAndroid Build Coastguard Worker // 3*cf78ab8cSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); 4*cf78ab8cSAndroid Build Coastguard Worker // you may not use this file except in compliance with the License. 5*cf78ab8cSAndroid Build Coastguard Worker // You may obtain a copy of the License at 6*cf78ab8cSAndroid Build Coastguard Worker // 7*cf78ab8cSAndroid Build Coastguard Worker // https://www.apache.org/licenses/LICENSE-2.0 8*cf78ab8cSAndroid Build Coastguard Worker // 9*cf78ab8cSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 10*cf78ab8cSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, 11*cf78ab8cSAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*cf78ab8cSAndroid Build Coastguard Worker // See the License for the specific language governing permissions and 13*cf78ab8cSAndroid Build Coastguard Worker // limitations under the License. 14*cf78ab8cSAndroid Build Coastguard Worker 15*cf78ab8cSAndroid Build Coastguard Worker use clap::Parser; 16*cf78ab8cSAndroid Build Coastguard Worker 17*cf78ab8cSAndroid Build Coastguard Worker #[derive(Debug, Parser)] 18*cf78ab8cSAndroid Build Coastguard Worker pub struct NetsimdArgs { 19*cf78ab8cSAndroid Build Coastguard Worker /// File descriptor start up info proto 20*cf78ab8cSAndroid Build Coastguard Worker #[arg(short = 's', long, alias = "fd_startup_str")] 21*cf78ab8cSAndroid Build Coastguard Worker pub fd_startup_str: Option<String>, 22*cf78ab8cSAndroid Build Coastguard Worker 23*cf78ab8cSAndroid Build Coastguard Worker /// Disable grpc server for CLI 24*cf78ab8cSAndroid Build Coastguard Worker #[arg(long, alias = "no_cli_ui")] 25*cf78ab8cSAndroid Build Coastguard Worker pub no_cli_ui: bool, 26*cf78ab8cSAndroid Build Coastguard Worker 27*cf78ab8cSAndroid Build Coastguard Worker /// Disable web server 28*cf78ab8cSAndroid Build Coastguard Worker #[arg(long, alias = "no_web_ui")] 29*cf78ab8cSAndroid Build Coastguard Worker pub no_web_ui: bool, 30*cf78ab8cSAndroid Build Coastguard Worker 31*cf78ab8cSAndroid Build Coastguard Worker /// Enable packet capture 32*cf78ab8cSAndroid Build Coastguard Worker #[arg(long)] 33*cf78ab8cSAndroid Build Coastguard Worker pub pcap: bool, 34*cf78ab8cSAndroid Build Coastguard Worker 35*cf78ab8cSAndroid Build Coastguard Worker /// Disable Address Reuse for test model 36*cf78ab8cSAndroid Build Coastguard Worker #[arg(long, alias = "disable_address_reuse")] 37*cf78ab8cSAndroid Build Coastguard Worker pub disable_address_reuse: bool, 38*cf78ab8cSAndroid Build Coastguard Worker 39*cf78ab8cSAndroid Build Coastguard Worker /// Set custom hci port 40*cf78ab8cSAndroid Build Coastguard Worker #[arg(long, alias = "hci_port")] 41*cf78ab8cSAndroid Build Coastguard Worker pub hci_port: Option<u32>, 42*cf78ab8cSAndroid Build Coastguard Worker 43*cf78ab8cSAndroid Build Coastguard Worker /// Enables connector mode to forward packets to another instance. 44*cf78ab8cSAndroid Build Coastguard Worker #[arg(short, long, alias = "connector_instance", visible_alias = "connector_instance_num")] 45*cf78ab8cSAndroid Build Coastguard Worker pub connector_instance: Option<u16>, 46*cf78ab8cSAndroid Build Coastguard Worker 47*cf78ab8cSAndroid Build Coastguard Worker /// Netsimd instance number 48*cf78ab8cSAndroid Build Coastguard Worker #[arg(short, long, visible_alias = "instance_num")] 49*cf78ab8cSAndroid Build Coastguard Worker pub instance: Option<u16>, 50*cf78ab8cSAndroid Build Coastguard Worker 51*cf78ab8cSAndroid Build Coastguard Worker /// Set whether log messages go to stderr instead of logfiles 52*cf78ab8cSAndroid Build Coastguard Worker #[arg(short, long)] 53*cf78ab8cSAndroid Build Coastguard Worker pub logtostderr: bool, 54*cf78ab8cSAndroid Build Coastguard Worker 55*cf78ab8cSAndroid Build Coastguard Worker /// Enable development mode. This will include additional features 56*cf78ab8cSAndroid Build Coastguard Worker #[arg(short, long)] 57*cf78ab8cSAndroid Build Coastguard Worker pub dev: bool, 58*cf78ab8cSAndroid Build Coastguard Worker 59*cf78ab8cSAndroid Build Coastguard Worker /// Forwards mDNS from the host to the guest, allowing emulator to discover mDNS services running on the host. 60*cf78ab8cSAndroid Build Coastguard Worker /// 61*cf78ab8cSAndroid Build Coastguard Worker /// # Limitations 62*cf78ab8cSAndroid Build Coastguard Worker /// * Currently only supports a single emulator. 63*cf78ab8cSAndroid Build Coastguard Worker /// * May impact Wi-Fi connectivity between emulators. 64*cf78ab8cSAndroid Build Coastguard Worker #[arg(long, verbatim_doc_comment)] 65*cf78ab8cSAndroid Build Coastguard Worker pub forward_host_mdns: bool, 66*cf78ab8cSAndroid Build Coastguard Worker 67*cf78ab8cSAndroid Build Coastguard Worker /// Set the vsock port number to be listened by the frontend grpc server 68*cf78ab8cSAndroid Build Coastguard Worker #[arg(short, long)] 69*cf78ab8cSAndroid Build Coastguard Worker pub vsock: Option<u16>, 70*cf78ab8cSAndroid Build Coastguard Worker 71*cf78ab8cSAndroid Build Coastguard Worker /// The name of a config file to load 72*cf78ab8cSAndroid Build Coastguard Worker #[arg(long)] 73*cf78ab8cSAndroid Build Coastguard Worker pub config: Option<String>, 74*cf78ab8cSAndroid Build Coastguard Worker 75*cf78ab8cSAndroid Build Coastguard Worker /// Comma separated list of host DNS servers 76*cf78ab8cSAndroid Build Coastguard Worker #[arg(long)] 77*cf78ab8cSAndroid Build Coastguard Worker pub host_dns: Option<String>, 78*cf78ab8cSAndroid Build Coastguard Worker 79*cf78ab8cSAndroid Build Coastguard Worker /// Redirect all TCP connections through the specified HTTP/HTTPS proxy. 80*cf78ab8cSAndroid Build Coastguard Worker /// Can be one of the following: 81*cf78ab8cSAndroid Build Coastguard Worker /// http://<server>:<port> 82*cf78ab8cSAndroid Build Coastguard Worker /// http://<username>:<password>@<server>:<port> 83*cf78ab8cSAndroid Build Coastguard Worker /// (the 'http://' prefix can be omitted) 84*cf78ab8cSAndroid Build Coastguard Worker /// WARNING: This flag is still working in progress. 85*cf78ab8cSAndroid Build Coastguard Worker #[arg(long, verbatim_doc_comment)] 86*cf78ab8cSAndroid Build Coastguard Worker #[cfg_attr(not(feature = "cuttlefish"), arg(env = "http_proxy"))] 87*cf78ab8cSAndroid Build Coastguard Worker pub http_proxy: Option<String>, 88*cf78ab8cSAndroid Build Coastguard Worker 89*cf78ab8cSAndroid Build Coastguard Worker // Use TAP interface instead of libslirp for Wi-Fi 90*cf78ab8cSAndroid Build Coastguard Worker /// WARNING: This flag is still working in progress. 91*cf78ab8cSAndroid Build Coastguard Worker #[arg(long)] 92*cf78ab8cSAndroid Build Coastguard Worker pub wifi_tap: Option<String>, 93*cf78ab8cSAndroid Build Coastguard Worker 94*cf78ab8cSAndroid Build Coastguard Worker /// Start with test beacons 95*cf78ab8cSAndroid Build Coastguard Worker #[arg(long, alias = "test_beacons", overrides_with("no_test_beacons"))] 96*cf78ab8cSAndroid Build Coastguard Worker pub test_beacons: bool, 97*cf78ab8cSAndroid Build Coastguard Worker 98*cf78ab8cSAndroid Build Coastguard Worker /// Do not start with test beacons 99*cf78ab8cSAndroid Build Coastguard Worker #[arg(long, alias = "no_test_beacons", overrides_with("test_beacons"))] 100*cf78ab8cSAndroid Build Coastguard Worker pub no_test_beacons: bool, 101*cf78ab8cSAndroid Build Coastguard Worker 102*cf78ab8cSAndroid Build Coastguard Worker /// Disable netsimd from shutting down automatically. 103*cf78ab8cSAndroid Build Coastguard Worker /// WARNING: This flag is for development purpose. netsimd will not shutdown without SIGKILL. 104*cf78ab8cSAndroid Build Coastguard Worker #[arg(long, alias = "no_shutdown")] 105*cf78ab8cSAndroid Build Coastguard Worker pub no_shutdown: bool, 106*cf78ab8cSAndroid Build Coastguard Worker 107*cf78ab8cSAndroid Build Coastguard Worker /// Entering Verbose mode 108*cf78ab8cSAndroid Build Coastguard Worker #[arg(short = 'v', long)] 109*cf78ab8cSAndroid Build Coastguard Worker pub verbose: bool, 110*cf78ab8cSAndroid Build Coastguard Worker 111*cf78ab8cSAndroid Build Coastguard Worker /// Print Netsimd version information 112*cf78ab8cSAndroid Build Coastguard Worker #[arg(long)] 113*cf78ab8cSAndroid Build Coastguard Worker pub version: bool, 114*cf78ab8cSAndroid Build Coastguard Worker } 115