summaryrefslogtreecommitdiff
path: root/vendor/github.com/digitalocean/go-libvirt/internal
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/digitalocean/go-libvirt/internal')
-rw-r--r--vendor/github.com/digitalocean/go-libvirt/internal/constants/qemu_protocol.gen.go47
-rw-r--r--vendor/github.com/digitalocean/go-libvirt/internal/constants/remote_protocol.gen.go1019
-rw-r--r--vendor/github.com/digitalocean/go-libvirt/internal/event/event.go20
-rw-r--r--vendor/github.com/digitalocean/go-libvirt/internal/event/stream.go145
-rw-r--r--vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/LICENSE13
-rw-r--r--vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/xdr2/decode.go896
-rw-r--r--vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/xdr2/doc.go171
-rw-r--r--vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/xdr2/encode.go669
-rw-r--r--vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/xdr2/error.go177
9 files changed, 3157 insertions, 0 deletions
diff --git a/vendor/github.com/digitalocean/go-libvirt/internal/constants/qemu_protocol.gen.go b/vendor/github.com/digitalocean/go-libvirt/internal/constants/qemu_protocol.gen.go
new file mode 100644
index 000000000..208986dee
--- /dev/null
+++ b/vendor/github.com/digitalocean/go-libvirt/internal/constants/qemu_protocol.gen.go
@@ -0,0 +1,47 @@
+// Copyright 2018 The go-libvirt Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//
+// Code generated by internal/lvgen/generate.go. DO NOT EDIT.
+//
+// To regenerate, run 'go generate' in internal/lvgen.
+//
+
+package constants
+
+// These are libvirt procedure numbers which correspond to each respective
+// API call between remote_internal driver and libvirtd. Each procedure is
+// identified by a unique number.
+const (
+ // From enums:
+ // QEMUProcDomainMonitorCommand is libvirt's QEMU_PROC_DOMAIN_MONITOR_COMMAND
+ QEMUProcDomainMonitorCommand = 1
+ // QEMUProcDomainAttach is libvirt's QEMU_PROC_DOMAIN_ATTACH
+ QEMUProcDomainAttach = 2
+ // QEMUProcDomainAgentCommand is libvirt's QEMU_PROC_DOMAIN_AGENT_COMMAND
+ QEMUProcDomainAgentCommand = 3
+ // QEMUProcConnectDomainMonitorEventRegister is libvirt's QEMU_PROC_CONNECT_DOMAIN_MONITOR_EVENT_REGISTER
+ QEMUProcConnectDomainMonitorEventRegister = 4
+ // QEMUProcConnectDomainMonitorEventDeregister is libvirt's QEMU_PROC_CONNECT_DOMAIN_MONITOR_EVENT_DEREGISTER
+ QEMUProcConnectDomainMonitorEventDeregister = 5
+ // QEMUProcDomainMonitorEvent is libvirt's QEMU_PROC_DOMAIN_MONITOR_EVENT
+ QEMUProcDomainMonitorEvent = 6
+
+
+ // From consts:
+ // QEMUProgram is libvirt's QEMU_PROGRAM
+ QEMUProgram = 0x20008087
+ // QEMUProtocolVersion is libvirt's QEMU_PROTOCOL_VERSION
+ QEMUProtocolVersion = 1
+)
diff --git a/vendor/github.com/digitalocean/go-libvirt/internal/constants/remote_protocol.gen.go b/vendor/github.com/digitalocean/go-libvirt/internal/constants/remote_protocol.gen.go
new file mode 100644
index 000000000..9b9601cb9
--- /dev/null
+++ b/vendor/github.com/digitalocean/go-libvirt/internal/constants/remote_protocol.gen.go
@@ -0,0 +1,1019 @@
+// Copyright 2018 The go-libvirt Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//
+// Code generated by internal/lvgen/generate.go. DO NOT EDIT.
+//
+// To regenerate, run 'go generate' in internal/lvgen.
+//
+
+package constants
+
+// These are libvirt procedure numbers which correspond to each respective
+// API call between remote_internal driver and libvirtd. Each procedure is
+// identified by a unique number.
+const (
+ // From enums:
+ // AuthNone is libvirt's REMOTE_AUTH_NONE
+ AuthNone = 0
+ // AuthSasl is libvirt's REMOTE_AUTH_SASL
+ AuthSasl = 1
+ // AuthPolkit is libvirt's REMOTE_AUTH_POLKIT
+ AuthPolkit = 2
+ // ProcConnectOpen is libvirt's REMOTE_PROC_CONNECT_OPEN
+ ProcConnectOpen = 1
+ // ProcConnectClose is libvirt's REMOTE_PROC_CONNECT_CLOSE
+ ProcConnectClose = 2
+ // ProcConnectGetType is libvirt's REMOTE_PROC_CONNECT_GET_TYPE
+ ProcConnectGetType = 3
+ // ProcConnectGetVersion is libvirt's REMOTE_PROC_CONNECT_GET_VERSION
+ ProcConnectGetVersion = 4
+ // ProcConnectGetMaxVcpus is libvirt's REMOTE_PROC_CONNECT_GET_MAX_VCPUS
+ ProcConnectGetMaxVcpus = 5
+ // ProcNodeGetInfo is libvirt's REMOTE_PROC_NODE_GET_INFO
+ ProcNodeGetInfo = 6
+ // ProcConnectGetCapabilities is libvirt's REMOTE_PROC_CONNECT_GET_CAPABILITIES
+ ProcConnectGetCapabilities = 7
+ // ProcDomainAttachDevice is libvirt's REMOTE_PROC_DOMAIN_ATTACH_DEVICE
+ ProcDomainAttachDevice = 8
+ // ProcDomainCreate is libvirt's REMOTE_PROC_DOMAIN_CREATE
+ ProcDomainCreate = 9
+ // ProcDomainCreateXML is libvirt's REMOTE_PROC_DOMAIN_CREATE_XML
+ ProcDomainCreateXML = 10
+ // ProcDomainDefineXML is libvirt's REMOTE_PROC_DOMAIN_DEFINE_XML
+ ProcDomainDefineXML = 11
+ // ProcDomainDestroy is libvirt's REMOTE_PROC_DOMAIN_DESTROY
+ ProcDomainDestroy = 12
+ // ProcDomainDetachDevice is libvirt's REMOTE_PROC_DOMAIN_DETACH_DEVICE
+ ProcDomainDetachDevice = 13
+ // ProcDomainGetXMLDesc is libvirt's REMOTE_PROC_DOMAIN_GET_XML_DESC
+ ProcDomainGetXMLDesc = 14
+ // ProcDomainGetAutostart is libvirt's REMOTE_PROC_DOMAIN_GET_AUTOSTART
+ ProcDomainGetAutostart = 15
+ // ProcDomainGetInfo is libvirt's REMOTE_PROC_DOMAIN_GET_INFO
+ ProcDomainGetInfo = 16
+ // ProcDomainGetMaxMemory is libvirt's REMOTE_PROC_DOMAIN_GET_MAX_MEMORY
+ ProcDomainGetMaxMemory = 17
+ // ProcDomainGetMaxVcpus is libvirt's REMOTE_PROC_DOMAIN_GET_MAX_VCPUS
+ ProcDomainGetMaxVcpus = 18
+ // ProcDomainGetOsType is libvirt's REMOTE_PROC_DOMAIN_GET_OS_TYPE
+ ProcDomainGetOsType = 19
+ // ProcDomainGetVcpus is libvirt's REMOTE_PROC_DOMAIN_GET_VCPUS
+ ProcDomainGetVcpus = 20
+ // ProcConnectListDefinedDomains is libvirt's REMOTE_PROC_CONNECT_LIST_DEFINED_DOMAINS
+ ProcConnectListDefinedDomains = 21
+ // ProcDomainLookupByID is libvirt's REMOTE_PROC_DOMAIN_LOOKUP_BY_ID
+ ProcDomainLookupByID = 22
+ // ProcDomainLookupByName is libvirt's REMOTE_PROC_DOMAIN_LOOKUP_BY_NAME
+ ProcDomainLookupByName = 23
+ // ProcDomainLookupByUUID is libvirt's REMOTE_PROC_DOMAIN_LOOKUP_BY_UUID
+ ProcDomainLookupByUUID = 24
+ // ProcConnectNumOfDefinedDomains is libvirt's REMOTE_PROC_CONNECT_NUM_OF_DEFINED_DOMAINS
+ ProcConnectNumOfDefinedDomains = 25
+ // ProcDomainPinVcpu is libvirt's REMOTE_PROC_DOMAIN_PIN_VCPU
+ ProcDomainPinVcpu = 26
+ // ProcDomainReboot is libvirt's REMOTE_PROC_DOMAIN_REBOOT
+ ProcDomainReboot = 27
+ // ProcDomainResume is libvirt's REMOTE_PROC_DOMAIN_RESUME
+ ProcDomainResume = 28
+ // ProcDomainSetAutostart is libvirt's REMOTE_PROC_DOMAIN_SET_AUTOSTART
+ ProcDomainSetAutostart = 29
+ // ProcDomainSetMaxMemory is libvirt's REMOTE_PROC_DOMAIN_SET_MAX_MEMORY
+ ProcDomainSetMaxMemory = 30
+ // ProcDomainSetMemory is libvirt's REMOTE_PROC_DOMAIN_SET_MEMORY
+ ProcDomainSetMemory = 31
+ // ProcDomainSetVcpus is libvirt's REMOTE_PROC_DOMAIN_SET_VCPUS
+ ProcDomainSetVcpus = 32
+ // ProcDomainShutdown is libvirt's REMOTE_PROC_DOMAIN_SHUTDOWN
+ ProcDomainShutdown = 33
+ // ProcDomainSuspend is libvirt's REMOTE_PROC_DOMAIN_SUSPEND
+ ProcDomainSuspend = 34
+ // ProcDomainUndefine is libvirt's REMOTE_PROC_DOMAIN_UNDEFINE
+ ProcDomainUndefine = 35
+ // ProcConnectListDefinedNetworks is libvirt's REMOTE_PROC_CONNECT_LIST_DEFINED_NETWORKS
+ ProcConnectListDefinedNetworks = 36
+ // ProcConnectListDomains is libvirt's REMOTE_PROC_CONNECT_LIST_DOMAINS
+ ProcConnectListDomains = 37
+ // ProcConnectListNetworks is libvirt's REMOTE_PROC_CONNECT_LIST_NETWORKS
+ ProcConnectListNetworks = 38
+ // ProcNetworkCreate is libvirt's REMOTE_PROC_NETWORK_CREATE
+ ProcNetworkCreate = 39
+ // ProcNetworkCreateXML is libvirt's REMOTE_PROC_NETWORK_CREATE_XML
+ ProcNetworkCreateXML = 40
+ // ProcNetworkDefineXML is libvirt's REMOTE_PROC_NETWORK_DEFINE_XML
+ ProcNetworkDefineXML = 41
+ // ProcNetworkDestroy is libvirt's REMOTE_PROC_NETWORK_DESTROY
+ ProcNetworkDestroy = 42
+ // ProcNetworkGetXMLDesc is libvirt's REMOTE_PROC_NETWORK_GET_XML_DESC
+ ProcNetworkGetXMLDesc = 43
+ // ProcNetworkGetAutostart is libvirt's REMOTE_PROC_NETWORK_GET_AUTOSTART
+ ProcNetworkGetAutostart = 44
+ // ProcNetworkGetBridgeName is libvirt's REMOTE_PROC_NETWORK_GET_BRIDGE_NAME
+ ProcNetworkGetBridgeName = 45
+ // ProcNetworkLookupByName is libvirt's REMOTE_PROC_NETWORK_LOOKUP_BY_NAME
+ ProcNetworkLookupByName = 46
+ // ProcNetworkLookupByUUID is libvirt's REMOTE_PROC_NETWORK_LOOKUP_BY_UUID
+ ProcNetworkLookupByUUID = 47
+ // ProcNetworkSetAutostart is libvirt's REMOTE_PROC_NETWORK_SET_AUTOSTART
+ ProcNetworkSetAutostart = 48
+ // ProcNetworkUndefine is libvirt's REMOTE_PROC_NETWORK_UNDEFINE
+ ProcNetworkUndefine = 49
+ // ProcConnectNumOfDefinedNetworks is libvirt's REMOTE_PROC_CONNECT_NUM_OF_DEFINED_NETWORKS
+ ProcConnectNumOfDefinedNetworks = 50
+ // ProcConnectNumOfDomains is libvirt's REMOTE_PROC_CONNECT_NUM_OF_DOMAINS
+ ProcConnectNumOfDomains = 51
+ // ProcConnectNumOfNetworks is libvirt's REMOTE_PROC_CONNECT_NUM_OF_NETWORKS
+ ProcConnectNumOfNetworks = 52
+ // ProcDomainCoreDump is libvirt's REMOTE_PROC_DOMAIN_CORE_DUMP
+ ProcDomainCoreDump = 53
+ // ProcDomainRestore is libvirt's REMOTE_PROC_DOMAIN_RESTORE
+ ProcDomainRestore = 54
+ // ProcDomainSave is libvirt's REMOTE_PROC_DOMAIN_SAVE
+ ProcDomainSave = 55
+ // ProcDomainGetSchedulerType is libvirt's REMOTE_PROC_DOMAIN_GET_SCHEDULER_TYPE
+ ProcDomainGetSchedulerType = 56
+ // ProcDomainGetSchedulerParameters is libvirt's REMOTE_PROC_DOMAIN_GET_SCHEDULER_PARAMETERS
+ ProcDomainGetSchedulerParameters = 57
+ // ProcDomainSetSchedulerParameters is libvirt's REMOTE_PROC_DOMAIN_SET_SCHEDULER_PARAMETERS
+ ProcDomainSetSchedulerParameters = 58
+ // ProcConnectGetHostname is libvirt's REMOTE_PROC_CONNECT_GET_HOSTNAME
+ ProcConnectGetHostname = 59
+ // ProcConnectSupportsFeature is libvirt's REMOTE_PROC_CONNECT_SUPPORTS_FEATURE
+ ProcConnectSupportsFeature = 60
+ // ProcDomainMigratePrepare is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_PREPARE
+ ProcDomainMigratePrepare = 61
+ // ProcDomainMigratePerform is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_PERFORM
+ ProcDomainMigratePerform = 62
+ // ProcDomainMigrateFinish is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_FINISH
+ ProcDomainMigrateFinish = 63
+ // ProcDomainBlockStats is libvirt's REMOTE_PROC_DOMAIN_BLOCK_STATS
+ ProcDomainBlockStats = 64
+ // ProcDomainInterfaceStats is libvirt's REMOTE_PROC_DOMAIN_INTERFACE_STATS
+ ProcDomainInterfaceStats = 65
+ // ProcAuthList is libvirt's REMOTE_PROC_AUTH_LIST
+ ProcAuthList = 66
+ // ProcAuthSaslInit is libvirt's REMOTE_PROC_AUTH_SASL_INIT
+ ProcAuthSaslInit = 67
+ // ProcAuthSaslStart is libvirt's REMOTE_PROC_AUTH_SASL_START
+ ProcAuthSaslStart = 68
+ // ProcAuthSaslStep is libvirt's REMOTE_PROC_AUTH_SASL_STEP
+ ProcAuthSaslStep = 69
+ // ProcAuthPolkit is libvirt's REMOTE_PROC_AUTH_POLKIT
+ ProcAuthPolkit = 70
+ // ProcConnectNumOfStoragePools is libvirt's REMOTE_PROC_CONNECT_NUM_OF_STORAGE_POOLS
+ ProcConnectNumOfStoragePools = 71
+ // ProcConnectListStoragePools is libvirt's REMOTE_PROC_CONNECT_LIST_STORAGE_POOLS
+ ProcConnectListStoragePools = 72
+ // ProcConnectNumOfDefinedStoragePools is libvirt's REMOTE_PROC_CONNECT_NUM_OF_DEFINED_STORAGE_POOLS
+ ProcConnectNumOfDefinedStoragePools = 73
+ // ProcConnectListDefinedStoragePools is libvirt's REMOTE_PROC_CONNECT_LIST_DEFINED_STORAGE_POOLS
+ ProcConnectListDefinedStoragePools = 74
+ // ProcConnectFindStoragePoolSources is libvirt's REMOTE_PROC_CONNECT_FIND_STORAGE_POOL_SOURCES
+ ProcConnectFindStoragePoolSources = 75
+ // ProcStoragePoolCreateXML is libvirt's REMOTE_PROC_STORAGE_POOL_CREATE_XML
+ ProcStoragePoolCreateXML = 76
+ // ProcStoragePoolDefineXML is libvirt's REMOTE_PROC_STORAGE_POOL_DEFINE_XML
+ ProcStoragePoolDefineXML = 77
+ // ProcStoragePoolCreate is libvirt's REMOTE_PROC_STORAGE_POOL_CREATE
+ ProcStoragePoolCreate = 78
+ // ProcStoragePoolBuild is libvirt's REMOTE_PROC_STORAGE_POOL_BUILD
+ ProcStoragePoolBuild = 79
+ // ProcStoragePoolDestroy is libvirt's REMOTE_PROC_STORAGE_POOL_DESTROY
+ ProcStoragePoolDestroy = 80
+ // ProcStoragePoolDelete is libvirt's REMOTE_PROC_STORAGE_POOL_DELETE
+ ProcStoragePoolDelete = 81
+ // ProcStoragePoolUndefine is libvirt's REMOTE_PROC_STORAGE_POOL_UNDEFINE
+ ProcStoragePoolUndefine = 82
+ // ProcStoragePoolRefresh is libvirt's REMOTE_PROC_STORAGE_POOL_REFRESH
+ ProcStoragePoolRefresh = 83
+ // ProcStoragePoolLookupByName is libvirt's REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_NAME
+ ProcStoragePoolLookupByName = 84
+ // ProcStoragePoolLookupByUUID is libvirt's REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_UUID
+ ProcStoragePoolLookupByUUID = 85
+ // ProcStoragePoolLookupByVolume is libvirt's REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_VOLUME
+ ProcStoragePoolLookupByVolume = 86
+ // ProcStoragePoolGetInfo is libvirt's REMOTE_PROC_STORAGE_POOL_GET_INFO
+ ProcStoragePoolGetInfo = 87
+ // ProcStoragePoolGetXMLDesc is libvirt's REMOTE_PROC_STORAGE_POOL_GET_XML_DESC
+ ProcStoragePoolGetXMLDesc = 88
+ // ProcStoragePoolGetAutostart is libvirt's REMOTE_PROC_STORAGE_POOL_GET_AUTOSTART
+ ProcStoragePoolGetAutostart = 89
+ // ProcStoragePoolSetAutostart is libvirt's REMOTE_PROC_STORAGE_POOL_SET_AUTOSTART
+ ProcStoragePoolSetAutostart = 90
+ // ProcStoragePoolNumOfVolumes is libvirt's REMOTE_PROC_STORAGE_POOL_NUM_OF_VOLUMES
+ ProcStoragePoolNumOfVolumes = 91
+ // ProcStoragePoolListVolumes is libvirt's REMOTE_PROC_STORAGE_POOL_LIST_VOLUMES
+ ProcStoragePoolListVolumes = 92
+ // ProcStorageVolCreateXML is libvirt's REMOTE_PROC_STORAGE_VOL_CREATE_XML
+ ProcStorageVolCreateXML = 93
+ // ProcStorageVolDelete is libvirt's REMOTE_PROC_STORAGE_VOL_DELETE
+ ProcStorageVolDelete = 94
+ // ProcStorageVolLookupByName is libvirt's REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_NAME
+ ProcStorageVolLookupByName = 95
+ // ProcStorageVolLookupByKey is libvirt's REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_KEY
+ ProcStorageVolLookupByKey = 96
+ // ProcStorageVolLookupByPath is libvirt's REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_PATH
+ ProcStorageVolLookupByPath = 97
+ // ProcStorageVolGetInfo is libvirt's REMOTE_PROC_STORAGE_VOL_GET_INFO
+ ProcStorageVolGetInfo = 98
+ // ProcStorageVolGetXMLDesc is libvirt's REMOTE_PROC_STORAGE_VOL_GET_XML_DESC
+ ProcStorageVolGetXMLDesc = 99
+ // ProcStorageVolGetPath is libvirt's REMOTE_PROC_STORAGE_VOL_GET_PATH
+ ProcStorageVolGetPath = 100
+ // ProcNodeGetCellsFreeMemory is libvirt's REMOTE_PROC_NODE_GET_CELLS_FREE_MEMORY
+ ProcNodeGetCellsFreeMemory = 101
+ // ProcNodeGetFreeMemory is libvirt's REMOTE_PROC_NODE_GET_FREE_MEMORY
+ ProcNodeGetFreeMemory = 102
+ // ProcDomainBlockPeek is libvirt's REMOTE_PROC_DOMAIN_BLOCK_PEEK
+ ProcDomainBlockPeek = 103
+ // ProcDomainMemoryPeek is libvirt's REMOTE_PROC_DOMAIN_MEMORY_PEEK
+ ProcDomainMemoryPeek = 104
+ // ProcConnectDomainEventRegister is libvirt's REMOTE_PROC_CONNECT_DOMAIN_EVENT_REGISTER
+ ProcConnectDomainEventRegister = 105
+ // ProcConnectDomainEventDeregister is libvirt's REMOTE_PROC_CONNECT_DOMAIN_EVENT_DEREGISTER
+ ProcConnectDomainEventDeregister = 106
+ // ProcDomainEventLifecycle is libvirt's REMOTE_PROC_DOMAIN_EVENT_LIFECYCLE
+ ProcDomainEventLifecycle = 107
+ // ProcDomainMigratePrepare2 is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_PREPARE2
+ ProcDomainMigratePrepare2 = 108
+ // ProcDomainMigrateFinish2 is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_FINISH2
+ ProcDomainMigrateFinish2 = 109
+ // ProcConnectGetUri is libvirt's REMOTE_PROC_CONNECT_GET_URI
+ ProcConnectGetUri = 110
+ // ProcNodeNumOfDevices is libvirt's REMOTE_PROC_NODE_NUM_OF_DEVICES
+ ProcNodeNumOfDevices = 111
+ // ProcNodeListDevices is libvirt's REMOTE_PROC_NODE_LIST_DEVICES
+ ProcNodeListDevices = 112
+ // ProcNodeDeviceLookupByName is libvirt's REMOTE_PROC_NODE_DEVICE_LOOKUP_BY_NAME
+ ProcNodeDeviceLookupByName = 113
+ // ProcNodeDeviceGetXMLDesc is libvirt's REMOTE_PROC_NODE_DEVICE_GET_XML_DESC
+ ProcNodeDeviceGetXMLDesc = 114
+ // ProcNodeDeviceGetParent is libvirt's REMOTE_PROC_NODE_DEVICE_GET_PARENT
+ ProcNodeDeviceGetParent = 115
+ // ProcNodeDeviceNumOfCaps is libvirt's REMOTE_PROC_NODE_DEVICE_NUM_OF_CAPS
+ ProcNodeDeviceNumOfCaps = 116
+ // ProcNodeDeviceListCaps is libvirt's REMOTE_PROC_NODE_DEVICE_LIST_CAPS
+ ProcNodeDeviceListCaps = 117
+ // ProcNodeDeviceDettach is libvirt's REMOTE_PROC_NODE_DEVICE_DETTACH
+ ProcNodeDeviceDettach = 118
+ // ProcNodeDeviceReAttach is libvirt's REMOTE_PROC_NODE_DEVICE_RE_ATTACH
+ ProcNodeDeviceReAttach = 119
+ // ProcNodeDeviceReset is libvirt's REMOTE_PROC_NODE_DEVICE_RESET
+ ProcNodeDeviceReset = 120
+ // ProcDomainGetSecurityLabel is libvirt's REMOTE_PROC_DOMAIN_GET_SECURITY_LABEL
+ ProcDomainGetSecurityLabel = 121
+ // ProcNodeGetSecurityModel is libvirt's REMOTE_PROC_NODE_GET_SECURITY_MODEL
+ ProcNodeGetSecurityModel = 122
+ // ProcNodeDeviceCreateXML is libvirt's REMOTE_PROC_NODE_DEVICE_CREATE_XML
+ ProcNodeDeviceCreateXML = 123
+ // ProcNodeDeviceDestroy is libvirt's REMOTE_PROC_NODE_DEVICE_DESTROY
+ ProcNodeDeviceDestroy = 124
+ // ProcStorageVolCreateXMLFrom is libvirt's REMOTE_PROC_STORAGE_VOL_CREATE_XML_FROM
+ ProcStorageVolCreateXMLFrom = 125
+ // ProcConnectNumOfInterfaces is libvirt's REMOTE_PROC_CONNECT_NUM_OF_INTERFACES
+ ProcConnectNumOfInterfaces = 126
+ // ProcConnectListInterfaces is libvirt's REMOTE_PROC_CONNECT_LIST_INTERFACES
+ ProcConnectListInterfaces = 127
+ // ProcInterfaceLookupByName is libvirt's REMOTE_PROC_INTERFACE_LOOKUP_BY_NAME
+ ProcInterfaceLookupByName = 128
+ // ProcInterfaceLookupByMacString is libvirt's REMOTE_PROC_INTERFACE_LOOKUP_BY_MAC_STRING
+ ProcInterfaceLookupByMacString = 129
+ // ProcInterfaceGetXMLDesc is libvirt's REMOTE_PROC_INTERFACE_GET_XML_DESC
+ ProcInterfaceGetXMLDesc = 130
+ // ProcInterfaceDefineXML is libvirt's REMOTE_PROC_INTERFACE_DEFINE_XML
+ ProcInterfaceDefineXML = 131
+ // ProcInterfaceUndefine is libvirt's REMOTE_PROC_INTERFACE_UNDEFINE
+ ProcInterfaceUndefine = 132
+ // ProcInterfaceCreate is libvirt's REMOTE_PROC_INTERFACE_CREATE
+ ProcInterfaceCreate = 133
+ // ProcInterfaceDestroy is libvirt's REMOTE_PROC_INTERFACE_DESTROY
+ ProcInterfaceDestroy = 134
+ // ProcConnectDomainXMLFromNative is libvirt's REMOTE_PROC_CONNECT_DOMAIN_XML_FROM_NATIVE
+ ProcConnectDomainXMLFromNative = 135
+ // ProcConnectDomainXMLToNative is libvirt's REMOTE_PROC_CONNECT_DOMAIN_XML_TO_NATIVE
+ ProcConnectDomainXMLToNative = 136
+ // ProcConnectNumOfDefinedInterfaces is libvirt's REMOTE_PROC_CONNECT_NUM_OF_DEFINED_INTERFACES
+ ProcConnectNumOfDefinedInterfaces = 137
+ // ProcConnectListDefinedInterfaces is libvirt's REMOTE_PROC_CONNECT_LIST_DEFINED_INTERFACES
+ ProcConnectListDefinedInterfaces = 138
+ // ProcConnectNumOfSecrets is libvirt's REMOTE_PROC_CONNECT_NUM_OF_SECRETS
+ ProcConnectNumOfSecrets = 139
+ // ProcConnectListSecrets is libvirt's REMOTE_PROC_CONNECT_LIST_SECRETS
+ ProcConnectListSecrets = 140
+ // ProcSecretLookupByUUID is libvirt's REMOTE_PROC_SECRET_LOOKUP_BY_UUID
+ ProcSecretLookupByUUID = 141
+ // ProcSecretDefineXML is libvirt's REMOTE_PROC_SECRET_DEFINE_XML
+ ProcSecretDefineXML = 142
+ // ProcSecretGetXMLDesc is libvirt's REMOTE_PROC_SECRET_GET_XML_DESC
+ ProcSecretGetXMLDesc = 143
+ // ProcSecretSetValue is libvirt's REMOTE_PROC_SECRET_SET_VALUE
+ ProcSecretSetValue = 144
+ // ProcSecretGetValue is libvirt's REMOTE_PROC_SECRET_GET_VALUE
+ ProcSecretGetValue = 145
+ // ProcSecretUndefine is libvirt's REMOTE_PROC_SECRET_UNDEFINE
+ ProcSecretUndefine = 146
+ // ProcSecretLookupByUsage is libvirt's REMOTE_PROC_SECRET_LOOKUP_BY_USAGE
+ ProcSecretLookupByUsage = 147
+ // ProcDomainMigratePrepareTunnel is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_PREPARE_TUNNEL
+ ProcDomainMigratePrepareTunnel = 148
+ // ProcConnectIsSecure is libvirt's REMOTE_PROC_CONNECT_IS_SECURE
+ ProcConnectIsSecure = 149
+ // ProcDomainIsActive is libvirt's REMOTE_PROC_DOMAIN_IS_ACTIVE
+ ProcDomainIsActive = 150
+ // ProcDomainIsPersistent is libvirt's REMOTE_PROC_DOMAIN_IS_PERSISTENT
+ ProcDomainIsPersistent = 151
+ // ProcNetworkIsActive is libvirt's REMOTE_PROC_NETWORK_IS_ACTIVE
+ ProcNetworkIsActive = 152
+ // ProcNetworkIsPersistent is libvirt's REMOTE_PROC_NETWORK_IS_PERSISTENT
+ ProcNetworkIsPersistent = 153
+ // ProcStoragePoolIsActive is libvirt's REMOTE_PROC_STORAGE_POOL_IS_ACTIVE
+ ProcStoragePoolIsActive = 154
+ // ProcStoragePoolIsPersistent is libvirt's REMOTE_PROC_STORAGE_POOL_IS_PERSISTENT
+ ProcStoragePoolIsPersistent = 155
+ // ProcInterfaceIsActive is libvirt's REMOTE_PROC_INTERFACE_IS_ACTIVE
+ ProcInterfaceIsActive = 156
+ // ProcConnectGetLibVersion is libvirt's REMOTE_PROC_CONNECT_GET_LIB_VERSION
+ ProcConnectGetLibVersion = 157
+ // ProcConnectCompareCPU is libvirt's REMOTE_PROC_CONNECT_COMPARE_CPU
+ ProcConnectCompareCPU = 158
+ // ProcDomainMemoryStats is libvirt's REMOTE_PROC_DOMAIN_MEMORY_STATS
+ ProcDomainMemoryStats = 159
+ // ProcDomainAttachDeviceFlags is libvirt's REMOTE_PROC_DOMAIN_ATTACH_DEVICE_FLAGS
+ ProcDomainAttachDeviceFlags = 160
+ // ProcDomainDetachDeviceFlags is libvirt's REMOTE_PROC_DOMAIN_DETACH_DEVICE_FLAGS
+ ProcDomainDetachDeviceFlags = 161
+ // ProcConnectBaselineCPU is libvirt's REMOTE_PROC_CONNECT_BASELINE_CPU
+ ProcConnectBaselineCPU = 162
+ // ProcDomainGetJobInfo is libvirt's REMOTE_PROC_DOMAIN_GET_JOB_INFO
+ ProcDomainGetJobInfo = 163
+ // ProcDomainAbortJob is libvirt's REMOTE_PROC_DOMAIN_ABORT_JOB
+ ProcDomainAbortJob = 164
+ // ProcStorageVolWipe is libvirt's REMOTE_PROC_STORAGE_VOL_WIPE
+ ProcStorageVolWipe = 165
+ // ProcDomainMigrateSetMaxDowntime is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_SET_MAX_DOWNTIME
+ ProcDomainMigrateSetMaxDowntime = 166
+ // ProcConnectDomainEventRegisterAny is libvirt's REMOTE_PROC_CONNECT_DOMAIN_EVENT_REGISTER_ANY
+ ProcConnectDomainEventRegisterAny = 167
+ // ProcConnectDomainEventDeregisterAny is libvirt's REMOTE_PROC_CONNECT_DOMAIN_EVENT_DEREGISTER_ANY
+ ProcConnectDomainEventDeregisterAny = 168
+ // ProcDomainEventReboot is libvirt's REMOTE_PROC_DOMAIN_EVENT_REBOOT
+ ProcDomainEventReboot = 169
+ // ProcDomainEventRtcChange is libvirt's REMOTE_PROC_DOMAIN_EVENT_RTC_CHANGE
+ ProcDomainEventRtcChange = 170
+ // ProcDomainEventWatchdog is libvirt's REMOTE_PROC_DOMAIN_EVENT_WATCHDOG
+ ProcDomainEventWatchdog = 171
+ // ProcDomainEventIOError is libvirt's REMOTE_PROC_DOMAIN_EVENT_IO_ERROR
+ ProcDomainEventIOError = 172
+ // ProcDomainEventGraphics is libvirt's REMOTE_PROC_DOMAIN_EVENT_GRAPHICS
+ ProcDomainEventGraphics = 173
+ // ProcDomainUpdateDeviceFlags is libvirt's REMOTE_PROC_DOMAIN_UPDATE_DEVICE_FLAGS
+ ProcDomainUpdateDeviceFlags = 174
+ // ProcNwfilterLookupByName is libvirt's REMOTE_PROC_NWFILTER_LOOKUP_BY_NAME
+ ProcNwfilterLookupByName = 175
+ // ProcNwfilterLookupByUUID is libvirt's REMOTE_PROC_NWFILTER_LOOKUP_BY_UUID
+ ProcNwfilterLookupByUUID = 176
+ // ProcNwfilterGetXMLDesc is libvirt's REMOTE_PROC_NWFILTER_GET_XML_DESC
+ ProcNwfilterGetXMLDesc = 177
+ // ProcConnectNumOfNwfilters is libvirt's REMOTE_PROC_CONNECT_NUM_OF_NWFILTERS
+ ProcConnectNumOfNwfilters = 178
+ // ProcConnectListNwfilters is libvirt's REMOTE_PROC_CONNECT_LIST_NWFILTERS
+ ProcConnectListNwfilters = 179
+ // ProcNwfilterDefineXML is libvirt's REMOTE_PROC_NWFILTER_DEFINE_XML
+ ProcNwfilterDefineXML = 180
+ // ProcNwfilterUndefine is libvirt's REMOTE_PROC_NWFILTER_UNDEFINE
+ ProcNwfilterUndefine = 181
+ // ProcDomainManagedSave is libvirt's REMOTE_PROC_DOMAIN_MANAGED_SAVE
+ ProcDomainManagedSave = 182
+ // ProcDomainHasManagedSaveImage is libvirt's REMOTE_PROC_DOMAIN_HAS_MANAGED_SAVE_IMAGE
+ ProcDomainHasManagedSaveImage = 183
+ // ProcDomainManagedSaveRemove is libvirt's REMOTE_PROC_DOMAIN_MANAGED_SAVE_REMOVE
+ ProcDomainManagedSaveRemove = 184
+ // ProcDomainSnapshotCreateXML is libvirt's REMOTE_PROC_DOMAIN_SNAPSHOT_CREATE_XML
+ ProcDomainSnapshotCreateXML = 185
+ // ProcDomainSnapshotGetXMLDesc is libvirt's REMOTE_PROC_DOMAIN_SNAPSHOT_GET_XML_DESC
+ ProcDomainSnapshotGetXMLDesc = 186
+ // ProcDomainSnapshotNum is libvirt's REMOTE_PROC_DOMAIN_SNAPSHOT_NUM
+ ProcDomainSnapshotNum = 187
+ // ProcDomainSnapshotListNames is libvirt's REMOTE_PROC_DOMAIN_SNAPSHOT_LIST_NAMES
+ ProcDomainSnapshotListNames = 188
+ // ProcDomainSnapshotLookupByName is libvirt's REMOTE_PROC_DOMAIN_SNAPSHOT_LOOKUP_BY_NAME
+ ProcDomainSnapshotLookupByName = 189
+ // ProcDomainHasCurrentSnapshot is libvirt's REMOTE_PROC_DOMAIN_HAS_CURRENT_SNAPSHOT
+ ProcDomainHasCurrentSnapshot = 190
+ // ProcDomainSnapshotCurrent is libvirt's REMOTE_PROC_DOMAIN_SNAPSHOT_CURRENT
+ ProcDomainSnapshotCurrent = 191
+ // ProcDomainRevertToSnapshot is libvirt's REMOTE_PROC_DOMAIN_REVERT_TO_SNAPSHOT
+ ProcDomainRevertToSnapshot = 192
+ // ProcDomainSnapshotDelete is libvirt's REMOTE_PROC_DOMAIN_SNAPSHOT_DELETE
+ ProcDomainSnapshotDelete = 193
+ // ProcDomainGetBlockInfo is libvirt's REMOTE_PROC_DOMAIN_GET_BLOCK_INFO
+ ProcDomainGetBlockInfo = 194
+ // ProcDomainEventIOErrorReason is libvirt's REMOTE_PROC_DOMAIN_EVENT_IO_ERROR_REASON
+ ProcDomainEventIOErrorReason = 195
+ // ProcDomainCreateWithFlags is libvirt's REMOTE_PROC_DOMAIN_CREATE_WITH_FLAGS
+ ProcDomainCreateWithFlags = 196
+ // ProcDomainSetMemoryParameters is libvirt's REMOTE_PROC_DOMAIN_SET_MEMORY_PARAMETERS
+ ProcDomainSetMemoryParameters = 197
+ // ProcDomainGetMemoryParameters is libvirt's REMOTE_PROC_DOMAIN_GET_MEMORY_PARAMETERS
+ ProcDomainGetMemoryParameters = 198
+ // ProcDomainSetVcpusFlags is libvirt's REMOTE_PROC_DOMAIN_SET_VCPUS_FLAGS
+ ProcDomainSetVcpusFlags = 199
+ // ProcDomainGetVcpusFlags is libvirt's REMOTE_PROC_DOMAIN_GET_VCPUS_FLAGS
+ ProcDomainGetVcpusFlags = 200
+ // ProcDomainOpenConsole is libvirt's REMOTE_PROC_DOMAIN_OPEN_CONSOLE
+ ProcDomainOpenConsole = 201
+ // ProcDomainIsUpdated is libvirt's REMOTE_PROC_DOMAIN_IS_UPDATED
+ ProcDomainIsUpdated = 202
+ // ProcConnectGetSysinfo is libvirt's REMOTE_PROC_CONNECT_GET_SYSINFO
+ ProcConnectGetSysinfo = 203
+ // ProcDomainSetMemoryFlags is libvirt's REMOTE_PROC_DOMAIN_SET_MEMORY_FLAGS
+ ProcDomainSetMemoryFlags = 204
+ // ProcDomainSetBlkioParameters is libvirt's REMOTE_PROC_DOMAIN_SET_BLKIO_PARAMETERS
+ ProcDomainSetBlkioParameters = 205
+ // ProcDomainGetBlkioParameters is libvirt's REMOTE_PROC_DOMAIN_GET_BLKIO_PARAMETERS
+ ProcDomainGetBlkioParameters = 206
+ // ProcDomainMigrateSetMaxSpeed is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_SET_MAX_SPEED
+ ProcDomainMigrateSetMaxSpeed = 207
+ // ProcStorageVolUpload is libvirt's REMOTE_PROC_STORAGE_VOL_UPLOAD
+ ProcStorageVolUpload = 208
+ // ProcStorageVolDownload is libvirt's REMOTE_PROC_STORAGE_VOL_DOWNLOAD
+ ProcStorageVolDownload = 209
+ // ProcDomainInjectNmi is libvirt's REMOTE_PROC_DOMAIN_INJECT_NMI
+ ProcDomainInjectNmi = 210
+ // ProcDomainScreenshot is libvirt's REMOTE_PROC_DOMAIN_SCREENSHOT
+ ProcDomainScreenshot = 211
+ // ProcDomainGetState is libvirt's REMOTE_PROC_DOMAIN_GET_STATE
+ ProcDomainGetState = 212
+ // ProcDomainMigrateBegin3 is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_BEGIN3
+ ProcDomainMigrateBegin3 = 213
+ // ProcDomainMigratePrepare3 is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_PREPARE3
+ ProcDomainMigratePrepare3 = 214
+ // ProcDomainMigratePrepareTunnel3 is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_PREPARE_TUNNEL3
+ ProcDomainMigratePrepareTunnel3 = 215
+ // ProcDomainMigratePerform3 is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_PERFORM3
+ ProcDomainMigratePerform3 = 216
+ // ProcDomainMigrateFinish3 is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_FINISH3
+ ProcDomainMigrateFinish3 = 217
+ // ProcDomainMigrateConfirm3 is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_CONFIRM3
+ ProcDomainMigrateConfirm3 = 218
+ // ProcDomainSetSchedulerParametersFlags is libvirt's REMOTE_PROC_DOMAIN_SET_SCHEDULER_PARAMETERS_FLAGS
+ ProcDomainSetSchedulerParametersFlags = 219
+ // ProcInterfaceChangeBegin is libvirt's REMOTE_PROC_INTERFACE_CHANGE_BEGIN
+ ProcInterfaceChangeBegin = 220
+ // ProcInterfaceChangeCommit is libvirt's REMOTE_PROC_INTERFACE_CHANGE_COMMIT
+ ProcInterfaceChangeCommit = 221
+ // ProcInterfaceChangeRollback is libvirt's REMOTE_PROC_INTERFACE_CHANGE_ROLLBACK
+ ProcInterfaceChangeRollback = 222
+ // ProcDomainGetSchedulerParametersFlags is libvirt's REMOTE_PROC_DOMAIN_GET_SCHEDULER_PARAMETERS_FLAGS
+ ProcDomainGetSchedulerParametersFlags = 223
+ // ProcDomainEventControlError is libvirt's REMOTE_PROC_DOMAIN_EVENT_CONTROL_ERROR
+ ProcDomainEventControlError = 224
+ // ProcDomainPinVcpuFlags is libvirt's REMOTE_PROC_DOMAIN_PIN_VCPU_FLAGS
+ ProcDomainPinVcpuFlags = 225
+ // ProcDomainSendKey is libvirt's REMOTE_PROC_DOMAIN_SEND_KEY
+ ProcDomainSendKey = 226
+ // ProcNodeGetCPUStats is libvirt's REMOTE_PROC_NODE_GET_CPU_STATS
+ ProcNodeGetCPUStats = 227
+ // ProcNodeGetMemoryStats is libvirt's REMOTE_PROC_NODE_GET_MEMORY_STATS
+ ProcNodeGetMemoryStats = 228
+ // ProcDomainGetControlInfo is libvirt's REMOTE_PROC_DOMAIN_GET_CONTROL_INFO
+ ProcDomainGetControlInfo = 229
+ // ProcDomainGetVcpuPinInfo is libvirt's REMOTE_PROC_DOMAIN_GET_VCPU_PIN_INFO
+ ProcDomainGetVcpuPinInfo = 230
+ // ProcDomainUndefineFlags is libvirt's REMOTE_PROC_DOMAIN_UNDEFINE_FLAGS
+ ProcDomainUndefineFlags = 231
+ // ProcDomainSaveFlags is libvirt's REMOTE_PROC_DOMAIN_SAVE_FLAGS
+ ProcDomainSaveFlags = 232
+ // ProcDomainRestoreFlags is libvirt's REMOTE_PROC_DOMAIN_RESTORE_FLAGS
+ ProcDomainRestoreFlags = 233
+ // ProcDomainDestroyFlags is libvirt's REMOTE_PROC_DOMAIN_DESTROY_FLAGS
+ ProcDomainDestroyFlags = 234
+ // ProcDomainSaveImageGetXMLDesc is libvirt's REMOTE_PROC_DOMAIN_SAVE_IMAGE_GET_XML_DESC
+ ProcDomainSaveImageGetXMLDesc = 235
+ // ProcDomainSaveImageDefineXML is libvirt's REMOTE_PROC_DOMAIN_SAVE_IMAGE_DEFINE_XML
+ ProcDomainSaveImageDefineXML = 236
+ // ProcDomainBlockJobAbort is libvirt's REMOTE_PROC_DOMAIN_BLOCK_JOB_ABORT
+ ProcDomainBlockJobAbort = 237
+ // ProcDomainGetBlockJobInfo is libvirt's REMOTE_PROC_DOMAIN_GET_BLOCK_JOB_INFO
+ ProcDomainGetBlockJobInfo = 238
+ // ProcDomainBlockJobSetSpeed is libvirt's REMOTE_PROC_DOMAIN_BLOCK_JOB_SET_SPEED
+ ProcDomainBlockJobSetSpeed = 239
+ // ProcDomainBlockPull is libvirt's REMOTE_PROC_DOMAIN_BLOCK_PULL
+ ProcDomainBlockPull = 240
+ // ProcDomainEventBlockJob is libvirt's REMOTE_PROC_DOMAIN_EVENT_BLOCK_JOB
+ ProcDomainEventBlockJob = 241
+ // ProcDomainMigrateGetMaxSpeed is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_GET_MAX_SPEED
+ ProcDomainMigrateGetMaxSpeed = 242
+ // ProcDomainBlockStatsFlags is libvirt's REMOTE_PROC_DOMAIN_BLOCK_STATS_FLAGS
+ ProcDomainBlockStatsFlags = 243
+ // ProcDomainSnapshotGetParent is libvirt's REMOTE_PROC_DOMAIN_SNAPSHOT_GET_PARENT
+ ProcDomainSnapshotGetParent = 244
+ // ProcDomainReset is libvirt's REMOTE_PROC_DOMAIN_RESET
+ ProcDomainReset = 245
+ // ProcDomainSnapshotNumChildren is libvirt's REMOTE_PROC_DOMAIN_SNAPSHOT_NUM_CHILDREN
+ ProcDomainSnapshotNumChildren = 246
+ // ProcDomainSnapshotListChildrenNames is libvirt's REMOTE_PROC_DOMAIN_SNAPSHOT_LIST_CHILDREN_NAMES
+ ProcDomainSnapshotListChildrenNames = 247
+ // ProcDomainEventDiskChange is libvirt's REMOTE_PROC_DOMAIN_EVENT_DISK_CHANGE
+ ProcDomainEventDiskChange = 248
+ // ProcDomainOpenGraphics is libvirt's REMOTE_PROC_DOMAIN_OPEN_GRAPHICS
+ ProcDomainOpenGraphics = 249
+ // ProcNodeSuspendForDuration is libvirt's REMOTE_PROC_NODE_SUSPEND_FOR_DURATION
+ ProcNodeSuspendForDuration = 250
+ // ProcDomainBlockResize is libvirt's REMOTE_PROC_DOMAIN_BLOCK_RESIZE
+ ProcDomainBlockResize = 251
+ // ProcDomainSetBlockIOTune is libvirt's REMOTE_PROC_DOMAIN_SET_BLOCK_IO_TUNE
+ ProcDomainSetBlockIOTune = 252
+ // ProcDomainGetBlockIOTune is libvirt's REMOTE_PROC_DOMAIN_GET_BLOCK_IO_TUNE
+ ProcDomainGetBlockIOTune = 253
+ // ProcDomainSetNumaParameters is libvirt's REMOTE_PROC_DOMAIN_SET_NUMA_PARAMETERS
+ ProcDomainSetNumaParameters = 254
+ // ProcDomainGetNumaParameters is libvirt's REMOTE_PROC_DOMAIN_GET_NUMA_PARAMETERS
+ ProcDomainGetNumaParameters = 255
+ // ProcDomainSetInterfaceParameters is libvirt's REMOTE_PROC_DOMAIN_SET_INTERFACE_PARAMETERS
+ ProcDomainSetInterfaceParameters = 256
+ // ProcDomainGetInterfaceParameters is libvirt's REMOTE_PROC_DOMAIN_GET_INTERFACE_PARAMETERS
+ ProcDomainGetInterfaceParameters = 257
+ // ProcDomainShutdownFlags is libvirt's REMOTE_PROC_DOMAIN_SHUTDOWN_FLAGS
+ ProcDomainShutdownFlags = 258
+ // ProcStorageVolWipePattern is libvirt's REMOTE_PROC_STORAGE_VOL_WIPE_PATTERN
+ ProcStorageVolWipePattern = 259
+ // ProcStorageVolResize is libvirt's REMOTE_PROC_STORAGE_VOL_RESIZE
+ ProcStorageVolResize = 260
+ // ProcDomainPmSuspendForDuration is libvirt's REMOTE_PROC_DOMAIN_PM_SUSPEND_FOR_DURATION
+ ProcDomainPmSuspendForDuration = 261
+ // ProcDomainGetCPUStats is libvirt's REMOTE_PROC_DOMAIN_GET_CPU_STATS
+ ProcDomainGetCPUStats = 262
+ // ProcDomainGetDiskErrors is libvirt's REMOTE_PROC_DOMAIN_GET_DISK_ERRORS
+ ProcDomainGetDiskErrors = 263
+ // ProcDomainSetMetadata is libvirt's REMOTE_PROC_DOMAIN_SET_METADATA
+ ProcDomainSetMetadata = 264
+ // ProcDomainGetMetadata is libvirt's REMOTE_PROC_DOMAIN_GET_METADATA
+ ProcDomainGetMetadata = 265
+ // ProcDomainBlockRebase is libvirt's REMOTE_PROC_DOMAIN_BLOCK_REBASE
+ ProcDomainBlockRebase = 266
+ // ProcDomainPmWakeup is libvirt's REMOTE_PROC_DOMAIN_PM_WAKEUP
+ ProcDomainPmWakeup = 267
+ // ProcDomainEventTrayChange is libvirt's REMOTE_PROC_DOMAIN_EVENT_TRAY_CHANGE
+ ProcDomainEventTrayChange = 268
+ // ProcDomainEventPmwakeup is libvirt's REMOTE_PROC_DOMAIN_EVENT_PMWAKEUP
+ ProcDomainEventPmwakeup = 269
+ // ProcDomainEventPmsuspend is libvirt's REMOTE_PROC_DOMAIN_EVENT_PMSUSPEND
+ ProcDomainEventPmsuspend = 270
+ // ProcDomainSnapshotIsCurrent is libvirt's REMOTE_PROC_DOMAIN_SNAPSHOT_IS_CURRENT
+ ProcDomainSnapshotIsCurrent = 271
+ // ProcDomainSnapshotHasMetadata is libvirt's REMOTE_PROC_DOMAIN_SNAPSHOT_HAS_METADATA
+ ProcDomainSnapshotHasMetadata = 272
+ // ProcConnectListAllDomains is libvirt's REMOTE_PROC_CONNECT_LIST_ALL_DOMAINS
+ ProcConnectListAllDomains = 273
+ // ProcDomainListAllSnapshots is libvirt's REMOTE_PROC_DOMAIN_LIST_ALL_SNAPSHOTS
+ ProcDomainListAllSnapshots = 274
+ // ProcDomainSnapshotListAllChildren is libvirt's REMOTE_PROC_DOMAIN_SNAPSHOT_LIST_ALL_CHILDREN
+ ProcDomainSnapshotListAllChildren = 275
+ // ProcDomainEventBalloonChange is libvirt's REMOTE_PROC_DOMAIN_EVENT_BALLOON_CHANGE
+ ProcDomainEventBalloonChange = 276
+ // ProcDomainGetHostname is libvirt's REMOTE_PROC_DOMAIN_GET_HOSTNAME
+ ProcDomainGetHostname = 277
+ // ProcDomainGetSecurityLabelList is libvirt's REMOTE_PROC_DOMAIN_GET_SECURITY_LABEL_LIST
+ ProcDomainGetSecurityLabelList = 278
+ // ProcDomainPinEmulator is libvirt's REMOTE_PROC_DOMAIN_PIN_EMULATOR
+ ProcDomainPinEmulator = 279
+ // ProcDomainGetEmulatorPinInfo is libvirt's REMOTE_PROC_DOMAIN_GET_EMULATOR_PIN_INFO
+ ProcDomainGetEmulatorPinInfo = 280
+ // ProcConnectListAllStoragePools is libvirt's REMOTE_PROC_CONNECT_LIST_ALL_STORAGE_POOLS
+ ProcConnectListAllStoragePools = 281
+ // ProcStoragePoolListAllVolumes is libvirt's REMOTE_PROC_STORAGE_POOL_LIST_ALL_VOLUMES
+ ProcStoragePoolListAllVolumes = 282
+ // ProcConnectListAllNetworks is libvirt's REMOTE_PROC_CONNECT_LIST_ALL_NETWORKS
+ ProcConnectListAllNetworks = 283
+ // ProcConnectListAllInterfaces is libvirt's REMOTE_PROC_CONNECT_LIST_ALL_INTERFACES
+ ProcConnectListAllInterfaces = 284
+ // ProcConnectListAllNodeDevices is libvirt's REMOTE_PROC_CONNECT_LIST_ALL_NODE_DEVICES
+ ProcConnectListAllNodeDevices = 285
+ // ProcConnectListAllNwfilters is libvirt's REMOTE_PROC_CONNECT_LIST_ALL_NWFILTERS
+ ProcConnectListAllNwfilters = 286
+ // ProcConnectListAllSecrets is libvirt's REMOTE_PROC_CONNECT_LIST_ALL_SECRETS
+ ProcConnectListAllSecrets = 287
+ // ProcNodeSetMemoryParameters is libvirt's REMOTE_PROC_NODE_SET_MEMORY_PARAMETERS
+ ProcNodeSetMemoryParameters = 288
+ // ProcNodeGetMemoryParameters is libvirt's REMOTE_PROC_NODE_GET_MEMORY_PARAMETERS
+ ProcNodeGetMemoryParameters = 289
+ // ProcDomainBlockCommit is libvirt's REMOTE_PROC_DOMAIN_BLOCK_COMMIT
+ ProcDomainBlockCommit = 290
+ // ProcNetworkUpdate is libvirt's REMOTE_PROC_NETWORK_UPDATE
+ ProcNetworkUpdate = 291
+ // ProcDomainEventPmsuspendDisk is libvirt's REMOTE_PROC_DOMAIN_EVENT_PMSUSPEND_DISK
+ ProcDomainEventPmsuspendDisk = 292
+ // ProcNodeGetCPUMap is libvirt's REMOTE_PROC_NODE_GET_CPU_MAP
+ ProcNodeGetCPUMap = 293
+ // ProcDomainFstrim is libvirt's REMOTE_PROC_DOMAIN_FSTRIM
+ ProcDomainFstrim = 294
+ // ProcDomainSendProcessSignal is libvirt's REMOTE_PROC_DOMAIN_SEND_PROCESS_SIGNAL
+ ProcDomainSendProcessSignal = 295
+ // ProcDomainOpenChannel is libvirt's REMOTE_PROC_DOMAIN_OPEN_CHANNEL
+ ProcDomainOpenChannel = 296
+ // ProcNodeDeviceLookupScsiHostByWwn is libvirt's REMOTE_PROC_NODE_DEVICE_LOOKUP_SCSI_HOST_BY_WWN
+ ProcNodeDeviceLookupScsiHostByWwn = 297
+ // ProcDomainGetJobStats is libvirt's REMOTE_PROC_DOMAIN_GET_JOB_STATS
+ ProcDomainGetJobStats = 298
+ // ProcDomainMigrateGetCompressionCache is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_GET_COMPRESSION_CACHE
+ ProcDomainMigrateGetCompressionCache = 299
+ // ProcDomainMigrateSetCompressionCache is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_SET_COMPRESSION_CACHE
+ ProcDomainMigrateSetCompressionCache = 300
+ // ProcNodeDeviceDetachFlags is libvirt's REMOTE_PROC_NODE_DEVICE_DETACH_FLAGS
+ ProcNodeDeviceDetachFlags = 301
+ // ProcDomainMigrateBegin3Params is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_BEGIN3_PARAMS
+ ProcDomainMigrateBegin3Params = 302
+ // ProcDomainMigratePrepare3Params is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_PREPARE3_PARAMS
+ ProcDomainMigratePrepare3Params = 303
+ // ProcDomainMigratePrepareTunnel3Params is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_PREPARE_TUNNEL3_PARAMS
+ ProcDomainMigratePrepareTunnel3Params = 304
+ // ProcDomainMigratePerform3Params is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_PERFORM3_PARAMS
+ ProcDomainMigratePerform3Params = 305
+ // ProcDomainMigrateFinish3Params is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_FINISH3_PARAMS
+ ProcDomainMigrateFinish3Params = 306
+ // ProcDomainMigrateConfirm3Params is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_CONFIRM3_PARAMS
+ ProcDomainMigrateConfirm3Params = 307
+ // ProcDomainSetMemoryStatsPeriod is libvirt's REMOTE_PROC_DOMAIN_SET_MEMORY_STATS_PERIOD
+ ProcDomainSetMemoryStatsPeriod = 308
+ // ProcDomainCreateXMLWithFiles is libvirt's REMOTE_PROC_DOMAIN_CREATE_XML_WITH_FILES
+ ProcDomainCreateXMLWithFiles = 309
+ // ProcDomainCreateWithFiles is libvirt's REMOTE_PROC_DOMAIN_CREATE_WITH_FILES
+ ProcDomainCreateWithFiles = 310
+ // ProcDomainEventDeviceRemoved is libvirt's REMOTE_PROC_DOMAIN_EVENT_DEVICE_REMOVED
+ ProcDomainEventDeviceRemoved = 311
+ // ProcConnectGetCPUModelNames is libvirt's REMOTE_PROC_CONNECT_GET_CPU_MODEL_NAMES
+ ProcConnectGetCPUModelNames = 312
+ // ProcConnectNetworkEventRegisterAny is libvirt's REMOTE_PROC_CONNECT_NETWORK_EVENT_REGISTER_ANY
+ ProcConnectNetworkEventRegisterAny = 313
+ // ProcConnectNetworkEventDeregisterAny is libvirt's REMOTE_PROC_CONNECT_NETWORK_EVENT_DEREGISTER_ANY
+ ProcConnectNetworkEventDeregisterAny = 314
+ // ProcNetworkEventLifecycle is libvirt's REMOTE_PROC_NETWORK_EVENT_LIFECYCLE
+ ProcNetworkEventLifecycle = 315
+ // ProcConnectDomainEventCallbackRegisterAny is libvirt's REMOTE_PROC_CONNECT_DOMAIN_EVENT_CALLBACK_REGISTER_ANY
+ ProcConnectDomainEventCallbackRegisterAny = 316
+ // ProcConnectDomainEventCallbackDeregisterAny is libvirt's REMOTE_PROC_CONNECT_DOMAIN_EVENT_CALLBACK_DEREGISTER_ANY
+ ProcConnectDomainEventCallbackDeregisterAny = 317
+ // ProcDomainEventCallbackLifecycle is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_LIFECYCLE
+ ProcDomainEventCallbackLifecycle = 318
+ // ProcDomainEventCallbackReboot is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_REBOOT
+ ProcDomainEventCallbackReboot = 319
+ // ProcDomainEventCallbackRtcChange is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_RTC_CHANGE
+ ProcDomainEventCallbackRtcChange = 320
+ // ProcDomainEventCallbackWatchdog is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_WATCHDOG
+ ProcDomainEventCallbackWatchdog = 321
+ // ProcDomainEventCallbackIOError is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_IO_ERROR
+ ProcDomainEventCallbackIOError = 322
+ // ProcDomainEventCallbackGraphics is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_GRAPHICS
+ ProcDomainEventCallbackGraphics = 323
+ // ProcDomainEventCallbackIOErrorReason is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_IO_ERROR_REASON
+ ProcDomainEventCallbackIOErrorReason = 324
+ // ProcDomainEventCallbackControlError is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_CONTROL_ERROR
+ ProcDomainEventCallbackControlError = 325
+ // ProcDomainEventCallbackBlockJob is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_BLOCK_JOB
+ ProcDomainEventCallbackBlockJob = 326
+ // ProcDomainEventCallbackDiskChange is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_DISK_CHANGE
+ ProcDomainEventCallbackDiskChange = 327
+ // ProcDomainEventCallbackTrayChange is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_TRAY_CHANGE
+ ProcDomainEventCallbackTrayChange = 328
+ // ProcDomainEventCallbackPmwakeup is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_PMWAKEUP
+ ProcDomainEventCallbackPmwakeup = 329
+ // ProcDomainEventCallbackPmsuspend is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_PMSUSPEND
+ ProcDomainEventCallbackPmsuspend = 330
+ // ProcDomainEventCallbackBalloonChange is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_BALLOON_CHANGE
+ ProcDomainEventCallbackBalloonChange = 331
+ // ProcDomainEventCallbackPmsuspendDisk is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_PMSUSPEND_DISK
+ ProcDomainEventCallbackPmsuspendDisk = 332
+ // ProcDomainEventCallbackDeviceRemoved is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_DEVICE_REMOVED
+ ProcDomainEventCallbackDeviceRemoved = 333
+ // ProcDomainCoreDumpWithFormat is libvirt's REMOTE_PROC_DOMAIN_CORE_DUMP_WITH_FORMAT
+ ProcDomainCoreDumpWithFormat = 334
+ // ProcDomainFsfreeze is libvirt's REMOTE_PROC_DOMAIN_FSFREEZE
+ ProcDomainFsfreeze = 335
+ // ProcDomainFsthaw is libvirt's REMOTE_PROC_DOMAIN_FSTHAW
+ ProcDomainFsthaw = 336
+ // ProcDomainGetTime is libvirt's REMOTE_PROC_DOMAIN_GET_TIME
+ ProcDomainGetTime = 337
+ // ProcDomainSetTime is libvirt's REMOTE_PROC_DOMAIN_SET_TIME
+ ProcDomainSetTime = 338
+ // ProcDomainEventBlockJob2 is libvirt's REMOTE_PROC_DOMAIN_EVENT_BLOCK_JOB_2
+ ProcDomainEventBlockJob2 = 339
+ // ProcNodeGetFreePages is libvirt's REMOTE_PROC_NODE_GET_FREE_PAGES
+ ProcNodeGetFreePages = 340
+ // ProcNetworkGetDhcpLeases is libvirt's REMOTE_PROC_NETWORK_GET_DHCP_LEASES
+ ProcNetworkGetDhcpLeases = 341
+ // ProcConnectGetDomainCapabilities is libvirt's REMOTE_PROC_CONNECT_GET_DOMAIN_CAPABILITIES
+ ProcConnectGetDomainCapabilities = 342
+ // ProcDomainOpenGraphicsFd is libvirt's REMOTE_PROC_DOMAIN_OPEN_GRAPHICS_FD
+ ProcDomainOpenGraphicsFd = 343
+ // ProcConnectGetAllDomainStats is libvirt's REMOTE_PROC_CONNECT_GET_ALL_DOMAIN_STATS
+ ProcConnectGetAllDomainStats = 344
+ // ProcDomainBlockCopy is libvirt's REMOTE_PROC_DOMAIN_BLOCK_COPY
+ ProcDomainBlockCopy = 345
+ // ProcDomainEventCallbackTunable is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_TUNABLE
+ ProcDomainEventCallbackTunable = 346
+ // ProcNodeAllocPages is libvirt's REMOTE_PROC_NODE_ALLOC_PAGES
+ ProcNodeAllocPages = 347
+ // ProcDomainEventCallbackAgentLifecycle is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_AGENT_LIFECYCLE
+ ProcDomainEventCallbackAgentLifecycle = 348
+ // ProcDomainGetFsinfo is libvirt's REMOTE_PROC_DOMAIN_GET_FSINFO
+ ProcDomainGetFsinfo = 349
+ // ProcDomainDefineXMLFlags is libvirt's REMOTE_PROC_DOMAIN_DEFINE_XML_FLAGS
+ ProcDomainDefineXMLFlags = 350
+ // ProcDomainGetIothreadInfo is libvirt's REMOTE_PROC_DOMAIN_GET_IOTHREAD_INFO
+ ProcDomainGetIothreadInfo = 351
+ // ProcDomainPinIothread is libvirt's REMOTE_PROC_DOMAIN_PIN_IOTHREAD
+ ProcDomainPinIothread = 352
+ // ProcDomainInterfaceAddresses is libvirt's REMOTE_PROC_DOMAIN_INTERFACE_ADDRESSES
+ ProcDomainInterfaceAddresses = 353
+ // ProcDomainEventCallbackDeviceAdded is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_DEVICE_ADDED
+ ProcDomainEventCallbackDeviceAdded = 354
+ // ProcDomainAddIothread is libvirt's REMOTE_PROC_DOMAIN_ADD_IOTHREAD
+ ProcDomainAddIothread = 355
+ // ProcDomainDelIothread is libvirt's REMOTE_PROC_DOMAIN_DEL_IOTHREAD
+ ProcDomainDelIothread = 356
+ // ProcDomainSetUserPassword is libvirt's REMOTE_PROC_DOMAIN_SET_USER_PASSWORD
+ ProcDomainSetUserPassword = 357
+ // ProcDomainRename is libvirt's REMOTE_PROC_DOMAIN_RENAME
+ ProcDomainRename = 358
+ // ProcDomainEventCallbackMigrationIteration is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_MIGRATION_ITERATION
+ ProcDomainEventCallbackMigrationIteration = 359
+ // ProcConnectRegisterCloseCallback is libvirt's REMOTE_PROC_CONNECT_REGISTER_CLOSE_CALLBACK
+ ProcConnectRegisterCloseCallback = 360
+ // ProcConnectUnregisterCloseCallback is libvirt's REMOTE_PROC_CONNECT_UNREGISTER_CLOSE_CALLBACK
+ ProcConnectUnregisterCloseCallback = 361
+ // ProcConnectEventConnectionClosed is libvirt's REMOTE_PROC_CONNECT_EVENT_CONNECTION_CLOSED
+ ProcConnectEventConnectionClosed = 362
+ // ProcDomainEventCallbackJobCompleted is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_JOB_COMPLETED
+ ProcDomainEventCallbackJobCompleted = 363
+ // ProcDomainMigrateStartPostCopy is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_START_POST_COPY
+ ProcDomainMigrateStartPostCopy = 364
+ // ProcDomainGetPerfEvents is libvirt's REMOTE_PROC_DOMAIN_GET_PERF_EVENTS
+ ProcDomainGetPerfEvents = 365
+ // ProcDomainSetPerfEvents is libvirt's REMOTE_PROC_DOMAIN_SET_PERF_EVENTS
+ ProcDomainSetPerfEvents = 366
+ // ProcDomainEventCallbackDeviceRemovalFailed is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_DEVICE_REMOVAL_FAILED
+ ProcDomainEventCallbackDeviceRemovalFailed = 367
+ // ProcConnectStoragePoolEventRegisterAny is libvirt's REMOTE_PROC_CONNECT_STORAGE_POOL_EVENT_REGISTER_ANY
+ ProcConnectStoragePoolEventRegisterAny = 368
+ // ProcConnectStoragePoolEventDeregisterAny is libvirt's REMOTE_PROC_CONNECT_STORAGE_POOL_EVENT_DEREGISTER_ANY
+ ProcConnectStoragePoolEventDeregisterAny = 369
+ // ProcStoragePoolEventLifecycle is libvirt's REMOTE_PROC_STORAGE_POOL_EVENT_LIFECYCLE
+ ProcStoragePoolEventLifecycle = 370
+ // ProcDomainGetGuestVcpus is libvirt's REMOTE_PROC_DOMAIN_GET_GUEST_VCPUS
+ ProcDomainGetGuestVcpus = 371
+ // ProcDomainSetGuestVcpus is libvirt's REMOTE_PROC_DOMAIN_SET_GUEST_VCPUS
+ ProcDomainSetGuestVcpus = 372
+ // ProcStoragePoolEventRefresh is libvirt's REMOTE_PROC_STORAGE_POOL_EVENT_REFRESH
+ ProcStoragePoolEventRefresh = 373
+ // ProcConnectNodeDeviceEventRegisterAny is libvirt's REMOTE_PROC_CONNECT_NODE_DEVICE_EVENT_REGISTER_ANY
+ ProcConnectNodeDeviceEventRegisterAny = 374
+ // ProcConnectNodeDeviceEventDeregisterAny is libvirt's REMOTE_PROC_CONNECT_NODE_DEVICE_EVENT_DEREGISTER_ANY
+ ProcConnectNodeDeviceEventDeregisterAny = 375
+ // ProcNodeDeviceEventLifecycle is libvirt's REMOTE_PROC_NODE_DEVICE_EVENT_LIFECYCLE
+ ProcNodeDeviceEventLifecycle = 376
+ // ProcNodeDeviceEventUpdate is libvirt's REMOTE_PROC_NODE_DEVICE_EVENT_UPDATE
+ ProcNodeDeviceEventUpdate = 377
+ // ProcStorageVolGetInfoFlags is libvirt's REMOTE_PROC_STORAGE_VOL_GET_INFO_FLAGS
+ ProcStorageVolGetInfoFlags = 378
+ // ProcDomainEventCallbackMetadataChange is libvirt's REMOTE_PROC_DOMAIN_EVENT_CALLBACK_METADATA_CHANGE
+ ProcDomainEventCallbackMetadataChange = 379
+ // ProcConnectSecretEventRegisterAny is libvirt's REMOTE_PROC_CONNECT_SECRET_EVENT_REGISTER_ANY
+ ProcConnectSecretEventRegisterAny = 380
+ // ProcConnectSecretEventDeregisterAny is libvirt's REMOTE_PROC_CONNECT_SECRET_EVENT_DEREGISTER_ANY
+ ProcConnectSecretEventDeregisterAny = 381
+ // ProcSecretEventLifecycle is libvirt's REMOTE_PROC_SECRET_EVENT_LIFECYCLE
+ ProcSecretEventLifecycle = 382
+ // ProcSecretEventValueChanged is libvirt's REMOTE_PROC_SECRET_EVENT_VALUE_CHANGED
+ ProcSecretEventValueChanged = 383
+ // ProcDomainSetVcpu is libvirt's REMOTE_PROC_DOMAIN_SET_VCPU
+ ProcDomainSetVcpu = 384
+ // ProcDomainEventBlockThreshold is libvirt's REMOTE_PROC_DOMAIN_EVENT_BLOCK_THRESHOLD
+ ProcDomainEventBlockThreshold = 385
+ // ProcDomainSetBlockThreshold is libvirt's REMOTE_PROC_DOMAIN_SET_BLOCK_THRESHOLD
+ ProcDomainSetBlockThreshold = 386
+ // ProcDomainMigrateGetMaxDowntime is libvirt's REMOTE_PROC_DOMAIN_MIGRATE_GET_MAX_DOWNTIME
+ ProcDomainMigrateGetMaxDowntime = 387
+ // ProcDomainManagedSaveGetXMLDesc is libvirt's REMOTE_PROC_DOMAIN_MANAGED_SAVE_GET_XML_DESC
+ ProcDomainManagedSaveGetXMLDesc = 388
+ // ProcDomainManagedSaveDefineXML is libvirt's REMOTE_PROC_DOMAIN_MANAGED_SAVE_DEFINE_XML
+ ProcDomainManagedSaveDefineXML = 389
+ // ProcDomainSetLifecycleAction is libvirt's REMOTE_PROC_DOMAIN_SET_LIFECYCLE_ACTION
+ ProcDomainSetLifecycleAction = 390
+ // ProcStoragePoolLookupByTargetPath is libvirt's REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_TARGET_PATH
+ ProcStoragePoolLookupByTargetPath = 391
+ // ProcDomainDetachDeviceAlias is libvirt's REMOTE_PROC_DOMAIN_DETACH_DEVICE_ALIAS
+ ProcDomainDetachDeviceAlias = 392
+ // ProcConnectCompareHypervisorCPU is libvirt's REMOTE_PROC_CONNECT_COMPARE_HYPERVISOR_CPU
+ ProcConnectCompareHypervisorCPU = 393
+ // ProcConnectBaselineHypervisorCPU is libvirt's REMOTE_PROC_CONNECT_BASELINE_HYPERVISOR_CPU
+ ProcConnectBaselineHypervisorCPU = 394
+ // ProcNodeGetSevInfo is libvirt's REMOTE_PROC_NODE_GET_SEV_INFO
+ ProcNodeGetSevInfo = 395
+ // ProcDomainGetLaunchSecurityInfo is libvirt's REMOTE_PROC_DOMAIN_GET_LAUNCH_SECURITY_INFO
+ ProcDomainGetLaunchSecurityInfo = 396
+ // ProcNwfilterBindingLookupByPortDev is libvirt's REMOTE_PROC_NWFILTER_BINDING_LOOKUP_BY_PORT_DEV
+ ProcNwfilterBindingLookupByPortDev = 397
+ // ProcNwfilterBindingGetXMLDesc is libvirt's REMOTE_PROC_NWFILTER_BINDING_GET_XML_DESC
+ ProcNwfilterBindingGetXMLDesc = 398
+ // ProcNwfilterBindingCreateXML is libvirt's REMOTE_PROC_NWFILTER_BINDING_CREATE_XML
+ ProcNwfilterBindingCreateXML = 399
+ // ProcNwfilterBindingDelete is libvirt's REMOTE_PROC_NWFILTER_BINDING_DELETE
+ ProcNwfilterBindingDelete = 400
+ // ProcConnectListAllNwfilterBindings is libvirt's REMOTE_PROC_CONNECT_LIST_ALL_NWFILTER_BINDINGS
+ ProcConnectListAllNwfilterBindings = 401
+ // ProcDomainSetIothreadParams is libvirt's REMOTE_PROC_DOMAIN_SET_IOTHREAD_PARAMS
+ ProcDomainSetIothreadParams = 402
+ // ProcConnectGetStoragePoolCapabilities is libvirt's REMOTE_PROC_CONNECT_GET_STORAGE_POOL_CAPABILITIES
+ ProcConnectGetStoragePoolCapabilities = 403
+ // ProcNetworkListAllPorts is libvirt's REMOTE_PROC_NETWORK_LIST_ALL_PORTS
+ ProcNetworkListAllPorts = 404
+ // ProcNetworkPortLookupByUUID is libvirt's REMOTE_PROC_NETWORK_PORT_LOOKUP_BY_UUID
+ ProcNetworkPortLookupByUUID = 405
+ // ProcNetworkPortCreateXML is libvirt's REMOTE_PROC_NETWORK_PORT_CREATE_XML
+ ProcNetworkPortCreateXML = 406
+ // ProcNetworkPortGetParameters is libvirt's REMOTE_PROC_NETWORK_PORT_GET_PARAMETERS
+ ProcNetworkPortGetParameters = 407
+ // ProcNetworkPortSetParameters is libvirt's REMOTE_PROC_NETWORK_PORT_SET_PARAMETERS
+ ProcNetworkPortSetParameters = 408
+ // ProcNetworkPortGetXMLDesc is libvirt's REMOTE_PROC_NETWORK_PORT_GET_XML_DESC
+ ProcNetworkPortGetXMLDesc = 409
+ // ProcNetworkPortDelete is libvirt's REMOTE_PROC_NETWORK_PORT_DELETE
+ ProcNetworkPortDelete = 410
+ // ProcDomainCheckpointCreateXML is libvirt's REMOTE_PROC_DOMAIN_CHECKPOINT_CREATE_XML
+ ProcDomainCheckpointCreateXML = 411
+ // ProcDomainCheckpointGetXMLDesc is libvirt's REMOTE_PROC_DOMAIN_CHECKPOINT_GET_XML_DESC
+ ProcDomainCheckpointGetXMLDesc = 412
+ // ProcDomainListAllCheckpoints is libvirt's REMOTE_PROC_DOMAIN_LIST_ALL_CHECKPOINTS
+ ProcDomainListAllCheckpoints = 413
+ // ProcDomainCheckpointListAllChildren is libvirt's REMOTE_PROC_DOMAIN_CHECKPOINT_LIST_ALL_CHILDREN
+ ProcDomainCheckpointListAllChildren = 414
+ // ProcDomainCheckpointLookupByName is libvirt's REMOTE_PROC_DOMAIN_CHECKPOINT_LOOKUP_BY_NAME
+ ProcDomainCheckpointLookupByName = 415
+ // ProcDomainCheckpointGetParent is libvirt's REMOTE_PROC_DOMAIN_CHECKPOINT_GET_PARENT
+ ProcDomainCheckpointGetParent = 416
+ // ProcDomainCheckpointDelete is libvirt's REMOTE_PROC_DOMAIN_CHECKPOINT_DELETE
+ ProcDomainCheckpointDelete = 417
+ // ProcDomainGetGuestInfo is libvirt's REMOTE_PROC_DOMAIN_GET_GUEST_INFO
+ ProcDomainGetGuestInfo = 418
+ // ProcConnectSetIdentity is libvirt's REMOTE_PROC_CONNECT_SET_IDENTITY
+ ProcConnectSetIdentity = 419
+ // ProcDomainAgentSetResponseTimeout is libvirt's REMOTE_PROC_DOMAIN_AGENT_SET_RESPONSE_TIMEOUT
+ ProcDomainAgentSetResponseTimeout = 420
+ // ProcDomainBackupBegin is libvirt's REMOTE_PROC_DOMAIN_BACKUP_BEGIN
+ ProcDomainBackupBegin = 421
+ // ProcDomainBackupGetXMLDesc is libvirt's REMOTE_PROC_DOMAIN_BACKUP_GET_XML_DESC
+ ProcDomainBackupGetXMLDesc = 422
+ // ProcDomainEventMemoryFailure is libvirt's REMOTE_PROC_DOMAIN_EVENT_MEMORY_FAILURE
+ ProcDomainEventMemoryFailure = 423
+ // ProcDomainAuthorizedSshKeysGet is libvirt's REMOTE_PROC_DOMAIN_AUTHORIZED_SSH_KEYS_GET
+ ProcDomainAuthorizedSshKeysGet = 424
+ // ProcDomainAuthorizedSshKeysSet is libvirt's REMOTE_PROC_DOMAIN_AUTHORIZED_SSH_KEYS_SET
+ ProcDomainAuthorizedSshKeysSet = 425
+
+
+ // From consts:
+ // StringMax is libvirt's REMOTE_STRING_MAX
+ StringMax = 4194304
+ // ConnectIdentityParamsMax is libvirt's REMOTE_CONNECT_IDENTITY_PARAMS_MAX
+ ConnectIdentityParamsMax = 20
+ // DomainListMax is libvirt's REMOTE_DOMAIN_LIST_MAX
+ DomainListMax = 16384
+ // CpumapMax is libvirt's REMOTE_CPUMAP_MAX
+ CpumapMax = 2048
+ // VcpuinfoMax is libvirt's REMOTE_VCPUINFO_MAX
+ VcpuinfoMax = 16384
+ // CpumapsMax is libvirt's REMOTE_CPUMAPS_MAX
+ CpumapsMax = 8388608
+ // IothreadInfoMax is libvirt's REMOTE_IOTHREAD_INFO_MAX
+ IothreadInfoMax = 16384
+ // MigrateCookieMax is libvirt's REMOTE_MIGRATE_COOKIE_MAX
+ MigrateCookieMax = 4194304
+ // NetworkListMax is libvirt's REMOTE_NETWORK_LIST_MAX
+ NetworkListMax = 16384
+ // NetworkPortListMax is libvirt's REMOTE_NETWORK_PORT_LIST_MAX
+ NetworkPortListMax = 16384
+ // InterfaceListMax is libvirt's REMOTE_INTERFACE_LIST_MAX
+ InterfaceListMax = 16384
+ // StoragePoolListMax is libvirt's REMOTE_STORAGE_POOL_LIST_MAX
+ StoragePoolListMax = 16384
+ // StorageVolListMax is libvirt's REMOTE_STORAGE_VOL_LIST_MAX
+ StorageVolListMax = 16384
+ // NodeDeviceListMax is libvirt's REMOTE_NODE_DEVICE_LIST_MAX
+ NodeDeviceListMax = 65536
+ // NodeDeviceCapsListMax is libvirt's REMOTE_NODE_DEVICE_CAPS_LIST_MAX
+ NodeDeviceCapsListMax = 65536
+ // NwfilterListMax is libvirt's REMOTE_NWFILTER_LIST_MAX
+ NwfilterListMax = 16384
+ // NwfilterBindingListMax is libvirt's REMOTE_NWFILTER_BINDING_LIST_MAX
+ NwfilterBindingListMax = 16384
+ // DomainSchedulerParametersMax is libvirt's REMOTE_DOMAIN_SCHEDULER_PARAMETERS_MAX
+ DomainSchedulerParametersMax = 16
+ // DomainBlkioParametersMax is libvirt's REMOTE_DOMAIN_BLKIO_PARAMETERS_MAX
+ DomainBlkioParametersMax = 16
+ // DomainMemoryParametersMax is libvirt's REMOTE_DOMAIN_MEMORY_PARAMETERS_MAX
+ DomainMemoryParametersMax = 16
+ // DomainBlockIOTuneParametersMax is libvirt's REMOTE_DOMAIN_BLOCK_IO_TUNE_PARAMETERS_MAX
+ DomainBlockIOTuneParametersMax = 32
+ // DomainNumaParametersMax is libvirt's REMOTE_DOMAIN_NUMA_PARAMETERS_MAX
+ DomainNumaParametersMax = 16
+ // DomainPerfEventsMax is libvirt's REMOTE_DOMAIN_PERF_EVENTS_MAX
+ DomainPerfEventsMax = 64
+ // DomainBlockCopyParametersMax is libvirt's REMOTE_DOMAIN_BLOCK_COPY_PARAMETERS_MAX
+ DomainBlockCopyParametersMax = 16
+ // NodeCPUStatsMax is libvirt's REMOTE_NODE_CPU_STATS_MAX
+ NodeCPUStatsMax = 16
+ // NodeMemoryStatsMax is libvirt's REMOTE_NODE_MEMORY_STATS_MAX
+ NodeMemoryStatsMax = 16
+ // DomainBlockStatsParametersMax is libvirt's REMOTE_DOMAIN_BLOCK_STATS_PARAMETERS_MAX
+ DomainBlockStatsParametersMax = 16
+ // NodeMaxCells is libvirt's REMOTE_NODE_MAX_CELLS
+ NodeMaxCells = 1024
+ // AuthSaslDataMax is libvirt's REMOTE_AUTH_SASL_DATA_MAX
+ AuthSaslDataMax = 65536
+ // AuthTypeListMax is libvirt's REMOTE_AUTH_TYPE_LIST_MAX
+ AuthTypeListMax = 20
+ // DomainMemoryStatsMax is libvirt's REMOTE_DOMAIN_MEMORY_STATS_MAX
+ DomainMemoryStatsMax = 1024
+ // DomainCheckpointListMax is libvirt's REMOTE_DOMAIN_CHECKPOINT_LIST_MAX
+ DomainCheckpointListMax = 16384
+ // DomainSnapshotListMax is libvirt's REMOTE_DOMAIN_SNAPSHOT_LIST_MAX
+ DomainSnapshotListMax = 16384
+ // DomainBlockPeekBufferMax is libvirt's REMOTE_DOMAIN_BLOCK_PEEK_BUFFER_MAX
+ DomainBlockPeekBufferMax = 4194304
+ // DomainMemoryPeekBufferMax is libvirt's REMOTE_DOMAIN_MEMORY_PEEK_BUFFER_MAX
+ DomainMemoryPeekBufferMax = 4194304
+ // SecurityLabelListMax is libvirt's REMOTE_SECURITY_LABEL_LIST_MAX
+ SecurityLabelListMax = 64
+ // SecretValueMax is libvirt's REMOTE_SECRET_VALUE_MAX
+ SecretValueMax = 65536
+ // SecretListMax is libvirt's REMOTE_SECRET_LIST_MAX
+ SecretListMax = 16384
+ // CPUBaselineMax is libvirt's REMOTE_CPU_BASELINE_MAX
+ CPUBaselineMax = 256
+ // DomainSendKeyMax is libvirt's REMOTE_DOMAIN_SEND_KEY_MAX
+ DomainSendKeyMax = 16
+ // DomainInterfaceParametersMax is libvirt's REMOTE_DOMAIN_INTERFACE_PARAMETERS_MAX
+ DomainInterfaceParametersMax = 16
+ // DomainGetCPUStatsNcpusMax is libvirt's REMOTE_DOMAIN_GET_CPU_STATS_NCPUS_MAX
+ DomainGetCPUStatsNcpusMax = 128
+ // DomainGetCPUStatsMax is libvirt's REMOTE_DOMAIN_GET_CPU_STATS_MAX
+ DomainGetCPUStatsMax = 2048
+ // DomainDiskErrorsMax is libvirt's REMOTE_DOMAIN_DISK_ERRORS_MAX
+ DomainDiskErrorsMax = 256
+ // NodeMemoryParametersMax is libvirt's REMOTE_NODE_MEMORY_PARAMETERS_MAX
+ NodeMemoryParametersMax = 64
+ // DomainMigrateParamListMax is libvirt's REMOTE_DOMAIN_MIGRATE_PARAM_LIST_MAX
+ DomainMigrateParamListMax = 64
+ // DomainJobStatsMax is libvirt's REMOTE_DOMAIN_JOB_STATS_MAX
+ DomainJobStatsMax = 64
+ // ConnectCPUModelsMax is libvirt's REMOTE_CONNECT_CPU_MODELS_MAX
+ ConnectCPUModelsMax = 8192
+ // DomainFsfreezeMountpointsMax is libvirt's REMOTE_DOMAIN_FSFREEZE_MOUNTPOINTS_MAX
+ DomainFsfreezeMountpointsMax = 256
+ // NetworkDhcpLeasesMax is libvirt's REMOTE_NETWORK_DHCP_LEASES_MAX
+ NetworkDhcpLeasesMax = 65536
+ // ConnectGetAllDomainStatsMax is libvirt's REMOTE_CONNECT_GET_ALL_DOMAIN_STATS_MAX
+ ConnectGetAllDomainStatsMax = 262144
+ // DomainEventTunableMax is libvirt's REMOTE_DOMAIN_EVENT_TUNABLE_MAX
+ DomainEventTunableMax = 2048
+ // DomainFsinfoMax is libvirt's REMOTE_DOMAIN_FSINFO_MAX
+ DomainFsinfoMax = 256
+ // DomainFsinfoDisksMax is libvirt's REMOTE_DOMAIN_FSINFO_DISKS_MAX
+ DomainFsinfoDisksMax = 256
+ // DomainInterfaceMax is libvirt's REMOTE_DOMAIN_INTERFACE_MAX
+ DomainInterfaceMax = 2048
+ // DomainIPAddrMax is libvirt's REMOTE_DOMAIN_IP_ADDR_MAX
+ DomainIPAddrMax = 2048
+ // DomainGuestVcpuParamsMax is libvirt's REMOTE_DOMAIN_GUEST_VCPU_PARAMS_MAX
+ DomainGuestVcpuParamsMax = 64
+ // DomainIothreadParamsMax is libvirt's REMOTE_DOMAIN_IOTHREAD_PARAMS_MAX
+ DomainIothreadParamsMax = 64
+ // NodeSevInfoMax is libvirt's REMOTE_NODE_SEV_INFO_MAX
+ NodeSevInfoMax = 64
+ // DomainLaunchSecurityInfoParamsMax is libvirt's REMOTE_DOMAIN_LAUNCH_SECURITY_INFO_PARAMS_MAX
+ DomainLaunchSecurityInfoParamsMax = 64
+ // DomainGuestInfoParamsMax is libvirt's REMOTE_DOMAIN_GUEST_INFO_PARAMS_MAX
+ DomainGuestInfoParamsMax = 2048
+ // NetworkPortParametersMax is libvirt's REMOTE_NETWORK_PORT_PARAMETERS_MAX
+ NetworkPortParametersMax = 16
+ // DomainAuthorizedSshKeysMax is libvirt's REMOTE_DOMAIN_AUTHORIZED_SSH_KEYS_MAX
+ DomainAuthorizedSshKeysMax = 2048
+ // DomainEventGraphicsIdentityMax is libvirt's REMOTE_DOMAIN_EVENT_GRAPHICS_IDENTITY_MAX
+ DomainEventGraphicsIdentityMax = 20
+ // Program is libvirt's REMOTE_PROGRAM
+ Program = 0x20008086
+ // ProtocolVersion is libvirt's REMOTE_PROTOCOL_VERSION
+ ProtocolVersion = 1
+)
diff --git a/vendor/github.com/digitalocean/go-libvirt/internal/event/event.go b/vendor/github.com/digitalocean/go-libvirt/internal/event/event.go
new file mode 100644
index 000000000..67a1885b9
--- /dev/null
+++ b/vendor/github.com/digitalocean/go-libvirt/internal/event/event.go
@@ -0,0 +1,20 @@
+// Copyright 2020 The go-libvirt Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package event
+
+// Event represents an internal Event.
+type Event interface {
+ GetCallbackID() int32
+}
diff --git a/vendor/github.com/digitalocean/go-libvirt/internal/event/stream.go b/vendor/github.com/digitalocean/go-libvirt/internal/event/stream.go
new file mode 100644
index 000000000..b14e41b64
--- /dev/null
+++ b/vendor/github.com/digitalocean/go-libvirt/internal/event/stream.go
@@ -0,0 +1,145 @@
+// Copyright 2020 The go-libvirt Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package event
+
+import "context"
+
+// Stream is an unbounded buffered event channel. The implementation
+// consists of a pair of unbuffered channels and a goroutine to manage them.
+// Client behavior will not cause incoming events to block.
+type Stream struct {
+ // Program specifies the source of the events - libvirt or QEMU.
+ Program uint32
+
+ // CallbackID is returned by the event registration call.
+ CallbackID int32
+
+ // manage unbounded channel behavior.
+ queue []Event
+ in, out chan Event
+
+ // terminates processing
+ shutdown context.CancelFunc
+}
+
+// Recv returns the next available event from the Stream's queue.
+func (s *Stream) Recv() chan Event {
+ return s.out
+}
+
+// Push appends a new event to the queue.
+func (s *Stream) Push(e Event) {
+ s.in <- e
+}
+
+// Shutdown gracefully terminates Stream processing, releasing all
+// internal resources. Events which have not yet been received by the client
+// will be dropped. Subsequent calls to Shutdown() are idempotent.
+func (s *Stream) Shutdown() {
+ if s.shutdown != nil {
+ s.shutdown()
+ }
+}
+
+// start starts the event processing loop, which will continue to run until
+// terminated by the returned context.CancelFunc. Starting a previously started
+// Stream is an idempotent operation.
+func (s *Stream) start() context.CancelFunc {
+ ctx, cancel := context.WithCancel(context.Background())
+
+ go s.process(ctx)
+
+ return cancel
+}
+
+// process manages an Stream's lifecycle until canceled by the provided
+// context. Incoming events are appended to a queue which is then relayed to
+// the a listening client. New events pushed onto the queue will not block due
+// to client behavior.
+func (s *Stream) process(ctx context.Context) {
+ defer func() {
+ close(s.in)
+ close(s.out)
+ }()
+
+ for {
+ // informs send() to stop trying
+ nctx, next := context.WithCancel(ctx)
+ defer next()
+
+ select {
+ // new event received, append to queue
+ case e := <-s.in:
+ s.queue = append(s.queue, e)
+
+ // client recieved an event, pop from queue
+ case <-s.send(nctx):
+ if len(s.queue) > 1 {
+ s.queue = s.queue[1:]
+ } else {
+ s.queue = []Event{}
+ }
+
+ // shutdown requested
+ case <-ctx.Done():
+ return
+
+ }
+
+ next()
+ }
+}
+
+// send returns a channel which blocks until either the first item on the queue
+// (if existing) is sent to the client, or the provided context is canceled.
+// The stream's queue is never modified.
+func (s *Stream) send(ctx context.Context) <-chan struct{} {
+ ch := make(chan struct{})
+
+ go func() {
+ defer close(ch)
+
+ // do nothing and block if the queue is empty
+ if len(s.queue) == 0 {
+ <-ctx.Done()
+ return
+ }
+
+ // otherwise, attempt to send the event
+ select {
+ case s.out <- s.queue[0]:
+ case <-ctx.Done():
+ }
+ }()
+
+ return ch
+}
+
+// NewStream configures a new Event Stream. Incoming events are appended to a
+// queue, which is then relayed to the listening client. Client behavior will
+// not cause incoming events to block. It is the responsibility of the caller
+// to terminate the Stream via Shutdown() when no longer in use.
+func NewStream(program uint32, cbID int32) *Stream {
+ ic := &Stream{
+ Program: program,
+ CallbackID: cbID,
+ in: make(chan Event),
+ out: make(chan Event),
+ }
+
+ ic.shutdown = ic.start()
+
+ return ic
+}
diff --git a/vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/LICENSE b/vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/LICENSE
new file mode 100644
index 000000000..0cc3543ce
--- /dev/null
+++ b/vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/LICENSE
@@ -0,0 +1,13 @@
+Copyright (c) 2012-2014 Dave Collins <dave@davec.name>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. \ No newline at end of file
diff --git a/vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/xdr2/decode.go b/vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/xdr2/decode.go
new file mode 100644
index 000000000..7f33f7d32
--- /dev/null
+++ b/vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/xdr2/decode.go
@@ -0,0 +1,896 @@
+/*
+ * Copyright (c) 2012-2014 Dave Collins <dave@davec.name>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+package xdr
+
+import (
+ "fmt"
+ "io"
+ "math"
+ "reflect"
+ "time"
+)
+
+var (
+ errMaxSlice = "data exceeds max slice limit"
+ errIODecode = "%s while decoding %d bytes"
+)
+
+/*
+Unmarshal parses XDR-encoded data into the value pointed to by v reading from
+reader r and returning the total number of bytes read. An addressable pointer
+must be provided since Unmarshal needs to both store the result of the decode as
+well as obtain target type information. Unmarhsal traverses v recursively and
+automatically indirects pointers through arbitrary depth, allocating them as
+necessary, to decode the data into the underlying value pointed to.
+
+Unmarshal uses reflection to determine the type of the concrete value contained
+by v and performs a mapping of underlying XDR types to Go types as follows:
+
+ Go Type <- XDR Type
+ --------------------
+ int8, int16, int32, int <- XDR Integer
+ uint8, uint16, uint32, uint <- XDR Unsigned Integer
+ int64 <- XDR Hyper Integer
+ uint64 <- XDR Unsigned Hyper Integer
+ bool <- XDR Boolean
+ float32 <- XDR Floating-Point
+ float64 <- XDR Double-Precision Floating-Point
+ string <- XDR String
+ byte <- XDR Integer
+ []byte <- XDR Variable-Length Opaque Data
+ [#]byte <- XDR Fixed-Length Opaque Data
+ []<type> <- XDR Variable-Length Array
+ [#]<type> <- XDR Fixed-Length Array
+ struct <- XDR Structure
+ map <- XDR Variable-Length Array of two-element XDR Structures
+ time.Time <- XDR String encoded with RFC3339 nanosecond precision
+
+Notes and Limitations:
+
+ * Automatic unmarshalling of variable and fixed-length arrays of uint8s
+ requires a special struct tag `xdropaque:"false"` since byte slices
+ and byte arrays are assumed to be opaque data and byte is a Go alias
+ for uint8 thus indistinguishable under reflection
+ * Cyclic data structures are not supported and will result in infinite
+ loops
+
+If any issues are encountered during the unmarshalling process, an
+UnmarshalError is returned with a human readable description as well as
+an ErrorCode value for further inspection from sophisticated callers. Some
+potential issues are unsupported Go types, attempting to decode a value which is
+too large to fit into a specified Go type, and exceeding max slice limitations.
+*/
+func Unmarshal(r io.Reader, v interface{}) (int, error) {
+ d := Decoder{r: r}
+ return d.Decode(v)
+}
+
+// UnmarshalLimited is identical to Unmarshal but it sets maxReadSize in order
+// to cap reads.
+func UnmarshalLimited(r io.Reader, v interface{}, maxSize uint) (int, error) {
+ d := Decoder{r: r, maxReadSize: maxSize}
+ return d.Decode(v)
+}
+
+// TypeDecoder lets a caller provide a custom decode routine for a custom type.
+type TypeDecoder interface {
+ Decode(*Decoder, reflect.Value) (int, error)
+}
+
+// A Decoder wraps an io.Reader that is expected to provide an XDR-encoded byte
+// stream and provides several exposed methods to manually decode various XDR
+// primitives without relying on reflection. The NewDecoder function can be
+// used to get a new Decoder directly.
+//
+// Typically, Unmarshal should be used instead of manual decoding. A Decoder
+// is exposed so it is possible to perform manual decoding should it be
+// necessary in complex scenarios where automatic reflection-based decoding
+// won't work.
+type Decoder struct {
+ r io.Reader
+
+ // maxReadSize is the default maximum bytes an element can contain. 0
+ // is unlimited and provides backwards compatability. Setting it to a
+ // non-zero value caps reads.
+ maxReadSize uint
+
+ // customTypes is a map allowing the caller to provide decoder routines for
+ // custom types known only to itself.
+ customTypes map[string]TypeDecoder
+}
+
+// DecodeInt treats the next 4 bytes as an XDR encoded integer and returns the
+// result as an int32 along with the number of bytes actually read.
+//
+// An UnmarshalError is returned if there are insufficient bytes remaining.
+//
+// Reference:
+// RFC Section 4.1 - Integer
+// 32-bit big-endian signed integer in range [-2147483648, 2147483647]
+func (d *Decoder) DecodeInt() (int32, int, error) {
+ var buf [4]byte
+ n, err := io.ReadFull(d.r, buf[:])
+ if err != nil {
+ msg := fmt.Sprintf(errIODecode, err.Error(), 4)
+ err := unmarshalError("DecodeInt", ErrIO, msg, buf[:n], err)
+ return 0, n, err
+ }
+
+ rv := int32(buf[3]) | int32(buf[2])<<8 |
+ int32(buf[1])<<16 | int32(buf[0])<<24
+ return rv, n, nil
+}
+
+// DecodeUint treats the next 4 bytes as an XDR encoded unsigned integer and
+// returns the result as a uint32 along with the number of bytes actually read.
+//
+// An UnmarshalError is returned if there are insufficient bytes remaining.
+//
+// Reference:
+// RFC Section 4.2 - Unsigned Integer
+// 32-bit big-endian unsigned integer in range [0, 4294967295]
+func (d *Decoder) DecodeUint() (uint32, int, error) {
+ var buf [4]byte
+ n, err := io.ReadFull(d.r, buf[:])
+ if err != nil {
+ msg := fmt.Sprintf(errIODecode, err.Error(), 4)
+ err := unmarshalError("DecodeUint", ErrIO, msg, buf[:n], err)
+ return 0, n, err
+ }
+
+ rv := uint32(buf[3]) | uint32(buf[2])<<8 |
+ uint32(buf[1])<<16 | uint32(buf[0])<<24
+ return rv, n, nil
+}
+
+// DecodeEnum treats the next 4 bytes as an XDR encoded enumeration value and
+// returns the result as an int32 after verifying that the value is in the
+// provided map of valid values. It also returns the number of bytes actually
+// read.
+//
+// An UnmarshalError is returned if there are insufficient bytes remaining or
+// the parsed enumeration value is not one of the provided valid values.
+//
+// Reference:
+// RFC Section 4.3 - Enumeration
+// Represented as an XDR encoded signed integer
+func (d *Decoder) DecodeEnum(validEnums map[int32]bool) (int32, int, error) {
+ val, n, err := d.DecodeInt()
+ if err != nil {
+ return 0, n, err
+ }
+
+ if !validEnums[val] {
+ err := unmarshalError("DecodeEnum", ErrBadEnumValue,
+ "invalid enum", val, nil)
+ return 0, n, err
+ }
+ return val, n, nil
+}
+
+// DecodeBool treats the next 4 bytes as an XDR encoded boolean value and
+// returns the result as a bool along with the number of bytes actually read.
+//
+// An UnmarshalError is returned if there are insufficient bytes remaining or
+// the parsed value is not a 0 or 1.
+//
+// Reference:
+// RFC Section 4.4 - Boolean
+// Represented as an XDR encoded enumeration where 0 is false and 1 is true
+func (d *Decoder) DecodeBool() (bool, int, error) {
+ val, n, err := d.DecodeInt()
+ if err != nil {
+ return false, n, err
+ }
+ switch val {
+ case 0:
+ return false, n, nil
+ case 1:
+ return true, n, nil
+ }
+
+ err = unmarshalError("DecodeBool", ErrBadEnumValue, "bool not 0 or 1",
+ val, nil)
+ return false, n, err
+}
+
+// DecodeHyper treats the next 8 bytes as an XDR encoded hyper value and
+// returns the result as an int64 along with the number of bytes actually read.
+//
+// An UnmarshalError is returned if there are insufficient bytes remaining.
+//
+// Reference:
+// RFC Section 4.5 - Hyper Integer
+// 64-bit big-endian signed integer in range [-9223372036854775808, 9223372036854775807]
+func (d *Decoder) DecodeHyper() (int64, int, error) {
+ var buf [8]byte
+ n, err := io.ReadFull(d.r, buf[:])
+ if err != nil {
+ msg := fmt.Sprintf(errIODecode, err.Error(), 8)
+ err := unmarshalError("DecodeHyper", ErrIO, msg, buf[:n], err)
+ return 0, n, err
+ }
+
+ rv := int64(buf[7]) | int64(buf[6])<<8 |
+ int64(buf[5])<<16 | int64(buf[4])<<24 |
+ int64(buf[3])<<32 | int64(buf[2])<<40 |
+ int64(buf[1])<<48 | int64(buf[0])<<56
+ return rv, n, err
+}
+
+// DecodeUhyper treats the next 8 bytes as an XDR encoded unsigned hyper value
+// and returns the result as a uint64 along with the number of bytes actually
+// read.
+//
+// An UnmarshalError is returned if there are insufficient bytes remaining.
+//
+// Reference:
+// RFC Section 4.5 - Unsigned Hyper Integer
+// 64-bit big-endian unsigned integer in range [0, 18446744073709551615]
+func (d *Decoder) DecodeUhyper() (uint64, int, error) {
+ var buf [8]byte
+ n, err := io.ReadFull(d.r, buf[:])
+ if err != nil {
+ msg := fmt.Sprintf(errIODecode, err.Error(), 8)
+ err := unmarshalError("DecodeUhyper", ErrIO, msg, buf[:n], err)
+ return 0, n, err
+ }
+
+ rv := uint64(buf[7]) | uint64(buf[6])<<8 |
+ uint64(buf[5])<<16 | uint64(buf[4])<<24 |
+ uint64(buf[3])<<32 | uint64(buf[2])<<40 |
+ uint64(buf[1])<<48 | uint64(buf[0])<<56
+ return rv, n, nil
+}
+
+// DecodeFloat treats the next 4 bytes as an XDR encoded floating point and
+// returns the result as a float32 along with the number of bytes actually read.
+//
+// An UnmarshalError is returned if there are insufficient bytes remaining.
+//
+// Reference:
+// RFC Section 4.6 - Floating Point
+// 32-bit single-precision IEEE 754 floating point
+func (d *Decoder) DecodeFloat() (float32, int, error) {
+ var buf [4]byte
+ n, err := io.ReadFull(d.r, buf[:])
+ if err != nil {
+ msg := fmt.Sprintf(errIODecode, err.Error(), 4)
+ err := unmarshalError("DecodeFloat", ErrIO, msg, buf[:n], err)
+ return 0, n, err
+ }
+
+ val := uint32(buf[3]) | uint32(buf[2])<<8 |
+ uint32(buf[1])<<16 | uint32(buf[0])<<24
+ return math.Float32frombits(val), n, nil
+}
+
+// DecodeDouble treats the next 8 bytes as an XDR encoded double-precision
+// floating point and returns the result as a float64 along with the number of
+// bytes actually read.
+//
+// An UnmarshalError is returned if there are insufficient bytes remaining.
+//
+// Reference:
+// RFC Section 4.7 - Double-Precision Floating Point
+// 64-bit double-precision IEEE 754 floating point
+func (d *Decoder) DecodeDouble() (float64, int, error) {
+ var buf [8]byte
+ n, err := io.ReadFull(d.r, buf[:])
+ if err != nil {
+ msg := fmt.Sprintf(errIODecode, err.Error(), 8)
+ err := unmarshalError("DecodeDouble", ErrIO, msg, buf[:n], err)
+ return 0, n, err
+ }
+
+ val := uint64(buf[7]) | uint64(buf[6])<<8 |
+ uint64(buf[5])<<16 | uint64(buf[4])<<24 |
+ uint64(buf[3])<<32 | uint64(buf[2])<<40 |
+ uint64(buf[1])<<48 | uint64(buf[0])<<56
+ return math.Float64frombits(val), n, nil
+}
+
+// RFC Section 4.8 - Quadruple-Precision Floating Point
+// 128-bit quadruple-precision floating point
+// Not Implemented
+
+// DecodeFixedOpaque treats the next 'size' bytes as XDR encoded opaque data and
+// returns the result as a byte slice along with the number of bytes actually
+// read.
+//
+// An UnmarshalError is returned if there are insufficient bytes remaining to
+// satisfy the passed size, including the necessary padding to make it a
+// multiple of 4.
+//
+// Reference:
+// RFC Section 4.9 - Fixed-Length Opaque Data
+// Fixed-length uninterpreted data zero-padded to a multiple of four
+func (d *Decoder) DecodeFixedOpaque(size int32) ([]byte, int, error) {
+ // Nothing to do if size is 0.
+ if size == 0 {
+ return nil, 0, nil
+ }
+
+ pad := (4 - (size % 4)) % 4
+ paddedSize := size + pad
+ if uint(paddedSize) > uint(math.MaxInt32) {
+ err := unmarshalError("DecodeFixedOpaque", ErrOverflow,
+ errMaxSlice, paddedSize, nil)
+ return nil, 0, err
+ }
+
+ buf := make([]byte, paddedSize)
+ n, err := io.ReadFull(d.r, buf)
+ if err != nil {
+ msg := fmt.Sprintf(errIODecode, err.Error(), paddedSize)
+ err := unmarshalError("DecodeFixedOpaque", ErrIO, msg, buf[:n],
+ err)
+ return nil, n, err
+ }
+ return buf[0:size], n, nil
+}
+
+// DecodeOpaque treats the next bytes as variable length XDR encoded opaque
+// data and returns the result as a byte slice along with the number of bytes
+// actually read.
+//
+// An UnmarshalError is returned if there are insufficient bytes remaining or
+// the opaque data is larger than the max length of a Go slice.
+//
+// Reference:
+// RFC Section 4.10 - Variable-Length Opaque Data
+// Unsigned integer length followed by fixed opaque data of that length
+func (d *Decoder) DecodeOpaque() ([]byte, int, error) {
+ dataLen, n, err := d.DecodeUint()
+ if err != nil {
+ return nil, n, err
+ }
+ if uint(dataLen) > uint(math.MaxInt32) ||
+ (d.maxReadSize != 0 && uint(dataLen) > d.maxReadSize) {
+ err := unmarshalError("DecodeOpaque", ErrOverflow, errMaxSlice,
+ dataLen, nil)
+ return nil, n, err
+ }
+
+ rv, n2, err := d.DecodeFixedOpaque(int32(dataLen))
+ n += n2
+ if err != nil {
+ return nil, n, err
+ }
+ return rv, n, nil
+}
+
+// DecodeString treats the next bytes as a variable length XDR encoded string
+// and returns the result as a string along with the number of bytes actually
+// read. Character encoding is assumed to be UTF-8 and therefore ASCII
+// compatible. If the underlying character encoding is not compatibile with
+// this assumption, the data can instead be read as variable-length opaque data
+// (DecodeOpaque) and manually converted as needed.
+//
+// An UnmarshalError is returned if there are insufficient bytes remaining or
+// the string data is larger than the max length of a Go slice.
+//
+// Reference:
+// RFC Section 4.11 - String
+// Unsigned integer length followed by bytes zero-padded to a multiple of
+// four
+func (d *Decoder) DecodeString() (string, int, error) {
+ dataLen, n, err := d.DecodeUint()
+ if err != nil {
+ return "", n, err
+ }
+ if uint(dataLen) > uint(math.MaxInt32) ||
+ (d.maxReadSize != 0 && uint(dataLen) > d.maxReadSize) {
+ err = unmarshalError("DecodeString", ErrOverflow, errMaxSlice,
+ dataLen, nil)
+ return "", n, err
+ }
+
+ opaque, n2, err := d.DecodeFixedOpaque(int32(dataLen))
+ n += n2
+ if err != nil {
+ return "", n, err
+ }
+ return string(opaque), n, nil
+}
+
+// decodeFixedArray treats the next bytes as a series of XDR encoded elements
+// of the same type as the array represented by the reflection value and decodes
+// each element into the passed array. The ignoreOpaque flag controls whether
+// or not uint8 (byte) elements should be decoded individually or as a fixed
+// sequence of opaque data. It returns the the number of bytes actually read.
+//
+// An UnmarshalError is returned if any issues are encountered while decoding
+// the array elements.
+//
+// Reference:
+// RFC Section 4.12 - Fixed-Length Array
+// Individually XDR encoded array elements
+func (d *Decoder) decodeFixedArray(v reflect.Value, ignoreOpaque bool) (int, error) {
+ // Treat [#]byte (byte is alias for uint8) as opaque data unless
+ // ignored.
+ if !ignoreOpaque && v.Type().Elem().Kind() == reflect.Uint8 {
+ data, n, err := d.DecodeFixedOpaque(int32(v.Len()))
+ if err != nil {
+ return n, err
+ }
+ reflect.Copy(v, reflect.ValueOf(data))
+ return n, nil
+ }
+
+ // Decode each array element.
+ var n int
+ for i := 0; i < v.Len(); i++ {
+ n2, err := d.decode(v.Index(i))
+ n += n2
+ if err != nil {
+ return n, err
+ }
+ }
+ return n, nil
+}
+
+// decodeArray treats the next bytes as a variable length series of XDR encoded
+// elements of the same type as the array represented by the reflection value.
+// The number of elements is obtained by first decoding the unsigned integer
+// element count. Then each element is decoded into the passed array. The
+// ignoreOpaque flag controls whether or not uint8 (byte) elements should be
+// decoded individually or as a variable sequence of opaque data. It returns
+// the number of bytes actually read.
+//
+// An UnmarshalError is returned if any issues are encountered while decoding
+// the array elements.
+//
+// Reference:
+// RFC Section 4.13 - Variable-Length Array
+// Unsigned integer length followed by individually XDR encoded array
+// elements
+func (d *Decoder) decodeArray(v reflect.Value, ignoreOpaque bool) (int, error) {
+ dataLen, n, err := d.DecodeUint()
+ if err != nil {
+ return n, err
+ }
+ if uint(dataLen) > uint(math.MaxInt32) ||
+ (d.maxReadSize != 0 && uint(dataLen) > d.maxReadSize) {
+ err := unmarshalError("decodeArray", ErrOverflow, errMaxSlice,
+ dataLen, nil)
+ return n, err
+ }
+
+ // Allocate storage for the slice elements (the underlying array) if
+ // existing slice does not have enough capacity.
+ sliceLen := int(dataLen)
+ if v.Cap() < sliceLen {
+ v.Set(reflect.MakeSlice(v.Type(), sliceLen, sliceLen))
+ }
+ if v.Len() < sliceLen {
+ v.SetLen(sliceLen)
+ }
+
+ // Treat []byte (byte is alias for uint8) as opaque data unless ignored.
+ if !ignoreOpaque && v.Type().Elem().Kind() == reflect.Uint8 {
+ data, n2, err := d.DecodeFixedOpaque(int32(sliceLen))
+ n += n2
+ if err != nil {
+ return n, err
+ }
+ v.SetBytes(data)
+ return n, nil
+ }
+
+ // Decode each slice element.
+ for i := 0; i < sliceLen; i++ {
+ n2, err := d.decode(v.Index(i))
+ n += n2
+ if err != nil {
+ return n, err
+ }
+ }
+ return n, nil
+}
+
+// decodeStruct treats the next bytes as a series of XDR encoded elements
+// of the same type as the exported fields of the struct represented by the
+// passed reflection value. Pointers are automatically indirected and
+// allocated as necessary. It returns the the number of bytes actually read.
+//
+// An UnmarshalError is returned if any issues are encountered while decoding
+// the elements.
+//
+// Reference:
+// RFC Section 4.14 - Structure
+// XDR encoded elements in the order of their declaration in the struct
+func (d *Decoder) decodeStruct(v reflect.Value) (int, error) {
+ var n int
+ vt := v.Type()
+ for i := 0; i < v.NumField(); i++ {
+ // Skip unexported fields.
+ vtf := vt.Field(i)
+ if vtf.PkgPath != "" {
+ continue
+ }
+
+ // Indirect through pointers allocating them as needed and
+ // ensure the field is settable.
+ vf := v.Field(i)
+ vf, err := d.indirect(vf)
+ if err != nil {
+ return n, err
+ }
+ if !vf.CanSet() {
+ msg := fmt.Sprintf("can't decode to unsettable '%v'",
+ vf.Type().String())
+ err := unmarshalError("decodeStruct", ErrNotSettable,
+ msg, nil, nil)
+ return n, err
+ }
+
+ // Handle non-opaque data to []uint8 and [#]uint8 based on
+ // struct tag.
+ tag := vtf.Tag.Get("xdropaque")
+ if tag == "false" {
+ switch vf.Kind() {
+ case reflect.Slice:
+ n2, err := d.decodeArray(vf, true)
+ n += n2
+ if err != nil {
+ return n, err
+ }
+ continue
+
+ case reflect.Array:
+ n2, err := d.decodeFixedArray(vf, true)
+ n += n2
+ if err != nil {
+ return n, err
+ }
+ continue
+ }
+ }
+
+ // Decode each struct field.
+ n2, err := d.decode(vf)
+ n += n2
+ if err != nil {
+ return n, err
+ }
+ }
+
+ return n, nil
+}
+
+// RFC Section 4.15 - Discriminated Union
+// RFC Section 4.16 - Void
+// RFC Section 4.17 - Constant
+// RFC Section 4.18 - Typedef
+// RFC Section 4.19 - Optional data
+// RFC Sections 4.15 though 4.19 only apply to the data specification language
+// which is not implemented by this package. In the case of discriminated
+// unions, struct tags are used to perform a similar function.
+
+// decodeMap treats the next bytes as an XDR encoded variable array of 2-element
+// structures whose fields are of the same type as the map keys and elements
+// represented by the passed reflection value. Pointers are automatically
+// indirected and allocated as necessary. It returns the the number of bytes
+// actually read.
+//
+// An UnmarshalError is returned if any issues are encountered while decoding
+// the elements.
+func (d *Decoder) decodeMap(v reflect.Value) (int, error) {
+ dataLen, n, err := d.DecodeUint()
+ if err != nil {
+ return n, err
+ }
+
+ // Allocate storage for the underlying map if needed.
+ vt := v.Type()
+ if v.IsNil() {
+ v.Set(reflect.MakeMap(vt))
+ }
+
+ // Decode each key and value according to their type.
+ keyType := vt.Key()
+ elemType := vt.Elem()
+ for i := uint32(0); i < dataLen; i++ {
+ key := reflect.New(keyType).Elem()
+ n2, err := d.decode(key)
+ n += n2
+ if err != nil {
+ return n, err
+ }
+
+ val := reflect.New(elemType).Elem()
+ n2, err = d.decode(val)
+ n += n2
+ if err != nil {
+ return n, err
+ }
+ v.SetMapIndex(key, val)
+ }
+ return n, nil
+}
+
+// decodeInterface examines the interface represented by the passed reflection
+// value to detect whether it is an interface that can be decoded into and
+// if it is, extracts the underlying value to pass back into the decode function
+// for decoding according to its type. It returns the the number of bytes
+// actually read.
+//
+// An UnmarshalError is returned if any issues are encountered while decoding
+// the interface.
+func (d *Decoder) decodeInterface(v reflect.Value) (int, error) {
+ if v.IsNil() || !v.CanInterface() {
+ msg := fmt.Sprintf("can't decode to nil interface")
+ err := unmarshalError("decodeInterface", ErrNilInterface, msg,
+ nil, nil)
+ return 0, err
+ }
+
+ // Extract underlying value from the interface and indirect through
+ // pointers allocating them as needed.
+ ve := reflect.ValueOf(v.Interface())
+ ve, err := d.indirect(ve)
+ if err != nil {
+ return 0, err
+ }
+ if !ve.CanSet() {
+ msg := fmt.Sprintf("can't decode to unsettable '%v'",
+ ve.Type().String())
+ err := unmarshalError("decodeInterface", ErrNotSettable, msg,
+ nil, nil)
+ return 0, err
+ }
+ return d.decode(ve)
+}
+
+// decode is the main workhorse for unmarshalling via reflection. It uses
+// the passed reflection value to choose the XDR primitives to decode from
+// the encapsulated reader. It is a recursive function,
+// so cyclic data structures are not supported and will result in an infinite
+// loop. It returns the the number of bytes actually read.
+func (d *Decoder) decode(v reflect.Value) (int, error) {
+ if !v.IsValid() {
+ msg := fmt.Sprintf("type '%s' is not valid", v.Kind().String())
+ err := unmarshalError("decode", ErrUnsupportedType, msg, nil, nil)
+ return 0, err
+ }
+
+ // Indirect through pointers allocating them as needed.
+ ve, err := d.indirect(v)
+ if err != nil {
+ return 0, err
+ }
+
+ // Handle time.Time values by decoding them as an RFC3339 formatted
+ // string with nanosecond precision. Check the type string rather
+ // than doing a full blown conversion to interface and type assertion
+ // since checking a string is much quicker.
+ switch ve.Type().String() {
+ case "time.Time":
+ // Read the value as a string and parse it.
+ timeString, n, err := d.DecodeString()
+ if err != nil {
+ return n, err
+ }
+ ttv, err := time.Parse(time.RFC3339, timeString)
+ if err != nil {
+ err := unmarshalError("decode", ErrParseTime,
+ err.Error(), timeString, err)
+ return n, err
+ }
+ ve.Set(reflect.ValueOf(ttv))
+ return n, nil
+ }
+ // If this type is in our custom types map, call the decode routine set up
+ // for it.
+ if dt, ok := d.customTypes[ve.Type().String()]; ok {
+ return dt.Decode(d, v)
+ }
+
+ // Handle native Go types.
+ switch ve.Kind() {
+ case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int:
+ i, n, err := d.DecodeInt()
+ if err != nil {
+ return n, err
+ }
+ if ve.OverflowInt(int64(i)) {
+ msg := fmt.Sprintf("signed integer too large to fit '%s'",
+ ve.Kind().String())
+ err = unmarshalError("decode", ErrOverflow, msg, i, nil)
+ return n, err
+ }
+ ve.SetInt(int64(i))
+ return n, nil
+
+ case reflect.Int64:
+ i, n, err := d.DecodeHyper()
+ if err != nil {
+ return n, err
+ }
+ ve.SetInt(i)
+ return n, nil
+
+ case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint:
+ ui, n, err := d.DecodeUint()
+ if err != nil {
+ return n, err
+ }
+ if ve.OverflowUint(uint64(ui)) {
+ msg := fmt.Sprintf("unsigned integer too large to fit '%s'",
+ ve.Kind().String())
+ err = unmarshalError("decode", ErrOverflow, msg, ui, nil)
+ return n, err
+ }
+ ve.SetUint(uint64(ui))
+ return n, nil
+
+ case reflect.Uint64:
+ ui, n, err := d.DecodeUhyper()
+ if err != nil {
+ return n, err
+ }
+ ve.SetUint(ui)
+ return n, nil
+
+ case reflect.Bool:
+ b, n, err := d.DecodeBool()
+ if err != nil {
+ return n, err
+ }
+ ve.SetBool(b)
+ return n, nil
+
+ case reflect.Float32:
+ f, n, err := d.DecodeFloat()
+ if err != nil {
+ return n, err
+ }
+ ve.SetFloat(float64(f))
+ return n, nil
+
+ case reflect.Float64:
+ f, n, err := d.DecodeDouble()
+ if err != nil {
+ return n, err
+ }
+ ve.SetFloat(f)
+ return n, nil
+
+ case reflect.String:
+ s, n, err := d.DecodeString()
+ if err != nil {
+ return n, err
+ }
+ ve.SetString(s)
+ return n, nil
+
+ case reflect.Array:
+ n, err := d.decodeFixedArray(ve, false)
+ if err != nil {
+ return n, err
+ }
+ return n, nil
+
+ case reflect.Slice:
+ n, err := d.decodeArray(ve, false)
+ if err != nil {
+ return n, err
+ }
+ return n, nil
+
+ case reflect.Struct:
+ n, err := d.decodeStruct(ve)
+ if err != nil {
+ return n, err
+ }
+ return n, nil
+
+ case reflect.Map:
+ n, err := d.decodeMap(ve)
+ if err != nil {
+ return n, err
+ }
+ return n, nil
+
+ case reflect.Interface:
+ n, err := d.decodeInterface(ve)
+ if err != nil {
+ return n, err
+ }
+ return n, nil
+ }
+
+ // The only unhandled types left are unsupported. At the time of this
+ // writing the only remaining unsupported types that exist are
+ // reflect.Uintptr and reflect.UnsafePointer.
+ msg := fmt.Sprintf("unsupported Go type '%s'", ve.Kind().String())
+ err = unmarshalError("decode", ErrUnsupportedType, msg, nil, nil)
+ return 0, err
+}
+
+// indirect dereferences pointers allocating them as needed until it reaches
+// a non-pointer. This allows transparent decoding through arbitrary levels
+// of indirection.
+func (d *Decoder) indirect(v reflect.Value) (reflect.Value, error) {
+ rv := v
+ for rv.Kind() == reflect.Ptr {
+ // Allocate pointer if needed.
+ isNil := rv.IsNil()
+ if isNil && !rv.CanSet() {
+ msg := fmt.Sprintf("unable to allocate pointer for '%v'",
+ rv.Type().String())
+ err := unmarshalError("indirect", ErrNotSettable, msg,
+ nil, nil)
+ return rv, err
+ }
+ if isNil {
+ rv.Set(reflect.New(rv.Type().Elem()))
+ }
+ rv = rv.Elem()
+ }
+ return rv, nil
+}
+
+// Decode operates identically to the Unmarshal function with the exception of
+// using the reader associated with the Decoder as the source of XDR-encoded
+// data instead of a user-supplied reader. See the Unmarhsal documentation for
+// specifics.
+func (d *Decoder) Decode(v interface{}) (int, error) {
+ if v == nil {
+ msg := "can't unmarshal to nil interface"
+ return 0, unmarshalError("Unmarshal", ErrNilInterface, msg, nil,
+ nil)
+ }
+
+ vv := reflect.ValueOf(v)
+ if vv.Kind() != reflect.Ptr {
+ msg := fmt.Sprintf("can't unmarshal to non-pointer '%v' - use "+
+ "& operator", vv.Type().String())
+ err := unmarshalError("Unmarshal", ErrBadArguments, msg, nil, nil)
+ return 0, err
+ }
+ if vv.IsNil() && !vv.CanSet() {
+ msg := fmt.Sprintf("can't unmarshal to unsettable '%v' - use "+
+ "& operator", vv.Type().String())
+ err := unmarshalError("Unmarshal", ErrNotSettable, msg, nil, nil)
+ return 0, err
+ }
+
+ return d.decode(vv)
+}
+
+// NewDecoder returns a Decoder that can be used to manually decode XDR data
+// from a provided reader. Typically, Unmarshal should be used instead of
+// manually creating a Decoder.
+func NewDecoder(r io.Reader) *Decoder {
+ return &Decoder{r: r}
+}
+
+// NewDecoderLimited is identical to NewDecoder but it sets maxReadSize in
+// order to cap reads.
+func NewDecoderLimited(r io.Reader, maxSize uint) *Decoder {
+ return &Decoder{r: r, maxReadSize: maxSize}
+}
+
+// NewDecoderCustomTypes returns a decoder with support for custom types known
+// to the caller. The second parameter is a map of the type name to the decoder
+// routine. When the decoder finds a type matching one of the entries in the map
+// it will call the custom routine for that type.
+func NewDecoderCustomTypes(r io.Reader, maxSize uint, ct map[string]TypeDecoder) *Decoder {
+ return &Decoder{r: r, maxReadSize: maxSize, customTypes: ct}
+}
diff --git a/vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/xdr2/doc.go b/vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/xdr2/doc.go
new file mode 100644
index 000000000..8823d62f3
--- /dev/null
+++ b/vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/xdr2/doc.go
@@ -0,0 +1,171 @@
+/*
+ * Copyright (c) 2012-2014 Dave Collins <dave@davec.name>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/*
+Package xdr implements the data representation portion of the External Data
+Representation (XDR) standard protocol as specified in RFC 4506 (obsoletes
+RFC 1832 and RFC 1014).
+
+The XDR RFC defines both a data specification language and a data
+representation standard. This package implements methods to encode and decode
+XDR data per the data representation standard with the exception of 128-bit
+quadruple-precision floating points. It does not currently implement parsing of
+the data specification language. In other words, the ability to automatically
+generate Go code by parsing an XDR data specification file (typically .x
+extension) is not supported. In practice, this limitation of the package is
+fairly minor since it is largely unnecessary due to the reflection capabilities
+of Go as described below.
+
+This package provides two approaches for encoding and decoding XDR data:
+
+ 1) Marshal/Unmarshal functions which automatically map between XDR and Go types
+ 2) Individual Encoder/Decoder objects to manually work with XDR primitives
+
+For the Marshal/Unmarshal functions, Go reflection capabilities are used to
+choose the type of the underlying XDR data based upon the Go type to encode or
+the target Go type to decode into. A description of how each type is mapped is
+provided below, however one important type worth reviewing is Go structs. In
+the case of structs, each exported field (first letter capitalized) is reflected
+and mapped in order. As a result, this means a Go struct with exported fields
+of the appropriate types listed in the expected order can be used to
+automatically encode / decode the XDR data thereby eliminating the need to write
+a lot of boilerplate code to encode/decode and error check each piece of XDR
+data as is typically required with C based XDR libraries.
+
+Go Type to XDR Type Mappings
+
+The following chart shows an overview of how Go types are mapped to XDR types
+for automatic marshalling and unmarshalling. The documentation for the Marshal
+and Unmarshal functions has specific details of how the mapping proceeds.
+
+ Go Type <-> XDR Type
+ --------------------
+ int8, int16, int32, int <-> XDR Integer
+ uint8, uint16, uint32, uint <-> XDR Unsigned Integer
+ int64 <-> XDR Hyper Integer
+ uint64 <-> XDR Unsigned Hyper Integer
+ bool <-> XDR Boolean
+ float32 <-> XDR Floating-Point
+ float64 <-> XDR Double-Precision Floating-Point
+ string <-> XDR String
+ byte <-> XDR Integer
+ []byte <-> XDR Variable-Length Opaque Data
+ [#]byte <-> XDR Fixed-Length Opaque Data
+ []<type> <-> XDR Variable-Length Array
+ [#]<type> <-> XDR Fixed-Length Array
+ struct <-> XDR Structure
+ map <-> XDR Variable-Length Array of two-element XDR Structures
+ time.Time <-> XDR String encoded with RFC3339 nanosecond precision
+
+Notes and Limitations:
+
+ * Automatic marshalling and unmarshalling of variable and fixed-length
+ arrays of uint8s require a special struct tag `xdropaque:"false"`
+ since byte slices and byte arrays are assumed to be opaque data and
+ byte is a Go alias for uint8 thus indistinguishable under reflection
+ * Channel, complex, and function types cannot be encoded
+ * Interfaces without a concrete value cannot be encoded
+ * Cyclic data structures are not supported and will result in infinite
+ loops
+ * Strings are marshalled and unmarshalled with UTF-8 character encoding
+ which differs from the XDR specification of ASCII, however UTF-8 is
+ backwards compatible with ASCII so this should rarely cause issues
+
+
+Encoding
+
+To encode XDR data, use the Marshal function.
+ func Marshal(w io.Writer, v interface{}) (int, error)
+
+For example, given the following code snippet:
+
+ type ImageHeader struct {
+ Signature [3]byte
+ Version uint32
+ IsGrayscale bool
+ NumSections uint32
+ }
+ h := ImageHeader{[3]byte{0xAB, 0xCD, 0xEF}, 2, true, 10}
+
+ var w bytes.Buffer
+ bytesWritten, err := xdr.Marshal(&w, &h)
+ // Error check elided
+
+The result, encodedData, will then contain the following XDR encoded byte
+sequence:
+
+ 0xAB, 0xCD, 0xEF, 0x00,
+ 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x0A
+
+
+In addition, while the automatic marshalling discussed above will work for the
+vast majority of cases, an Encoder object is provided that can be used to
+manually encode XDR primitives for complex scenarios where automatic
+reflection-based encoding won't work. The included examples provide a sample of
+manual usage via an Encoder.
+
+
+Decoding
+
+To decode XDR data, use the Unmarshal function.
+ func Unmarshal(r io.Reader, v interface{}) (int, error)
+
+For example, given the following code snippet:
+
+ type ImageHeader struct {
+ Signature [3]byte
+ Version uint32
+ IsGrayscale bool
+ NumSections uint32
+ }
+
+ // Using output from the Encoding section above.
+ encodedData := []byte{
+ 0xAB, 0xCD, 0xEF, 0x00,
+ 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x0A,
+ }
+
+ var h ImageHeader
+ bytesRead, err := xdr.Unmarshal(bytes.NewReader(encodedData), &h)
+ // Error check elided
+
+The struct instance, h, will then contain the following values:
+
+ h.Signature = [3]byte{0xAB, 0xCD, 0xEF}
+ h.Version = 2
+ h.IsGrayscale = true
+ h.NumSections = 10
+
+In addition, while the automatic unmarshalling discussed above will work for the
+vast majority of cases, a Decoder object is provided that can be used to
+manually decode XDR primitives for complex scenarios where automatic
+reflection-based decoding won't work. The included examples provide a sample of
+manual usage via a Decoder.
+
+Errors
+
+All errors are either of type UnmarshalError or MarshalError. Both provide
+human-readable output as well as an ErrorCode field which can be inspected by
+sophisticated callers if necessary.
+
+See the documentation of UnmarshalError, MarshalError, and ErrorCode for further
+details.
+*/
+package xdr
diff --git a/vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/xdr2/encode.go b/vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/xdr2/encode.go
new file mode 100644
index 000000000..7bac2681d
--- /dev/null
+++ b/vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/xdr2/encode.go
@@ -0,0 +1,669 @@
+/*
+ * Copyright (c) 2012-2014 Dave Collins <dave@davec.name>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+package xdr
+
+import (
+ "fmt"
+ "io"
+ "math"
+ "reflect"
+ "time"
+)
+
+var errIOEncode = "%s while encoding %d bytes"
+
+/*
+Marshal writes the XDR encoding of v to writer w and returns the number of bytes
+written. It traverses v recursively and automatically indirects pointers
+through arbitrary depth to encode the actual value pointed to.
+
+Marshal uses reflection to determine the type of the concrete value contained by
+v and performs a mapping of Go types to the underlying XDR types as follows:
+
+ Go Type -> XDR Type
+ --------------------
+ int8, int16, int32, int -> XDR Integer
+ uint8, uint16, uint32, uint -> XDR Unsigned Integer
+ int64 -> XDR Hyper Integer
+ uint64 -> XDR Unsigned Hyper Integer
+ bool -> XDR Boolean
+ float32 -> XDR Floating-Point
+ float64 -> XDR Double-Precision Floating-Point
+ string -> XDR String
+ byte -> XDR Integer
+ []byte -> XDR Variable-Length Opaque Data
+ [#]byte -> XDR Fixed-Length Opaque Data
+ []<type> -> XDR Variable-Length Array
+ [#]<type> -> XDR Fixed-Length Array
+ struct -> XDR Structure
+ map -> XDR Variable-Length Array of two-element XDR Structures
+ time.Time -> XDR String encoded with RFC3339 nanosecond precision
+
+Notes and Limitations:
+
+ * Automatic marshalling of variable and fixed-length arrays of uint8s
+ requires a special struct tag `xdropaque:"false"` since byte slices and
+ byte arrays are assumed to be opaque data and byte is a Go alias for uint8
+ thus indistinguishable under reflection
+ * Channel, complex, and function types cannot be encoded
+ * Interfaces without a concrete value cannot be encoded
+ * Cyclic data structures are not supported and will result in infinite loops
+ * Strings are marshalled with UTF-8 character encoding which differs from
+ the XDR specification of ASCII, however UTF-8 is backwards compatible with
+ ASCII so this should rarely cause issues
+
+If any issues are encountered during the marshalling process, a MarshalError is
+returned with a human readable description as well as an ErrorCode value for
+further inspection from sophisticated callers. Some potential issues are
+unsupported Go types, attempting to encode more opaque data than can be
+represented by a single opaque XDR entry, and exceeding max slice limitations.
+*/
+func Marshal(w io.Writer, v interface{}) (int, error) {
+ enc := Encoder{w: w}
+ return enc.Encode(v)
+}
+
+// An Encoder wraps an io.Writer that will receive the XDR encoded byte stream.
+// See NewEncoder.
+type Encoder struct {
+ w io.Writer
+}
+
+// EncodeInt writes the XDR encoded representation of the passed 32-bit signed
+// integer to the encapsulated writer and returns the number of bytes written.
+//
+// A MarshalError with an error code of ErrIO is returned if writing the data
+// fails.
+//
+// Reference:
+// RFC Section 4.1 - Integer
+// 32-bit big-endian signed integer in range [-2147483648, 2147483647]
+func (enc *Encoder) EncodeInt(v int32) (int, error) {
+ var b [4]byte
+ b[0] = byte(v >> 24)
+ b[1] = byte(v >> 16)
+ b[2] = byte(v >> 8)
+ b[3] = byte(v)
+
+ n, err := enc.w.Write(b[:])
+ if err != nil {
+ msg := fmt.Sprintf(errIOEncode, err.Error(), 4)
+ err := marshalError("EncodeInt", ErrIO, msg, b[:n], err)
+ return n, err
+ }
+
+ return n, nil
+}
+
+// EncodeUint writes the XDR encoded representation of the passed 32-bit
+// unsigned integer to the encapsulated writer and returns the number of bytes
+// written.
+//
+// A MarshalError with an error code of ErrIO is returned if writing the data
+// fails.
+//
+// Reference:
+// RFC Section 4.2 - Unsigned Integer
+// 32-bit big-endian unsigned integer in range [0, 4294967295]
+func (enc *Encoder) EncodeUint(v uint32) (int, error) {
+ var b [4]byte
+ b[0] = byte(v >> 24)
+ b[1] = byte(v >> 16)
+ b[2] = byte(v >> 8)
+ b[3] = byte(v)
+
+ n, err := enc.w.Write(b[:])
+ if err != nil {
+ msg := fmt.Sprintf(errIOEncode, err.Error(), 4)
+ err := marshalError("EncodeUint", ErrIO, msg, b[:n], err)
+ return n, err
+ }
+
+ return n, nil
+}
+
+// EncodeEnum treats the passed 32-bit signed integer as an enumeration value
+// and, if it is in the list of passed valid enumeration values, writes the XDR
+// encoded representation of it to the encapsulated writer. It returns the
+// number of bytes written.
+//
+// A MarshalError is returned if the enumeration value is not one of the
+// provided valid values or if writing the data fails.
+//
+// Reference:
+// RFC Section 4.3 - Enumeration
+// Represented as an XDR encoded signed integer
+func (enc *Encoder) EncodeEnum(v int32, validEnums map[int32]bool) (int, error) {
+ if !validEnums[v] {
+ err := marshalError("EncodeEnum", ErrBadEnumValue,
+ "invalid enum", v, nil)
+ return 0, err
+ }
+ return enc.EncodeInt(v)
+}
+
+// EncodeBool writes the XDR encoded representation of the passed boolean to the
+// encapsulated writer and returns the number of bytes written.
+//
+// A MarshalError with an error code of ErrIO is returned if writing the data
+// fails.
+//
+// Reference:
+// RFC Section 4.4 - Boolean
+// Represented as an XDR encoded enumeration where 0 is false and 1 is true
+func (enc *Encoder) EncodeBool(v bool) (int, error) {
+ i := int32(0)
+ if v == true {
+ i = 1
+ }
+ return enc.EncodeInt(i)
+}
+
+// EncodeHyper writes the XDR encoded representation of the passed 64-bit
+// signed integer to the encapsulated writer and returns the number of bytes
+// written.
+//
+// A MarshalError with an error code of ErrIO is returned if writing the data
+// fails.
+//
+// Reference:
+// RFC Section 4.5 - Hyper Integer
+// 64-bit big-endian signed integer in range [-9223372036854775808, 9223372036854775807]
+func (enc *Encoder) EncodeHyper(v int64) (int, error) {
+ var b [8]byte
+ b[0] = byte(v >> 56)
+ b[1] = byte(v >> 48)
+ b[2] = byte(v >> 40)
+ b[3] = byte(v >> 32)
+ b[4] = byte(v >> 24)
+ b[5] = byte(v >> 16)
+ b[6] = byte(v >> 8)
+ b[7] = byte(v)
+
+ n, err := enc.w.Write(b[:])
+ if err != nil {
+ msg := fmt.Sprintf(errIOEncode, err.Error(), 8)
+ err := marshalError("EncodeHyper", ErrIO, msg, b[:n], err)
+ return n, err
+ }
+
+ return n, nil
+}
+
+// EncodeUhyper writes the XDR encoded representation of the passed 64-bit
+// unsigned integer to the encapsulated writer and returns the number of bytes
+// written.
+//
+// A MarshalError with an error code of ErrIO is returned if writing the data
+// fails.
+//
+// Reference:
+// RFC Section 4.5 - Unsigned Hyper Integer
+// 64-bit big-endian unsigned integer in range [0, 18446744073709551615]
+func (enc *Encoder) EncodeUhyper(v uint64) (int, error) {
+ var b [8]byte
+ b[0] = byte(v >> 56)
+ b[1] = byte(v >> 48)
+ b[2] = byte(v >> 40)
+ b[3] = byte(v >> 32)
+ b[4] = byte(v >> 24)
+ b[5] = byte(v >> 16)
+ b[6] = byte(v >> 8)
+ b[7] = byte(v)
+
+ n, err := enc.w.Write(b[:])
+ if err != nil {
+ msg := fmt.Sprintf(errIOEncode, err.Error(), 8)
+ err := marshalError("EncodeUhyper", ErrIO, msg, b[:n], err)
+ return n, err
+ }
+
+ return n, nil
+}
+
+// EncodeFloat writes the XDR encoded representation of the passed 32-bit
+// (single-precision) floating point to the encapsulated writer and returns the
+// number of bytes written.
+//
+// A MarshalError with an error code of ErrIO is returned if writing the data
+// fails.
+//
+// Reference:
+// RFC Section 4.6 - Floating Point
+// 32-bit single-precision IEEE 754 floating point
+func (enc *Encoder) EncodeFloat(v float32) (int, error) {
+ ui := math.Float32bits(v)
+ return enc.EncodeUint(ui)
+}
+
+// EncodeDouble writes the XDR encoded representation of the passed 64-bit
+// (double-precision) floating point to the encapsulated writer and returns the
+// number of bytes written.
+//
+// A MarshalError with an error code of ErrIO is returned if writing the data
+// fails.
+//
+// Reference:
+// RFC Section 4.7 - Double-Precision Floating Point
+// 64-bit double-precision IEEE 754 floating point
+func (enc *Encoder) EncodeDouble(v float64) (int, error) {
+ ui := math.Float64bits(v)
+ return enc.EncodeUhyper(ui)
+}
+
+// RFC Section 4.8 - Quadruple-Precision Floating Point
+// 128-bit quadruple-precision floating point
+// Not Implemented
+
+// EncodeFixedOpaque treats the passed byte slice as opaque data of a fixed
+// size and writes the XDR encoded representation of it to the encapsulated
+// writer. It returns the number of bytes written.
+//
+// A MarshalError with an error code of ErrIO is returned if writing the data
+// fails.
+//
+// Reference:
+// RFC Section 4.9 - Fixed-Length Opaque Data
+// Fixed-length uninterpreted data zero-padded to a multiple of four
+func (enc *Encoder) EncodeFixedOpaque(v []byte) (int, error) {
+ l := len(v)
+ pad := (4 - (l % 4)) % 4
+
+ // Write the actual bytes.
+ n, err := enc.w.Write(v)
+ if err != nil {
+ msg := fmt.Sprintf(errIOEncode, err.Error(), len(v))
+ err := marshalError("EncodeFixedOpaque", ErrIO, msg, v[:n], err)
+ return n, err
+ }
+
+ // Write any padding if needed.
+ if pad > 0 {
+ b := make([]byte, pad)
+ n2, err := enc.w.Write(b)
+ n += n2
+ if err != nil {
+ written := make([]byte, l+n2)
+ copy(written, v)
+ copy(written[l:], b[:n2])
+ msg := fmt.Sprintf(errIOEncode, err.Error(), l+pad)
+ err := marshalError("EncodeFixedOpaque", ErrIO, msg,
+ written, err)
+ return n, err
+ }
+ }
+
+ return n, nil
+}
+
+// EncodeOpaque treats the passed byte slice as opaque data of a variable
+// size and writes the XDR encoded representation of it to the encapsulated
+// writer. It returns the number of bytes written.
+//
+// A MarshalError with an error code of ErrIO is returned if writing the data
+// fails.
+//
+// Reference:
+// RFC Section 4.10 - Variable-Length Opaque Data
+// Unsigned integer length followed by fixed opaque data of that length
+func (enc *Encoder) EncodeOpaque(v []byte) (int, error) {
+ // Length of opaque data.
+ n, err := enc.EncodeUint(uint32(len(v)))
+ if err != nil {
+ return n, err
+ }
+
+ n2, err := enc.EncodeFixedOpaque(v)
+ n += n2
+ return n, err
+}
+
+// EncodeString writes the XDR encoded representation of the passed string
+// to the encapsulated writer and returns the number of bytes written.
+// Character encoding is assumed to be UTF-8 and therefore ASCII compatible. If
+// the underlying character encoding is not compatible with this assumption, the
+// data can instead be written as variable-length opaque data (EncodeOpaque) and
+// manually converted as needed.
+//
+// A MarshalError with an error code of ErrIO is returned if writing the data
+// fails.
+//
+// Reference:
+// RFC Section 4.11 - String
+// Unsigned integer length followed by bytes zero-padded to a multiple of four
+func (enc *Encoder) EncodeString(v string) (int, error) {
+ // Length of string.
+ n, err := enc.EncodeUint(uint32(len(v)))
+ if err != nil {
+ return n, err
+ }
+
+ n2, err := enc.EncodeFixedOpaque([]byte(v))
+ n += n2
+ return n, err
+}
+
+// encodeFixedArray writes the XDR encoded representation of each element
+// in the passed array represented by the reflection value to the encapsulated
+// writer and returns the number of bytes written. The ignoreOpaque flag
+// controls whether or not uint8 (byte) elements should be encoded individually
+// or as a fixed sequence of opaque data.
+//
+// A MarshalError is returned if any issues are encountered while encoding
+// the array elements.
+//
+// Reference:
+// RFC Section 4.12 - Fixed-Length Array
+// Individually XDR encoded array elements
+func (enc *Encoder) encodeFixedArray(v reflect.Value, ignoreOpaque bool) (int, error) {
+ // Treat [#]byte (byte is alias for uint8) as opaque data unless ignored.
+ if !ignoreOpaque && v.Type().Elem().Kind() == reflect.Uint8 {
+ // Create a slice of the underlying array for better efficiency
+ // when possible. Can't create a slice of an unaddressable
+ // value.
+ if v.CanAddr() {
+ return enc.EncodeFixedOpaque(v.Slice(0, v.Len()).Bytes())
+ }
+
+ // When the underlying array isn't addressable fall back to
+ // copying the array into a new slice. This is rather ugly, but
+ // the inability to create a constant slice from an
+ // unaddressable array is a limitation of Go.
+ slice := make([]byte, v.Len(), v.Len())
+ reflect.Copy(reflect.ValueOf(slice), v)
+ return enc.EncodeFixedOpaque(slice)
+ }
+
+ // Encode each array element.
+ var n int
+ for i := 0; i < v.Len(); i++ {
+ n2, err := enc.encode(v.Index(i))
+ n += n2
+ if err != nil {
+ return n, err
+ }
+ }
+
+ return n, nil
+}
+
+// encodeArray writes an XDR encoded integer representing the number of
+// elements in the passed slice represented by the reflection value followed by
+// the XDR encoded representation of each element in slice to the encapsulated
+// writer and returns the number of bytes written. The ignoreOpaque flag
+// controls whether or not uint8 (byte) elements should be encoded individually
+// or as a variable sequence of opaque data.
+//
+// A MarshalError is returned if any issues are encountered while encoding
+// the array elements.
+//
+// Reference:
+// RFC Section 4.13 - Variable-Length Array
+// Unsigned integer length followed by individually XDR encoded array elements
+func (enc *Encoder) encodeArray(v reflect.Value, ignoreOpaque bool) (int, error) {
+ numItems := uint32(v.Len())
+ n, err := enc.EncodeUint(numItems)
+ if err != nil {
+ return n, err
+ }
+
+ n2, err := enc.encodeFixedArray(v, ignoreOpaque)
+ n += n2
+ return n, err
+}
+
+// encodeStruct writes an XDR encoded representation of each value in the
+// exported fields of the struct represented by the passed reflection value to
+// the encapsulated writer and returns the number of bytes written. Pointers
+// are automatically indirected through arbitrary depth to encode the actual
+// value pointed to.
+//
+// A MarshalError is returned if any issues are encountered while encoding
+// the elements.
+//
+// Reference:
+// RFC Section 4.14 - Structure
+// XDR encoded elements in the order of their declaration in the struct
+func (enc *Encoder) encodeStruct(v reflect.Value) (int, error) {
+ var n int
+ vt := v.Type()
+ for i := 0; i < v.NumField(); i++ {
+ // Skip unexported fields and indirect through pointers.
+ vtf := vt.Field(i)
+ if vtf.PkgPath != "" {
+ continue
+ }
+ vf := v.Field(i)
+ vf = enc.indirect(vf)
+
+ // Handle non-opaque data to []uint8 and [#]uint8 based on struct tag.
+ tag := vtf.Tag.Get("xdropaque")
+ if tag == "false" {
+ switch vf.Kind() {
+ case reflect.Slice:
+ n2, err := enc.encodeArray(vf, true)
+ n += n2
+ if err != nil {
+ return n, err
+ }
+ continue
+
+ case reflect.Array:
+ n2, err := enc.encodeFixedArray(vf, true)
+ n += n2
+ if err != nil {
+ return n, err
+ }
+ continue
+ }
+ }
+
+ // Encode each struct field.
+ n2, err := enc.encode(vf)
+ n += n2
+ if err != nil {
+ return n, err
+ }
+ }
+
+ return n, nil
+}
+
+// RFC Section 4.15 - Discriminated Union
+// RFC Section 4.16 - Void
+// RFC Section 4.17 - Constant
+// RFC Section 4.18 - Typedef
+// RFC Section 4.19 - Optional data
+// RFC Sections 4.15 though 4.19 only apply to the data specification language
+// which is not implemented by this package. In the case of discriminated
+// unions, struct tags are used to perform a similar function.
+
+// encodeMap treats the map represented by the passed reflection value as a
+// variable-length array of 2-element structures whose fields are of the same
+// type as the map keys and elements and writes its XDR encoded representation
+// to the encapsulated writer. It returns the number of bytes written.
+//
+// A MarshalError is returned if any issues are encountered while encoding
+// the elements.
+func (enc *Encoder) encodeMap(v reflect.Value) (int, error) {
+ // Number of elements.
+ n, err := enc.EncodeUint(uint32(v.Len()))
+ if err != nil {
+ return n, err
+ }
+
+ // Encode each key and value according to their type.
+ for _, key := range v.MapKeys() {
+ n2, err := enc.encode(key)
+ n += n2
+ if err != nil {
+ return n, err
+ }
+
+ n2, err = enc.encode(v.MapIndex(key))
+ n += n2
+ if err != nil {
+ return n, err
+ }
+ }
+
+ return n, nil
+}
+
+// encodeInterface examines the interface represented by the passed reflection
+// value to detect whether it is an interface that can be encoded if it is,
+// extracts the underlying value to pass back into the encode function for
+// encoding according to its type.
+//
+// A MarshalError is returned if any issues are encountered while encoding
+// the interface.
+func (enc *Encoder) encodeInterface(v reflect.Value) (int, error) {
+ if v.IsNil() || !v.CanInterface() {
+ msg := fmt.Sprintf("can't encode nil interface")
+ err := marshalError("encodeInterface", ErrNilInterface, msg,
+ nil, nil)
+ return 0, err
+ }
+
+ // Extract underlying value from the interface and indirect through pointers.
+ ve := reflect.ValueOf(v.Interface())
+ ve = enc.indirect(ve)
+ return enc.encode(ve)
+}
+
+// encode is the main workhorse for marshalling via reflection. It uses
+// the passed reflection value to choose the XDR primitives to encode into
+// the encapsulated writer and returns the number of bytes written. It is a
+// recursive function, so cyclic data structures are not supported and will
+// result in an infinite loop.
+func (enc *Encoder) encode(v reflect.Value) (int, error) {
+ if !v.IsValid() {
+ msg := fmt.Sprintf("type '%s' is not valid", v.Kind().String())
+ err := marshalError("encode", ErrUnsupportedType, msg, nil, nil)
+ return 0, err
+ }
+
+ // Indirect through pointers to get at the concrete value.
+ ve := enc.indirect(v)
+
+ // Handle time.Time values by encoding them as an RFC3339 formatted
+ // string with nanosecond precision. Check the type string before
+ // doing a full blown conversion to interface and type assertion since
+ // checking a string is much quicker.
+ if ve.Type().String() == "time.Time" && ve.CanInterface() {
+ viface := ve.Interface()
+ if tv, ok := viface.(time.Time); ok {
+ return enc.EncodeString(tv.Format(time.RFC3339Nano))
+ }
+ }
+
+ // Handle native Go types.
+ switch ve.Kind() {
+ case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int:
+ return enc.EncodeInt(int32(ve.Int()))
+
+ case reflect.Int64:
+ return enc.EncodeHyper(ve.Int())
+
+ case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint:
+ return enc.EncodeUint(uint32(ve.Uint()))
+
+ case reflect.Uint64:
+ return enc.EncodeUhyper(ve.Uint())
+
+ case reflect.Bool:
+ return enc.EncodeBool(ve.Bool())
+
+ case reflect.Float32:
+ return enc.EncodeFloat(float32(ve.Float()))
+
+ case reflect.Float64:
+ return enc.EncodeDouble(ve.Float())
+
+ case reflect.String:
+ return enc.EncodeString(ve.String())
+
+ case reflect.Array:
+ return enc.encodeFixedArray(ve, false)
+
+ case reflect.Slice:
+ return enc.encodeArray(ve, false)
+
+ case reflect.Struct:
+ return enc.encodeStruct(ve)
+
+ case reflect.Map:
+ return enc.encodeMap(ve)
+
+ case reflect.Interface:
+ return enc.encodeInterface(ve)
+ }
+
+ // The only unhandled types left are unsupported. At the time of this
+ // writing the only remaining unsupported types that exist are
+ // reflect.Uintptr and reflect.UnsafePointer.
+ msg := fmt.Sprintf("unsupported Go type '%s'", ve.Kind().String())
+ err := marshalError("encode", ErrUnsupportedType, msg, nil, nil)
+ return 0, err
+}
+
+// indirect dereferences pointers until it reaches a non-pointer. This allows
+// transparent encoding through arbitrary levels of indirection.
+func (enc *Encoder) indirect(v reflect.Value) reflect.Value {
+ rv := v
+ for rv.Kind() == reflect.Ptr {
+ rv = rv.Elem()
+ }
+ return rv
+}
+
+// Encode operates identically to the Marshal function with the exception of
+// using the writer associated with the Encoder for the destination of the
+// XDR-encoded data instead of a user-supplied writer. See the Marshal
+// documentation for specifics.
+func (enc *Encoder) Encode(v interface{}) (int, error) {
+ if v == nil {
+ msg := "can't marshal nil interface"
+ err := marshalError("Marshal", ErrNilInterface, msg, nil, nil)
+ return 0, err
+ }
+
+ vv := reflect.ValueOf(v)
+ vve := vv
+ for vve.Kind() == reflect.Ptr {
+ if vve.IsNil() {
+ msg := fmt.Sprintf("can't marshal nil pointer '%v'",
+ vv.Type().String())
+ err := marshalError("Marshal", ErrBadArguments, msg,
+ nil, nil)
+ return 0, err
+ }
+ vve = vve.Elem()
+ }
+
+ return enc.encode(vve)
+}
+
+// NewEncoder returns an object that can be used to manually choose fields to
+// XDR encode to the passed writer w. Typically, Marshal should be used instead
+// of manually creating an Encoder. An Encoder, along with several of its
+// methods to encode XDR primitives, is exposed so it is possible to perform
+// manual encoding of data without relying on reflection should it be necessary
+// in complex scenarios where automatic reflection-based encoding won't work.
+func NewEncoder(w io.Writer) *Encoder {
+ return &Encoder{w: w}
+}
diff --git a/vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/xdr2/error.go b/vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/xdr2/error.go
new file mode 100644
index 000000000..42079ad35
--- /dev/null
+++ b/vendor/github.com/digitalocean/go-libvirt/internal/go-xdr/xdr2/error.go
@@ -0,0 +1,177 @@
+/*
+ * Copyright (c) 2012-2014 Dave Collins <dave@davec.name>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+package xdr
+
+import "fmt"
+
+// ErrorCode identifies a kind of error.
+type ErrorCode int
+
+const (
+ // ErrBadArguments indicates arguments passed to the function are not
+ // what was expected.
+ ErrBadArguments ErrorCode = iota
+
+ // ErrUnsupportedType indicates the Go type is not a supported type for
+ // marshalling and unmarshalling XDR data.
+ ErrUnsupportedType
+
+ // ErrBadEnumValue indicates an enumeration value is not in the list of
+ // valid values.
+ ErrBadEnumValue
+
+ // ErrNotSettable indicates an interface value cannot be written to.
+ // This usually means the interface value was not passed with the &
+ // operator, but it can also happen if automatic pointer allocation
+ // fails.
+ ErrNotSettable
+
+ // ErrOverflow indicates that the data in question is too large to fit
+ // into the corresponding Go or XDR data type. For example, an integer
+ // decoded from XDR that is too large to fit into a target type of int8,
+ // or opaque data that exceeds the max length of a Go slice.
+ ErrOverflow
+
+ // ErrNilInterface indicates an interface with no concrete type
+ // information was encountered. Type information is necessary to
+ // perform mapping between XDR and Go types.
+ ErrNilInterface
+
+ // ErrIO indicates an error was encountered while reading or writing to
+ // an io.Reader or io.Writer, respectively. The actual underlying error
+ // will be available via the Err field of the MarshalError or
+ // UnmarshalError struct.
+ ErrIO
+
+ // ErrParseTime indicates an error was encountered while parsing an
+ // RFC3339 formatted time value. The actual underlying error will be
+ // available via the Err field of the UnmarshalError struct.
+ ErrParseTime
+)
+
+// Map of ErrorCode values back to their constant names for pretty printing.
+var errorCodeStrings = map[ErrorCode]string{
+ ErrBadArguments: "ErrBadArguments",
+ ErrUnsupportedType: "ErrUnsupportedType",
+ ErrBadEnumValue: "ErrBadEnumValue",
+ ErrNotSettable: "ErrNotSettable",
+ ErrOverflow: "ErrOverflow",
+ ErrNilInterface: "ErrNilInterface",
+ ErrIO: "ErrIO",
+ ErrParseTime: "ErrParseTime",
+}
+
+// String returns the ErrorCode as a human-readable name.
+func (e ErrorCode) String() string {
+ if s := errorCodeStrings[e]; s != "" {
+ return s
+ }
+ return fmt.Sprintf("Unknown ErrorCode (%d)", e)
+}
+
+// UnmarshalError describes a problem encountered while unmarshaling data.
+// Some potential issues are unsupported Go types, attempting to decode a value
+// which is too large to fit into a specified Go type, and exceeding max slice
+// limitations.
+type UnmarshalError struct {
+ ErrorCode ErrorCode // Describes the kind of error
+ Func string // Function name
+ Value interface{} // Value actually parsed where appropriate
+ Description string // Human readable description of the issue
+ Err error // The underlying error for IO errors
+}
+
+// Error satisfies the error interface and prints human-readable errors.
+func (e *UnmarshalError) Error() string {
+ switch e.ErrorCode {
+ case ErrBadEnumValue, ErrOverflow, ErrIO, ErrParseTime:
+ return fmt.Sprintf("xdr:%s: %s - read: '%v'", e.Func,
+ e.Description, e.Value)
+ }
+ return fmt.Sprintf("xdr:%s: %s", e.Func, e.Description)
+}
+
+// unmarshalError creates an error given a set of arguments and will copy byte
+// slices into the Value field since they might otherwise be changed from from
+// the original value.
+func unmarshalError(f string, c ErrorCode, desc string, v interface{}, err error) *UnmarshalError {
+ e := &UnmarshalError{ErrorCode: c, Func: f, Description: desc, Err: err}
+ switch t := v.(type) {
+ case []byte:
+ slice := make([]byte, len(t))
+ copy(slice, t)
+ e.Value = slice
+ default:
+ e.Value = v
+ }
+
+ return e
+}
+
+// IsIO returns a boolean indicating whether the error is known to report that
+// the underlying reader or writer encountered an ErrIO.
+func IsIO(err error) bool {
+ switch e := err.(type) {
+ case *UnmarshalError:
+ return e.ErrorCode == ErrIO
+ case *MarshalError:
+ return e.ErrorCode == ErrIO
+ }
+ return false
+}
+
+// MarshalError describes a problem encountered while marshaling data.
+// Some potential issues are unsupported Go types, attempting to encode more
+// opaque data than can be represented by a single opaque XDR entry, and
+// exceeding max slice limitations.
+type MarshalError struct {
+ ErrorCode ErrorCode // Describes the kind of error
+ Func string // Function name
+ Value interface{} // Value actually parsed where appropriate
+ Description string // Human readable description of the issue
+ Err error // The underlying error for IO errors
+}
+
+// Error satisfies the error interface and prints human-readable errors.
+func (e *MarshalError) Error() string {
+ switch e.ErrorCode {
+ case ErrIO:
+ return fmt.Sprintf("xdr:%s: %s - wrote: '%v'", e.Func,
+ e.Description, e.Value)
+ case ErrBadEnumValue:
+ return fmt.Sprintf("xdr:%s: %s - value: '%v'", e.Func,
+ e.Description, e.Value)
+ }
+ return fmt.Sprintf("xdr:%s: %s", e.Func, e.Description)
+}
+
+// marshalError creates an error given a set of arguments and will copy byte
+// slices into the Value field since they might otherwise be changed from from
+// the original value.
+func marshalError(f string, c ErrorCode, desc string, v interface{}, err error) *MarshalError {
+ e := &MarshalError{ErrorCode: c, Func: f, Description: desc, Err: err}
+ switch t := v.(type) {
+ case []byte:
+ slice := make([]byte, len(t))
+ copy(slice, t)
+ e.Value = slice
+ default:
+ e.Value = v
+ }
+
+ return e
+}