mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 14:15:28 +00:00
network: consolidated info log for all network allocate/free operations
There are three functions that deal with allocating and freeing devices from a networks netdev/pci device pool: network(Allocate|Notify|Release)ActualDevice(). These functions also maintain a counter of the number of domains currently using a network (regardless of whether or not that network uses a device pool). Each of these functions had multiple log messages (output using VIR_DEBUG) that were in slightly different formats and gave varying amounts of information. This patch creates a single function to log the pertinent information in a consistent manner for all three of these functions. Along with assuring that all the functions produce a consistent form of output (and making it simpler to change), it adds the MAC address of the domain interface involved in the operation, making it possible to verify which interface of which domain the operation is being done for (assuming that all MAC addresses are unique, of course). All of these messages are raised from DEBUG to INFO, since they don't happen that often (once per interface per domain/libvirtd start or domain stop), and can be very informative and helpful - eliminating the need to log debug level messages makes it much easier to sort these out.
This commit is contained in:
parent
3ea8b8b87f
commit
eb72bd63c1
@ -3856,6 +3856,41 @@ int networkRegister(void)
|
||||
|
||||
/********************************************************/
|
||||
|
||||
/* A unified function to log network connections and disconnections */
|
||||
|
||||
static void
|
||||
networkLogAllocation(virNetworkDefPtr netdef,
|
||||
virDomainNetType actualType,
|
||||
virNetworkForwardIfDefPtr dev,
|
||||
virDomainNetDefPtr iface,
|
||||
bool inUse)
|
||||
{
|
||||
char macStr[VIR_MAC_STRING_BUFLEN];
|
||||
const char *verb = inUse ? "using" : "releasing";
|
||||
|
||||
if (!dev) {
|
||||
VIR_INFO("MAC %s %s network %s (%d connections)",
|
||||
virMacAddrFormat(&iface->mac, macStr), verb,
|
||||
netdef->name, netdef->connections);
|
||||
} else {
|
||||
if (actualType == VIR_DOMAIN_NET_TYPE_HOSTDEV) {
|
||||
VIR_INFO("MAC %s %s network %s (%d connections) "
|
||||
"physical device %04x:%02x:%02x.%x (%d connections)",
|
||||
virMacAddrFormat(&iface->mac, macStr), verb,
|
||||
netdef->name, netdef->connections,
|
||||
dev->device.pci.domain, dev->device.pci.bus,
|
||||
dev->device.pci.slot, dev->device.pci.function,
|
||||
dev->connections);
|
||||
} else {
|
||||
VIR_INFO("MAC %s %s network %s (%d connections) "
|
||||
"physical device %s (%d connections)",
|
||||
virMacAddrFormat(&iface->mac, macStr), verb,
|
||||
netdef->name, netdef->connections,
|
||||
dev->device.dev, dev->connections);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Private API to deal with logical switch capabilities.
|
||||
* These functions are exported so that other parts of libvirt can
|
||||
* call them, but are not part of the public API and not in the
|
||||
@ -4236,23 +4271,8 @@ networkAllocateActualDevice(virDomainDefPtr dom,
|
||||
|
||||
if (netdef) {
|
||||
netdef->connections++;
|
||||
VIR_DEBUG("Using network %s, %d connections",
|
||||
netdef->name, netdef->connections);
|
||||
|
||||
if (dev) {
|
||||
/* mark the allocation */
|
||||
if (dev)
|
||||
dev->connections++;
|
||||
if (actualType != VIR_DOMAIN_NET_TYPE_HOSTDEV) {
|
||||
VIR_DEBUG("Using physical device %s, %d connections",
|
||||
dev->device.dev, dev->connections);
|
||||
} else {
|
||||
VIR_DEBUG("Using physical device %04x:%02x:%02x.%x, connections %d",
|
||||
dev->device.pci.domain, dev->device.pci.bus,
|
||||
dev->device.pci.slot, dev->device.pci.function,
|
||||
dev->connections);
|
||||
}
|
||||
}
|
||||
|
||||
/* finally we can call the 'plugged' hook script if any */
|
||||
if (networkRunHook(network, dom, iface,
|
||||
VIR_HOOK_NETWORK_OP_IFACE_PLUGGED,
|
||||
@ -4263,6 +4283,7 @@ networkAllocateActualDevice(virDomainDefPtr dom,
|
||||
dev->connections--;
|
||||
goto error;
|
||||
}
|
||||
networkLogAllocation(netdef, actualType, dev, iface, true);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
@ -4388,10 +4409,6 @@ networkNotifyActualDevice(virDomainDefPtr dom,
|
||||
netdef->name, actualDev);
|
||||
goto error;
|
||||
}
|
||||
|
||||
VIR_DEBUG("Using physical device %s, connections %d",
|
||||
dev->device.dev, dev->connections + 1);
|
||||
|
||||
} else /* if (actualType == VIR_DOMAIN_NET_TYPE_HOSTDEV) */ {
|
||||
virDomainHostdevDefPtr hostdev;
|
||||
|
||||
@ -4441,20 +4458,12 @@ networkNotifyActualDevice(virDomainDefPtr dom,
|
||||
dev->device.pci.slot, dev->device.pci.function);
|
||||
goto error;
|
||||
}
|
||||
|
||||
VIR_DEBUG("Using physical device %04x:%02x:%02x.%x, connections %d",
|
||||
dev->device.pci.domain, dev->device.pci.bus,
|
||||
dev->device.pci.slot, dev->device.pci.function,
|
||||
dev->connections);
|
||||
}
|
||||
|
||||
success:
|
||||
netdef->connections++;
|
||||
if (dev)
|
||||
dev->connections++;
|
||||
VIR_DEBUG("Using network %s, %d connections",
|
||||
netdef->name, netdef->connections);
|
||||
|
||||
/* finally we can call the 'plugged' hook script if any */
|
||||
if (networkRunHook(network, dom, iface, VIR_HOOK_NETWORK_OP_IFACE_PLUGGED,
|
||||
VIR_HOOK_SUBOP_BEGIN) < 0) {
|
||||
@ -4464,6 +4473,7 @@ networkNotifyActualDevice(virDomainDefPtr dom,
|
||||
netdef->connections--;
|
||||
goto error;
|
||||
}
|
||||
networkLogAllocation(netdef, actualType, dev, iface, true);
|
||||
|
||||
ret = 0;
|
||||
cleanup:
|
||||
@ -4475,6 +4485,7 @@ networkNotifyActualDevice(virDomainDefPtr dom,
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* networkReleaseActualDevice:
|
||||
* @dom: domain definition that @iface belongs to
|
||||
* @iface: a domain's NetDef (interface definition)
|
||||
@ -4559,10 +4570,6 @@ networkReleaseActualDevice(virDomainDefPtr dom,
|
||||
netdef->name, actualDev);
|
||||
goto error;
|
||||
}
|
||||
|
||||
VIR_DEBUG("Releasing physical device %s, connections %d",
|
||||
dev->device.dev, dev->connections - 1);
|
||||
|
||||
} else /* if (actualType == VIR_DOMAIN_NET_TYPE_HOSTDEV) */ {
|
||||
virDomainHostdevDefPtr hostdev;
|
||||
|
||||
@ -4594,11 +4601,6 @@ networkReleaseActualDevice(virDomainDefPtr dom,
|
||||
hostdev->source.subsys.u.pci.addr.function);
|
||||
goto error;
|
||||
}
|
||||
|
||||
VIR_DEBUG("Releasing physical device %04x:%02x:%02x.%x, connections %d",
|
||||
dev->device.pci.domain, dev->device.pci.bus,
|
||||
dev->device.pci.slot, dev->device.pci.function,
|
||||
dev->connections - 1);
|
||||
}
|
||||
|
||||
success:
|
||||
@ -4606,13 +4608,10 @@ networkReleaseActualDevice(virDomainDefPtr dom,
|
||||
netdef->connections--;
|
||||
if (dev)
|
||||
dev->connections--;
|
||||
|
||||
VIR_DEBUG("Releasing network %s, %d connections",
|
||||
netdef->name, netdef->connections);
|
||||
|
||||
/* finally we can call the 'unplugged' hook script if any */
|
||||
networkRunHook(network, dom, iface, VIR_HOOK_NETWORK_OP_IFACE_UNPLUGGED,
|
||||
VIR_HOOK_SUBOP_BEGIN);
|
||||
networkLogAllocation(netdef, actualType, dev, iface, false);
|
||||
}
|
||||
ret = 0;
|
||||
cleanup:
|
||||
|
Loading…
Reference in New Issue
Block a user