Re: [PATCH v4] automatic create tap device with network type ethernet

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 08.12.2014 11:48, Vasiliy Tolstov wrote:
If user not specify network type ethernet, assume that user
needs simple tap device created with libvirt.
This patch does not need to run external script to create tap device or
add root to qemu process. Also libvirt runs script after device creating,
if user provide it.

Difference with v3 that script runs only if it provided.

Signed-off-by: Vasiliy Tolstov <v.tolstov@xxxxxxxxx>
---
  src/qemu/qemu_command.c | 119 +++++++++++++++++++++++++++++++++++-------------
  src/qemu/qemu_hotplug.c |  10 +---
  src/qemu/qemu_process.c |   4 ++
  3 files changed, 93 insertions(+), 40 deletions(-)

diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 1831323..78614d5 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -276,6 +276,40 @@ static int
qemuCreateInBridgePortWithHelper(virQEMUDriverConfigPtr cfg,
      return *tapfd < 0 ? -1 : 0;
  }

+/**
+ * qemuExecuteEthernetScript:
+ * @ifname: the interface name
+ * @script: the script name
+
+ * This function executes script for new tap device created by libvirt.
+ *
+ * Returns 0 in case of success or -1 on failure
+ */
+static int qemuExecuteEthernetScript(const char *ifname, const char *script)
+{
+    virCommandPtr cmd;
+    int ret;
+
+    cmd = virCommandNew(script);
+    virCommandAddArgFormat(cmd, "%s", ifname);
+    virCommandClearCaps(cmd);
+#ifdef CAP_NET_ADMIN
+    virCommandAllowCap(cmd, CAP_NET_ADMIN);
+#endif
+    virCommandAddEnvPassCommon(cmd);
+
+    if (virCommandRun(cmd, NULL) < 0) {
+      ret = -1;
+    } else {
+      ret = 0;
+    }
+
+ cleanup:
+    virCommandFree(cmd);
+    return ret;
+}
+
+
  int
  qemuNetworkIfaceConnect(virDomainDefPtr def,
                          virConnectPtr conn,
@@ -313,7 +347,7 @@ qemuNetworkIfaceConnect(virDomainDefPtr def,
      } else if (actualType == VIR_DOMAIN_NET_TYPE_BRIDGE) {
          if (VIR_STRDUP(brname, virDomainNetGetActualBridgeName(net)) < 0)
              return ret;
-    } else {
+    } else if (actualType != VIR_DOMAIN_NET_TYPE_ETHERNET) {
          virReportError(VIR_ERR_INTERNAL_ERROR,
                         _("Network type %d is not supported"),
                         virDomainNetGetActualType(net));
@@ -335,30 +369,44 @@ qemuNetworkIfaceConnect(virDomainDefPtr def,
          tap_create_flags |= VIR_NETDEV_TAP_CREATE_VNET_HDR;
      }

-    if (cfg->privileged) {
-        if (virNetDevTapCreateInBridgePort(brname, &net->ifname, &net->mac,
-                                           def->uuid, tunpath, tapfd,
*tapfdSize,
-
virDomainNetGetActualVirtPortProfile(net),
-                                           virDomainNetGetActualVlan(net),
-                                           tap_create_flags) < 0) {
+    if (actualType == VIR_DOMAIN_NET_TYPE_ETHERNET) {
+        if (virNetDevTapCreate(&net->ifname, tunpath, tapfd, *tapfdSize,
+                               tap_create_flags) < 0) {

It seems like your MTA mangled the patch. Moreover, how is this different to v3 that I've sent?

Michal

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]