<p dir="ltr">V3 have unconditional running script , v4 check for net->script before running script</p>
<div class="gmail_quote">09 дек. 2014 г. 11:47 пользователь "Michal Privoznik" <<a href="mailto:mprivozn@redhat.com">mprivozn@redhat.com</a>> написал:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 08.12.2014 11:48, Vasiliy Tolstov wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
If user not specify network type ethernet, assume that user<br>
needs simple tap device created with libvirt.<br>
This patch does not need to run external script to create tap device or<br>
add root to qemu process. Also libvirt runs script after device creating,<br>
if user provide it.<br>
<br>
Difference with v3 that script runs only if it provided.<br>
<br>
Signed-off-by: Vasiliy Tolstov <<a href="mailto:v.tolstov@selfip.ru" target="_blank">v.tolstov@selfip.ru</a>><br>
---<br>
  src/qemu/qemu_command.c | 119 ++++++++++++++++++++++++++++++<u></u>+++++-------------<br>
  src/qemu/qemu_hotplug.c |  10 +---<br>
  src/qemu/qemu_process.c |   4 ++<br>
  3 files changed, 93 insertions(+), 40 deletions(-)<br>
<br>
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c<br>
index 1831323..78614d5 100644<br>
--- a/src/qemu/qemu_command.c<br>
+++ b/src/qemu/qemu_command.c<br>
@@ -276,6 +276,40 @@ static int<br>
qemuCreateInBridgePortWithHelp<u></u>er(virQEMUDriverConfigPtr cfg,<br>
      return *tapfd < 0 ? -1 : 0;<br>
  }<br>
<br>
+/**<br>
+ * qemuExecuteEthernetScript:<br>
+ * @ifname: the interface name<br>
+ * @script: the script name<br>
+<br>
+ * This function executes script for new tap device created by libvirt.<br>
+ *<br>
+ * Returns 0 in case of success or -1 on failure<br>
+ */<br>
+static int qemuExecuteEthernetScript(<u></u>const char *ifname, const char *script)<br>
+{<br>
+    virCommandPtr cmd;<br>
+    int ret;<br>
+<br>
+    cmd = virCommandNew(script);<br>
+    virCommandAddArgFormat(cmd, "%s", ifname);<br>
+    virCommandClearCaps(cmd);<br>
+#ifdef CAP_NET_ADMIN<br>
+    virCommandAllowCap(cmd, CAP_NET_ADMIN);<br>
+#endif<br>
+    virCommandAddEnvPassCommon(<u></u>cmd);<br>
+<br>
+    if (virCommandRun(cmd, NULL) < 0) {<br>
+      ret = -1;<br>
+    } else {<br>
+      ret = 0;<br>
+    }<br>
+<br>
+ cleanup:<br>
+    virCommandFree(cmd);<br>
+    return ret;<br>
+}<br>
+<br>
+<br>
  int<br>
  qemuNetworkIfaceConnect(<u></u>virDomainDefPtr def,<br>
                          virConnectPtr conn,<br>
@@ -313,7 +347,7 @@ qemuNetworkIfaceConnect(<u></u>virDomainDefPtr def,<br>
      } else if (actualType == VIR_DOMAIN_NET_TYPE_BRIDGE) {<br>
          if (VIR_STRDUP(brname, virDomainNetGetActualBridgeNam<u></u>e(net)) < 0)<br>
              return ret;<br>
-    } else {<br>
+    } else if (actualType != VIR_DOMAIN_NET_TYPE_ETHERNET) {<br>
          virReportError(VIR_ERR_<u></u>INTERNAL_ERROR,<br>
                         _("Network type %d is not supported"),<br>
                         virDomainNetGetActualType(net)<u></u>);<br>
@@ -335,30 +369,44 @@ qemuNetworkIfaceConnect(<u></u>virDomainDefPtr def,<br>
          tap_create_flags |= VIR_NETDEV_TAP_CREATE_VNET_<u></u>HDR;<br>
      }<br>
<br>
-    if (cfg->privileged) {<br>
-        if (<u></u>virNetDevTapCreateInBridgePort<u></u>(brname, &net->ifname, &net->mac,<br>
-                                           def->uuid, tunpath, tapfd,<br>
*tapfdSize,<br>
-<br>
virDomainNetGetActualVirtPortP<u></u>rofile(net),<br>
-                                           virDomainNetGetActualVlan(net)<u></u>,<br>
-                                           tap_create_flags) < 0) {<br>
+    if (actualType == VIR_DOMAIN_NET_TYPE_ETHERNET) {<br>
+        if (virNetDevTapCreate(&net-><u></u>ifname, tunpath, tapfd, *tapfdSize,<br>
+                               tap_create_flags) < 0) {<br>
</blockquote>
<br>
It seems like your MTA mangled the patch. Moreover, how is this different to v3 that I've sent?<br>
<br>
Michal<br>
</blockquote></div>