[libvirt] anyone implementing host device enumeration?

David Lively dlively at virtualiron.com
Fri Oct 3 18:35:06 UTC 2008

I definitely wasn't planning on covering all of HAL :-)

I assume you weren't planning on exposing these capability-specific
representations in the public API.  Right?  (If not, ignore the rest of
this ...)

So I guess I don't see the value of having these cap-specific internal
representations.  I keep a string array of the cap names for
ListDevicesByCap, but other than that, the capability data is used only
by virNodeDeviceGetXMLDesc().  So it seems natural to represent it in a
form that can easily be converted to XML, and that can represent all the
XML we'll need to output (like xmlNode).  Otherwise, we are forced to
write more capability-specific code, with no particular advantage (no
stronger typing guarantees if we don't expose specific cap types).


P.S. I do think it would be useful to have access to capability details
other than GetXMLDesc.  Perhaps:
   const char *virNodeDeviceCapabilityProperty(virNodeDevicePtr dev,
						const char *cap,
						const char *prop)
but note this exposes them only in a general (property / value) way, and
is quite easily implemented with a xmlNode representation.

On Fri, 2008-10-03 at 18:41 +0100, Daniel P. Berrange wrote:
> On Fri, Oct 03, 2008 at 01:20:35PM -0400, David Lively wrote:
> > Okay, I see what you mean.  I'll create a virNodeDeviceDefPtr and follow
> > the established pattern.
> > 
> > I'm really trying to avoid creating a struct/union that must be extended
> > every time we support a new capability.  I struggled quite a bit with
> > the right representation for capabilities and bus details.. At one
> > point, I had my own (general-purpose; i.e., not specific to any type of
> > capability) virNodeDeviceCapabilities type, but it looked so much like a
> > DOM tree that just using a xmlNode seemed like the best choice.
> > 
> > Are you suggesting creating a struct for each kind of
> > currently-supported capability, or are you suggesting creating a single
> > struct that's general enough to represent all capabilities?
> I'm suggesting a something that is specific for each capability. Now
> if we were to support all metadata that HAL exposes this would be a
> huge job. But I don't believe we should be exposing all the metadata
> that HAL has, because in the future this XML format has to work with
> DeviceKit which is basically exposing UDev metadata, and VMWare's
> APIs which expose hardware info in their own way.
> Thus, IMHO, we should expose specific capabilities we know we care
> about, for specific sub-substems, and not try to handle the entire
> of HAL.
> A good starting point would be
>  - PCI,  domain, bus, slot, function, and vendor/product 
>  - USB, bus, device and  vendor/product
> Basically same info required for attaching the device to a domain,
> thus matching the struct  virDomainHostdevDefPtr in domain_conf.h
>  - NIC,  name & mac address
>  - Block, name and host adapter
>  - Host adapter, name
> For these also have a way to link to the parent device associated
> with them (ie the PCI/USB device providing them).
> That would basically be enough for use of the existing domain/storage
> and network APIs which is what we need this data for, and this minimal
> info should be satisifiable with VMWare's APIs, and DeviceKit.
> Regards,
> Daniel

More information about the libvir-list mailing list