[libvirt] [PATCH 0/5] Improvements for the remote generator

Adds whitelists and moves black and whitelists to their own files. Also makes parsing stricter and more uniform. Matthias

This matches the public API and helps to get rid of some speical case code in the remote generator. Rename driver API functions and XDR protocol structs. No functional change included outside of the remote generator. --- daemon/remote_generator.pl | 6 +--- src/driver.h | 20 +++++++++--------- src/esx/esx_device_monitor.c | 2 +- src/esx/esx_driver.c | 10 ++++---- src/esx/esx_network_driver.c | 2 +- src/esx/esx_storage_driver.c | 4 +- src/libvirt.c | 24 +++++++++++----------- src/libxl/libxl_driver.c | 6 ++-- src/lxc/lxc_driver.c | 8 +++--- src/network/bridge_driver.c | 4 +- src/node_device/node_device_driver.c | 6 ++-- src/nwfilter/nwfilter_driver.c | 6 ++-- src/openvz/openvz_driver.c | 6 ++-- src/phyp/phyp_driver.c | 6 ++-- src/qemu/qemu_command.c | 2 +- src/qemu/qemu_driver.c | 12 +++++----- src/remote/remote_driver.c | 12 +++++----- src/remote/remote_protocol.x | 36 +++++++++++++++++----------------- src/remote_protocol-structs | 24 +++++++++++----------- src/storage/storage_driver.c | 6 ++-- src/test/test_driver.c | 22 ++++++++++---------- src/uml/uml_conf.c | 2 +- src/uml/uml_driver.c | 8 +++--- src/vbox/vbox_tmpl.c | 14 ++++++------ src/vmware/vmware_driver.c | 6 ++-- src/xen/xen_driver.c | 12 +++++----- src/xen/xend_internal.c | 4 +- src/xen/xend_internal.h | 2 +- src/xen/xm_internal.c | 2 +- src/xen/xm_internal.h | 2 +- src/xenapi/xenapi_driver.c | 8 +++--- 31 files changed, 141 insertions(+), 143 deletions(-) diff --git a/daemon/remote_generator.pl b/daemon/remote_generator.pl index 062ccc1..b06e51a 100755 --- a/daemon/remote_generator.pl +++ b/daemon/remote_generator.pl @@ -645,8 +645,6 @@ elsif ($opt_b) { $prefix = "Connect" } elsif ($calls{$_}->{ProcName} eq "SupportsFeature") { $prefix = "Drv" - } elsif ($calls{$_}->{ProcName} =~ m/^(\S+)DumpXML$/) { - $proc_name = "${1}GetXMLDesc" } elsif ($calls{$_}->{ProcName} eq "CPUBaseline") { $proc_name = "ConnectBaselineCPU" } elsif ($calls{$_}->{ProcName} eq "CPUCompare") { @@ -892,8 +890,8 @@ elsif ($opt_k) { # fix bad decisions in the xdr protocol if ($arg_name eq "flags" and $call->{ProcName} ne "DomainCoreDump" and - $call->{ProcName} ne "DomainDumpXML" and - $call->{ProcName} ne "NetworkDumpXML") { + $call->{ProcName} ne "DomainGetXMLDesc" and + $call->{ProcName} ne "NetworkGetXMLDesc") { $type_name = "unsigned int"; } elsif ($arg_name eq "nvcpus" and $call->{ProcName} eq "DomainSetVcpus") { diff --git a/src/driver.h b/src/driver.h index a8b79e6..6374ec7 100644 --- a/src/driver.h +++ b/src/driver.h @@ -176,7 +176,7 @@ typedef int const char *to, int flags); typedef char * - (*virDrvDomainDumpXML) (virDomainPtr dom, + (*virDrvDomainGetXMLDesc) (virDomainPtr dom, int flags); typedef char * (*virDrvConnectDomainXMLFromNative) (virConnectPtr conn, @@ -474,8 +474,8 @@ typedef virDomainSnapshotPtr unsigned int flags); typedef char * - (*virDrvDomainSnapshotDumpXML)(virDomainSnapshotPtr snapshot, - unsigned int flags); + (*virDrvDomainSnapshotGetXMLDesc)(virDomainSnapshotPtr snapshot, + unsigned int flags); typedef int (*virDrvDomainSnapshotNum)(virDomainPtr domain, unsigned int flags); @@ -574,7 +574,7 @@ struct _virDriver { virDrvDomainGetMaxVcpus domainGetMaxVcpus; virDrvDomainGetSecurityLabel domainGetSecurityLabel; virDrvNodeGetSecurityModel nodeGetSecurityModel; - virDrvDomainDumpXML domainDumpXML; + virDrvDomainGetXMLDesc domainGetXMLDesc; virDrvConnectDomainXMLFromNative domainXMLFromNative; virDrvConnectDomainXMLToNative domainXMLToNative; virDrvListDefinedDomains listDefinedDomains; @@ -629,7 +629,7 @@ struct _virDriver { virDrvDomainHasManagedSaveImage domainHasManagedSaveImage; virDrvDomainManagedSaveRemove domainManagedSaveRemove; virDrvDomainSnapshotCreateXML domainSnapshotCreateXML; - virDrvDomainSnapshotDumpXML domainSnapshotDumpXML; + virDrvDomainSnapshotGetXMLDesc domainSnapshotGetXMLDesc; virDrvDomainSnapshotNum domainSnapshotNum; virDrvDomainSnapshotListNames domainSnapshotListNames; virDrvDomainSnapshotLookupByName domainSnapshotLookupByName; @@ -672,7 +672,7 @@ typedef int typedef int (*virDrvNetworkDestroy) (virNetworkPtr network); typedef char * - (*virDrvNetworkDumpXML) (virNetworkPtr network, + (*virDrvNetworkGetXMLDesc) (virNetworkPtr network, int flags); typedef char * (*virDrvNetworkGetBridgeName) (virNetworkPtr network); @@ -718,7 +718,7 @@ struct _virNetworkDriver { virDrvNetworkUndefine networkUndefine; virDrvNetworkCreate networkCreate; virDrvNetworkDestroy networkDestroy; - virDrvNetworkDumpXML networkDumpXML; + virDrvNetworkGetXMLDesc networkGetXMLDesc; virDrvNetworkGetBridgeName networkGetBridgeName; virDrvNetworkGetAutostart networkGetAutostart; virDrvNetworkSetAutostart networkSetAutostart; @@ -1017,8 +1017,8 @@ typedef int (*virDevMonListDevices)(virConnectPtr conn, typedef virNodeDevicePtr (*virDevMonDeviceLookupByName)(virConnectPtr conn, const char *name); -typedef char * (*virDevMonDeviceDumpXML)(virNodeDevicePtr dev, - unsigned int flags); +typedef char * (*virDevMonDeviceGetXMLDesc)(virNodeDevicePtr dev, + unsigned int flags); typedef char * (*virDevMonDeviceGetParent)(virNodeDevicePtr dev); @@ -1047,7 +1047,7 @@ struct _virDeviceMonitor { virDevMonNumOfDevices numOfDevices; virDevMonListDevices listDevices; virDevMonDeviceLookupByName deviceLookupByName; - virDevMonDeviceDumpXML deviceDumpXML; + virDevMonDeviceGetXMLDesc deviceGetXMLDesc; virDevMonDeviceGetParent deviceGetParent; virDevMonDeviceNumOfCaps deviceNumOfCaps; virDevMonDeviceListCaps deviceListCaps; diff --git a/src/esx/esx_device_monitor.c b/src/esx/esx_device_monitor.c index d559f96..3fa63d5 100644 --- a/src/esx/esx_device_monitor.c +++ b/src/esx/esx_device_monitor.c @@ -72,7 +72,7 @@ static virDeviceMonitor esxDeviceMonitor = { NULL, /* numOfDevices */ NULL, /* listDevices */ NULL, /* deviceLookupByName */ - NULL, /* deviceDumpXML */ + NULL, /* deviceGetXMLDesc */ NULL, /* deviceGetParent */ NULL, /* deviceNumOfCaps */ NULL, /* deviceListCaps */ diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c index 7933f11..bacacb8 100644 --- a/src/esx/esx_driver.c +++ b/src/esx/esx_driver.c @@ -2610,7 +2610,7 @@ esxDomainGetMaxVcpus(virDomainPtr domain) static char * -esxDomainDumpXML(virDomainPtr domain, int flags) +esxDomainGetXMLDesc(virDomainPtr domain, int flags) { esxPrivate *priv = domain->conn->privateData; esxVI_String *propertyNameList = NULL; @@ -4137,8 +4137,8 @@ esxDomainSnapshotCreateXML(virDomainPtr domain, const char *xmlDesc, static char * -esxDomainSnapshotDumpXML(virDomainSnapshotPtr snapshot, - unsigned int flags) +esxDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot, + unsigned int flags) { esxPrivate *priv = snapshot->domain->conn->privateData; esxVI_VirtualMachineSnapshotTree *rootSnapshotList = NULL; @@ -4634,7 +4634,7 @@ static virDriver esxDriver = { esxDomainGetMaxVcpus, /* domainGetMaxVcpus */ NULL, /* domainGetSecurityLabel */ NULL, /* nodeGetSecurityModel */ - esxDomainDumpXML, /* domainDumpXML */ + esxDomainGetXMLDesc, /* domainGetXMLDesc */ esxDomainXMLFromNative, /* domainXMLFromNative */ esxDomainXMLToNative, /* domainXMLToNative */ esxListDefinedDomains, /* listDefinedDomains */ @@ -4689,7 +4689,7 @@ static virDriver esxDriver = { NULL, /* domainHasManagedSaveImage */ NULL, /* domainManagedSaveRemove */ esxDomainSnapshotCreateXML, /* domainSnapshotCreateXML */ - esxDomainSnapshotDumpXML, /* domainSnapshotDumpXML */ + esxDomainSnapshotGetXMLDesc, /* domainSnapshotGetXMLDesc */ esxDomainSnapshotNum, /* domainSnapshotNum */ esxDomainSnapshotListNames, /* domainSnapshotListNames */ esxDomainSnapshotLookupByName, /* domainSnapshotLookupByName */ diff --git a/src/esx/esx_network_driver.c b/src/esx/esx_network_driver.c index a64bb8e..bbc2541 100644 --- a/src/esx/esx_network_driver.c +++ b/src/esx/esx_network_driver.c @@ -80,7 +80,7 @@ static virNetworkDriver esxNetworkDriver = { NULL, /* networkUndefine */ NULL, /* networkCreate */ NULL, /* networkDestroy */ - NULL, /* networkDumpXML */ + NULL, /* networkGetXMLDesc */ NULL, /* networkGetBridgeName */ NULL, /* networkGetAutostart */ NULL, /* networkSetAutostart */ diff --git a/src/esx/esx_storage_driver.c b/src/esx/esx_storage_driver.c index 9e4dd9e..f37d064 100644 --- a/src/esx/esx_storage_driver.c +++ b/src/esx/esx_storage_driver.c @@ -1523,7 +1523,7 @@ esxStorageVolumeGetInfo(virStorageVolPtr volume, virStorageVolInfoPtr info) static char * -esxStorageVolumeDumpXML(virStorageVolPtr volume, unsigned int flags) +esxStorageVolumeGetXMLDesc(virStorageVolPtr volume, unsigned int flags) { esxPrivate *priv = volume->conn->storagePrivateData; virStoragePoolDef pool; @@ -1676,7 +1676,7 @@ static virStorageDriver esxStorageDriver = { esxStorageVolumeDelete, /* volDelete */ esxStorageVolumeWipe, /* volWipe */ esxStorageVolumeGetInfo, /* volGetInfo */ - esxStorageVolumeDumpXML, /* volGetXMLDesc */ + esxStorageVolumeGetXMLDesc, /* volGetXMLDesc */ esxStorageVolumeGetPath, /* volGetPath */ esxStoragePoolIsActive, /* poolIsActive */ esxStoragePoolIsPersistent, /* poolIsPersistent */ diff --git a/src/libvirt.c b/src/libvirt.c index e74e977..c93ab57 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -3208,9 +3208,9 @@ virDomainGetXMLDesc(virDomainPtr domain, int flags) flags &= VIR_DOMAIN_XML_FLAGS_MASK; - if (conn->driver->domainDumpXML) { + if (conn->driver->domainGetXMLDesc) { char *ret; - ret = conn->driver->domainDumpXML (domain, flags); + ret = conn->driver->domainGetXMLDesc(domain, flags); if (!ret) goto error; return ret; @@ -3433,14 +3433,14 @@ virDomainMigrateVersion2 (virDomainPtr domain, * different. We fetch the domain XML of the source domain * and pass it to Prepare2. */ - if (!domain->conn->driver->domainDumpXML) { + if (!domain->conn->driver->domainGetXMLDesc) { virLibConnError(VIR_ERR_INTERNAL_ERROR, __FUNCTION__); virDispatchError(domain->conn); return NULL; } - dom_xml = domain->conn->driver->domainDumpXML (domain, - VIR_DOMAIN_XML_SECURE | - VIR_DOMAIN_XML_UPDATE_CPU); + dom_xml = domain->conn->driver->domainGetXMLDesc(domain, + VIR_DOMAIN_XML_SECURE | + VIR_DOMAIN_XML_UPDATE_CPU); if (!dom_xml) return NULL; @@ -6719,9 +6719,9 @@ virNetworkGetXMLDesc(virNetworkPtr network, int flags) conn = network->conn; - if (conn->networkDriver && conn->networkDriver->networkDumpXML) { + if (conn->networkDriver && conn->networkDriver->networkGetXMLDesc) { char *ret; - ret = conn->networkDriver->networkDumpXML (network, flags); + ret = conn->networkDriver->networkGetXMLDesc(network, flags); if (!ret) goto error; return ret; @@ -9636,9 +9636,9 @@ char *virNodeDeviceGetXMLDesc(virNodeDevicePtr dev, unsigned int flags) return NULL; } - if (dev->conn->deviceMonitor && dev->conn->deviceMonitor->deviceDumpXML) { + if (dev->conn->deviceMonitor && dev->conn->deviceMonitor->deviceGetXMLDesc) { char *ret; - ret = dev->conn->deviceMonitor->deviceDumpXML (dev, flags); + ret = dev->conn->deviceMonitor->deviceGetXMLDesc(dev, flags); if (!ret) goto error; return ret; @@ -13057,9 +13057,9 @@ virDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot, goto error; } - if (conn->driver->domainSnapshotDumpXML) { + if (conn->driver->domainSnapshotGetXMLDesc) { char *ret; - ret = conn->driver->domainSnapshotDumpXML(snapshot, flags); + ret = conn->driver->domainSnapshotGetXMLDesc(snapshot, flags); if (!ret) goto error; return ret; diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index a2c8467..fd4984f 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -1916,7 +1916,7 @@ cleanup: } static char * -libxlDomainDumpXML(virDomainPtr dom, int flags) +libxlDomainGetXMLDesc(virDomainPtr dom, int flags) { libxlDriverPrivatePtr driver = dom->conn->privateData; virDomainObjPtr vm; @@ -2725,7 +2725,7 @@ static virDriver libxlDriver = { NULL, /* domainGetMaxVcpus */ NULL, /* domainGetSecurityLabel */ NULL, /* nodeGetSecurityModel */ - libxlDomainDumpXML, /* domainDumpXML */ + libxlDomainGetXMLDesc, /* domainGetXMLDesc */ libxlDomainXMLFromNative, /* domainXmlFromNative */ libxlDomainXMLToNative, /* domainXmlToNative */ libxlListDefinedDomains, /* listDefinedDomains */ @@ -2780,7 +2780,7 @@ static virDriver libxlDriver = { NULL, /* domainHasManagedSaveImage */ NULL, /* domainManagedSaveRemove */ NULL, /* domainSnapshotCreateXML */ - NULL, /* domainSnapshotDumpXML */ + NULL, /* domainSnapshotGetXMLDesc */ NULL, /* domainSnapshotNum */ NULL, /* domainSnapshotListNames */ NULL, /* domainSnapshotLookupByName */ diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index b94941d..a081c6d 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -916,8 +916,8 @@ cleanup: return ret; } -static char *lxcDomainDumpXML(virDomainPtr dom, - int flags) +static char *lxcDomainGetXMLDesc(virDomainPtr dom, + int flags) { lxc_driver_t *driver = dom->conn->privateData; virDomainObjPtr vm; @@ -2840,7 +2840,7 @@ static virDriver lxcDriver = { NULL, /* domainGetMaxVcpus */ NULL, /* domainGetSecurityLabel */ NULL, /* nodeGetSecurityModel */ - lxcDomainDumpXML, /* domainDumpXML */ + lxcDomainGetXMLDesc, /* domainGetXMLDesc */ NULL, /* domainXMLFromNative */ NULL, /* domainXMLToNative */ lxcListDefinedDomains, /* listDefinedDomains */ @@ -2895,7 +2895,7 @@ static virDriver lxcDriver = { NULL, /* domainHasManagedSaveImage */ NULL, /* domainManagedSaveRemove */ NULL, /* domainSnapshotCreateXML */ - NULL, /* domainSnapshotDumpXML */ + NULL, /* domainSnapshotGetXMLDesc */ NULL, /* domainSnapshotNum */ NULL, /* domainSnapshotListNames */ NULL, /* domainSnapshotLookupByName */ diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index 12050b3..7ca2f23 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -2356,7 +2356,7 @@ cleanup: return ret; } -static char *networkDumpXML(virNetworkPtr net, int flags ATTRIBUTE_UNUSED) { +static char *networkGetXMLDesc(virNetworkPtr net, int flags ATTRIBUTE_UNUSED) { struct network_driver *driver = net->conn->networkPrivateData; virNetworkObjPtr network; char *ret = NULL; @@ -2517,7 +2517,7 @@ static virNetworkDriver networkDriver = { networkUndefine, /* networkUndefine */ networkStart, /* networkCreate */ networkDestroy, /* networkDestroy */ - networkDumpXML, /* networkDumpXML */ + networkGetXMLDesc, /* networkGetXMLDesc */ networkGetBridgeName, /* networkGetBridgeName */ networkGetAutostart, /* networkGetAutostart */ networkSetAutostart, /* networkSetAutostart */ diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c index a6c6042..8ec3e44 100644 --- a/src/node_device/node_device_driver.c +++ b/src/node_device/node_device_driver.c @@ -251,8 +251,8 @@ out: } -static char *nodeDeviceDumpXML(virNodeDevicePtr dev, - unsigned int flags ATTRIBUTE_UNUSED) +static char *nodeDeviceGetXMLDesc(virNodeDevicePtr dev, + unsigned int flags ATTRIBUTE_UNUSED) { virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData; virNodeDeviceObjPtr obj; @@ -657,7 +657,7 @@ void registerCommonNodeFuncs(virDeviceMonitorPtr driver) driver->numOfDevices = nodeNumOfDevices; driver->listDevices = nodeListDevices; driver->deviceLookupByName = nodeDeviceLookupByName; - driver->deviceDumpXML = nodeDeviceDumpXML; + driver->deviceGetXMLDesc = nodeDeviceGetXMLDesc; driver->deviceGetParent = nodeDeviceGetParent; driver->deviceNumOfCaps = nodeDeviceNumOfCaps; driver->deviceListCaps = nodeDeviceListCaps; diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 8af3f8a..17af7a6 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -406,8 +406,8 @@ cleanup: static char * -nwfilterDumpXML(virNWFilterPtr obj, - unsigned int flags) { +nwfilterGetXMLDesc(virNWFilterPtr obj, + unsigned int flags) { virNWFilterDriverStatePtr driver = obj->conn->nwfilterPrivateData; virNWFilterObjPtr nwfilter; char *ret = NULL; @@ -457,7 +457,7 @@ static virNWFilterDriver nwfilterDriver = { .nwfilterLookupByUUID = nwfilterLookupByUUID, .defineXML = nwfilterDefine, .undefine = nwfilterUndefine, - .getXMLDesc = nwfilterDumpXML, + .getXMLDesc = nwfilterGetXMLDesc, }; diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c index 0bd007a..539c850 100644 --- a/src/openvz/openvz_driver.c +++ b/src/openvz/openvz_driver.c @@ -425,7 +425,7 @@ static int openvzDomainIsUpdated(virDomainPtr dom ATTRIBUTE_UNUSED) return 0; } -static char *openvzDomainDumpXML(virDomainPtr dom, int flags) { +static char *openvzDomainGetXMLDesc(virDomainPtr dom, int flags) { struct openvz_driver *driver = dom->conn->privateData; virDomainObjPtr vm; char *ret = NULL; @@ -1602,7 +1602,7 @@ static virDriver openvzDriver = { openvzDomainGetMaxVcpus, /* domainGetMaxVcpus */ NULL, /* domainGetSecurityLabel */ NULL, /* nodeGetSecurityModel */ - openvzDomainDumpXML, /* domainDumpXML */ + openvzDomainGetXMLDesc, /* domainGetXMLDesc */ NULL, /* domainXmlFromNative */ NULL, /* domainXmlToNative */ openvzListDefinedDomains, /* listDefinedDomains */ @@ -1657,7 +1657,7 @@ static virDriver openvzDriver = { NULL, /* domainHasManagedSaveImage */ NULL, /* domainManagedSaveRemove */ NULL, /* domainSnapshotCreateXML */ - NULL, /* domainSnapshotDumpXML */ + NULL, /* domainSnapshotGetXMLDesc */ NULL, /* domainSnapshotNum */ NULL, /* domainSnapshotListNames */ NULL, /* domainSnapshotLookupByName */ diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c index 30d4adf..b58b206 100644 --- a/src/phyp/phyp_driver.c +++ b/src/phyp/phyp_driver.c @@ -3302,7 +3302,7 @@ cleanup: } static char * -phypDomainDumpXML(virDomainPtr dom, int flags) +phypDomainGetXMLDesc(virDomainPtr dom, int flags) { ConnectionData *connection_data = dom->conn->networkPrivateData; phyp_driverPtr phyp_driver = dom->conn->privateData; @@ -3763,7 +3763,7 @@ static virDriver phypDriver = { phypGetLparCPUMAX, /* domainGetMaxVcpus */ NULL, /* domainGetSecurityLabel */ NULL, /* nodeGetSecurityModel */ - phypDomainDumpXML, /* domainDumpXML */ + phypDomainGetXMLDesc, /* domainGetXMLDesc */ NULL, /* domainXMLFromNative */ NULL, /* domainXMLToNative */ phypListDefinedDomains, /* listDefinedDomains */ @@ -3818,7 +3818,7 @@ static virDriver phypDriver = { NULL, /* domainHasManagedSaveImage */ NULL, /* domainManagedSaveRemove */ NULL, /* domainSnapshotCreateXML */ - NULL, /* domainSnapshotDumpXML */ + NULL, /* domainSnapshotGetXMLDesc */ NULL, /* domainSnapshotNum */ NULL, /* domainSnapshotListNames */ NULL, /* domainSnapshotLookupByName */ diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 22b2634..2828823 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -241,7 +241,7 @@ qemuNetworkIfaceConnect(virDomainDefPtr def, virReportOOMError(); goto cleanup; } - /* avoid exposing vnet%d in dumpxml or error outputs */ + /* avoid exposing vnet%d in getXMLDesc or error outputs */ template_ifname = 1; } diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 0fd0f10..6275826 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3287,8 +3287,8 @@ cleanup: } -static char *qemudDomainDumpXML(virDomainPtr dom, - int flags) { +static char *qemuDomainGetXMLDesc(virDomainPtr dom, + int flags) { struct qemud_driver *driver = dom->conn->privateData; virDomainObjPtr vm; char *ret = NULL; @@ -6580,8 +6580,8 @@ cleanup: return snapshot; } -static char *qemuDomainSnapshotDumpXML(virDomainSnapshotPtr snapshot, - unsigned int flags) +static char *qemuDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot, + unsigned int flags) { struct qemud_driver *driver = snapshot->domain->conn->privateData; virDomainObjPtr vm = NULL; @@ -7127,7 +7127,7 @@ static virDriver qemuDriver = { qemudDomainGetMaxVcpus, /* domainGetMaxVcpus */ qemudDomainGetSecurityLabel, /* domainGetSecurityLabel */ qemudNodeGetSecurityModel, /* nodeGetSecurityModel */ - qemudDomainDumpXML, /* domainDumpXML */ + qemuDomainGetXMLDesc, /* domainGetXMLDesc */ qemuDomainXMLFromNative, /* domainXmlFromNative */ qemuDomainXMLToNative, /* domainXMLToNative */ qemudListDefinedDomains, /* listDefinedDomains */ @@ -7182,7 +7182,7 @@ static virDriver qemuDriver = { qemuDomainHasManagedSaveImage, /* domainHasManagedSaveImage */ qemuDomainManagedSaveRemove, /* domainManagedSaveRemove */ qemuDomainSnapshotCreateXML, /* domainSnapshotCreateXML */ - qemuDomainSnapshotDumpXML, /* domainSnapshotDumpXML */ + qemuDomainSnapshotGetXMLDesc, /* domainSnapshotGetXMLDesc */ qemuDomainSnapshotNum, /* domainSnapshotNum */ qemuDomainSnapshotListNames, /* domainSnapshotListNames */ qemuDomainSnapshotLookupByName, /* domainSnapshotLookupByName */ diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index d076a90..322173c 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -6428,7 +6428,7 @@ static virDriver remote_driver = { remoteDomainGetMaxVcpus, /* domainGetMaxVcpus */ remoteDomainGetSecurityLabel, /* domainGetSecurityLabel */ remoteNodeGetSecurityModel, /* nodeGetSecurityModel */ - remoteDomainDumpXML, /* domainDumpXML */ + remoteDomainGetXMLDesc, /* domainGetXMLDesc */ remoteDomainXMLFromNative, /* domainXMLFromNative */ remoteDomainXMLToNative, /* domainXMLToNative */ remoteListDefinedDomains, /* listDefinedDomains */ @@ -6483,7 +6483,7 @@ static virDriver remote_driver = { remoteDomainHasManagedSaveImage, /* domainHasManagedSaveImage */ remoteDomainManagedSaveRemove, /* domainManagedSaveRemove */ remoteDomainSnapshotCreateXML, /* domainSnapshotCreateXML */ - remoteDomainSnapshotDumpXML, /* domainSnapshotDumpXML */ + remoteDomainSnapshotGetXMLDesc, /* domainSnapshotGetXMLDesc */ remoteDomainSnapshotNum, /* domainSnapshotNum */ remoteDomainSnapshotListNames, /* domainSnapshotListNames */ remoteDomainSnapshotLookupByName, /* domainSnapshotLookupByName */ @@ -6510,7 +6510,7 @@ static virNetworkDriver network_driver = { .networkUndefine = remoteNetworkUndefine, .networkCreate = remoteNetworkCreate, .networkDestroy = remoteNetworkDestroy, - .networkDumpXML = remoteNetworkDumpXML, + .networkGetXMLDesc = remoteNetworkGetXMLDesc, .networkGetBridgeName = remoteNetworkGetBridgeName, .networkGetAutostart = remoteNetworkGetAutostart, .networkSetAutostart = remoteNetworkSetAutostart, @@ -6557,7 +6557,7 @@ static virStorageDriver storage_driver = { .poolDelete = remoteStoragePoolDelete, .poolRefresh = remoteStoragePoolRefresh, .poolGetInfo = remoteStoragePoolGetInfo, - .poolGetXMLDesc = remoteStoragePoolDumpXML, + .poolGetXMLDesc = remoteStoragePoolGetXMLDesc, .poolGetAutostart = remoteStoragePoolGetAutostart, .poolSetAutostart = remoteStoragePoolSetAutostart, .poolNumOfVolumes = remoteStoragePoolNumOfVolumes, @@ -6573,7 +6573,7 @@ static virStorageDriver storage_driver = { .volDelete = remoteStorageVolDelete, .volWipe = remoteStorageVolWipe, .volGetInfo = remoteStorageVolGetInfo, - .volGetXMLDesc = remoteStorageVolDumpXML, + .volGetXMLDesc = remoteStorageVolGetXMLDesc, .volGetPath = remoteStorageVolGetPath, .poolIsActive = remoteStoragePoolIsActive, .poolIsPersistent = remoteStoragePoolIsPersistent, @@ -6601,7 +6601,7 @@ static virDeviceMonitor dev_monitor = { .numOfDevices = remoteNodeNumOfDevices, .listDevices = remoteNodeListDevices, .deviceLookupByName = remoteNodeDeviceLookupByName, - .deviceDumpXML = remoteNodeDeviceDumpXML, + .deviceGetXMLDesc = remoteNodeDeviceGetXMLDesc, .deviceGetParent = remoteNodeDeviceGetParent, .deviceNumOfCaps = remoteNodeDeviceNumOfCaps, .deviceListCaps = remoteNodeDeviceListCaps, diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x index c706c36..7f9a30c 100644 --- a/src/remote/remote_protocol.x +++ b/src/remote/remote_protocol.x @@ -714,12 +714,12 @@ struct remote_domain_core_dump_args { int flags; }; -struct remote_domain_dump_xml_args { +struct remote_domain_get_xml_desc_args { remote_nonnull_domain dom; int flags; }; -struct remote_domain_dump_xml_ret { +struct remote_domain_get_xml_desc_ret { remote_nonnull_string xml; }; @@ -987,12 +987,12 @@ struct remote_network_destroy_args { remote_nonnull_network net; }; -struct remote_network_dump_xml_args { +struct remote_network_get_xml_desc_args { remote_nonnull_network net; int flags; }; -struct remote_network_dump_xml_ret { +struct remote_network_get_xml_desc_ret { remote_nonnull_string xml; }; @@ -1289,12 +1289,12 @@ struct remote_storage_pool_refresh_args { unsigned flags; }; -struct remote_storage_pool_dump_xml_args { +struct remote_storage_pool_get_xml_desc_args { remote_nonnull_storage_pool pool; unsigned flags; }; -struct remote_storage_pool_dump_xml_ret { +struct remote_storage_pool_get_xml_desc_ret { remote_nonnull_string xml; }; @@ -1399,12 +1399,12 @@ struct remote_storage_vol_wipe_args { unsigned flags; }; -struct remote_storage_vol_dump_xml_args { +struct remote_storage_vol_get_xml_desc_args { remote_nonnull_storage_vol vol; unsigned flags; }; -struct remote_storage_vol_dump_xml_ret { +struct remote_storage_vol_get_xml_desc_ret { remote_nonnull_string xml; }; @@ -1455,12 +1455,12 @@ struct remote_node_device_lookup_by_name_ret { remote_nonnull_node_device dev; }; -struct remote_node_device_dump_xml_args { +struct remote_node_device_get_xml_desc_args { remote_nonnull_string name; unsigned flags; }; -struct remote_node_device_dump_xml_ret { +struct remote_node_device_get_xml_desc_ret { remote_nonnull_string xml; }; @@ -1854,12 +1854,12 @@ struct remote_domain_snapshot_create_xml_ret { remote_nonnull_domain_snapshot snap; }; -struct remote_domain_snapshot_dump_xml_args { +struct remote_domain_snapshot_get_xml_desc_args { remote_nonnull_domain_snapshot snap; int flags; }; -struct remote_domain_snapshot_dump_xml_ret { +struct remote_domain_snapshot_get_xml_desc_ret { remote_nonnull_string xml; }; @@ -1962,7 +1962,7 @@ enum remote_procedure { REMOTE_PROC_DOMAIN_DEFINE_XML = 11, REMOTE_PROC_DOMAIN_DESTROY = 12, REMOTE_PROC_DOMAIN_DETACH_DEVICE = 13, - REMOTE_PROC_DOMAIN_DUMP_XML = 14, + REMOTE_PROC_DOMAIN_GET_XML_DESC = 14, REMOTE_PROC_DOMAIN_GET_AUTOSTART = 15, REMOTE_PROC_DOMAIN_GET_INFO = 16, REMOTE_PROC_DOMAIN_GET_MAX_MEMORY = 17, @@ -1994,7 +1994,7 @@ enum remote_procedure { REMOTE_PROC_NETWORK_DEFINE_XML = 41, REMOTE_PROC_NETWORK_DESTROY = 42, - REMOTE_PROC_NETWORK_DUMP_XML = 43, + REMOTE_PROC_NETWORK_GET_XML_DESC = 43, REMOTE_PROC_NETWORK_GET_AUTOSTART = 44, REMOTE_PROC_NETWORK_GET_BRIDGE_NAME = 45, REMOTE_PROC_NETWORK_LOOKUP_BY_NAME = 46, @@ -2043,7 +2043,7 @@ enum remote_procedure { REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_UUID = 85, REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_VOLUME = 86, REMOTE_PROC_STORAGE_POOL_GET_INFO = 87, - REMOTE_PROC_STORAGE_POOL_DUMP_XML = 88, + REMOTE_PROC_STORAGE_POOL_GET_XML_DESC = 88, REMOTE_PROC_STORAGE_POOL_GET_AUTOSTART = 89, REMOTE_PROC_STORAGE_POOL_SET_AUTOSTART = 90, @@ -2055,7 +2055,7 @@ enum remote_procedure { REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_KEY = 96, REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_PATH = 97, REMOTE_PROC_STORAGE_VOL_GET_INFO = 98, - REMOTE_PROC_STORAGE_VOL_DUMP_XML = 99, + REMOTE_PROC_STORAGE_VOL_GET_XML_DESC = 99, REMOTE_PROC_STORAGE_VOL_GET_PATH = 100, REMOTE_PROC_NODE_GET_CELLS_FREE_MEMORY = 101, @@ -2072,7 +2072,7 @@ enum remote_procedure { REMOTE_PROC_NODE_NUM_OF_DEVICES = 111, REMOTE_PROC_NODE_LIST_DEVICES = 112, REMOTE_PROC_NODE_DEVICE_LOOKUP_BY_NAME = 113, - REMOTE_PROC_NODE_DEVICE_DUMP_XML = 114, + REMOTE_PROC_NODE_DEVICE_GET_XML_DESC = 114, REMOTE_PROC_NODE_DEVICE_GET_PARENT = 115, REMOTE_PROC_NODE_DEVICE_NUM_OF_CAPS = 116, REMOTE_PROC_NODE_DEVICE_LIST_CAPS = 117, @@ -2151,7 +2151,7 @@ enum remote_procedure { REMOTE_PROC_DOMAIN_HAS_MANAGED_SAVE_IMAGE = 183, REMOTE_PROC_DOMAIN_MANAGED_SAVE_REMOVE = 184, REMOTE_PROC_DOMAIN_SNAPSHOT_CREATE_XML = 185, - REMOTE_PROC_DOMAIN_SNAPSHOT_DUMP_XML = 186, + REMOTE_PROC_DOMAIN_SNAPSHOT_GET_XML_DESC = 186, REMOTE_PROC_DOMAIN_SNAPSHOT_NUM = 187, REMOTE_PROC_DOMAIN_SNAPSHOT_LIST_NAMES = 188, REMOTE_PROC_DOMAIN_SNAPSHOT_LOOKUP_BY_NAME = 189, diff --git a/src/remote_protocol-structs b/src/remote_protocol-structs index f904c4d..eed63ca 100644 --- a/src/remote_protocol-structs +++ b/src/remote_protocol-structs @@ -403,11 +403,11 @@ struct remote_domain_core_dump_args { remote_nonnull_string to; int flags; }; -struct remote_domain_dump_xml_args { +struct remote_domain_get_xml_desc_args { remote_nonnull_domain dom; int flags; }; -struct remote_domain_dump_xml_ret { +struct remote_domain_get_xml_desc_ret { remote_nonnull_string xml; }; struct remote_domain_migrate_prepare_args { @@ -659,11 +659,11 @@ struct remote_network_create_args { struct remote_network_destroy_args { remote_nonnull_network net; }; -struct remote_network_dump_xml_args { +struct remote_network_get_xml_desc_args { remote_nonnull_network net; int flags; }; -struct remote_network_dump_xml_ret { +struct remote_network_get_xml_desc_ret { remote_nonnull_string xml; }; struct remote_network_get_bridge_name_args { @@ -912,11 +912,11 @@ struct remote_storage_pool_refresh_args { remote_nonnull_storage_pool pool; u_int flags; }; -struct remote_storage_pool_dump_xml_args { +struct remote_storage_pool_get_xml_desc_args { remote_nonnull_storage_pool pool; u_int flags; }; -struct remote_storage_pool_dump_xml_ret { +struct remote_storage_pool_get_xml_desc_ret { remote_nonnull_string xml; }; struct remote_storage_pool_get_info_args { @@ -998,11 +998,11 @@ struct remote_storage_vol_wipe_args { remote_nonnull_storage_vol vol; u_int flags; }; -struct remote_storage_vol_dump_xml_args { +struct remote_storage_vol_get_xml_desc_args { remote_nonnull_storage_vol vol; u_int flags; }; -struct remote_storage_vol_dump_xml_ret { +struct remote_storage_vol_get_xml_desc_ret { remote_nonnull_string xml; }; struct remote_storage_vol_get_info_args { @@ -1043,11 +1043,11 @@ struct remote_node_device_lookup_by_name_args { struct remote_node_device_lookup_by_name_ret { remote_nonnull_node_device dev; }; -struct remote_node_device_dump_xml_args { +struct remote_node_device_get_xml_desc_args { remote_nonnull_string name; u_int flags; }; -struct remote_node_device_dump_xml_ret { +struct remote_node_device_get_xml_desc_ret { remote_nonnull_string xml; }; struct remote_node_device_get_parent_args { @@ -1355,11 +1355,11 @@ struct remote_domain_snapshot_create_xml_args { struct remote_domain_snapshot_create_xml_ret { remote_nonnull_domain_snapshot snap; }; -struct remote_domain_snapshot_dump_xml_args { +struct remote_domain_snapshot_get_xml_desc_args { remote_nonnull_domain_snapshot snap; int flags; }; -struct remote_domain_snapshot_dump_xml_ret { +struct remote_domain_snapshot_get_xml_desc_ret { remote_nonnull_string xml; }; struct remote_domain_snapshot_num_args { diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index 5118ffb..9328ca4 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -939,8 +939,8 @@ cleanup: } static char * -storagePoolDumpXML(virStoragePoolPtr obj, - unsigned int flags ATTRIBUTE_UNUSED) { +storagePoolGetXMLDesc(virStoragePoolPtr obj, + unsigned int flags ATTRIBUTE_UNUSED) { virStorageDriverStatePtr driver = obj->conn->storagePrivateData; virStoragePoolObjPtr pool; char *ret = NULL; @@ -2122,7 +2122,7 @@ static virStorageDriver storageDriver = { .poolDelete = storagePoolDelete, .poolRefresh = storagePoolRefresh, .poolGetInfo = storagePoolGetInfo, - .poolGetXMLDesc = storagePoolDumpXML, + .poolGetXMLDesc = storagePoolGetXMLDesc, .poolGetAutostart = storagePoolGetAutostart, .poolSetAutostart = storagePoolSetAutostart, .poolNumOfVolumes = storagePoolNumVolumes, diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 0978214..8524a19 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -2336,7 +2336,7 @@ cleanup: return ret; } -static char *testDomainDumpXML(virDomainPtr domain, int flags) +static char *testDomainGetXMLDesc(virDomainPtr domain, int flags) { testConnPtr privconn = domain->conn->privateData; virDomainDefPtr def; @@ -3137,7 +3137,7 @@ cleanup: return ret; } -static char *testNetworkDumpXML(virNetworkPtr network, int flags ATTRIBUTE_UNUSED) { +static char *testNetworkGetXMLDesc(virNetworkPtr network, int flags ATTRIBUTE_UNUSED) { testConnPtr privconn = network->conn->privateData; virNetworkObjPtr privnet; char *ret = NULL; @@ -4162,8 +4162,8 @@ cleanup: } static char * -testStoragePoolDumpXML(virStoragePoolPtr pool, - unsigned int flags ATTRIBUTE_UNUSED) { +testStoragePoolGetXMLDesc(virStoragePoolPtr pool, + unsigned int flags ATTRIBUTE_UNUSED) { testConnPtr privconn = pool->conn->privateData; virStoragePoolObjPtr privpool; char *ret = NULL; @@ -4914,8 +4914,8 @@ cleanup: } static char * -testNodeDeviceDumpXML(virNodeDevicePtr dev, - unsigned int flags ATTRIBUTE_UNUSED) +testNodeDeviceGetXMLDesc(virNodeDevicePtr dev, + unsigned int flags ATTRIBUTE_UNUSED) { testConnPtr driver = dev->conn->privateData; virNodeDeviceObjPtr obj; @@ -5382,7 +5382,7 @@ static virDriver testDriver = { testDomainGetMaxVcpus, /* domainGetMaxVcpus */ NULL, /* domainGetSecurityLabel */ NULL, /* nodeGetSecurityModel */ - testDomainDumpXML, /* domainDumpXML */ + testDomainGetXMLDesc, /* domainGetXMLDesc */ NULL, /* domainXMLFromNative */ NULL, /* domainXMLToNative */ testListDefinedDomains, /* listDefinedDomains */ @@ -5437,7 +5437,7 @@ static virDriver testDriver = { NULL, /* domainHasManagedSaveImage */ NULL, /* domainManagedSaveRemove */ NULL, /* domainSnapshotCreateXML */ - NULL, /* domainSnapshotDumpXML */ + NULL, /* domainSnapshotGetXMLDesc */ NULL, /* domainSnapshotNum */ NULL, /* domainSnapshotListNames */ NULL, /* domainSnapshotLookupByName */ @@ -5464,7 +5464,7 @@ static virNetworkDriver testNetworkDriver = { testNetworkUndefine, /* networkUndefine */ testNetworkStart, /* networkCreate */ testNetworkDestroy, /* networkDestroy */ - testNetworkDumpXML, /* networkDumpXML */ + testNetworkGetXMLDesc, /* networkGetXMLDesc */ testNetworkGetBridgeName, /* networkGetBridgeName */ testNetworkGetAutostart, /* networkGetAutostart */ testNetworkSetAutostart, /* networkSetAutostart */ @@ -5513,7 +5513,7 @@ static virStorageDriver testStorageDriver = { .poolDelete = testStoragePoolDelete, .poolRefresh = testStoragePoolRefresh, .poolGetInfo = testStoragePoolGetInfo, - .poolGetXMLDesc = testStoragePoolDumpXML, + .poolGetXMLDesc = testStoragePoolGetXMLDesc, .poolGetAutostart = testStoragePoolGetAutostart, .poolSetAutostart = testStoragePoolSetAutostart, .poolNumOfVolumes = testStoragePoolNumVolumes, @@ -5540,7 +5540,7 @@ static virDeviceMonitor testDevMonitor = { .numOfDevices = testNodeNumOfDevices, .listDevices = testNodeListDevices, .deviceLookupByName = testNodeDeviceLookupByName, - .deviceDumpXML = testNodeDeviceDumpXML, + .deviceGetXMLDesc = testNodeDeviceGetXMLDesc, .deviceGetParent = testNodeDeviceGetParent, .deviceNumOfCaps = testNodeDeviceNumOfCaps, .deviceListCaps = testNodeDeviceListCaps, diff --git a/src/uml/uml_conf.c b/src/uml/uml_conf.c index 84b74f3..b741edb 100644 --- a/src/uml/uml_conf.c +++ b/src/uml/uml_conf.c @@ -132,7 +132,7 @@ umlConnectTapDevice(virConnectPtr conn, VIR_FREE(net->ifname); if (!(net->ifname = strdup("vnet%d"))) goto no_memory; - /* avoid exposing vnet%d in dumpxml or error outputs */ + /* avoid exposing vnet%d in getXMLDesc or error outputs */ template_ifname = 1; } diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c index 33849a0..42590c0 100644 --- a/src/uml/uml_driver.c +++ b/src/uml/uml_driver.c @@ -1522,8 +1522,8 @@ cleanup: } -static char *umlDomainDumpXML(virDomainPtr dom, - int flags ATTRIBUTE_UNUSED) { +static char *umlDomainGetXMLDesc(virDomainPtr dom, + int flags ATTRIBUTE_UNUSED) { struct uml_driver *driver = dom->conn->privateData; virDomainObjPtr vm; char *ret = NULL; @@ -2188,7 +2188,7 @@ static virDriver umlDriver = { NULL, /* domainGetMaxVcpus */ NULL, /* domainGetSecurityLabel */ NULL, /* nodeGetSecurityModel */ - umlDomainDumpXML, /* domainDumpXML */ + umlDomainGetXMLDesc, /* domainGetXMLDesc */ NULL, /* domainXMLFromNative */ NULL, /* domainXMLToNative */ umlListDefinedDomains, /* listDefinedDomains */ @@ -2243,7 +2243,7 @@ static virDriver umlDriver = { NULL, /* domainHasManagedSaveImage */ NULL, /* domainManagedSaveRemove */ NULL, /* domainSnapshotCreateXML */ - NULL, /* domainSnapshotDumpXML */ + NULL, /* domainSnapshotGetXMLDesc */ NULL, /* domainSnapshotNum */ NULL, /* domainSnapshotListNames */ NULL, /* domainSnapshotLookupByName */ diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index 8241d34..c38472f 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -2066,7 +2066,7 @@ vboxDomainGetMaxVcpus(virDomainPtr dom) VIR_DOMAIN_VCPU_MAXIMUM)); } -static char *vboxDomainDumpXML(virDomainPtr dom, int flags) { +static char *vboxDomainGetXMLDesc(virDomainPtr dom, int flags) { VBOX_OBJECT_CHECK(dom->conn, char *, NULL); virDomainDefPtr def = NULL; IMachine *machine = NULL; @@ -5638,8 +5638,8 @@ cleanup: } static char * -vboxDomainSnapshotDumpXML(virDomainSnapshotPtr snapshot, - unsigned int flags) +vboxDomainSnapshotGetXMLDesc(virDomainSnapshotPtr snapshot, + unsigned int flags) { virDomainPtr dom = snapshot->domain; VBOX_OBJECT_CHECK(dom->conn, char *, NULL); @@ -7510,7 +7510,7 @@ static int vboxNetworkDestroy(virNetworkPtr network) { return vboxNetworkUndefineDestroy(network, false); } -static char *vboxNetworkDumpXML(virNetworkPtr network, int flags ATTRIBUTE_UNUSED) { +static char *vboxNetworkGetXMLDesc(virNetworkPtr network, int flags ATTRIBUTE_UNUSED) { VBOX_OBJECT_HOST_CHECK(network->conn, char *, NULL); virNetworkDefPtr def = NULL; virNetworkIpDefPtr ipdef = NULL; @@ -8577,7 +8577,7 @@ virDriver NAME(Driver) = { vboxDomainGetMaxVcpus, /* domainGetMaxVcpus */ NULL, /* domainGetSecurityLabel */ NULL, /* nodeGetSecurityModel */ - vboxDomainDumpXML, /* domainDumpXML */ + vboxDomainGetXMLDesc, /* domainGetXMLDesc */ NULL, /* domainXMLFromNative */ NULL, /* domainXMLToNative */ vboxListDefinedDomains, /* listDefinedDomains */ @@ -8642,7 +8642,7 @@ virDriver NAME(Driver) = { NULL, /* domainHasManagedSaveImage */ NULL, /* domainManagedSaveRemove */ vboxDomainSnapshotCreateXML, /* domainSnapshotCreateXML */ - vboxDomainSnapshotDumpXML, /* domainSnapshotDumpXML */ + vboxDomainSnapshotGetXMLDesc, /* domainSnapshotGetXMLDesc */ vboxDomainSnapshotNum, /* domainSnapshotNum */ vboxDomainSnapshotListNames, /* domainSnapshotListNames */ vboxDomainSnapshotLookupByName, /* domainSnapshotLookupByName */ @@ -8669,7 +8669,7 @@ virNetworkDriver NAME(NetworkDriver) = { .networkUndefine = vboxNetworkUndefine, .networkCreate = vboxNetworkCreate, .networkDestroy = vboxNetworkDestroy, - .networkDumpXML = vboxNetworkDumpXML, + .networkGetXMLDesc = vboxNetworkGetXMLDesc, .networkGetBridgeName = NULL, .networkGetAutostart = NULL, .networkSetAutostart = NULL diff --git a/src/vmware/vmware_driver.c b/src/vmware/vmware_driver.c index bbfb1a4..27e8cef 100644 --- a/src/vmware/vmware_driver.c +++ b/src/vmware/vmware_driver.c @@ -789,7 +789,7 @@ vmwareDomainIsPersistent(virDomainPtr dom) static char * -vmwareDomainDumpXML(virDomainPtr dom, int flags) +vmwareDomainGetXMLDesc(virDomainPtr dom, int flags) { struct vmware_driver *driver = dom->conn->privateData; virDomainObjPtr vm; @@ -942,7 +942,7 @@ static virDriver vmwareDriver = { NULL, /* domainGetMaxVcpus */ NULL, /* domainGetSecurityLabel */ NULL, /* nodeGetSecurityModel */ - vmwareDomainDumpXML, /* domainDumpXML */ + vmwareDomainGetXMLDesc, /* domainGetXMLDesc */ NULL, /* domainXmlFromNative */ NULL, /* domainXmlToNative */ vmwareListDefinedDomains, /* listDefinedDomains */ @@ -997,7 +997,7 @@ static virDriver vmwareDriver = { NULL, /* domainHasManagedSaveImage */ NULL, /* domainManagedSaveRemove */ NULL, /* domainSnapshotCreateXML */ - NULL, /* domainSnapshotDumpXML */ + NULL, /* domainSnapshotGetXMLDesc */ NULL, /* domainSnapshotNum */ NULL, /* domainSnapshotListNames */ NULL, /* domainSnapshotLookupByName */ diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c index dd94fbc..96b6809 100644 --- a/src/xen/xen_driver.c +++ b/src/xen/xen_driver.c @@ -1192,20 +1192,20 @@ xenUnifiedDomainGetMaxVcpus (virDomainPtr dom) } static char * -xenUnifiedDomainDumpXML (virDomainPtr dom, int flags) +xenUnifiedDomainGetXMLDesc(virDomainPtr dom, int flags) { GET_PRIVATE(dom->conn); if (dom->id == -1 && priv->xendConfigVersion < 3 ) { if (priv->opened[XEN_UNIFIED_XM_OFFSET]) - return xenXMDomainDumpXML(dom, flags); + return xenXMDomainGetXMLDesc(dom, flags); } else { if (priv->opened[XEN_UNIFIED_XEND_OFFSET]) { char *cpus, *res; xenUnifiedLock(priv); cpus = xenDomainUsedCpus(dom); xenUnifiedUnlock(priv); - res = xenDaemonDomainDumpXML(dom, flags, cpus); + res = xenDaemonDomainGetXMLDesc(dom, flags, cpus); VIR_FREE(cpus); return(res); } @@ -1374,7 +1374,7 @@ xenUnifiedDomainMigrateFinish (virConnectPtr dconn, } if (flags & VIR_MIGRATE_PERSIST_DEST) { - domain_xml = xenDaemonDomainDumpXML (dom, 0, NULL); + domain_xml = xenDaemonDomainGetXMLDesc(dom, 0, NULL); if (! domain_xml) { xenUnifiedError(VIR_ERR_MIGRATE_PERSIST_FAILED, "%s", _("failed to get XML representation of migrated domain")); @@ -2143,7 +2143,7 @@ static virDriver xenUnifiedDriver = { xenUnifiedDomainGetMaxVcpus, /* domainGetMaxVcpus */ NULL, /* domainGetSecurityLabel */ NULL, /* nodeGetSecurityModel */ - xenUnifiedDomainDumpXML, /* domainDumpXML */ + xenUnifiedDomainGetXMLDesc, /* domainGetXMLDesc */ xenUnifiedDomainXMLFromNative, /* domainXMLFromNative */ xenUnifiedDomainXMLToNative, /* domainXMLToNative */ xenUnifiedListDefinedDomains, /* listDefinedDomains */ @@ -2198,7 +2198,7 @@ static virDriver xenUnifiedDriver = { NULL, /* domainHasManagedSaveImage */ NULL, /* domainManagedSaveRemove */ NULL, /* domainSnapshotCreateXML */ - NULL, /* domainSnapshotDumpXML */ + NULL, /* domainSnapshotGetXMLDesc */ NULL, /* domainSnapshotNum */ NULL, /* domainSnapshotListNames */ NULL, /* domainSnapshotLookupByName */ diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c index a4420d8..38a2586 100644 --- a/src/xen/xend_internal.c +++ b/src/xen/xend_internal.c @@ -1813,7 +1813,7 @@ cleanup: /** - * xenDaemonDomainDumpXML: + * xenDaemonDomainGetXMLDesc: * @domain: a domain object * @flags: potential dump flags * @cpus: list of cpu the domain is pinned to. @@ -1824,7 +1824,7 @@ cleanup: * the caller must free() the returned value. */ char * -xenDaemonDomainDumpXML(virDomainPtr domain, int flags, const char *cpus) +xenDaemonDomainGetXMLDesc(virDomainPtr domain, int flags, const char *cpus) { xenUnifiedPrivatePtr priv; virDomainDefPtr def; diff --git a/src/xen/xend_internal.h b/src/xen/xend_internal.h index 805cf91..22393b0 100644 --- a/src/xen/xend_internal.h +++ b/src/xen/xend_internal.h @@ -110,7 +110,7 @@ int xenDaemonDomainRestore(virConnectPtr conn, const char *filename); int xenDaemonDomainSetMemory(virDomainPtr domain, unsigned long memory); int xenDaemonDomainSetMaxMemory(virDomainPtr domain, unsigned long memory); int xenDaemonDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info); -char *xenDaemonDomainDumpXML(virDomainPtr domain, int flags, const char *cpus); +char *xenDaemonDomainGetXMLDesc(virDomainPtr domain, int flags, const char *cpus); unsigned long xenDaemonDomainGetMaxMemory(virDomainPtr domain); char **xenDaemonListDomainsOld(virConnectPtr xend); diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c index 07a0c0f..69e14c3 100644 --- a/src/xen/xm_internal.c +++ b/src/xen/xm_internal.c @@ -513,7 +513,7 @@ error: * Turn a config record into a lump of XML describing the * domain, suitable for later feeding for virDomainCreateXML */ -char *xenXMDomainDumpXML(virDomainPtr domain, int flags) { +char *xenXMDomainGetXMLDesc(virDomainPtr domain, int flags) { xenUnifiedPrivatePtr priv; const char *filename; xenXMConfCachePtr entry; diff --git a/src/xen/xm_internal.h b/src/xen/xm_internal.h index 695bb3e..5a070b1 100644 --- a/src/xen/xm_internal.h +++ b/src/xen/xm_internal.h @@ -40,7 +40,7 @@ virDrvOpenStatus xenXMOpen(virConnectPtr conn, virConnectAuthPtr auth, int flags int xenXMClose(virConnectPtr conn); const char *xenXMGetType(virConnectPtr conn); int xenXMDomainGetInfo(virDomainPtr domain, virDomainInfoPtr info); -char *xenXMDomainDumpXML(virDomainPtr domain, int flags); +char *xenXMDomainGetXMLDesc(virDomainPtr domain, int flags); int xenXMDomainSetMemory(virDomainPtr domain, unsigned long memory); int xenXMDomainSetMaxMemory(virDomainPtr domain, unsigned long memory); unsigned long xenXMDomainGetMaxMemory(virDomainPtr domain); diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c index 3fbdcc6..64d53b8 100644 --- a/src/xenapi/xenapi_driver.c +++ b/src/xenapi/xenapi_driver.c @@ -1224,13 +1224,13 @@ xenapiDomainGetMaxVcpus (virDomainPtr dom) } /* - * xenapiDomainDumpXML + * xenapiDomainGetXMLDesc * * * Returns XML string of the domain configuration on success or -1 in case of error */ static char * -xenapiDomainDumpXML (virDomainPtr dom, int flags ATTRIBUTE_UNUSED) +xenapiDomainGetXMLDesc(virDomainPtr dom, int flags ATTRIBUTE_UNUSED) { xen_vm vm=NULL; xen_vm_set *vms; @@ -1824,7 +1824,7 @@ static virDriver xenapiDriver = { xenapiDomainGetMaxVcpus, /* domainGetMaxVcpus */ NULL, /* domainGetSecurityLabel */ NULL, /* nodeGetSecurityModel */ - xenapiDomainDumpXML, /* domainDumpXML */ + xenapiDomainGetXMLDesc, /* domainGetXMLDesc */ NULL, /* domainXmlFromNative */ NULL, /* domainXmlToNative */ xenapiListDefinedDomains, /* listDefinedDomains */ @@ -1879,7 +1879,7 @@ static virDriver xenapiDriver = { NULL, /* domainHasManagedSaveImage */ NULL, /* domainManagedSaveRemove */ NULL, /* domainSnapshotCreateXML */ - NULL, /* domainSnapshotDumpXML */ + NULL, /* domainSnapshotGetXMLDesc */ NULL, /* domainSnapshotNum */ NULL, /* domainSnapshotListNames */ NULL, /* domainSnapshotLookupByName */ -- 1.7.0.4

On 05/07/2011 06:28 AM, Matthias Bolte wrote:
This matches the public API and helps to get rid of some speical case
s/speical/special/
code in the remote generator.
Rename driver API functions and XDR protocol structs.
No functional change included outside of the remote generator. 31 files changed, 141 insertions(+), 143 deletions(-)
Pretty evenly matched, except for the two lines extra removal in remote_generator.pl. Quite mechanical. ACK. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

2011/5/9 Eric Blake <eblake@redhat.com>:
On 05/07/2011 06:28 AM, Matthias Bolte wrote:
This matches the public API and helps to get rid of some speical case
s/speical/special/
code in the remote generator.
Rename driver API functions and XDR protocol structs.
No functional change included outside of the remote generator. 31 files changed, 141 insertions(+), 143 deletions(-)
Pretty evenly matched, except for the two lines extra removal in remote_generator.pl. Quite mechanical.
ACK.
Thanks, pushed. Matthias

--- daemon/remote_generator.pl | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/daemon/remote_generator.pl b/daemon/remote_generator.pl index b06e51a..8d62c37 100755 --- a/daemon/remote_generator.pl +++ b/daemon/remote_generator.pl @@ -380,7 +380,7 @@ elsif ($opt_b) { } else { push(@args_list, "args->$2"); } - } elsif ($args_member =~ m/^\/*/) { + } elsif ($args_member =~ m/^(\/)?\*/) { # ignore comments } else { die "unhandled type for argument value: $args_member"; @@ -909,7 +909,7 @@ elsif ($opt_k) { push(@args_list, "$type_name $arg_name"); push(@setters_list, "args.$arg_name = $arg_name;"); - } elsif ($args_member =~ m/^\/*/) { + } elsif ($args_member =~ m/^(\/)?\*/) { # ignore comments } else { die "unhandled type for argument value: $args_member"; -- 1.7.0.4

On 05/07/2011 06:28 AM, Matthias Bolte wrote:
--- daemon/remote_generator.pl | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/daemon/remote_generator.pl b/daemon/remote_generator.pl index b06e51a..8d62c37 100755 --- a/daemon/remote_generator.pl +++ b/daemon/remote_generator.pl @@ -380,7 +380,7 @@ elsif ($opt_b) { } else { push(@args_list, "args->$2"); } - } elsif ($args_member =~ m/^\/*/) {
Ignore 0 or more / at the start of a line (which basically meant _every_ single line that got to this =~ would match, regardless of whether it is a comment)...
+ } elsif ($args_member =~ m/^(\/)?\*/) {
vs. ignore literal '/*' or '*' at the start of a line (which catches both the start and a line continuation for /* */ comments, but misses // comments - then again, we don't use // comments). Looks right to me, so: ACK. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

2011/5/9 Eric Blake <eblake@redhat.com>:
On 05/07/2011 06:28 AM, Matthias Bolte wrote:
--- daemon/remote_generator.pl | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/daemon/remote_generator.pl b/daemon/remote_generator.pl index b06e51a..8d62c37 100755 --- a/daemon/remote_generator.pl +++ b/daemon/remote_generator.pl @@ -380,7 +380,7 @@ elsif ($opt_b) { } else { push(@args_list, "args->$2"); } - } elsif ($args_member =~ m/^\/*/) {
Ignore 0 or more / at the start of a line (which basically meant _every_ single line that got to this =~ would match, regardless of whether it is a comment)...
+ } elsif ($args_member =~ m/^(\/)?\*/) {
vs. ignore literal '/*' or '*' at the start of a line (which catches both the start and a line continuation for /* */ comments, but misses // comments - then again, we don't use // comments). Looks right to me, so:
ACK.
We prefer /* */ comments, don't we? Therefore, the generator turns // into an error intentionally. Thanks, pushed. Matthias

Rename u_int and unsigned to unsigned int. This gets rid of some special case code in the generator. --- daemon/remote_generator.pl | 10 +++--- src/remote/remote_protocol.x | 72 +++++++++++++++++++++--------------------- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/daemon/remote_generator.pl b/daemon/remote_generator.pl index 8d62c37..e6a0e2c 100755 --- a/daemon/remote_generator.pl +++ b/daemon/remote_generator.pl @@ -878,13 +878,13 @@ elsif ($opt_k) { push(@setters_list, "args.$1.${1}_val = (char *)$1;"); push(@setters_list, "args.$1.${1}_len = ${1}len;"); push(@args_check_list, { name => "\"$1\"", arg => "${1}len", limit => $2 }); - } elsif ($args_member =~ m/^(.*) (\S+);/) { - my $type_name = $1; - my $arg_name = $2; + } elsif ($args_member =~ m/^(unsigned )?(int|hyper) (\S+);/) { + my $type_name; + my $arg_name = $3; + $type_name = $1 if ($1); + $type_name .= $2; $type_name =~ s/hyper/long/; - $type_name =~ s/^unsigned$/unsigned int/; - $type_name =~ s/u_int/unsigned int/; if ($type_name eq "int") { # fix bad decisions in the xdr protocol diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x index 7f9a30c..c0fbb8b 100644 --- a/src/remote/remote_protocol.x +++ b/src/remote/remote_protocol.x @@ -541,8 +541,8 @@ struct remote_domain_interface_stats_ret { struct remote_domain_memory_stats_args { remote_nonnull_domain dom; - u_int maxStats; - u_int flags; + unsigned int maxStats; + unsigned int flags; }; struct remote_domain_memory_stat { @@ -558,8 +558,8 @@ struct remote_domain_block_peek_args { remote_nonnull_domain dom; remote_nonnull_string path; unsigned hyper offset; - unsigned size; - unsigned flags; + unsigned int size; + unsigned int flags; }; struct remote_domain_block_peek_ret { @@ -569,8 +569,8 @@ struct remote_domain_block_peek_ret { struct remote_domain_memory_peek_args { remote_nonnull_domain dom; unsigned hyper offset; - unsigned size; - unsigned flags; + unsigned int size; + unsigned int flags; }; struct remote_domain_memory_peek_ret { @@ -580,7 +580,7 @@ struct remote_domain_memory_peek_ret { struct remote_domain_get_block_info_args { remote_nonnull_domain dom; remote_nonnull_string path; - unsigned flags; + unsigned int flags; }; struct remote_domain_get_block_info_ret { @@ -1212,7 +1212,7 @@ struct remote_list_defined_storage_pools_ret { struct remote_find_storage_pool_sources_args { remote_nonnull_string type; remote_string srcSpec; - unsigned flags; + unsigned int flags; }; struct remote_find_storage_pool_sources_ret { @@ -1245,7 +1245,7 @@ struct remote_storage_pool_lookup_by_volume_ret { struct remote_storage_pool_create_xml_args { remote_nonnull_string xml; - unsigned flags; + unsigned int flags; }; struct remote_storage_pool_create_xml_ret { @@ -1254,7 +1254,7 @@ struct remote_storage_pool_create_xml_ret { struct remote_storage_pool_define_xml_args { remote_nonnull_string xml; - unsigned flags; + unsigned int flags; }; struct remote_storage_pool_define_xml_ret { @@ -1263,7 +1263,7 @@ struct remote_storage_pool_define_xml_ret { struct remote_storage_pool_build_args { remote_nonnull_storage_pool pool; - unsigned flags; + unsigned int flags; }; struct remote_storage_pool_undefine_args { @@ -1272,7 +1272,7 @@ struct remote_storage_pool_undefine_args { struct remote_storage_pool_create_args { remote_nonnull_storage_pool pool; - unsigned flags; + unsigned int flags; }; struct remote_storage_pool_destroy_args { @@ -1281,17 +1281,17 @@ struct remote_storage_pool_destroy_args { struct remote_storage_pool_delete_args { remote_nonnull_storage_pool pool; - unsigned flags; + unsigned int flags; }; struct remote_storage_pool_refresh_args { remote_nonnull_storage_pool pool; - unsigned flags; + unsigned int flags; }; struct remote_storage_pool_get_xml_desc_args { remote_nonnull_storage_pool pool; - unsigned flags; + unsigned int flags; }; struct remote_storage_pool_get_xml_desc_ret { @@ -1371,7 +1371,7 @@ struct remote_storage_vol_lookup_by_path_ret { struct remote_storage_vol_create_xml_args { remote_nonnull_storage_pool pool; remote_nonnull_string xml; - unsigned flags; + unsigned int flags; }; struct remote_storage_vol_create_xml_ret { @@ -1382,7 +1382,7 @@ struct remote_storage_vol_create_xml_from_args { remote_nonnull_storage_pool pool; remote_nonnull_string xml; remote_nonnull_storage_vol clonevol; - unsigned flags; + unsigned int flags; }; struct remote_storage_vol_create_xml_from_ret { @@ -1391,17 +1391,17 @@ struct remote_storage_vol_create_xml_from_ret { struct remote_storage_vol_delete_args { remote_nonnull_storage_vol vol; - unsigned flags; + unsigned int flags; }; struct remote_storage_vol_wipe_args { remote_nonnull_storage_vol vol; - unsigned flags; + unsigned int flags; }; struct remote_storage_vol_get_xml_desc_args { remote_nonnull_storage_vol vol; - unsigned flags; + unsigned int flags; }; struct remote_storage_vol_get_xml_desc_ret { @@ -1430,7 +1430,7 @@ struct remote_storage_vol_get_path_ret { struct remote_node_num_of_devices_args { remote_string cap; - unsigned flags; + unsigned int flags; }; struct remote_node_num_of_devices_ret { @@ -1440,7 +1440,7 @@ struct remote_node_num_of_devices_ret { struct remote_node_list_devices_args { remote_string cap; int maxnames; - unsigned flags; + unsigned int flags; }; struct remote_node_list_devices_ret { @@ -1457,7 +1457,7 @@ struct remote_node_device_lookup_by_name_ret { struct remote_node_device_get_xml_desc_args { remote_nonnull_string name; - unsigned flags; + unsigned int flags; }; struct remote_node_device_get_xml_desc_ret { @@ -1539,7 +1539,7 @@ struct remote_domain_event_lifecycle_msg { struct remote_domain_xml_from_native_args { remote_nonnull_string nativeFormat; remote_nonnull_string nativeConfig; - unsigned flags; + unsigned int flags; }; struct remote_domain_xml_from_native_ret { @@ -1550,7 +1550,7 @@ struct remote_domain_xml_from_native_ret { struct remote_domain_xml_to_native_args { remote_nonnull_string nativeFormat; remote_nonnull_string domainXml; - unsigned flags; + unsigned int flags; }; struct remote_domain_xml_to_native_ret { @@ -1580,7 +1580,7 @@ struct remote_secret_lookup_by_uuid_ret { struct remote_secret_define_xml_args { remote_nonnull_string xml; - unsigned flags; + unsigned int flags; }; struct remote_secret_define_xml_ret { @@ -1589,7 +1589,7 @@ struct remote_secret_define_xml_ret { struct remote_secret_get_xml_desc_args { remote_nonnull_secret secret; - unsigned flags; + unsigned int flags; }; struct remote_secret_get_xml_desc_ret { @@ -1599,12 +1599,12 @@ struct remote_secret_get_xml_desc_ret { struct remote_secret_set_value_args { remote_nonnull_secret secret; opaque value<REMOTE_SECRET_VALUE_MAX>; - unsigned flags; + unsigned int flags; }; struct remote_secret_get_value_args { remote_nonnull_secret secret; - unsigned flags; + unsigned int flags; }; struct remote_secret_get_value_ret { @@ -1707,7 +1707,7 @@ struct remote_interface_is_active_ret { struct remote_cpu_compare_args { remote_nonnull_string xml; - unsigned flags; + unsigned int flags; }; struct remote_cpu_compare_ret { @@ -1717,7 +1717,7 @@ struct remote_cpu_compare_ret { struct remote_cpu_baseline_args { remote_nonnull_string xmlCPUs<REMOTE_CPU_BASELINE_MAX>; - unsigned flags; + unsigned int flags; }; struct remote_cpu_baseline_ret { @@ -1757,13 +1757,13 @@ struct remote_domain_abort_job_args { struct remote_domain_migrate_set_max_downtime_args { remote_nonnull_domain dom; unsigned hyper downtime; - unsigned flags; + unsigned int flags; }; struct remote_domain_migrate_set_max_speed_args { remote_nonnull_domain dom; unsigned hyper bandwidth; - unsigned flags; + unsigned int flags; }; struct remote_domain_events_register_any_args { @@ -1827,12 +1827,12 @@ struct remote_domain_event_graphics_msg { struct remote_domain_managed_save_args { remote_nonnull_domain dom; - unsigned flags; + unsigned int flags; }; struct remote_domain_has_managed_save_image_args { remote_nonnull_domain dom; - unsigned flags; + unsigned int flags; }; struct remote_domain_has_managed_save_image_ret { @@ -1841,7 +1841,7 @@ struct remote_domain_has_managed_save_image_ret { struct remote_domain_managed_save_remove_args { remote_nonnull_domain dom; - unsigned flags; + unsigned int flags; }; struct remote_domain_snapshot_create_xml_args { -- 1.7.0.4

On 05/07/2011 06:28 AM, Matthias Bolte wrote:
Rename u_int and unsigned to unsigned int. This gets rid of some special case code in the generator. --- daemon/remote_generator.pl | 10 +++--- src/remote/remote_protocol.x | 72 +++++++++++++++++++++--------------------- 2 files changed, 41 insertions(+), 41 deletions(-)
diff --git a/daemon/remote_generator.pl b/daemon/remote_generator.pl index 8d62c37..e6a0e2c 100755 --- a/daemon/remote_generator.pl +++ b/daemon/remote_generator.pl @@ -878,13 +878,13 @@ elsif ($opt_k) { push(@setters_list, "args.$1.${1}_val = (char *)$1;"); push(@setters_list, "args.$1.${1}_len = ${1}len;"); push(@args_check_list, { name => "\"$1\"", arg => "${1}len", limit => $2 }); - } elsif ($args_member =~ m/^(.*) (\S+);/) { - my $type_name = $1; - my $arg_name = $2; + } elsif ($args_member =~ m/^(unsigned )?(int|hyper) (\S+);/) { + my $type_name; + my $arg_name = $3;
+ $type_name = $1 if ($1); + $type_name .= $2; $type_name =~ s/hyper/long/; - $type_name =~ s/^unsigned$/unsigned int/; - $type_name =~ s/u_int/unsigned int/;
Makes sense. Certainly makes life stricter for $type_name, which is a good thing for maintenance.
+++ b/src/remote/remote_protocol.x @@ -541,8 +541,8 @@ struct remote_domain_interface_stats_ret {
struct remote_domain_memory_stats_args { remote_nonnull_domain dom; - u_int maxStats; - u_int flags; + unsigned int maxStats; + unsigned int flags;
Good change; http://www.ietf.org/rfc/rfc4506.txt only documents 'unsigned int identifier' [4.2], and not 'u_int' nor 'unsigned' for declaring unsigned 32-bit values. rpcgen may have accepted those other aliases as an extension (or via an intermediate typedef), but we might as well stick as close to the specs as possible, especially if it makes life easier for our generator. ACK. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

2011/5/9 Eric Blake <eblake@redhat.com>:
On 05/07/2011 06:28 AM, Matthias Bolte wrote:
Rename u_int and unsigned to unsigned int. This gets rid of some special case code in the generator. --- daemon/remote_generator.pl | 10 +++--- src/remote/remote_protocol.x | 72 +++++++++++++++++++++--------------------- 2 files changed, 41 insertions(+), 41 deletions(-)
diff --git a/daemon/remote_generator.pl b/daemon/remote_generator.pl index 8d62c37..e6a0e2c 100755 --- a/daemon/remote_generator.pl +++ b/daemon/remote_generator.pl @@ -878,13 +878,13 @@ elsif ($opt_k) { push(@setters_list, "args.$1.${1}_val = (char *)$1;"); push(@setters_list, "args.$1.${1}_len = ${1}len;"); push(@args_check_list, { name => "\"$1\"", arg => "${1}len", limit => $2 }); - } elsif ($args_member =~ m/^(.*) (\S+);/) { - my $type_name = $1; - my $arg_name = $2; + } elsif ($args_member =~ m/^(unsigned )?(int|hyper) (\S+);/) { + my $type_name; + my $arg_name = $3;
+ $type_name = $1 if ($1); + $type_name .= $2; $type_name =~ s/hyper/long/; - $type_name =~ s/^unsigned$/unsigned int/; - $type_name =~ s/u_int/unsigned int/;
Makes sense. Certainly makes life stricter for $type_name, which is a good thing for maintenance.
+++ b/src/remote/remote_protocol.x @@ -541,8 +541,8 @@ struct remote_domain_interface_stats_ret {
struct remote_domain_memory_stats_args { remote_nonnull_domain dom; - u_int maxStats; - u_int flags; + unsigned int maxStats; + unsigned int flags;
Good change; http://www.ietf.org/rfc/rfc4506.txt only documents 'unsigned int identifier' [4.2], and not 'u_int' nor 'unsigned' for declaring unsigned 32-bit values. rpcgen may have accepted those other aliases as an extension (or via an intermediate typedef), but we might as well stick as close to the specs as possible, especially if it makes life easier for our generator.
ACK.
Thanks, pushed. Matthias

Anchor matches at the beginning of a line. Specialize some general matches. Add some comments to special cases. --- daemon/remote_generator.pl | 172 +++++++++++++++++++++++++++----------------- 1 files changed, 105 insertions(+), 67 deletions(-) diff --git a/daemon/remote_generator.pl b/daemon/remote_generator.pl index e6a0e2c..e57f34a 100755 --- a/daemon/remote_generator.pl +++ b/daemon/remote_generator.pl @@ -352,34 +352,49 @@ elsif ($opt_b) { " virDomainSnapshotFree(snapshot);\n" . " if (dom)\n" . " virDomainFree(dom);"); - } elsif ($args_member =~ m/(\S+)<\S+>;/) { + } elsif ($args_member =~ m/^(remote_string|remote_nonnull_string|remote_uuid|opaque) (\S+)<\S+>;/) { if (! @args_list) { push(@args_list, "conn"); } if ($calls{$_}->{ProcName} eq "SecretSetValue") { - push(@args_list, "(const unsigned char *)args->$1.$1_val"); + push(@args_list, "(const unsigned char *)args->$2.$2_val"); } elsif ($calls{$_}->{ProcName} eq "CPUBaseline") { - push(@args_list, "(const char **)args->$1.$1_val"); + push(@args_list, "(const char **)args->$2.$2_val"); } else { - push(@args_list, "args->$1.$1_val"); + push(@args_list, "args->$2.$2_val"); } - push(@args_list, "args->$1.$1_len"); - } elsif ($args_member =~ m/(\S+) (\S+);/) { + push(@args_list, "args->$2.$2_len"); + } elsif ($args_member =~ m/<\S+>;/ or $args_member =~ m/\[\S+\];/) { + # just make all other array types fail + die "unhandled type for argument value: $args_member"; + } elsif ($args_member =~ m/^remote_uuid (\S+);/) { if (! @args_list) { push(@args_list, "conn"); } - if ($1 eq "remote_uuid") { - push(@args_list, "(unsigned char *) args->$2"); - } elsif ($1 eq "remote_string") { - push(@vars_list, "char *$2"); - push(@optionals_list, "$2"); - push(@args_list, "$2"); - } else { - push(@args_list, "args->$2"); + push(@args_list, "(unsigned char *) args->$1"); + } elsif ($args_member =~ m/^remote_string (\S+);/) { + if (! @args_list) { + push(@args_list, "conn"); } + + push(@vars_list, "char *$1"); + push(@optionals_list, "$1"); + push(@args_list, "$1"); + } elsif ($args_member =~ m/^remote_nonnull_string (\S+);/) { + if (! @args_list) { + push(@args_list, "conn"); + } + + push(@args_list, "args->$1"); + } elsif ($args_member =~ m/^(unsigned )?(int|hyper) (\S+);/) { + if (! @args_list) { + push(@args_list, "conn"); + } + + push(@args_list, "args->$3"); } elsif ($args_member =~ m/^(\/)?\*/) { # ignore comments } else { @@ -406,17 +421,14 @@ elsif ($opt_b) { if ($calls{$_}->{ret} ne "void") { foreach my $ret_member (@{$calls{$_}->{ret_members}}) { if ($multi_ret) { - if ($ret_member =~ m/(char|short|int|hyper) (\S+)\[\S+\];/) { - push(@ret_list, "memcpy(ret->$2, tmp.$2, sizeof ret->$2);"); - } elsif ($ret_member =~ m/char (\S+);/ or - $ret_member =~ m/short (\S+);/ or - $ret_member =~ m/int (\S+);/ or - $ret_member =~ m/hyper (\S+);/) { - push(@ret_list, "ret->$1 = tmp.$1;"); + if ($ret_member =~ m/^(unsigned )?(char|short|int|hyper) (\S+)\[\S+\];/) { + push(@ret_list, "memcpy(ret->$3, tmp.$3, sizeof ret->$3);"); + } elsif ($ret_member =~ m/^(unsigned )?(char|short|int|hyper) (\S+);/) { + push(@ret_list, "ret->$3 = tmp.$3;"); } else { die "unhandled type for multi-return-value: $ret_member"; } - } elsif ($ret_member =~ m/remote_nonnull_string (\S+)<(\S+)>;/) { + } elsif ($ret_member =~ m/^remote_nonnull_string (\S+)<(\S+)>;/) { push(@vars_list, "int len"); push(@ret_list, "ret->$1.$1_len = len;"); push(@free_list_on_error, "VIR_FREE(ret->$1.$1_val);"); @@ -439,13 +451,13 @@ elsif ($opt_b) { unshift(@args_list, "ret->$1.$1_val"); unshift(@args_list, $conn); } - } elsif ($ret_member =~ m/remote_nonnull_string (\S+);/) { + } elsif ($ret_member =~ m/^remote_nonnull_string (\S+);/) { push(@vars_list, "char *$1"); push(@ret_list, "ret->$1 = $1;"); $single_ret_var = $1; $single_ret_by_ref = 0; $single_ret_check = " == NULL"; - } elsif ($ret_member =~ m/remote_nonnull_(domain|network|storage_pool|storage_vol|interface|node_device|secret|nwfilter|domain_snapshot) (\S+);/) { + } elsif ($ret_member =~ m/^remote_nonnull_(domain|network|storage_pool|storage_vol|interface|node_device|secret|nwfilter|domain_snapshot) (\S+);/) { my $type_name = name_to_ProcName($1); push(@vars_list, "vir${type_name}Ptr $2 = NULL"); @@ -456,7 +468,7 @@ elsif ($opt_b) { $single_ret_var = $2; $single_ret_by_ref = 0; $single_ret_check = " == NULL"; - } elsif ($ret_member =~ m/int (\S+)<(\S+)>;/) { + } elsif ($ret_member =~ m/^int (\S+)<(\S+)>;/) { push(@vars_list, "int len"); push(@ret_list, "ret->$1.$1_len = len;"); push(@free_list_on_error, "VIR_FREE(ret->$1.$1_val);"); @@ -471,7 +483,7 @@ elsif ($opt_b) { my $conn = shift(@args_list); unshift(@args_list, "ret->$1.$1_val"); unshift(@args_list, $conn); - } elsif ($ret_member =~ m/int (\S+);/) { + } elsif ($ret_member =~ m/^int (\S+);/) { push(@vars_list, "int $1"); push(@ret_list, "ret->$1 = $1;"); $single_ret_var = $1; @@ -487,7 +499,7 @@ elsif ($opt_b) { $single_ret_check = " < 0"; } } - } elsif ($ret_member =~ m/hyper (\S+)<(\S+)>;/) { + } elsif ($ret_member =~ m/^hyper (\S+)<(\S+)>;/) { push(@vars_list, "int len"); push(@ret_list, "ret->$1.$1_len = len;"); push(@free_list_on_error, "VIR_FREE(ret->$1.$1_val);"); @@ -510,13 +522,29 @@ elsif ($opt_b) { } unshift(@args_list, $conn); - } elsif ($ret_member =~ m/hyper (\S+);/) { - push(@vars_list, "unsigned long $1"); - push(@ret_list, "ret->$1 = $1;"); - $single_ret_var = $1; + } elsif ($ret_member =~ m/^(unsigned )?hyper (\S+);/) { + my $type_name; + my $ret_name = $2; + + $type_name = $1 if ($1); + $type_name .= "long"; + + if ($type_name eq "long" and + $calls{$_}->{ProcName} =~ m/^Get(Lib)?Version$/) { + # SPECIAL: virConnectGet(Lib)?Version uses unsigned long + # in public API but hyper in XDR protocol + $type_name = "unsigned long"; + } + + push(@vars_list, "$type_name $ret_name"); + push(@ret_list, "ret->$ret_name = $ret_name;"); + $single_ret_var = $ret_name; if ($calls{$_}->{ProcName} eq "DomainGetMaxMemory" or $calls{$_}->{ProcName} eq "NodeGetFreeMemory") { + # SPECIAL: virDomainGetMaxMemory and virNodeGetFreeMemory + # return the actual value directly and 0 indicates + # an error $single_ret_by_ref = 0; $single_ret_check = " == 0"; } else { @@ -538,14 +566,16 @@ elsif ($opt_b) { $struct_name =~ s/Get//; if ($calls{$_}->{ProcName} eq "DomainGetBlockInfo") { + # SPECIAL: virDomainGetBlockInfo has flags parameter after + # the struct parameter in its signature my $flags = pop(@args_list); push(@args_list, "&tmp"); push(@args_list, $flags); - } elsif ($calls{$_}->{ProcName} eq "DomainBlockStats") { - $struct_name .= "Struct"; - push(@args_list, "&tmp"); - push(@args_list, "sizeof tmp"); - } elsif ($calls{$_}->{ProcName} eq "DomainInterfaceStats") { + } elsif ($calls{$_}->{ProcName} eq "DomainBlockStats" || + $calls{$_}->{ProcName} eq "DomainInterfaceStats") { + # SPECIAL: virDomainBlockStats and virDomainInterfaceStats + # have a 'Struct' suffix on the actual struct name + # and take the struct size as additional argument $struct_name .= "Struct"; push(@args_list, "&tmp"); push(@args_list, "sizeof tmp"); @@ -863,21 +893,25 @@ elsif ($opt_k) { } elsif ($args_member =~ m/^remote_nonnull_string (\S+);/) { push(@args_list, "const char *$1"); push(@setters_list, "args.$1 = (char *)$1;"); - } elsif ($args_member =~ m/(\S+)<(\S+)>;/) { + } elsif ($args_member =~ m/^(remote_string|opaque) (\S+)<(\S+)>;/) { + my $type_name = $1; + my $arg_name = $2; + my $limit = $3; + if ($call->{ProcName} eq "SecretSetValue") { - push(@args_list, "const unsigned char *$1"); - push(@args_list, "size_t ${1}len"); + push(@args_list, "const unsigned char *$arg_name"); + push(@args_list, "size_t ${arg_name}len"); } elsif ($call->{ProcName} eq "DomainPinVcpu") { - push(@args_list, "unsigned char *$1"); - push(@args_list, "int ${1}len"); + push(@args_list, "unsigned char *$arg_name"); + push(@args_list, "int ${arg_name}len"); } else { - push(@args_list, "const char *$1"); - push(@args_list, "int ${1}len"); + push(@args_list, "const char *$arg_name"); + push(@args_list, "int ${arg_name}len"); } - push(@setters_list, "args.$1.${1}_val = (char *)$1;"); - push(@setters_list, "args.$1.${1}_len = ${1}len;"); - push(@args_check_list, { name => "\"$1\"", arg => "${1}len", limit => $2 }); + push(@setters_list, "args.$arg_name.${arg_name}_val = (char *)$arg_name;"); + push(@setters_list, "args.$arg_name.${arg_name}_len = ${arg_name}len;"); + push(@args_check_list, { name => "\"$arg_name\"", arg => "${arg_name}len", limit => $limit }); } elsif ($args_member =~ m/^(unsigned )?(int|hyper) (\S+);/) { my $type_name; my $arg_name = $3; @@ -928,7 +962,8 @@ elsif ($opt_k) { } if ($call->{ProcName} eq "NWFilterDefineXML") { - # fix public API and XDR protocol mismatch + # SPECIAL: virNWFilterDefineXML has a flags parameter in the + # public API that is missing in the XDR protocol push(@args_list, "unsigned int flags ATTRIBUTE_UNUSED"); } @@ -966,17 +1001,17 @@ elsif ($opt_k) { foreach my $ret_member (@{$call->{ret_members}}) { if ($multi_ret) { - if ($ret_member =~ m/(char|short|int|hyper) (\S+)\[\S+\];/) { - push(@ret_list, "memcpy(result->$2, ret.$2, sizeof result->$2);"); - } elsif ($ret_member =~ m/char (\S+);/ or - $ret_member =~ m/short (\S+);/ or - $ret_member =~ m/int (\S+);/ or - $ret_member =~ m/hyper (\S+);/) { - push(@ret_list, "result->$1 = ret.$1;"); + if ($ret_member =~ m/^(unsigned )?(char|short|int|hyper) (\S+)\[\S+\];/) { + push(@ret_list, "memcpy(result->$3, ret.$3, sizeof result->$3);"); + } elsif ($ret_member =~ m/<\S+>;/ or $ret_member =~ m/\[\S+\];/) { + # just make all other array types fail + die "unhandled type for multi-return-value: $ret_member"; + } elsif ($ret_member =~ m/^(unsigned )?(char|short|int|hyper) (\S+);/) { + push(@ret_list, "result->$3 = ret.$3;"); } else { die "unhandled type for multi-return-value: $ret_member"; } - } elsif ($ret_member =~ m/remote_nonnull_string (\S+)<(\S+)>;/) { + } elsif ($ret_member =~ m/^remote_nonnull_string (\S+)<(\S+)>;/) { $single_ret_as_list = 1; $single_ret_list_name = $1; $single_ret_list_max_var = "max$1"; @@ -1000,11 +1035,11 @@ elsif ($opt_k) { push(@ret_list, "rv = ret.$1.$1_len;"); $single_ret_var = "int rv = -1"; $single_ret_type = "int"; - } elsif ($ret_member =~ m/remote_nonnull_string (\S+);/) { + } elsif ($ret_member =~ m/^remote_nonnull_string (\S+);/) { push(@ret_list, "rv = ret.$1;"); $single_ret_var = "char *rv = NULL"; $single_ret_type = "char *"; - } elsif ($ret_member =~ m/remote_nonnull_(domain|network|storage_pool|storage_vol|node_device|interface|secret|nwfilter|domain_snapshot) (\S+);/) { + } elsif ($ret_member =~ m/^remote_nonnull_(domain|network|storage_pool|storage_vol|node_device|interface|secret|nwfilter|domain_snapshot) (\S+);/) { my $name = $1; my $arg_name = $2; my $type_name = name_to_ProcName($name); @@ -1039,7 +1074,12 @@ elsif ($opt_k) { $single_ret_var = "int rv = -1"; $single_ret_type = "int"; - } elsif ($ret_member =~ m/hyper (\S+);/) { + } elsif ($ret_member =~ m/^unsigned hyper (\S+);/) { + my $arg_name = $1; + push(@ret_list, "rv = ret.$arg_name;"); + $single_ret_var = "unsigned long rv = 0"; + $single_ret_type = "unsigned long"; + } elsif ($ret_member =~ m/^hyper (\S+);/) { my $arg_name = $1; if ($call->{ProcName} =~ m/Get(Lib)?Version/) { @@ -1048,16 +1088,12 @@ elsif ($opt_k) { push(@ret_list, "rv = 0;"); $single_ret_var = "int rv = -1"; $single_ret_type = "int"; - } else { + } elsif ($call->{ProcName} eq "NodeGetFreeMemory") { push(@ret_list, "rv = ret.$arg_name;"); - - if ($call->{ProcName} eq "NodeGetFreeMemory") { - $single_ret_var = "unsigned long long rv = 0"; - $single_ret_type = "unsigned long long"; - } else { - $single_ret_var = "unsigned long rv = 0"; - $single_ret_type = "unsigned long"; - } + $single_ret_var = "unsigned long long rv = 0"; + $single_ret_type = "unsigned long long"; + } else { + die "unhandled type for return value: $ret_member"; } } else { die "unhandled type for return value: $ret_member"; @@ -1072,6 +1108,8 @@ elsif ($opt_k) { $struct_name =~ s/Get//; if ($call->{ProcName} eq "DomainGetBlockInfo") { + # SPECIAL: virDomainGetBlockInfo has flags parameter after + # the struct parameter in its signature $last_arg = pop(@args_list); } -- 1.7.0.4

On 05/07/2011 06:28 AM, Matthias Bolte wrote:
Anchor matches at the beginning of a line.
Specialize some general matches.
Add some comments to special cases. --- daemon/remote_generator.pl | 172 +++++++++++++++++++++++++++----------------- 1 files changed, 105 insertions(+), 67 deletions(-)
@@ -510,13 +522,29 @@ elsif ($opt_b) { }
unshift(@args_list, $conn); - } elsif ($ret_member =~ m/hyper (\S+);/) { - push(@vars_list, "unsigned long $1"); - push(@ret_list, "ret->$1 = $1;"); - $single_ret_var = $1; + } elsif ($ret_member =~ m/^(unsigned )?hyper (\S+);/) { + my $type_name; + my $ret_name = $2; + + $type_name = $1 if ($1); + $type_name .= "long"; + + if ($type_name eq "long" and + $calls{$_}->{ProcName} =~ m/^Get(Lib)?Version$/) { + # SPECIAL: virConnectGet(Lib)?Version uses unsigned long + # in public API but hyper in XDR protocol + $type_name = "unsigned long"; + }
Fine for this patch, but we could probably clean it up to use unsigned hyper in XDR protocol with no change to the wire format as a separate patch.
@@ -928,7 +962,8 @@ elsif ($opt_k) { }
if ($call->{ProcName} eq "NWFilterDefineXML") { - # fix public API and XDR protocol mismatch + # SPECIAL: virNWFilterDefineXML has a flags parameter in the + # public API that is missing in the XDR protocol push(@args_list, "unsigned int flags ATTRIBUTE_UNUSED"); }
Ouch. We need to introduce a new XDR function number that fixes this, while keeping glue code in place for the old broken XDR function number (of course, as a separate patch). ACK. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

2011/5/9 Eric Blake <eblake@redhat.com>:
On 05/07/2011 06:28 AM, Matthias Bolte wrote:
Anchor matches at the beginning of a line.
Specialize some general matches.
Add some comments to special cases. --- daemon/remote_generator.pl | 172 +++++++++++++++++++++++++++----------------- 1 files changed, 105 insertions(+), 67 deletions(-)
@@ -510,13 +522,29 @@ elsif ($opt_b) { }
unshift(@args_list, $conn); - } elsif ($ret_member =~ m/hyper (\S+);/) { - push(@vars_list, "unsigned long $1"); - push(@ret_list, "ret->$1 = $1;"); - $single_ret_var = $1; + } elsif ($ret_member =~ m/^(unsigned )?hyper (\S+);/) { + my $type_name; + my $ret_name = $2; + + $type_name = $1 if ($1); + $type_name .= "long"; + + if ($type_name eq "long" and + $calls{$_}->{ProcName} =~ m/^Get(Lib)?Version$/) { + # SPECIAL: virConnectGet(Lib)?Version uses unsigned long + # in public API but hyper in XDR protocol + $type_name = "unsigned long"; + }
Fine for this patch, but we could probably clean it up to use unsigned hyper in XDR protocol with no change to the wire format as a separate patch.
@@ -928,7 +962,8 @@ elsif ($opt_k) { }
if ($call->{ProcName} eq "NWFilterDefineXML") { - # fix public API and XDR protocol mismatch + # SPECIAL: virNWFilterDefineXML has a flags parameter in the + # public API that is missing in the XDR protocol push(@args_list, "unsigned int flags ATTRIBUTE_UNUSED"); }
Ouch. We need to introduce a new XDR function number that fixes this, while keeping glue code in place for the old broken XDR function number (of course, as a separate patch).
ACK.
Thanks, pushed. Matthias

--- daemon/Makefile.am | 20 ++++- daemon/qemu_dispatch.blacklist | 3 + daemon/qemu_dispatch.whitelist | 1 + daemon/remote_dispatch.blacklist | 37 ++++++++ daemon/remote_dispatch.whitelist | 169 +++++++++++++++++++++++++++++++++++ daemon/remote_generator.pl | 171 +++++++++++++----------------------- src/Makefile.am | 24 ++++- src/remote/qemu_client.blacklist | 3 + src/remote/qemu_client.whitelist | 1 + src/remote/remote_client.blacklist | 47 ++++++++++ src/remote/remote_client.whitelist | 159 +++++++++++++++++++++++++++++++++ 11 files changed, 516 insertions(+), 119 deletions(-) create mode 100644 daemon/qemu_dispatch.blacklist create mode 100644 daemon/qemu_dispatch.whitelist create mode 100644 daemon/remote_dispatch.blacklist create mode 100644 daemon/remote_dispatch.whitelist create mode 100644 src/remote/qemu_client.blacklist create mode 100644 src/remote/qemu_client.whitelist create mode 100644 src/remote/remote_client.blacklist create mode 100644 src/remote/remote_client.whitelist diff --git a/daemon/Makefile.am b/daemon/Makefile.am index 114adf3..6382878 100644 --- a/daemon/Makefile.am +++ b/daemon/Makefile.am @@ -30,7 +30,11 @@ DISTCLEANFILES = EXTRA_DIST = \ remote_generator.pl \ remote_dispatch_bodies.h \ + remote_dispatch.whitelist \ + remote_dispatch.blacklist \ qemu_dispatch_bodies.h \ + qemu_dispatch.whitelist \ + qemu_dispatch.blacklist \ libvirtd.conf \ libvirtd.init.in \ libvirtd.upstart \ @@ -211,7 +215,11 @@ remote.c: $(DAEMON_GENERATED) remote.h: $(DAEMON_GENERATED) REMOTE_PROTOCOL = $(top_srcdir)/src/remote/remote_protocol.x +REMOTE_PROTOCOL_WHITELIST = $(srcdir)/remote_dispatch.whitelist +REMOTE_PROTOCOL_BLACKLIST = $(srcdir)/remote_dispatch.blacklist QEMU_PROTOCOL = $(top_srcdir)/src/remote/qemu_protocol.x +QEMU_PROTOCOL_WHITELIST = $(srcdir)/qemu_dispatch.whitelist +QEMU_PROTOCOL_BLACKLIST = $(srcdir)/qemu_dispatch.blacklist remote_dispatch_prototypes.h: $(srcdir)/remote_generator.pl $(REMOTE_PROTOCOL) $(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -c -p remote $(REMOTE_PROTOCOL) > $@ @@ -225,8 +233,10 @@ remote_dispatch_args.h: $(srcdir)/remote_generator.pl $(REMOTE_PROTOCOL) remote_dispatch_ret.h: $(srcdir)/remote_generator.pl $(REMOTE_PROTOCOL) $(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -c -r remote $(REMOTE_PROTOCOL) > $@ -remote_dispatch_bodies.h: $(srcdir)/remote_generator.pl $(REMOTE_PROTOCOL) - $(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -c -b remote $(REMOTE_PROTOCOL) > $@ +remote_dispatch_bodies.h: $(srcdir)/remote_generator.pl $(REMOTE_PROTOCOL) \ + $(REMOTE_PROTOCOL_WHITELIST) $(REMOTE_PROTOCOL_BLACKLIST) + $(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -c -b remote $(REMOTE_PROTOCOL) \ + $(REMOTE_PROTOCOL_WHITELIST) $(REMOTE_PROTOCOL_BLACKLIST) > $@ qemu_dispatch_prototypes.h: $(srcdir)/remote_generator.pl $(QEMU_PROTOCOL) $(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -p qemu $(QEMU_PROTOCOL) > $@ @@ -240,8 +250,10 @@ qemu_dispatch_args.h: $(srcdir)/remote_generator.pl $(QEMU_PROTOCOL) qemu_dispatch_ret.h: $(srcdir)/remote_generator.pl $(QEMU_PROTOCOL) $(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -r qemu $(QEMU_PROTOCOL) > $@ -qemu_dispatch_bodies.h: $(srcdir)/remote_generator.pl $(QEMU_PROTOCOL) - $(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -b qemu $(QEMU_PROTOCOL) > $@ +qemu_dispatch_bodies.h: $(srcdir)/remote_generator.pl $(QEMU_PROTOCOL) \ + $(QEMU_PROTOCOL_WHITELIST) $(QEMU_PROTOCOL_BLACKLIST) + $(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -b qemu $(QEMU_PROTOCOL) \ + $(QEMU_PROTOCOL_WHITELIST) $(QEMU_PROTOCOL_BLACKLIST) > $@ LOGROTATE_CONFS = libvirtd.qemu.logrotate libvirtd.lxc.logrotate \ libvirtd.uml.logrotate libvirtd.logrotate diff --git a/daemon/qemu_dispatch.blacklist b/daemon/qemu_dispatch.blacklist new file mode 100644 index 0000000..3ed861f --- /dev/null +++ b/daemon/qemu_dispatch.blacklist @@ -0,0 +1,3 @@ +# procedures in this list will not be handled by remote_generator.pl + +MonitorCommand diff --git a/daemon/qemu_dispatch.whitelist b/daemon/qemu_dispatch.whitelist new file mode 100644 index 0000000..dc1aca5 --- /dev/null +++ b/daemon/qemu_dispatch.whitelist @@ -0,0 +1 @@ +# procedures in this list will be handled by remote_generator.pl diff --git a/daemon/remote_dispatch.blacklist b/daemon/remote_dispatch.blacklist new file mode 100644 index 0000000..e53c8ae --- /dev/null +++ b/daemon/remote_dispatch.blacklist @@ -0,0 +1,37 @@ +# procedures in this list will not be handled by remote_generator.pl + +AuthList +AuthPolkit +AuthSaslInit +AuthSaslStart +AuthSaslStep +Close +DomainBlockPeek +DomainCreateWithFlags +DomainEventsDeregister +DomainEventsDeregisterAny +DomainEventsRegister +DomainEventsRegisterAny +DomainGetBlkioParameters +DomainGetMemoryParameters +DomainGetSchedulerParameters +DomainGetSchedulerType +DomainGetSecurityLabel +DomainGetVcpus +DomainMigratePrepareTunnel +DomainOpenConsole +DomainPinVcpu +DomainSetBlkioParameters +DomainSetMemoryParameters +DomainSetSchedulerParameters +DomainMemoryPeek +DomainMemoryStats +DomainMigratePrepare +DomainMigratePrepare2 +GetType +NodeDeviceGetParent +NodeGetSecurityModel +Open +SecretGetValue +StorageVolDownload +StorageVolUpload diff --git a/daemon/remote_dispatch.whitelist b/daemon/remote_dispatch.whitelist new file mode 100644 index 0000000..3f8e83b --- /dev/null +++ b/daemon/remote_dispatch.whitelist @@ -0,0 +1,169 @@ +# procedures in this list will be handled by remote_generator.pl + +CPUBaseline +CPUCompare +DomainAbortJob +DomainAttachDevice +DomainAttachDeviceFlags +DomainBlockStats +DomainCoreDump +DomainCreate +DomainCreateXML +DomainDefineXML +DomainDestroy +DomainDetachDevice +DomainDetachDeviceFlags +DomainGetAutostart +DomainGetBlockInfo +DomainGetInfo +DomainGetJobInfo +DomainGetMaxMemory +DomainGetMaxVcpus +DomainGetOSType +DomainGetVcpusFlags +DomainGetXMLDesc +DomainHasCurrentSnapshot +DomainHasManagedSaveImage +DomainInterfaceStats +DomainIsActive +DomainIsPersistent +DomainIsUpdated +DomainLookupByID +DomainLookupByName +DomainLookupByUUID +DomainManagedSave +DomainManagedSaveRemove +DomainMigrateFinish +DomainMigrateFinish2 +DomainMigratePerform +DomainMigrateSetMaxDowntime +DomainMigrateSetMaxSpeed +DomainReboot +DomainRestore +DomainResume +DomainRevertToSnapshot +DomainSave +DomainSetAutostart +DomainSetMaxMemory +DomainSetMemory +DomainSetMemoryFlags +DomainSetVcpus +DomainSetVcpusFlags +DomainShutdown +DomainSnapshotCreateXML +DomainSnapshotCurrent +DomainSnapshotDelete +DomainSnapshotGetXMLDesc +DomainSnapshotListNames +DomainSnapshotLookupByName +DomainSnapshotNum +DomainSuspend +DomainUndefine +DomainUpdateDeviceFlags +DomainXMLFromNative +DomainXMLToNative +FindStoragePoolSources +GetCapabilities +GetHostname +GetLibVersion +GetMaxVcpus +GetSysinfo +GetURI +GetVersion +InterfaceCreate +InterfaceDefineXML +InterfaceDestroy +InterfaceGetXMLDesc +InterfaceIsActive +InterfaceLookupByMACString +InterfaceLookupByName +InterfaceUndefine +IsSecure +ListDefinedDomains +ListDefinedInterfaces +ListDefinedNetworks +ListDefinedStoragePools +ListDomains +ListInterfaces +ListNetworks +ListNWFilters +ListSecrets +ListStoragePools +NetworkCreate +NetworkCreateXML +NetworkDefineXML +NetworkDestroy +NetworkGetAutostart +NetworkGetBridgeName +NetworkGetXMLDesc +NetworkIsActive +NetworkIsPersistent +NetworkLookupByName +NetworkLookupByUUID +NetworkSetAutostart +NetworkUndefine +NodeDeviceCreateXML +NodeDeviceDestroy +NodeDeviceDettach +NodeDeviceGetXMLDesc +NodeDeviceListCaps +NodeDeviceLookupByName +NodeDeviceNumOfCaps +NodeDeviceReAttach +NodeDeviceReset +NodeGetCellsFreeMemory +NodeGetFreeMemory +NodeGetInfo +NodeListDevices +NodeNumOfDevices +NumOfDefinedDomains +NumOfDefinedInterfaces +NumOfDefinedNetworks +NumOfDefinedStoragePools +NumOfDomains +NumOfInterfaces +NumOfNetworks +NumOfNWFilters +NumOfSecrets +NumOfStoragePools +NWFilterDefineXML +NWFilterGetXMLDesc +NWFilterLookupByName +NWFilterLookupByUUID +NWFilterUndefine +SecretDefineXML +SecretGetXMLDesc +SecretLookupByUsage +SecretLookupByUUID +SecretSetValue +SecretUndefine +StoragePoolBuild +StoragePoolCreate +StoragePoolCreateXML +StoragePoolDefineXML +StoragePoolDelete +StoragePoolDestroy +StoragePoolGetAutostart +StoragePoolGetInfo +StoragePoolGetXMLDesc +StoragePoolIsActive +StoragePoolIsPersistent +StoragePoolListVolumes +StoragePoolLookupByName +StoragePoolLookupByUUID +StoragePoolLookupByVolume +StoragePoolNumOfVolumes +StoragePoolRefresh +StoragePoolSetAutostart +StoragePoolUndefine +StorageVolCreateXML +StorageVolCreateXMLFrom +StorageVolDelete +StorageVolGetInfo +StorageVolGetPath +StorageVolGetXMLDesc +StorageVolLookupByKey +StorageVolLookupByName +StorageVolLookupByPath +StorageVolWipe +SupportsFeature diff --git a/daemon/remote_generator.pl b/daemon/remote_generator.pl index e57f34a..4c72e99 100755 --- a/daemon/remote_generator.pl +++ b/daemon/remote_generator.pl @@ -23,9 +23,29 @@ use Getopt::Std; our ($opt_p, $opt_t, $opt_a, $opt_r, $opt_d, $opt_c, $opt_b, $opt_k); getopts ('ptardcbk'); -my $structprefix = $ARGV[0]; +my $structprefix = shift or die "missing prefix argument"; +my $protocol = shift or die "missing protocol argument"; +my $whitelistname; +my $blacklistname; +my @whitelist; +my @blacklist; + +if ($opt_b or $opt_k) { + $whitelistname = shift or die "missing whitelist argument"; + $blacklistname = shift or die "missing blacklist argument"; + + open(WHITELIST, "<$whitelistname") or die "cannot open $whitelistname: $!"; + @whitelist = <WHITELIST>; + close(WHITELIST); + chomp(@whitelist); + + open(BLACKLIST, "<$blacklistname") or die "cannot open $blacklistname: $!"; + @blacklist = <BLACKLIST>; + close(BLACKLIST); + chomp(@blacklist); +} + my $procprefix = uc $structprefix; -shift; # Convert name_of_call to NameOfCall. sub name_to_ProcName { @@ -59,7 +79,9 @@ my $collect_args_members = 0; my $collect_ret_members = 0; my $last_name; -while (<>) { +open PROTOCOL, "<$protocol" or die "cannot open $protocol: $!"; + +while (<PROTOCOL>) { if ($collect_args_members) { if (/^};/) { $collect_args_members = 0; @@ -238,64 +260,32 @@ elsif ($opt_t) { # Bodies for dispatch functions ("remote_dispatch_bodies.h"). elsif ($opt_b) { - # list of functions that currently are not generatable - my @ungeneratable; - - if ($structprefix eq "remote") { - @ungeneratable = ("Close", - "DomainEventsDeregisterAny", - "DomainEventsRegisterAny", - "DomainMigratePrepareTunnel", - "DomainOpenConsole", - "DomainPinVcpu", - "DomainSetSchedulerParameters", - "DomainSetMemoryParameters", - "DomainSetBlkioParameters", - "Open", - "StorageVolUpload", - "StorageVolDownload", - - "AuthList", - "AuthSaslInit", - "AuthSaslStart", - "AuthSaslStep", - "AuthPolkit", - - "DomainBlockPeek", - "DomainCreateWithFlags", - "DomainEventsDeregister", - "DomainEventsRegister", - "DomainGetBlkioParameters", - "DomainGetMemoryParameters", - "DomainGetSchedulerParameters", - "DomainGetSchedulerType", - "DomainGetSecurityLabel", - "DomainGetVcpus", - "DomainMemoryPeek", - "DomainMemoryStats", - "DomainMigratePrepare", - "DomainMigratePrepare2", - "GetType", - "NodeDeviceGetParent", - "NodeGetSecurityModel", - "SecretGetValue"); - } elsif ($structprefix eq "qemu") { - @ungeneratable = ("MonitorCommand"); - } - - my %ug = map { $_ => 1 } @ungeneratable; + my %white = map { $_ => 1 } @whitelist; + my %black = map { $_ => 1 } @blacklist; my @keys = sort (keys %calls); foreach (@keys) { # skip things which are REMOTE_MESSAGE next if $calls{$_}->{msg}; - if (exists($ug{$calls{$_}->{ProcName}})) { + # ignore procedures on the blacklist + if (exists($black{$calls{$_}->{ProcName}})) { + if (exists($white{$calls{$_}->{ProcName}})) { + die "procedure $calls{$_}->{ProcName} on whitelist and blacklist"; + } + print "\n/* ${structprefix}Dispatch$calls{$_}->{ProcName} has " . "to be implemented manually */\n"; next; } + # complain about procedures not on the whitelist + if (! exists($white{$calls{$_}->{ProcName}})) { + die "procedure $calls{$_}->{ProcName} not on whitelist nor on " . + "blacklist. add it to the whitelist and let the generator " . + "handle it or add it to the blacklist and implement it yourself"; + } + my $has_node_device = 0; my @vars_list = (); my @optionals_list = (); @@ -550,6 +540,8 @@ elsif ($opt_b) { } else { $single_ret_by_ref = 1; } + } elsif ($ret_member =~ m/^(\/)?\*/) { + # ignore comments } else { die "unhandled type for return value: $ret_member"; } @@ -756,63 +748,8 @@ elsif ($opt_b) { # Bodies for client functions ("remote_client_bodies.h"). elsif ($opt_k) { - # list of functions that currently are not generatable - my @ungeneratable; - - if ($structprefix eq "remote") { - @ungeneratable = ("Close", - "DomainEventsDeregisterAny", - "DomainEventsRegisterAny", - "DomainMigratePrepareTunnel", - "DomainOpenConsole", - "DomainSetSchedulerParameters", - "DomainSetMemoryParameters", - "DomainSetBlkioParameters", - "Open", - "StorageVolUpload", - "StorageVolDownload", - - "AuthList", - "AuthSaslInit", - "AuthSaslStart", - "AuthSaslStep", - "AuthPolkit", - - "DomainCreate", - "DomainDestroy", - "FindStoragePoolSources", - "IsSecure", - "SupportsFeature", - "NodeGetCellsFreeMemory", - "ListDomains", - "GetURI", - "NodeDeviceDettach", - "NodeDeviceReset", - "NodeDeviceReAttach", - - "DomainBlockPeek", - "DomainCreateWithFlags", - "DomainEventsDeregister", - "DomainEventsRegister", - "DomainGetBlkioParameters", - "DomainGetMemoryParameters", - "DomainGetSchedulerParameters", - "DomainGetSchedulerType", - "DomainGetSecurityLabel", - "DomainGetVcpus", - "DomainMemoryPeek", - "DomainMemoryStats", - "DomainMigratePrepare", - "DomainMigratePrepare2", - "GetType", - "NodeDeviceGetParent", - "NodeGetSecurityModel", - "SecretGetValue"); - } elsif ($structprefix eq "qemu") { - @ungeneratable = ("MonitorCommand"); - } - - my %ug = map { $_ => 1 } @ungeneratable; + my %white = map { $_ => 1 } @whitelist; + my %black = map { $_ => 1 } @blacklist; my @keys = sort (keys %calls); foreach (@keys) { @@ -821,12 +758,24 @@ elsif ($opt_k) { # skip things which are REMOTE_MESSAGE next if $call->{msg}; - if (exists($ug{$call->{ProcName}})) { - print "\n/* ${structprefix}Dispatch$call->{ProcName} has to " . - "be implemented manually */\n"; + # ignore procedures on the blacklist + if (exists($black{$call->{ProcName}})) { + if (exists($white{$call->{ProcName}})) { + die "procedure $call->{ProcName} on whitelist and blacklist"; + } + + print "\n/* ${structprefix}Dispatch$calls{$_}->{ProcName} has " . + "to be implemented manually */\n"; next; } + # complain about procedures not on the whitelist + if (! exists($white{$call->{ProcName}})) { + die "procedure $call->{ProcName} not on whitelist nor on " . + "blacklist. add it to the whitelist and let the generator " . + "handle it or add it to the blacklist and implement it yourself"; + } + # handle arguments to the function my @args_list = (); my @vars_list = (); @@ -1095,6 +1044,8 @@ elsif ($opt_k) { } else { die "unhandled type for return value: $ret_member"; } + } elsif ($ret_member =~ m/^(\/)?\*/) { + # ignore comments } else { die "unhandled type for return value: $ret_member"; } diff --git a/src/Makefile.am b/src/Makefile.am index 75ece49..110615f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -163,18 +163,32 @@ REMOTE_DRIVER_GENERATED = \ $(srcdir)/remote/qemu_client_bodies.h REMOTE_PROTOCOL = $(srcdir)/remote/remote_protocol.x +REMOTE_PROTOCOL_WHITELIST = $(srcdir)/remote/remote_client.whitelist +REMOTE_PROTOCOL_BLACKLIST = $(srcdir)/remote/remote_client.blacklist QEMU_PROTOCOL = $(srcdir)/remote/qemu_protocol.x -REMOTE_DRIVER_PROTOCOL = $(REMOTE_PROTOCOL) $(QEMU_PROTOCOL) +QEMU_PROTOCOL_WHITELIST = $(srcdir)/remote/qemu_client.whitelist +QEMU_PROTOCOL_BLACKLIST = $(srcdir)/remote/qemu_client.blacklist +REMOTE_DRIVER_PROTOCOL = \ + $(REMOTE_PROTOCOL) \ + $(REMOTE_PROTOCOL_WHITELIST) \ + $(REMOTE_PROTOCOL_BLACKLIST) \ + $(QEMU_PROTOCOL) \ + $(QEMU_PROTOCOL_WHITELIST) \ + $(QEMU_PROTOCOL_BLACKLIST) $(srcdir)/remote/remote_client_bodies.h: $(REMOTE_PROTOCOL) \ - $(top_srcdir)/daemon/remote_generator.pl + $(top_srcdir)/daemon/remote_generator.pl \ + $(REMOTE_PROTOCOL_WHITELIST) $(REMOTE_PROTOCOL_BLACKLIST) $(AM_V_GEN)perl -w $(top_srcdir)/daemon/remote_generator.pl \ - -c -k remote $(REMOTE_PROTOCOL) > $@ + -c -k remote $(REMOTE_PROTOCOL) \ + $(REMOTE_PROTOCOL_WHITELIST) $(REMOTE_PROTOCOL_BLACKLIST) > $@ $(srcdir)/remote/qemu_client_bodies.h: $(QEMU_PROTOCOL) \ - $(top_srcdir)/daemon/remote_generator.pl + $(top_srcdir)/daemon/remote_generator.pl \ + $(QEMU_PROTOCOL_WHITELIST) $(QEMU_PROTOCOL_BLACKLIST) $(AM_V_GEN)perl -w $(top_srcdir)/daemon/remote_generator.pl \ - -k qemu $(QEMU_PROTOCOL) > $@ + -k qemu $(QEMU_PROTOCOL) \ + $(QEMU_PROTOCOL_WHITELIST) $(QEMU_PROTOCOL_BLACKLIST) > $@ REMOTE_DRIVER_SOURCES = \ gnutls_1_0_compat.h \ diff --git a/src/remote/qemu_client.blacklist b/src/remote/qemu_client.blacklist new file mode 100644 index 0000000..3ed861f --- /dev/null +++ b/src/remote/qemu_client.blacklist @@ -0,0 +1,3 @@ +# procedures in this list will not be handled by remote_generator.pl + +MonitorCommand diff --git a/src/remote/qemu_client.whitelist b/src/remote/qemu_client.whitelist new file mode 100644 index 0000000..dc1aca5 --- /dev/null +++ b/src/remote/qemu_client.whitelist @@ -0,0 +1 @@ +# procedures in this list will be handled by remote_generator.pl diff --git a/src/remote/remote_client.blacklist b/src/remote/remote_client.blacklist new file mode 100644 index 0000000..9406760 --- /dev/null +++ b/src/remote/remote_client.blacklist @@ -0,0 +1,47 @@ +# procedures in this list will not be handled by remote_generator.pl + +AuthList +AuthPolkit +AuthSaslInit +AuthSaslStart +AuthSaslStep +Close +DomainBlockPeek +DomainCreate +DomainCreateWithFlags +DomainDestroy +DomainEventsDeregister +DomainEventsDeregisterAny +DomainEventsRegister +DomainEventsRegisterAny +DomainGetBlkioParameters +DomainGetMemoryParameters +DomainGetSchedulerParameters +DomainGetSchedulerType +DomainGetSecurityLabel +DomainGetVcpus +DomainMemoryPeek +DomainMemoryStats +DomainMigratePrepare +DomainMigratePrepare2 +DomainMigratePrepareTunnel +DomainOpenConsole +DomainSetBlkioParameters +DomainSetMemoryParameters +DomainSetSchedulerParameters +FindStoragePoolSources +GetType +GetURI +IsSecure +ListDomains +NodeDeviceDettach +NodeDeviceGetParent +NodeDeviceReAttach +NodeDeviceReset +NodeGetCellsFreeMemory +NodeGetSecurityModel +Open +SecretGetValue +StorageVolDownload +StorageVolUpload +SupportsFeature diff --git a/src/remote/remote_client.whitelist b/src/remote/remote_client.whitelist new file mode 100644 index 0000000..29ef601 --- /dev/null +++ b/src/remote/remote_client.whitelist @@ -0,0 +1,159 @@ +# procedures in this list will be handled by remote_generator.pl + +CPUBaseline +CPUCompare +DomainAbortJob +DomainAttachDevice +DomainAttachDeviceFlags +DomainBlockStats +DomainCoreDump +DomainCreateXML +DomainDefineXML +DomainDetachDevice +DomainDetachDeviceFlags +DomainGetAutostart +DomainGetBlockInfo +DomainGetInfo +DomainGetJobInfo +DomainGetMaxMemory +DomainGetMaxVcpus +DomainGetOSType +DomainGetVcpusFlags +DomainGetXMLDesc +DomainHasCurrentSnapshot +DomainHasManagedSaveImage +DomainInterfaceStats +DomainIsActive +DomainIsPersistent +DomainIsUpdated +DomainLookupByID +DomainLookupByName +DomainLookupByUUID +DomainManagedSave +DomainManagedSaveRemove +DomainMigrateFinish +DomainMigrateFinish2 +DomainMigratePerform +DomainMigrateSetMaxDowntime +DomainMigrateSetMaxSpeed +DomainPinVcpu +DomainReboot +DomainRestore +DomainResume +DomainRevertToSnapshot +DomainSave +DomainSetAutostart +DomainSetMaxMemory +DomainSetMemory +DomainSetMemoryFlags +DomainSetVcpus +DomainSetVcpusFlags +DomainShutdown +DomainSnapshotCreateXML +DomainSnapshotCurrent +DomainSnapshotDelete +DomainSnapshotGetXMLDesc +DomainSnapshotListNames +DomainSnapshotLookupByName +DomainSnapshotNum +DomainSuspend +DomainUndefine +DomainUpdateDeviceFlags +DomainXMLFromNative +DomainXMLToNative +GetCapabilities +GetHostname +GetLibVersion +GetMaxVcpus +GetSysinfo +GetVersion +InterfaceCreate +InterfaceDefineXML +InterfaceDestroy +InterfaceGetXMLDesc +InterfaceIsActive +InterfaceLookupByMACString +InterfaceLookupByName +InterfaceUndefine +ListDefinedDomains +ListDefinedInterfaces +ListDefinedNetworks +ListDefinedStoragePools +ListInterfaces +ListNetworks +ListNWFilters +ListSecrets +ListStoragePools +NetworkCreate +NetworkCreateXML +NetworkDefineXML +NetworkDestroy +NetworkGetAutostart +NetworkGetBridgeName +NetworkGetXMLDesc +NetworkIsActive +NetworkIsPersistent +NetworkLookupByName +NetworkLookupByUUID +NetworkSetAutostart +NetworkUndefine +NodeDeviceCreateXML +NodeDeviceDestroy +NodeDeviceGetXMLDesc +NodeDeviceListCaps +NodeDeviceLookupByName +NodeDeviceNumOfCaps +NodeGetFreeMemory +NodeGetInfo +NodeListDevices +NodeNumOfDevices +NumOfDefinedDomains +NumOfDefinedInterfaces +NumOfDefinedNetworks +NumOfDefinedStoragePools +NumOfDomains +NumOfInterfaces +NumOfNetworks +NumOfNWFilters +NumOfSecrets +NumOfStoragePools +NWFilterDefineXML +NWFilterGetXMLDesc +NWFilterLookupByName +NWFilterLookupByUUID +NWFilterUndefine +SecretDefineXML +SecretGetXMLDesc +SecretLookupByUsage +SecretLookupByUUID +SecretSetValue +SecretUndefine +StoragePoolBuild +StoragePoolCreate +StoragePoolCreateXML +StoragePoolDefineXML +StoragePoolDelete +StoragePoolDestroy +StoragePoolGetAutostart +StoragePoolGetInfo +StoragePoolGetXMLDesc +StoragePoolIsActive +StoragePoolIsPersistent +StoragePoolListVolumes +StoragePoolLookupByName +StoragePoolLookupByUUID +StoragePoolLookupByVolume +StoragePoolNumOfVolumes +StoragePoolRefresh +StoragePoolSetAutostart +StoragePoolUndefine +StorageVolCreateXML +StorageVolCreateXMLFrom +StorageVolDelete +StorageVolGetInfo +StorageVolGetPath +StorageVolGetXMLDesc +StorageVolLookupByKey +StorageVolLookupByName +StorageVolLookupByPath +StorageVolWipe -- 1.7.0.4

On 05/07/2011 06:28 AM, Matthias Bolte wrote:
--- daemon/Makefile.am | 20 ++++- daemon/qemu_dispatch.blacklist | 3 + daemon/qemu_dispatch.whitelist | 1 + daemon/remote_dispatch.blacklist | 37 ++++++++ daemon/remote_dispatch.whitelist | 169 +++++++++++++++++++++++++++++++++++ daemon/remote_generator.pl | 171 +++++++++++++----------------------- src/Makefile.am | 24 ++++- src/remote/qemu_client.blacklist | 3 + src/remote/qemu_client.whitelist | 1 + src/remote/remote_client.blacklist | 47 ++++++++++ src/remote/remote_client.whitelist | 159 +++++++++++++++++++++++++++++++++
Hmm. Given the difference in sizes between daemon/remote_dispatch.whitelist and src/remote/remote_client.whitelist, there are some functions where we are only doing half the job? That means every new API has to touch two, rather than one, file, and that's out of a choice of four files. Maybe a better thing to do would be having a single file, that lists every API, along with two states, as in: # name daemon src/remote function yes no In fact, rather than maintaining separate files, could we instead maintain this list directly in {remote,qemu}_protocol.x, via stylized comments? enum remote_procedure { /* Each function must have a two-word comment. The first word is * whether remote_generator.pl handles daemon, the second whether * it handles src/remote. */ REMOTE_PROC_OPEN = 1, /* yes no */ ... That way, when we add a new API, we are _already_ editing the file that contains the white/blacklist, and have the precedence of the lines beforehand to remind us whether we need to write manual code or rely on the generator. Although I think that this patch does a good job as-is, I think it is worth a v2 that avoids the extra files (the fewer files you have to edit when adding a new API, the better).
-remote_dispatch_bodies.h: $(srcdir)/remote_generator.pl $(REMOTE_PROTOCOL) - $(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -c -b remote $(REMOTE_PROTOCOL) > $@ +remote_dispatch_bodies.h: $(srcdir)/remote_generator.pl $(REMOTE_PROTOCOL) \ + $(REMOTE_PROTOCOL_WHITELIST) $(REMOTE_PROTOCOL_BLACKLIST) + $(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -c -b remote $(REMOTE_PROTOCOL) \ + $(REMOTE_PROTOCOL_WHITELIST) $(REMOTE_PROTOCOL_BLACKLIST) > $@
In fact, if the white/black list is part of the .x file, then you don't need to tweak this part of the Makefile to pass in the names of extra files.
+++ b/daemon/remote_generator.pl @@ -23,9 +23,29 @@ use Getopt::Std; our ($opt_p, $opt_t, $opt_a, $opt_r, $opt_d, $opt_c, $opt_b, $opt_k); getopts ('ptardcbk');
-my $structprefix = $ARGV[0]; +my $structprefix = shift or die "missing prefix argument"; +my $protocol = shift or die "missing protocol argument"; +my $whitelistname; +my $blacklistname; +my @whitelist; +my @blacklist; + +if ($opt_b or $opt_k) { + $whitelistname = shift or die "missing whitelist argument"; + $blacklistname = shift or die "missing blacklist argument"; + + open(WHITELIST, "<$whitelistname") or die "cannot open $whitelistname: $!"; + @whitelist = <WHITELIST>; + close(WHITELIST); + chomp(@whitelist); + + open(BLACKLIST, "<$blacklistname") or die "cannot open $blacklistname: $!"; + @blacklist = <BLACKLIST>; + close(BLACKLIST); + chomp(@blacklist);
Of course, if the whitelist is maintained in the .x file itself, you'll have to rework this (I guess you have to read the whitelist comments before doing any further processing on individual functions and struct generation that occurred earlier in the file, but doing two passes through the .x file in the perl script isn't that bad).
foreach (@keys) { # skip things which are REMOTE_MESSAGE next if $calls{$_}->{msg};
- if (exists($ug{$calls{$_}->{ProcName}})) { + # ignore procedures on the blacklist + if (exists($black{$calls{$_}->{ProcName}})) { + if (exists($white{$calls{$_}->{ProcName}})) { + die "procedure $calls{$_}->{ProcName} on whitelist and blacklist";
And by maintaining a 'yes|no' comment in the .x file, instead of two separate .whitelist and .blacklist files, you merely need check for a well-formed comment rather than comparing two lists for duplicates or omissions. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

2011/5/9 Eric Blake <eblake@redhat.com>:
On 05/07/2011 06:28 AM, Matthias Bolte wrote:
--- daemon/Makefile.am | 20 ++++- daemon/qemu_dispatch.blacklist | 3 + daemon/qemu_dispatch.whitelist | 1 + daemon/remote_dispatch.blacklist | 37 ++++++++ daemon/remote_dispatch.whitelist | 169 +++++++++++++++++++++++++++++++++++ daemon/remote_generator.pl | 171 +++++++++++++----------------------- src/Makefile.am | 24 ++++- src/remote/qemu_client.blacklist | 3 + src/remote/qemu_client.whitelist | 1 + src/remote/remote_client.blacklist | 47 ++++++++++ src/remote/remote_client.whitelist | 159 +++++++++++++++++++++++++++++++++
Hmm. Given the difference in sizes between daemon/remote_dispatch.whitelist and src/remote/remote_client.whitelist, there are some functions where we are only doing half the job?
Yes, seems so. I didn't yet check what's the difference and why there is one.
That means every new API has to touch two, rather than one, file, and that's out of a choice of four files.
Maybe a better thing to do would be having a single file, that lists every API, along with two states, as in:
# name daemon src/remote function yes no
In fact, rather than maintaining separate files, could we instead maintain this list directly in {remote,qemu}_protocol.x, via stylized comments?
enum remote_procedure { /* Each function must have a two-word comment. The first word is * whether remote_generator.pl handles daemon, the second whether * it handles src/remote. */ REMOTE_PROC_OPEN = 1, /* yes no */ ...
That way, when we add a new API, we are _already_ editing the file that contains the white/blacklist, and have the precedence of the lines beforehand to remind us whether we need to write manual code or rely on the generator.
Although I think that this patch does a good job as-is, I think it is worth a v2 that avoids the extra files (the fewer files you have to edit when adding a new API, the better).
Yes, that's a way better approach. I'll rework this patch to do that instead.
-remote_dispatch_bodies.h: $(srcdir)/remote_generator.pl $(REMOTE_PROTOCOL) - $(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -c -b remote $(REMOTE_PROTOCOL) > $@ +remote_dispatch_bodies.h: $(srcdir)/remote_generator.pl $(REMOTE_PROTOCOL) \ + $(REMOTE_PROTOCOL_WHITELIST) $(REMOTE_PROTOCOL_BLACKLIST) + $(AM_V_GEN)perl -w $(srcdir)/remote_generator.pl -c -b remote $(REMOTE_PROTOCOL) \ + $(REMOTE_PROTOCOL_WHITELIST) $(REMOTE_PROTOCOL_BLACKLIST) > $@
In fact, if the white/black list is part of the .x file, then you don't need to tweak this part of the Makefile to pass in the names of extra files.
+++ b/daemon/remote_generator.pl @@ -23,9 +23,29 @@ use Getopt::Std; our ($opt_p, $opt_t, $opt_a, $opt_r, $opt_d, $opt_c, $opt_b, $opt_k); getopts ('ptardcbk');
-my $structprefix = $ARGV[0]; +my $structprefix = shift or die "missing prefix argument"; +my $protocol = shift or die "missing protocol argument"; +my $whitelistname; +my $blacklistname; +my @whitelist; +my @blacklist; + +if ($opt_b or $opt_k) { + $whitelistname = shift or die "missing whitelist argument"; + $blacklistname = shift or die "missing blacklist argument"; + + open(WHITELIST, "<$whitelistname") or die "cannot open $whitelistname: $!"; + @whitelist = <WHITELIST>; + close(WHITELIST); + chomp(@whitelist); + + open(BLACKLIST, "<$blacklistname") or die "cannot open $blacklistname: $!"; + @blacklist = <BLACKLIST>; + close(BLACKLIST); + chomp(@blacklist);
Of course, if the whitelist is maintained in the .x file itself, you'll have to rework this (I guess you have to read the whitelist comments before doing any further processing on individual functions and struct generation that occurred earlier in the file, but doing two passes through the .x file in the perl script isn't that bad).
This can still be handled in one pass. Before any output is generated the complete .x is parsed. The while and blacklist information is completely read before any output is generated.
foreach (@keys) { # skip things which are REMOTE_MESSAGE next if $calls{$_}->{msg};
- if (exists($ug{$calls{$_}->{ProcName}})) { + # ignore procedures on the blacklist + if (exists($black{$calls{$_}->{ProcName}})) { + if (exists($white{$calls{$_}->{ProcName}})) { + die "procedure $calls{$_}->{ProcName} on whitelist and blacklist";
And by maintaining a 'yes|no' comment in the .x file, instead of two separate .whitelist and .blacklist files, you merely need check for a well-formed comment rather than comparing two lists for duplicates or omissions.
Yep, embedding the while/black information in the .x files makes things simpler. Matthias

On Mon, May 09, 2011 at 03:45:29PM -0600, Eric Blake wrote:
On 05/07/2011 06:28 AM, Matthias Bolte wrote:
--- daemon/Makefile.am | 20 ++++- daemon/qemu_dispatch.blacklist | 3 + daemon/qemu_dispatch.whitelist | 1 + daemon/remote_dispatch.blacklist | 37 ++++++++ daemon/remote_dispatch.whitelist | 169 +++++++++++++++++++++++++++++++++++ daemon/remote_generator.pl | 171 +++++++++++++----------------------- src/Makefile.am | 24 ++++- src/remote/qemu_client.blacklist | 3 + src/remote/qemu_client.whitelist | 1 + src/remote/remote_client.blacklist | 47 ++++++++++ src/remote/remote_client.whitelist | 159 +++++++++++++++++++++++++++++++++
Hmm. Given the difference in sizes between daemon/remote_dispatch.whitelist and src/remote/remote_client.whitelist, there are some functions where we are only doing half the job? That means every new API has to touch two, rather than one, file, and that's out of a choice of four files.
Maybe a better thing to do would be having a single file, that lists every API, along with two states, as in:
# name daemon src/remote function yes no
In fact, rather than maintaining separate files, could we instead maintain this list directly in {remote,qemu}_protocol.x, via stylized comments?
enum remote_procedure { /* Each function must have a two-word comment. The first word is * whether remote_generator.pl handles daemon, the second whether * it handles src/remote. */ REMOTE_PROC_OPEN = 1, /* yes no */ ...
That way, when we add a new API, we are _already_ editing the file that contains the white/blacklist, and have the precedence of the lines beforehand to remind us whether we need to write manual code or rely on the generator.
Although I think that this patch does a good job as-is, I think it is worth a v2 that avoids the extra files (the fewer files you have to edit when adding a new API, the better).
Having annotations in the .x is a nice idea. We could also annotate the methods with 'readonly' and 'readwrite' keywords, and use that to auto generate some readonly ACL checks in the dispatch code as an extra layer of defence. So instead of yes|no, how about just "skipgen|autogen" Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

2011/5/10 Daniel P. Berrange <berrange@redhat.com>:
On Mon, May 09, 2011 at 03:45:29PM -0600, Eric Blake wrote:
On 05/07/2011 06:28 AM, Matthias Bolte wrote:
--- daemon/Makefile.am | 20 ++++- daemon/qemu_dispatch.blacklist | 3 + daemon/qemu_dispatch.whitelist | 1 + daemon/remote_dispatch.blacklist | 37 ++++++++ daemon/remote_dispatch.whitelist | 169 +++++++++++++++++++++++++++++++++++ daemon/remote_generator.pl | 171 +++++++++++++----------------------- src/Makefile.am | 24 ++++- src/remote/qemu_client.blacklist | 3 + src/remote/qemu_client.whitelist | 1 + src/remote/remote_client.blacklist | 47 ++++++++++ src/remote/remote_client.whitelist | 159 +++++++++++++++++++++++++++++++++
Hmm. Given the difference in sizes between daemon/remote_dispatch.whitelist and src/remote/remote_client.whitelist, there are some functions where we are only doing half the job? That means every new API has to touch two, rather than one, file, and that's out of a choice of four files.
Maybe a better thing to do would be having a single file, that lists every API, along with two states, as in:
# name daemon src/remote function yes no
In fact, rather than maintaining separate files, could we instead maintain this list directly in {remote,qemu}_protocol.x, via stylized comments?
enum remote_procedure { /* Each function must have a two-word comment. The first word is * whether remote_generator.pl handles daemon, the second whether * it handles src/remote. */ REMOTE_PROC_OPEN = 1, /* yes no */ ...
That way, when we add a new API, we are _already_ editing the file that contains the white/blacklist, and have the precedence of the lines beforehand to remind us whether we need to write manual code or rely on the generator.
Although I think that this patch does a good job as-is, I think it is worth a v2 that avoids the extra files (the fewer files you have to edit when adding a new API, the better).
Having annotations in the .x is a nice idea. We could also annotate the methods with 'readonly' and 'readwrite' keywords, and use that to auto generate some readonly ACL checks in the dispatch code as an extra layer of defence.
Do you mean checks regarding the VIR_CONNECT_RO flag?
So instead of yes|no, how about just "skipgen|autogen"
Yep, more explicit, I'll go with that. Matthias

On Tue, May 10, 2011 at 05:23:23PM +0200, Matthias Bolte wrote:
2011/5/10 Daniel P. Berrange <berrange@redhat.com>:
On Mon, May 09, 2011 at 03:45:29PM -0600, Eric Blake wrote:
On 05/07/2011 06:28 AM, Matthias Bolte wrote:
--- daemon/Makefile.am | 20 ++++- daemon/qemu_dispatch.blacklist | 3 + daemon/qemu_dispatch.whitelist | 1 + daemon/remote_dispatch.blacklist | 37 ++++++++ daemon/remote_dispatch.whitelist | 169 +++++++++++++++++++++++++++++++++++ daemon/remote_generator.pl | 171 +++++++++++++----------------------- src/Makefile.am | 24 ++++- src/remote/qemu_client.blacklist | 3 + src/remote/qemu_client.whitelist | 1 + src/remote/remote_client.blacklist | 47 ++++++++++ src/remote/remote_client.whitelist | 159 +++++++++++++++++++++++++++++++++
Hmm. Given the difference in sizes between daemon/remote_dispatch.whitelist and src/remote/remote_client.whitelist, there are some functions where we are only doing half the job? That means every new API has to touch two, rather than one, file, and that's out of a choice of four files.
Maybe a better thing to do would be having a single file, that lists every API, along with two states, as in:
# name daemon src/remote function yes no
In fact, rather than maintaining separate files, could we instead maintain this list directly in {remote,qemu}_protocol.x, via stylized comments?
enum remote_procedure { /* Each function must have a two-word comment. The first word is * whether remote_generator.pl handles daemon, the second whether * it handles src/remote. */ REMOTE_PROC_OPEN = 1, /* yes no */ ...
That way, when we add a new API, we are _already_ editing the file that contains the white/blacklist, and have the precedence of the lines beforehand to remind us whether we need to write manual code or rely on the generator.
Although I think that this patch does a good job as-is, I think it is worth a v2 that avoids the extra files (the fewer files you have to edit when adding a new API, the better).
Having annotations in the .x is a nice idea. We could also annotate the methods with 'readonly' and 'readwrite' keywords, and use that to auto generate some readonly ACL checks in the dispatch code as an extra layer of defence.
Do you mean checks regarding the VIR_CONNECT_RO flag?
Yeah, either we duplicate the VIR_CONNECT_RO flag checks in the remote dispatch, or we could actually generate the libvirt.c and driver.h files too, based on the RPC. Don't need to implement this right now though.
So instead of yes|no, how about just "skipgen|autogen"
Yep, more explicit, I'll go with that.
Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

2011/5/10 Daniel P. Berrange <berrange@redhat.com>:
On Tue, May 10, 2011 at 05:23:23PM +0200, Matthias Bolte wrote:
2011/5/10 Daniel P. Berrange <berrange@redhat.com>:
On Mon, May 09, 2011 at 03:45:29PM -0600, Eric Blake wrote:
On 05/07/2011 06:28 AM, Matthias Bolte wrote:
--- daemon/Makefile.am | 20 ++++- daemon/qemu_dispatch.blacklist | 3 + daemon/qemu_dispatch.whitelist | 1 + daemon/remote_dispatch.blacklist | 37 ++++++++ daemon/remote_dispatch.whitelist | 169 +++++++++++++++++++++++++++++++++++ daemon/remote_generator.pl | 171 +++++++++++++----------------------- src/Makefile.am | 24 ++++- src/remote/qemu_client.blacklist | 3 + src/remote/qemu_client.whitelist | 1 + src/remote/remote_client.blacklist | 47 ++++++++++ src/remote/remote_client.whitelist | 159 +++++++++++++++++++++++++++++++++
Hmm. Given the difference in sizes between daemon/remote_dispatch.whitelist and src/remote/remote_client.whitelist, there are some functions where we are only doing half the job? That means every new API has to touch two, rather than one, file, and that's out of a choice of four files.
Maybe a better thing to do would be having a single file, that lists every API, along with two states, as in:
# name daemon src/remote function yes no
In fact, rather than maintaining separate files, could we instead maintain this list directly in {remote,qemu}_protocol.x, via stylized comments?
enum remote_procedure { /* Each function must have a two-word comment. The first word is * whether remote_generator.pl handles daemon, the second whether * it handles src/remote. */ REMOTE_PROC_OPEN = 1, /* yes no */ ...
That way, when we add a new API, we are _already_ editing the file that contains the white/blacklist, and have the precedence of the lines beforehand to remind us whether we need to write manual code or rely on the generator.
Although I think that this patch does a good job as-is, I think it is worth a v2 that avoids the extra files (the fewer files you have to edit when adding a new API, the better).
Having annotations in the .x is a nice idea. We could also annotate the methods with 'readonly' and 'readwrite' keywords, and use that to auto generate some readonly ACL checks in the dispatch code as an extra layer of defence.
Do you mean checks regarding the VIR_CONNECT_RO flag?
Yeah, either we duplicate the VIR_CONNECT_RO flag checks in the remote dispatch, or we could actually generate the libvirt.c and driver.h files too, based on the RPC.
That's an interesting idea, we can probably generate 1/2 or 2/3 of libvirt.c that way.
Don't need to implement this right now though.
We should get the XDR protocol, the public API and the driver API in sync first (regarding (un)signed mismatches etc). But then I'd like to give that a try and see how far we can get with this :) Matthias

On Tue, May 10, 2011 at 04:32:57PM +0100, Daniel P. Berrange wrote:
Yeah, either we duplicate the VIR_CONNECT_RO flag checks in the remote dispatch, or we could actually generate the libvirt.c and driver.h files too, based on the RPC.
<advocacy> More code generation is better. Here is all the code you need to write to make a new libguestfs API function: http://git.annexia.org/?p=libguestfs.git;a=commitdiff;h=4ffa2d6798f7a2bf0bae... That's not a printing error, it really is just 38 lines of code.
From that template we generate:
- RPC stubs similar to libvirt remote driver - bindings in around 8 programming languages - <guestfs.h> header file - several manual pages, eg: http://libguestfs.org/guestfs.3.html#api_calls - guestfish - part of the automated tests This is a huge time saver, and reduces bugs. </advocacy> Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming blog: http://rwmj.wordpress.com Fedora now supports 80 OCaml packages (the OPEN alternative to F#) http://cocan.org/getting_started_with_ocaml_on_red_hat_and_fedora

I should maybe add that if you're going to do this, you should think about having a single generator program. There's nothing worse for maintainability than having scripts generating files generating files generating code, and no one can tell what generates what. In libguestfs there's never a question of what generates what. Or rather, there is this question, but the answer is always the same: the one generator program generates everything. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones libguestfs lets you edit virtual machines. Supports shell scripting, bindings from many languages. http://libguestfs.org
participants (4)
-
Daniel P. Berrange
-
Eric Blake
-
Matthias Bolte
-
Richard W.M. Jones