[libvirt] PATCH: Public API plumbing for virNodeDeviceCreateXML/Destroy

Daniel P. Berrange berrange at redhat.com
Fri Apr 24 12:33:47 UTC 2009


On Fri, Apr 24, 2009 at 02:28:37PM +0200, Daniel Veillard wrote:
> > diff -r 2d1278bdf31f qemud/remote_dispatch_table.h
> > --- a/qemud/remote_dispatch_table.h	Fri Apr 24 11:01:11 2009 +0100
> > +++ b/qemud/remote_dispatch_table.h	Fri Apr 24 13:06:12 2009 +0100
> [...]
> > -{   /* DomainGetSecurityLabel => 118 */
> > +{   /* DomainGetSecurityLabel => 121 */
> [...]
> > -{   /* NodeGetSecurityModel => 119 */
> > +{   /* NodeGetSecurityModel => 122 */
> 
>   Any reason for the renumbering even though it seems harmless ?

That's a bug in the current code in CVS - result of a merge mistake.
It is harmless because this is just a comment.

> > +/**
> > + * virNodeDeviceCreateXML:
> > + * @conn: pointer to the hypervisor connection
> > + * @xmlDesc: string containing an XML description of the device to be created
> > + * @flags: callers should always pass 0
> > + *
> > + * Create a new device on the VM host machine, for example, virtual
> > + * HBAs created using vport_create.
> > + *
> > + * Returns a node device object if successful, NULL in case of failure
> > + */
> > +virNodeDevicePtr
> > +virNodeDeviceCreateXML(virConnectPtr conn,
> > +                       const char *xmlDesc,
> > +                       unsigned int flags)
> > +{
> > +    VIR_DEBUG("conn=%p, xmlDesc=%s, flags=%d", conn, xmlDesc, flags);
> > +
> > +    virResetLastError();
> > +
> > +    if (!VIR_IS_CONNECT(conn)) {
> > +        virLibConnError(NULL, VIR_ERR_INVALID_CONN, __FUNCTION__);
> > +        return NULL;
> > +    }
> > +
> > +    if (conn->flags & VIR_CONNECT_RO) {
> > +        virLibConnError(conn, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
> > +        goto error;
> > +    }
> > +
> > +    if (xmlDesc == NULL) {
> > +        virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
> > +        goto error;
> > +    }
> > +
> > +    if (conn->deviceMonitor->deviceCreateXML) {
> 
>   are we always 100% sure conn->deviceMonitor is non NULL ?

Yep, that needs an additional check 'conn->deviceMonitor != NULL'

> 
> > +        virNodeDevicePtr dev = conn->deviceMonitor->deviceCreateXML(conn, xmlDesc, flags);
> > +        if (dev == NULL)
> > +            goto error;
> > +        return dev;
> > +    }
> > +
> > +    virLibConnError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
> > +
> > +error:
> > +    /* Copy to connection error object for back compatability */
> > +    virSetConnError(conn);
> > +    return NULL;
> > +}
> > +
> > +
> > +/**
> > + * virNodeDeviceDestroy:
> > + * @dev: a device object
> > + *
> > + * Destroy the device object. The virtual device is removed from the host operating system.
> > + * This function may require privileged access
> > + *
> > + * Returns 0 in case of success and -1 in case of failure.
> > + */
> > +int
> > +virNodeDeviceDestroy(virNodeDevicePtr dev)
> > +{
> > +    int retval = 0;
> > +
> > +    DEBUG("dev=%p", dev);
> > +
> > +    virResetLastError();
> > +
> > +    if (!VIR_IS_CONNECTED_NODE_DEVICE(dev)) {
> > +        virLibNodeDeviceError(NULL, VIR_ERR_INVALID_NODE_DEVICE, __FUNCTION__);
> > +        return (-1);
> > +    }
> > +
> > +    if (dev->conn->flags & VIR_CONNECT_RO) {
> > +        virLibConnError(dev->conn, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
> > +        goto error;
> > +    }
> > +
> > +    if (dev->conn->deviceMonitor->deviceDestroy) {
> > +        retval = dev->conn->deviceMonitor->deviceDestroy(dev);
> > +        if (retval < 0) {
> > +            goto error;
> > +        }
> > +
> > +        return 0;
> > +    }
> > +
> > +    virLibConnError (dev->conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
> > +
> > +error:
> > +    /* Copy to connection error object for back compatability */
> > +    virSetConnError(dev->conn);
> > +    return -1;
> > +}
> > +
> > +

Likewise this needs a check for deviceMOnitor != NULL

Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list