mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-01 17:35:17 +00:00
virDomainNetFindIdx: add support for CCW addresses
Allow to match with CCW addresses in addition to PCI addresses (and MAC addresses). Signed-off-by: Cornelia Huck <cohuck@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> Signed-off-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
850f991897
commit
2fefbd03ab
@ -341,6 +341,18 @@ virDomainDeviceCCWAddressParseXML(xmlNodePtr node,
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool
|
||||
virDomainDeviceCCWAddressEqual(virDomainDeviceCCWAddressPtr addr1,
|
||||
virDomainDeviceCCWAddressPtr addr2)
|
||||
{
|
||||
if (addr1->cssid == addr2->cssid &&
|
||||
addr1->ssid == addr2->ssid &&
|
||||
addr1->devno == addr2->devno) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
int
|
||||
virDomainDeviceDriveAddressParseXML(xmlNodePtr node,
|
||||
virDomainDeviceDriveAddressPtr addr)
|
||||
|
@ -207,6 +207,9 @@ void virPCIDeviceAddressFormat(virBufferPtr buf,
|
||||
bool virDomainDeviceCCWAddressIsValid(virDomainDeviceCCWAddressPtr addr);
|
||||
int virDomainDeviceCCWAddressParseXML(xmlNodePtr node,
|
||||
virDomainDeviceCCWAddressPtr addr);
|
||||
bool virDomainDeviceCCWAddressEqual(virDomainDeviceCCWAddressPtr addr1,
|
||||
virDomainDeviceCCWAddressPtr addr2);
|
||||
#define VIR_CCW_DEVICE_ADDRESS_FMT "%x.%x.%04x"
|
||||
|
||||
int virDomainDeviceDriveAddressParseXML(xmlNodePtr node,
|
||||
virDomainDeviceDriveAddressPtr addr);
|
||||
|
@ -17816,6 +17816,8 @@ virDomainNetFindIdx(virDomainDefPtr def, virDomainNetDefPtr net)
|
||||
bool MACAddrSpecified = !net->mac_generated;
|
||||
bool PCIAddrSpecified = virDomainDeviceAddressIsValid(&net->info,
|
||||
VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI);
|
||||
bool CCWAddrSpecified = virDomainDeviceAddressIsValid(&net->info,
|
||||
VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW);
|
||||
|
||||
for (i = 0; i < def->nnets; i++) {
|
||||
if (MACAddrSpecified &&
|
||||
@ -17827,9 +17829,14 @@ virDomainNetFindIdx(virDomainDefPtr def, virDomainNetDefPtr net)
|
||||
&net->info.addr.pci))
|
||||
continue;
|
||||
|
||||
if (CCWAddrSpecified &&
|
||||
!virDomainDeviceCCWAddressEqual(&def->nets[i]->info.addr.ccw,
|
||||
&net->info.addr.ccw))
|
||||
continue;
|
||||
|
||||
if (matchidx >= 0) {
|
||||
/* there were multiple matches on mac address, and no
|
||||
* qualifying guest-side PCI address was given, so we must
|
||||
* qualifying guest-side PCI/CCW address was given, so we must
|
||||
* fail (NB: a USB address isn't adequate, since it may
|
||||
* specify only vendor and product ID, and there may be
|
||||
* multiples of those.
|
||||
@ -17859,6 +17866,14 @@ virDomainNetFindIdx(virDomainDefPtr def, virDomainNetDefPtr net)
|
||||
net->info.addr.pci.bus,
|
||||
net->info.addr.pci.slot,
|
||||
net->info.addr.pci.function);
|
||||
} else if (MACAddrSpecified && CCWAddrSpecified) {
|
||||
virReportError(VIR_ERR_DEVICE_MISSING,
|
||||
_("no device matching MAC address %s found on "
|
||||
VIR_CCW_DEVICE_ADDRESS_FMT),
|
||||
virMacAddrFormat(&net->mac, mac),
|
||||
net->info.addr.ccw.cssid,
|
||||
net->info.addr.ccw.ssid,
|
||||
net->info.addr.ccw.devno);
|
||||
} else if (PCIAddrSpecified) {
|
||||
virReportError(VIR_ERR_DEVICE_MISSING,
|
||||
_("no device found on " VIR_PCI_DEVICE_ADDRESS_FMT),
|
||||
@ -17866,6 +17881,12 @@ virDomainNetFindIdx(virDomainDefPtr def, virDomainNetDefPtr net)
|
||||
net->info.addr.pci.bus,
|
||||
net->info.addr.pci.slot,
|
||||
net->info.addr.pci.function);
|
||||
} else if (CCWAddrSpecified) {
|
||||
virReportError(VIR_ERR_DEVICE_MISSING,
|
||||
_("no device found on " VIR_CCW_DEVICE_ADDRESS_FMT),
|
||||
net->info.addr.ccw.cssid,
|
||||
net->info.addr.ccw.ssid,
|
||||
net->info.addr.ccw.devno);
|
||||
} else if (MACAddrSpecified) {
|
||||
virReportError(VIR_ERR_DEVICE_MISSING,
|
||||
_("no device matching MAC address %s found"),
|
||||
|
@ -128,6 +128,7 @@ virDeviceInfoPCIAddressIsWanted;
|
||||
virDomainDeviceAddressIsValid;
|
||||
virDomainDeviceAddressTypeToString;
|
||||
virDomainDeviceCcidAddressParseXML;
|
||||
virDomainDeviceCCWAddressEqual;
|
||||
virDomainDeviceCCWAddressIsValid;
|
||||
virDomainDeviceCCWAddressParseXML;
|
||||
virDomainDeviceDriveAddressParseXML;
|
||||
|
Loading…
x
Reference in New Issue
Block a user