Allocate a virtio bridge in the host for wifi.

Test: Apply kernel change, crun ..., enable wifi.
Bug: 78245952
Change-Id: If3b9ddf5d4753573a852a69e0bb08f23769f2025
Merged-In: If3b9ddf5d4753573a852a69e0bb08f23769f2025
(cherry picked from commit 975175ab791a6dc040e07e9a54f07017f54b923e)
diff --git a/host/commands/launch/main.cc b/host/commands/launch/main.cc
index 7e45b47..d72280e 100644
--- a/host/commands/launch/main.cc
+++ b/host/commands/launch/main.cc
@@ -148,6 +148,8 @@
 std::string g_default_wifi_interface{GetPerInstanceDefault("cvd-wifi-")};
 DEFINE_string(wifi_interface, g_default_wifi_interface.c_str(),
               "Network interface to use for wifi");
+DEFINE_string(wifi_tap_name, GetPerInstanceDefault("awifi"),
+              "The name of the tap interface to use for wifi");
 // TODO(b/72969289) This should be generated
 DEFINE_string(dtb, DefaultHostArtifactsPath("config/cuttlefish.dtb"),
               "Path to the cuttlefish.dtb file");
@@ -536,6 +538,9 @@
   config->set_mobile_bridge_name(FLAGS_mobile_interface);
   config->set_mobile_tap_name(FLAGS_mobile_tap_name);
 
+  config->set_wifi_bridge_name(FLAGS_wifi_interface);
+  config->set_wifi_tap_name(FLAGS_wifi_tap_name);
+
   config->set_wifi_guest_mac_addr(FLAGS_guest_mac_address);
   config->set_wifi_host_mac_addr(FLAGS_host_mac_address);
 
diff --git a/host/libs/config/cuttlefish_config.cpp b/host/libs/config/cuttlefish_config.cpp
index ea0d5db..178ff0f 100644
--- a/host/libs/config/cuttlefish_config.cpp
+++ b/host/libs/config/cuttlefish_config.cpp
@@ -99,6 +99,8 @@
 
 const char* kMobileBridgeName = "mobile_bridge_name";
 const char* kMobileTapName = "mobile_tap_name";
+const char* kWifiBridgeName = "wifi_bridge_name";
+const char* kWifiTapName = "wifi_tap_name";
 const char* kWifiGuestMacAddr = "wifi_guest_mac_addr";
 const char* kWifiHostMacAddr = "wifi_host_mac_addr";
 const char* kEntropySource = "entropy_source";
@@ -295,6 +297,14 @@
   (*dictionary_)[kMobileBridgeName] = mobile_bridge_name;
 }
 
+std::string CuttlefishConfig::wifi_bridge_name() const {
+  return (*dictionary_)[kWifiBridgeName].asString();
+}
+void CuttlefishConfig::set_wifi_bridge_name(
+    const std::string& wifi_bridge_name) {
+  (*dictionary_)[kWifiBridgeName] = wifi_bridge_name;
+}
+
 std::string CuttlefishConfig::wifi_guest_mac_addr() const {
   return (*dictionary_)[kWifiGuestMacAddr].asString();
 }
@@ -318,6 +328,13 @@
   (*dictionary_)[kMobileTapName] = mobile_tap_name;
 }
 
+std::string CuttlefishConfig::wifi_tap_name() const {
+  return (*dictionary_)[kWifiTapName].asString();
+}
+void CuttlefishConfig::set_wifi_tap_name(const std::string& wifi_tap_name) {
+  (*dictionary_)[kWifiTapName] = wifi_tap_name;
+}
+
 std::string CuttlefishConfig::entropy_source() const {
   return (*dictionary_)[kEntropySource].asString();
 }
diff --git a/host/libs/config/cuttlefish_config.h b/host/libs/config/cuttlefish_config.h
index 9c1f53f..4451653 100644
--- a/host/libs/config/cuttlefish_config.h
+++ b/host/libs/config/cuttlefish_config.h
@@ -136,6 +136,12 @@
   std::string mobile_tap_name() const;
   void set_mobile_tap_name(const std::string& mobile_tap_name);
 
+  std::string wifi_bridge_name() const;
+  void set_wifi_bridge_name(const std::string& wifi_bridge_name);
+
+  std::string wifi_tap_name() const;
+  void set_wifi_tap_name(const std::string& wifi_tap_name);
+
   std::string wifi_guest_mac_addr() const;
   void set_wifi_guest_mac_addr(const std::string& wifi_guest_mac_addr);
 
diff --git a/host/libs/vm_manager/libvirt_manager.cpp b/host/libs/vm_manager/libvirt_manager.cpp
index a1c830d..bebe12d 100644
--- a/host/libs/vm_manager/libvirt_manager.cpp
+++ b/host/libs/vm_manager/libvirt_manager.cpp
@@ -316,6 +316,8 @@
 
   ConfigureNIC(devices, config->mobile_tap_name(), config->mobile_bridge_name(),
                vsoc::GetInstance(), 1);
+  ConfigureNIC(devices, config->wifi_tap_name(), config->wifi_bridge_name(),
+	       vsoc::GetInstance(), 2);
   ConfigureHWRNG(devices, config->entropy_source());
 
   xmlChar* tgt;