esx: implement connectListAllNetworks

Implement the .connectListAllNetworks networks API in the esx network
driver.

Signed-off-by: Pino Toscano <ptoscano@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Pino Toscano 2020-09-14 18:28:04 +02:00
parent 9e7aa1c012
commit 2e65f0ad4a

View File

@ -863,6 +863,74 @@ esxNetworkIsPersistent(virNetworkPtr network G_GNUC_UNUSED)
#define MATCH(FLAG) (flags & (FLAG))
static int
esxConnectListAllNetworks(virConnectPtr conn,
virNetworkPtr **nets,
unsigned int flags)
{
int ret = -1;
esxPrivate *priv = conn->privateData;
esxVI_HostVirtualSwitch *hostVirtualSwitchList = NULL;
esxVI_HostVirtualSwitch *hostVirtualSwitch = NULL;
size_t count = 0;
size_t i;
virCheckFlags(VIR_CONNECT_LIST_NETWORKS_FILTERS_ALL, -1);
/*
* ESX networks are always active, persistent, and
* autostarted, so return zero elements in case we are asked
* for networks different than that.
*/
if (MATCH(VIR_CONNECT_LIST_NETWORKS_FILTERS_ACTIVE) &&
!(MATCH(VIR_CONNECT_LIST_NETWORKS_ACTIVE)))
return 0;
if (MATCH(VIR_CONNECT_LIST_NETWORKS_FILTERS_PERSISTENT) &&
!(MATCH(VIR_CONNECT_LIST_NETWORKS_PERSISTENT)))
return 0;
if (MATCH(VIR_CONNECT_LIST_NETWORKS_FILTERS_AUTOSTART) &&
!(MATCH(VIR_CONNECT_LIST_NETWORKS_AUTOSTART)))
return 0;
if (esxVI_EnsureSession(priv->primary) < 0 ||
esxVI_LookupHostVirtualSwitchList(priv->primary,
&hostVirtualSwitchList) < 0) {
return -1;
}
for (hostVirtualSwitch = hostVirtualSwitchList; hostVirtualSwitch;
hostVirtualSwitch = hostVirtualSwitch->_next) {
if (nets) {
virNetworkPtr net = virtualswitchToNetwork(conn, hostVirtualSwitch);
if (!net)
goto cleanup;
if (VIR_APPEND_ELEMENT(*nets, count, net) < 0)
goto cleanup;
} else {
++count;
}
}
ret = count;
cleanup:
if (ret < 0) {
if (nets && *nets) {
for (i = 0; i < count; ++i)
VIR_FREE((*nets)[i]);
VIR_FREE(*nets);
}
}
esxVI_HostVirtualSwitch_Free(&hostVirtualSwitchList);
return ret;
}
#undef MATCH
virNetworkDriver esxNetworkDriver = {
.connectNumOfNetworks = esxConnectNumOfNetworks, /* 0.10.0 */
.connectListNetworks = esxConnectListNetworks, /* 0.10.0 */
@ -877,4 +945,5 @@ virNetworkDriver esxNetworkDriver = {
.networkSetAutostart = esxNetworkSetAutostart, /* 0.10.0 */
.networkIsActive = esxNetworkIsActive, /* 0.10.0 */
.networkIsPersistent = esxNetworkIsPersistent, /* 0.10.0 */
.connectListAllNetworks = esxConnectListAllNetworks, /* 6.8.0 */
};