<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>