To avoid existing scripts taking the wrong action, the existing
operations are changed to 'port-created' and 'port-deleted'
instead. These will receive the network XML and the network port
XML.
Signed-off-by: Daniel P. Berrangé <berrange@xxxxxxxxxx>
---
docs/hooks.html.in | 24 +++++++++++-------------
src/network/bridge_driver.c | 27 +++++++++++----------------
src/util/virhook.c | 4 ++--
src/util/virhook.h | 4 ++--
4 files changed, 26 insertions(+), 33 deletions(-)
diff --git a/docs/hooks.html.in b/docs/hooks.html.in
index 2c4c39b771..7c9d3ef7f3 100644
--- a/docs/hooks.html.in
+++ b/docs/hooks.html.in
@@ -91,10 +91,8 @@
</network>
</hookData></pre>
- <p>In the case of an interface
- being plugged/unplugged to/from the network, the network XML will be
- followed with the full XML description of the domain containing the
- interface that is being plugged/unplugged:</p>
+ <p>In the case of an network port being created / deleted, the network
+ XML will be followed with the full XML description of the port:</p>
<pre><hookData>
<network>
@@ -102,11 +100,11 @@
<uuid>afca425a-2c3a-420c-b2fb-dd7b4950d722</uuid>
...
</network>
- <domain type='$domain_type' id='$domain_id'>
- <name>$domain_name</name>
- <uuid>afca425a-2c3a-420c-b2fb-dd7b4950d722</uuid>
- ...
- </domain>
+ <networkport>
+ <uuid>5d744f21-ba4a-4d6e-bdb2-30a35ff3207d</uuid>
+ ...
+ <plug type='direct' dev='ens3' mode='vepa'/>
+ </networkport>
</hookData></pre>
<p>Please note that this approach is different from other cases such as
@@ -296,15 +294,15 @@
<pre>/etc/libvirt/hooks/network network_name stopped end -</pre></li>
<li>Later, when network is started and there's an interface from a
domain to be plugged into the network, the hook script is called as:<br/>
- <pre>/etc/libvirt/hooks/network network_name plugged begin -</pre>
+ <pre>/etc/libvirt/hooks/network network_name port-created begin -</pre>
Please note, that in this case, the script is passed both network and
- domain XMLs on its stdin.</li>
+ port XMLs on its stdin.</li>
<li>When network is updated, the hook script is called as:<br/>
<pre>/etc/libvirt/hooks/network network_name updated begin -</pre></li>
<li>When the domain from previous case is shutting down, the interface
is unplugged. This leads to another script invocation:<br/>
- <pre>/etc/libvirt/hooks/network network_name unplugged begin -</pre>
- And again, as in previous case, both network and domain XMLs are passed
+ <pre>/etc/libvirt/hooks/network network_name port-deleted begin -</pre>
+ And again, as in previous case, both network and port XMLs are passed
onto script's stdin.</li>
</ul>
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index d2bcb81912..1080684043 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -205,14 +205,13 @@ networkObjFromNetwork(virNetworkPtr net)
static int
networkRunHook(virNetworkObjPtr obj,
- virDomainDefPtr dom,
- virDomainNetDefPtr iface,
+ virNetworkPortDefPtr port,
int op,
int sub_op)
{
virNetworkDefPtr def;
virBuffer buf = VIR_BUFFER_INITIALIZER;
- char *xml = NULL, *net_xml = NULL, *dom_xml = NULL;
+ char *xml = NULL;
int hookret;
int ret = -1;
@@ -226,11 +225,9 @@ networkRunHook(virNetworkObjPtr obj,
virBufferAddLit(&buf, "<hookData>\n");
virBufferAdjustIndent(&buf, 2);
- if (iface && virDomainNetDefFormat(&buf, iface, NULL, 0) < 0)
- goto cleanup;
if (virNetworkDefFormatBuf(&buf, def, 0) < 0)
goto cleanup;
- if (dom && virDomainDefFormatInternal(dom, NULL, 0, &buf, NULL) < 0)
+ if (port && virNetworkPortDefFormatBuf(&buf, port) < 0)
goto cleanup;
virBufferAdjustIndent(&buf, -2);
@@ -256,8 +253,6 @@ networkRunHook(virNetworkObjPtr obj,
cleanup:
virBufferFreeAndReset(&buf);
VIR_FREE(xml);
- VIR_FREE(net_xml);
- VIR_FREE(dom_xml);
return ret;
}
@@ -2766,7 +2761,7 @@ networkStartNetwork(virNetworkDriverStatePtr driver,
/* Run an early hook to set-up missing devices.
* If the script raised an error abort the launch. */
- if (networkRunHook(obj, NULL, NULL,
+ if (networkRunHook(obj, NULL,
VIR_HOOK_NETWORK_OP_START,
VIR_HOOK_SUBOP_BEGIN) < 0)
goto cleanup;
@@ -2808,7 +2803,7 @@ networkStartNetwork(virNetworkDriverStatePtr driver,
}
/* finally we can call the 'started' hook script if any */
- if (networkRunHook(obj, NULL, NULL,
+ if (networkRunHook(obj, NULL,
VIR_HOOK_NETWORK_OP_STARTED,
VIR_HOOK_SUBOP_BEGIN) < 0)
goto cleanup;
@@ -2892,7 +2887,7 @@ networkShutdownNetwork(virNetworkDriverStatePtr driver,
}
/* now that we know it's stopped call the hook if present */
- networkRunHook(obj, NULL, NULL, VIR_HOOK_NETWORK_OP_STOPPED,
+ networkRunHook(obj, NULL, VIR_HOOK_NETWORK_OP_STOPPED,
VIR_HOOK_SUBOP_END);
virNetworkObjSetActive(obj, false);
@@ -3868,7 +3863,7 @@ networkUpdate(virNetworkPtr net,
}
/* call the 'updated' network hook script */
- if (networkRunHook(obj, NULL, NULL, VIR_HOOK_NETWORK_OP_UPDATED,
+ if (networkRunHook(obj, NULL, VIR_HOOK_NETWORK_OP_UPDATED,
VIR_HOOK_SUBOP_BEGIN) < 0)
goto cleanup;
@@ -4689,8 +4684,8 @@ networkAllocateActualDevice(virNetworkPtr net,
if (dev)
dev->connections++;
/* finally we can call the 'plugged' hook script if any */
- if (networkRunHook(obj, dom, iface,
- VIR_HOOK_NETWORK_OP_IFACE_PLUGGED,
+ if (networkRunHook(obj, port,
+ VIR_HOOK_NETWORK_OP_PORT_CREATED,
VIR_HOOK_SUBOP_BEGIN) < 0) {
/* adjust for failure */
netdef->connections--;
@@ -4883,7 +4878,7 @@ networkNotifyActualDevice(virNetworkPtr net,
if (dev)
dev->connections++;
/* finally we can call the 'plugged' hook script if any */
- if (networkRunHook(obj, dom, iface, VIR_HOOK_NETWORK_OP_IFACE_PLUGGED,
+ if (networkRunHook(obj, port, VIR_HOOK_NETWORK_OP_PORT_CREATED,
VIR_HOOK_SUBOP_BEGIN) < 0) {
/* adjust for failure */
if (dev)
@@ -5034,7 +5029,7 @@ networkReleaseActualDevice(virNetworkPtr net,
if (dev)
dev->connections--;
/* finally we can call the 'unplugged' hook script if any */
- networkRunHook(obj, dom, iface, VIR_HOOK_NETWORK_OP_IFACE_UNPLUGGED,
+ networkRunHook(obj, port, VIR_HOOK_NETWORK_OP_PORT_DELETED,
VIR_HOOK_SUBOP_BEGIN);
networkLogAllocation(netdef, dev, &iface->mac, false);
diff --git a/src/util/virhook.c b/src/util/virhook.c
index 37de0cb39e..0322786719 100644
--- a/src/util/virhook.c
+++ b/src/util/virhook.c
@@ -95,8 +95,8 @@ VIR_ENUM_IMPL(virHookNetworkOp, VIR_HOOK_NETWORK_OP_LAST,
"start",
"started",
"stopped",
- "plugged",
- "unplugged",
+ "port-created",
+ "port-deleted",
"updated",
);
diff --git a/src/util/virhook.h b/src/util/virhook.h
index 034fb8f263..fa188c89e3 100644
--- a/src/util/virhook.h
+++ b/src/util/virhook.h
@@ -79,8 +79,8 @@ typedef enum {
VIR_HOOK_NETWORK_OP_START, /* network is about to start */
VIR_HOOK_NETWORK_OP_STARTED, /* network has start */
VIR_HOOK_NETWORK_OP_STOPPED, /* network has stopped */
- VIR_HOOK_NETWORK_OP_IFACE_PLUGGED, /* an interface has been plugged into the network */
- VIR_HOOK_NETWORK_OP_IFACE_UNPLUGGED, /* an interface was unplugged from the network */
+ VIR_HOOK_NETWORK_OP_PORT_CREATED, /* port has been created in the network */
+ VIR_HOOK_NETWORK_OP_PORT_DELETED, /* port has been deleted in the network */
VIR_HOOK_NETWORK_OP_UPDATED, /* network has been updated */
VIR_HOOK_NETWORK_OP_LAST,