On Wed, 31 Mar 2021 08:31:11 +0200 Erik Skultety <eskultet@xxxxxxxxxx> wrote: > On Fri, Mar 26, 2021 at 11:48:12AM -0500, Jonathon Jongsma wrote: > > With mediated devices, we can now define persistent node devices > > that can be started and stopped. In order to take advantage of > > this, we need an API to define new node devices. > > > > Signed-off-by: Jonathon Jongsma <jjongsma@xxxxxxxxxx> > > --- > > include/libvirt/libvirt-nodedev.h | 4 ++ > > src/driver-nodedev.h | 6 +++ > > src/libvirt-nodedev.c | 42 ++++++++++++++++ > > src/libvirt_public.syms | 1 + > > src/node_device/node_device_driver.c | 71 > > ++++++++++++++++++++++++++++ src/node_device/node_device_driver.h | > > 5 ++ src/node_device/node_device_udev.c | 1 + > > src/remote/remote_driver.c | 1 + > > src/remote/remote_protocol.x | 17 ++++++- > > src/remote_protocol-structs | 8 ++++ > > src/rpc/gendispatch.pl | 1 + > > 11 files changed, 156 insertions(+), 1 deletion(-) > > > > diff --git a/include/libvirt/libvirt-nodedev.h > > b/include/libvirt/libvirt-nodedev.h index 77d814935e..33eb46b3cd > > 100644 --- a/include/libvirt/libvirt-nodedev.h > > +++ b/include/libvirt/libvirt-nodedev.h > > @@ -131,6 +131,10 @@ virNodeDevicePtr virNodeDeviceCreateXML > > (virConnectPtr conn, > > int virNodeDeviceDestroy (virNodeDevicePtr > > dev); > > +virNodeDevicePtr virNodeDeviceDefineXML(virConnectPtr conn, > > + const char *xmlDesc, > > + unsigned int flags); > > + > > /** > > * VIR_NODE_DEVICE_EVENT_CALLBACK: > > * > > diff --git a/src/driver-nodedev.h b/src/driver-nodedev.h > > index d0fc7f19cf..64a0a7c473 100644 > > --- a/src/driver-nodedev.h > > +++ b/src/driver-nodedev.h > > @@ -74,6 +74,11 @@ typedef virNodeDevicePtr > > typedef int > > (*virDrvNodeDeviceDestroy)(virNodeDevicePtr dev); > > > > +typedef virNodeDevice* > > typedef virNodeDevice * > > > +(*virDrvNodeDeviceDefineXML)(virConnect *conn, > > + const char *xmlDesc, > > + unsigned int flags); > > + > > typedef int > > (*virDrvConnectNodeDeviceEventRegisterAny)(virConnectPtr conn, > > virNodeDevicePtr dev, > > @@ -113,4 +118,5 @@ struct _virNodeDeviceDriver { > > virDrvNodeDeviceListCaps nodeDeviceListCaps; > > virDrvNodeDeviceCreateXML nodeDeviceCreateXML; > > virDrvNodeDeviceDestroy nodeDeviceDestroy; > > + virDrvNodeDeviceDefineXML nodeDeviceDefineXML; > > }; > > diff --git a/src/libvirt-nodedev.c b/src/libvirt-nodedev.c > > index fb707b570f..cfc0c9de5b 100644 > > --- a/src/libvirt-nodedev.c > > +++ b/src/libvirt-nodedev.c > > @@ -737,6 +737,48 @@ virNodeDeviceDestroy(virNodeDevicePtr dev) > > } > > > > > > +/** > > + * virNodeDeviceDefineXML: > > + * @conn: pointer to the hypervisor connection > > + * @xmlDesc: string containing an XML description of the device to > > be defined > > + * @flags: extra flags; not used yet, so callers should always > > pass 0 > > + * > > + * Define a new device on the VM host machine, for example, a > > mediated device > > + * > > + * virNodeDeviceFree should be used to free the resources after the > > + * node device object is no longer needed. > > + * > > + * Returns a node device object if successful, NULL in case of > > failure > > + */ > > +virNodeDevice* > > Actually, I think we should keep the Ptr variant in the public APIs. > I remember the conclusion to the Ptr discussion was to keep the > typedef wrt to public headers and API entrypoints. This is a new API > so it's a bit different, but I think for consistency reasons we ought > to keep using Ptr for public API everywhere, even new APIs (this is > the case for all the APIs you added). Agreed. I had come to that conclusion as well, but apparently I accidentally changed more than I had intended to. I'll change these to use the public Ptr types. Jonathon