Add network interface for wifi when running with qemu

Bug: 78245952
Test: run on gce
Change-Id: I9d38736a9de6e30d20970f48051e8d384da11b45
Merged-In: I9d38736a9de6e30d20970f48051e8d384da11b45
(cherry picked from commit 029dc0e6cd8006a3dfa5f3220cc3033aa71b318c)
diff --git a/host/commands/launch/main.cc b/host/commands/launch/main.cc
index 264c37b..3b85ff2 100644
--- a/host/commands/launch/main.cc
+++ b/host/commands/launch/main.cc
@@ -136,10 +136,13 @@
 DEFINE_string(wifi_relay_binary,
               vsoc::DefaultHostArtifactsPath("bin/wifi_relay"),
               "Location of the wifi_relay binary.");
-std::string g_default_wifi_interface{GetPerInstanceDefault("cvd-wifi-")};
-DEFINE_string(wifi_interface, g_default_wifi_interface.c_str(),
+DEFINE_string(wifi_interface,
+              vsoc::HostSupportsQemuCli() ? GetPerInstanceDefault("cvd-wbr-")
+                                          : GetPerInstanceDefault("cvd-wifi-"),
               "Network interface to use for wifi");
-DEFINE_string(wifi_tap_name, GetPerInstanceDefault("awifi"),
+DEFINE_string(wifi_tap_name,
+              vsoc::HostSupportsQemuCli() ? GetPerInstanceDefault("cvd-wtap-")
+                                          : GetPerInstanceDefault("awifi"),
               "The name of the tap interface to use for wifi");
 // TODO(b/72969289) This should be generated
 DEFINE_string(dtb, vsoc::DefaultHostArtifactsPath("config/cuttlefish.dtb"),
diff --git a/host/libs/vm_manager/cf_qemu.sh b/host/libs/vm_manager/cf_qemu.sh
index ba45ffa..513f51c 100644
--- a/host/libs/vm_manager/cf_qemu.sh
+++ b/host/libs/vm_manager/cf_qemu.sh
@@ -28,6 +28,7 @@
 default_uuid="699acfc4-c8c4-11e7-882b-5065f31dc1${CUTTLEFISH_INSTANCE}"
 default_dir="${HOME}/runfiles"
 default_mobile_tap_name="cvd-mtap-${CUTTLEFISH_INSTANCE}"
+default_wifi_tap_name="cvd-wtap-${CUTTLEFISH_INSTANCE}"
 
 if [[ -z "${ivshmem_vector_count}" ]]; then
     echo "The required ivshmem_vector_count environment variable is not set" >&2
@@ -54,26 +55,28 @@
     -append "${kernel_args:-"loop.max_part=7 console=ttyS0 androidboot.console=ttyS1 androidboot.hardware=vsoc enforcing=0 audit=1 androidboot.selinux=permissive mac80211_hwsim.radios=0 security=selinux buildvariant=userdebug  androidboot.serialno=CUTTLEFISHCVD01 androidboot.lcd_density=160"}"
     -dtb "${dtb_path:-${HOME}/config/cuttlefish.dtb}"
     -device "piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2"
-    -device "virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x3"
+    -device "virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x4"
     -drive "file=${system_image_path:-${HOME}/system.img},format=raw,if=none,id=drive-virtio-disk0,aio=threads"
-    -device "virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1"
+    -device "virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1"
     -drive "file=${data_image_path:-${HOME}/userdata.img},format=raw,if=none,id=drive-virtio-disk1,aio=threads"
-    -device "virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk1,id=virtio-disk1"
+    -device "virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk1,id=virtio-disk1"
     -drive "file=${cache_image_path:-${HOME}/cache.img},format=raw,if=none,id=drive-virtio-disk2,aio=threads"
-    -device "virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk2,id=virtio-disk2"
+    -device "virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=drive-virtio-disk2,id=virtio-disk2"
     -drive "file=${vendor_image_path:-${HOME}/vendor.img},format=raw,if=none,id=drive-virtio-disk3,aio=threads"
-    -device "virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=drive-virtio-disk3,id=virtio-disk3"
-    -netdev "tap,id=hostnet0,ifname=${mobile_tap_name:-${default_mobile_tap_name}},script=no,downscript=no"
+    -device "virtio-blk-pci,scsi=off,bus=pci.0,addr=0x8,drive=drive-virtio-disk3,id=virtio-disk3"
+    -netdev "tap,id=hostnet0,ifname=${wifi_tap_name:-${default_wifi_tap_name}},script=no,downscript=no"
     -device "virtio-net-pci,netdev=hostnet0,id=net0,bus=pci.0,addr=0x2"
+    -netdev "tap,id=hostnet1,ifname=${mobile_tap_name:-${default_mobile_tap_name}},script=no,downscript=no"
+    -device "virtio-net-pci,netdev=hostnet1,id=net1,bus=pci.0,addr=0x3"
     -chardev "socket,id=charserial0,path=${kernel_log_socket_name:-${default_dir}/kernel-log}"
     -device "isa-serial,chardev=charserial0,id=serial0"
     -chardev "socket,id=charserial1,path=${console_path:-${default_dir}/console},server,nowait"
     -device "isa-serial,chardev=charserial1,id=serial1"
     -chardev "file,id=charchannel0,path=${logcat_path:-${default_dir}/logcat},append=on"
     -device "virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=cf-logcat"
-    -device "virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x8"
+    -device "virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x9"
     -object "rng-random,id=objrng0,filename=/dev/urandom"
-    -device "virtio-rng-pci,rng=objrng0,id=rng0,max-bytes=1024,period=2000,bus=pci.0,addr=0x9"
+    -device "virtio-rng-pci,rng=objrng0,id=rng0,max-bytes=1024,period=2000,bus=pci.0,addr=0xa"
     -chardev "socket,path=${ivshmem_qemu_socket_path:-${default_dir}/ivshmem_socket_qemu},id=ivsocket"
     -device "ivshmem-doorbell,chardev=ivsocket,vectors=${ivshmem_vector_count}"
     -cpu host
diff --git a/host/libs/vm_manager/qemu_manager.cpp b/host/libs/vm_manager/qemu_manager.cpp
index a12bc61..6ee628b 100644
--- a/host/libs/vm_manager/qemu_manager.cpp
+++ b/host/libs/vm_manager/qemu_manager.cpp
@@ -74,6 +74,7 @@
   qemu_envp.push_back("data_image_path=" + config->data_image_path());
   qemu_envp.push_back("cache_image_path=" + config->cache_image_path());
   qemu_envp.push_back("vendor_image_path=" + config->vendor_image_path());
+  qemu_envp.push_back("wifi_tap_name=" + config->wifi_tap_name());
   qemu_envp.push_back("mobile_tap_name=" + config->mobile_tap_name());
   qemu_envp.push_back("kernel_log_socket_name=" +
                       config->kernel_log_socket_name());