mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06: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;
|
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
|
int
|
||||||
virDomainDeviceDriveAddressParseXML(xmlNodePtr node,
|
virDomainDeviceDriveAddressParseXML(xmlNodePtr node,
|
||||||
virDomainDeviceDriveAddressPtr addr)
|
virDomainDeviceDriveAddressPtr addr)
|
||||||
|
@ -207,6 +207,9 @@ void virPCIDeviceAddressFormat(virBufferPtr buf,
|
|||||||
bool virDomainDeviceCCWAddressIsValid(virDomainDeviceCCWAddressPtr addr);
|
bool virDomainDeviceCCWAddressIsValid(virDomainDeviceCCWAddressPtr addr);
|
||||||
int virDomainDeviceCCWAddressParseXML(xmlNodePtr node,
|
int virDomainDeviceCCWAddressParseXML(xmlNodePtr node,
|
||||||
virDomainDeviceCCWAddressPtr addr);
|
virDomainDeviceCCWAddressPtr addr);
|
||||||
|
bool virDomainDeviceCCWAddressEqual(virDomainDeviceCCWAddressPtr addr1,
|
||||||
|
virDomainDeviceCCWAddressPtr addr2);
|
||||||
|
#define VIR_CCW_DEVICE_ADDRESS_FMT "%x.%x.%04x"
|
||||||
|
|
||||||
int virDomainDeviceDriveAddressParseXML(xmlNodePtr node,
|
int virDomainDeviceDriveAddressParseXML(xmlNodePtr node,
|
||||||
virDomainDeviceDriveAddressPtr addr);
|
virDomainDeviceDriveAddressPtr addr);
|
||||||
|
@ -17816,6 +17816,8 @@ virDomainNetFindIdx(virDomainDefPtr def, virDomainNetDefPtr net)
|
|||||||
bool MACAddrSpecified = !net->mac_generated;
|
bool MACAddrSpecified = !net->mac_generated;
|
||||||
bool PCIAddrSpecified = virDomainDeviceAddressIsValid(&net->info,
|
bool PCIAddrSpecified = virDomainDeviceAddressIsValid(&net->info,
|
||||||
VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI);
|
VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI);
|
||||||
|
bool CCWAddrSpecified = virDomainDeviceAddressIsValid(&net->info,
|
||||||
|
VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW);
|
||||||
|
|
||||||
for (i = 0; i < def->nnets; i++) {
|
for (i = 0; i < def->nnets; i++) {
|
||||||
if (MACAddrSpecified &&
|
if (MACAddrSpecified &&
|
||||||
@ -17827,9 +17829,14 @@ virDomainNetFindIdx(virDomainDefPtr def, virDomainNetDefPtr net)
|
|||||||
&net->info.addr.pci))
|
&net->info.addr.pci))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (CCWAddrSpecified &&
|
||||||
|
!virDomainDeviceCCWAddressEqual(&def->nets[i]->info.addr.ccw,
|
||||||
|
&net->info.addr.ccw))
|
||||||
|
continue;
|
||||||
|
|
||||||
if (matchidx >= 0) {
|
if (matchidx >= 0) {
|
||||||
/* there were multiple matches on mac address, and no
|
/* 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
|
* fail (NB: a USB address isn't adequate, since it may
|
||||||
* specify only vendor and product ID, and there may be
|
* specify only vendor and product ID, and there may be
|
||||||
* multiples of those.
|
* multiples of those.
|
||||||
@ -17859,6 +17866,14 @@ virDomainNetFindIdx(virDomainDefPtr def, virDomainNetDefPtr net)
|
|||||||
net->info.addr.pci.bus,
|
net->info.addr.pci.bus,
|
||||||
net->info.addr.pci.slot,
|
net->info.addr.pci.slot,
|
||||||
net->info.addr.pci.function);
|
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) {
|
} else if (PCIAddrSpecified) {
|
||||||
virReportError(VIR_ERR_DEVICE_MISSING,
|
virReportError(VIR_ERR_DEVICE_MISSING,
|
||||||
_("no device found on " VIR_PCI_DEVICE_ADDRESS_FMT),
|
_("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.bus,
|
||||||
net->info.addr.pci.slot,
|
net->info.addr.pci.slot,
|
||||||
net->info.addr.pci.function);
|
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) {
|
} else if (MACAddrSpecified) {
|
||||||
virReportError(VIR_ERR_DEVICE_MISSING,
|
virReportError(VIR_ERR_DEVICE_MISSING,
|
||||||
_("no device matching MAC address %s found"),
|
_("no device matching MAC address %s found"),
|
||||||
|
@ -128,6 +128,7 @@ virDeviceInfoPCIAddressIsWanted;
|
|||||||
virDomainDeviceAddressIsValid;
|
virDomainDeviceAddressIsValid;
|
||||||
virDomainDeviceAddressTypeToString;
|
virDomainDeviceAddressTypeToString;
|
||||||
virDomainDeviceCcidAddressParseXML;
|
virDomainDeviceCcidAddressParseXML;
|
||||||
|
virDomainDeviceCCWAddressEqual;
|
||||||
virDomainDeviceCCWAddressIsValid;
|
virDomainDeviceCCWAddressIsValid;
|
||||||
virDomainDeviceCCWAddressParseXML;
|
virDomainDeviceCCWAddressParseXML;
|
||||||
virDomainDeviceDriveAddressParseXML;
|
virDomainDeviceDriveAddressParseXML;
|
||||||
|
Loading…
Reference in New Issue
Block a user