[libvirt] Tunnelled migration

At long last, now that the stream stuff is committed to the tree, I can repost the tunnelled migration patches. Note that these patches will conflict in some places with danpb's previously posted "PEER2PEER" patches, but it should be easy to resolve the differences.

This is necessary for the dispatch functions to be able to use streams in the future. Signed-off-by: Chris Lalancette <clalance@redhat.com> --- daemon/dispatch.c | 2 +- daemon/remote.c | 208 +++++++++++++++++++++++++++++++---- daemon/remote.h | 1 + daemon/remote_dispatch_prototypes.h | 146 ++++++++++++++++++++++++ daemon/remote_generate_stubs.pl | 1 + 5 files changed, 333 insertions(+), 25 deletions(-) diff --git a/daemon/dispatch.c b/daemon/dispatch.c index ae4f60d..f024900 100644 --- a/daemon/dispatch.c +++ b/daemon/dispatch.c @@ -503,7 +503,7 @@ remoteDispatchClientCall (struct qemud_server *server, * * 'conn', 'rerr', 'args and 'ret' */ - rv = (data->fn)(server, client, conn, &rerr, &args, &ret); + rv = (data->fn)(server, client, conn, &msg->hdr, &rerr, &args, &ret); virMutexLock(&server->lock); virMutexLock(&client->lock); diff --git a/daemon/remote.c b/daemon/remote.c index 6d4cc1c..ba97379 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -129,6 +129,7 @@ static int remoteDispatchOpen (struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, struct remote_open_args *args, void *ret ATTRIBUTE_UNUSED) { @@ -176,6 +177,7 @@ static int remoteDispatchClose (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn ATTRIBUTE_UNUSED, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr ATTRIBUTE_UNUSED, void *args ATTRIBUTE_UNUSED, void *ret ATTRIBUTE_UNUSED) { @@ -193,6 +195,7 @@ static int remoteDispatchSupportsFeature (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_supports_feature_args *args, remote_supports_feature_ret *ret) { @@ -210,6 +213,7 @@ static int remoteDispatchGetType (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_get_type_ret *ret) { @@ -237,6 +241,7 @@ static int remoteDispatchGetVersion (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_get_version_ret *ret) @@ -256,6 +261,7 @@ static int remoteDispatchGetHostname (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_get_hostname_ret *ret) @@ -276,6 +282,7 @@ static int remoteDispatchGetUri (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_get_uri_ret *ret) @@ -297,6 +304,7 @@ static int remoteDispatchGetMaxVcpus (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_get_max_vcpus_args *args, remote_get_max_vcpus_ret *ret) @@ -317,6 +325,7 @@ static int remoteDispatchNodeGetInfo (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_node_get_info_ret *ret) @@ -344,6 +353,7 @@ static int remoteDispatchGetCapabilities (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_get_capabilities_ret *ret) @@ -364,6 +374,7 @@ static int remoteDispatchNodeGetCellsFreeMemory (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_node_get_cells_free_memory_args *args, remote_node_get_cells_free_memory_ret *ret) @@ -401,6 +412,7 @@ static int remoteDispatchNodeGetFreeMemory (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_node_get_free_memory_ret *ret) @@ -421,6 +433,7 @@ static int remoteDispatchDomainGetSchedulerType (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_get_scheduler_type_args *args, remote_domain_get_scheduler_type_ret *ret) @@ -452,6 +465,7 @@ static int remoteDispatchDomainGetSchedulerParameters (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_get_scheduler_parameters_args *args, remote_domain_get_scheduler_parameters_ret *ret) @@ -535,6 +549,7 @@ static int remoteDispatchDomainSetSchedulerParameters (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_set_scheduler_parameters_args *args, void *ret ATTRIBUTE_UNUSED) @@ -600,6 +615,7 @@ static int remoteDispatchDomainBlockStats (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_block_stats_args *args, remote_domain_block_stats_ret *ret) @@ -635,6 +651,7 @@ static int remoteDispatchDomainInterfaceStats (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_interface_stats_args *args, remote_domain_interface_stats_ret *ret) @@ -673,6 +690,7 @@ static int remoteDispatchDomainBlockPeek (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_block_peek_args *args, remote_domain_block_peek_ret *ret) @@ -725,6 +743,7 @@ static int remoteDispatchDomainMemoryPeek (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_memory_peek_args *args, remote_domain_memory_peek_ret *ret) @@ -775,6 +794,7 @@ static int remoteDispatchDomainAttachDevice (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_attach_device_args *args, void *ret ATTRIBUTE_UNUSED) @@ -800,6 +820,7 @@ static int remoteDispatchDomainCreate (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_create_args *args, void *ret ATTRIBUTE_UNUSED) @@ -825,6 +846,7 @@ static int remoteDispatchDomainCreateXml (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_create_xml_args *args, remote_domain_create_xml_ret *ret) @@ -847,6 +869,7 @@ static int remoteDispatchDomainDefineXml (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_define_xml_args *args, remote_domain_define_xml_ret *ret) @@ -869,6 +892,7 @@ static int remoteDispatchDomainDestroy (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_destroy_args *args, void *ret ATTRIBUTE_UNUSED) @@ -894,6 +918,7 @@ static int remoteDispatchDomainDetachDevice (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_detach_device_args *args, void *ret ATTRIBUTE_UNUSED) @@ -920,6 +945,7 @@ static int remoteDispatchDomainDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_dump_xml_args *args, remote_domain_dump_xml_ret *ret) @@ -947,6 +973,7 @@ static int remoteDispatchDomainXmlFromNative (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_xml_from_native_args *args, remote_domain_xml_from_native_ret *ret) @@ -967,6 +994,7 @@ static int remoteDispatchDomainXmlToNative (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_xml_to_native_args *args, remote_domain_xml_to_native_ret *ret) @@ -988,6 +1016,7 @@ static int remoteDispatchDomainGetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_get_autostart_args *args, remote_domain_get_autostart_ret *ret) @@ -1013,6 +1042,7 @@ static int remoteDispatchDomainGetInfo (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_get_info_args *args, remote_domain_get_info_ret *ret) @@ -1047,6 +1077,7 @@ static int remoteDispatchDomainGetMaxMemory (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_get_max_memory_args *args, remote_domain_get_max_memory_ret *ret) @@ -1073,6 +1104,7 @@ static int remoteDispatchDomainGetMaxVcpus (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_get_max_vcpus_args *args, remote_domain_get_max_vcpus_ret *ret) @@ -1099,6 +1131,7 @@ static int remoteDispatchDomainGetSecurityLabel(struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_get_security_label_args *args, remote_domain_get_security_label_ret *ret) @@ -1136,6 +1169,7 @@ static int remoteDispatchNodeGetSecurityModel(struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_node_get_security_model_ret *ret) @@ -1169,6 +1203,7 @@ static int remoteDispatchDomainGetOsType (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_get_os_type_args *args, remote_domain_get_os_type_ret *ret) @@ -1196,6 +1231,7 @@ static int remoteDispatchDomainGetVcpus (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_get_vcpus_args *args, remote_domain_get_vcpus_ret *ret) @@ -1276,6 +1312,7 @@ static int remoteDispatchDomainMigratePrepare (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_migrate_prepare_args *args, remote_domain_migrate_prepare_ret *ret) @@ -1324,6 +1361,7 @@ static int remoteDispatchDomainMigratePerform (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_migrate_perform_args *args, void *ret ATTRIBUTE_UNUSED) @@ -1358,6 +1396,7 @@ static int remoteDispatchDomainMigrateFinish (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_migrate_finish_args *args, remote_domain_migrate_finish_ret *ret) @@ -1384,6 +1423,7 @@ static int remoteDispatchDomainMigratePrepare2 (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_migrate_prepare2_args *args, remote_domain_migrate_prepare2_ret *ret) @@ -1428,6 +1468,7 @@ static int remoteDispatchDomainMigrateFinish2 (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_migrate_finish2_args *args, remote_domain_migrate_finish2_ret *ret) @@ -1455,6 +1496,7 @@ static int remoteDispatchListDefinedDomains (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_list_defined_domains_args *args, remote_list_defined_domains_ret *ret) @@ -1488,6 +1530,7 @@ static int remoteDispatchDomainLookupById (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_lookup_by_id_args *args, remote_domain_lookup_by_id_ret *ret) @@ -1509,6 +1552,7 @@ static int remoteDispatchDomainLookupByName (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_lookup_by_name_args *args, remote_domain_lookup_by_name_ret *ret) @@ -1530,6 +1574,7 @@ static int remoteDispatchDomainLookupByUuid (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_lookup_by_uuid_args *args, remote_domain_lookup_by_uuid_ret *ret) @@ -1551,6 +1596,7 @@ static int remoteDispatchNumOfDefinedDomains (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_num_of_defined_domains_ret *ret) @@ -1569,6 +1615,7 @@ static int remoteDispatchDomainPinVcpu (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_pin_vcpu_args *args, void *ret ATTRIBUTE_UNUSED) @@ -1604,6 +1651,7 @@ static int remoteDispatchDomainReboot (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_reboot_args *args, void *ret ATTRIBUTE_UNUSED) @@ -1629,6 +1677,7 @@ static int remoteDispatchDomainRestore (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_restore_args *args, void *ret ATTRIBUTE_UNUSED) @@ -1646,6 +1695,7 @@ static int remoteDispatchDomainResume (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_resume_args *args, void *ret ATTRIBUTE_UNUSED) @@ -1671,6 +1721,7 @@ static int remoteDispatchDomainSave (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_save_args *args, void *ret ATTRIBUTE_UNUSED) @@ -1696,6 +1747,7 @@ static int remoteDispatchDomainCoreDump (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_core_dump_args *args, void *ret ATTRIBUTE_UNUSED) @@ -1721,6 +1773,7 @@ static int remoteDispatchDomainSetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_set_autostart_args *args, void *ret ATTRIBUTE_UNUSED) @@ -1746,6 +1799,7 @@ static int remoteDispatchDomainSetMaxMemory (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_set_max_memory_args *args, void *ret ATTRIBUTE_UNUSED) @@ -1771,6 +1825,7 @@ static int remoteDispatchDomainSetMemory (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_set_memory_args *args, void *ret ATTRIBUTE_UNUSED) @@ -1796,6 +1851,7 @@ static int remoteDispatchDomainSetVcpus (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_set_vcpus_args *args, void *ret ATTRIBUTE_UNUSED) @@ -1821,6 +1877,7 @@ static int remoteDispatchDomainShutdown (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_shutdown_args *args, void *ret ATTRIBUTE_UNUSED) @@ -1846,6 +1903,7 @@ static int remoteDispatchDomainSuspend (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_suspend_args *args, void *ret ATTRIBUTE_UNUSED) @@ -1871,6 +1929,7 @@ static int remoteDispatchDomainUndefine (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_domain_undefine_args *args, void *ret ATTRIBUTE_UNUSED) @@ -1896,6 +1955,7 @@ static int remoteDispatchListDefinedNetworks (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_list_defined_networks_args *args, remote_list_defined_networks_ret *ret) @@ -1929,6 +1989,7 @@ static int remoteDispatchListDomains (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_list_domains_args *args, remote_list_domains_ret *ret) @@ -1961,6 +2022,7 @@ static int remoteDispatchListNetworks (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_list_networks_args *args, remote_list_networks_ret *ret) @@ -1994,6 +2056,7 @@ static int remoteDispatchNetworkCreate (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_network_create_args *args, void *ret ATTRIBUTE_UNUSED) @@ -2019,6 +2082,7 @@ static int remoteDispatchNetworkCreateXml (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_network_create_xml_args *args, remote_network_create_xml_ret *ret) @@ -2040,6 +2104,7 @@ static int remoteDispatchNetworkDefineXml (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_network_define_xml_args *args, remote_network_define_xml_ret *ret) @@ -2061,6 +2126,7 @@ static int remoteDispatchNetworkDestroy (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_network_destroy_args *args, void *ret ATTRIBUTE_UNUSED) @@ -2086,6 +2152,7 @@ static int remoteDispatchNetworkDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_network_dump_xml_args *args, remote_network_dump_xml_ret *ret) @@ -2113,6 +2180,7 @@ static int remoteDispatchNetworkGetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_network_get_autostart_args *args, remote_network_get_autostart_ret *ret) @@ -2138,6 +2206,7 @@ static int remoteDispatchNetworkGetBridgeName (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_network_get_bridge_name_args *args, remote_network_get_bridge_name_ret *ret) @@ -2165,6 +2234,7 @@ static int remoteDispatchNetworkLookupByName (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_network_lookup_by_name_args *args, remote_network_lookup_by_name_ret *ret) @@ -2186,6 +2256,7 @@ static int remoteDispatchNetworkLookupByUuid (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_network_lookup_by_uuid_args *args, remote_network_lookup_by_uuid_ret *ret) @@ -2207,6 +2278,7 @@ static int remoteDispatchNetworkSetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_network_set_autostart_args *args, void *ret ATTRIBUTE_UNUSED) @@ -2232,6 +2304,7 @@ static int remoteDispatchNetworkUndefine (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_network_undefine_args *args, void *ret ATTRIBUTE_UNUSED) @@ -2257,6 +2330,7 @@ static int remoteDispatchNumOfDefinedNetworks (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_num_of_defined_networks_ret *ret) @@ -2275,6 +2349,7 @@ static int remoteDispatchNumOfDomains (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_num_of_domains_ret *ret) @@ -2293,6 +2368,7 @@ static int remoteDispatchNumOfNetworks (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_num_of_networks_ret *ret) @@ -2313,6 +2389,7 @@ static int remoteDispatchNumOfInterfaces (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_num_of_interfaces_ret *ret) @@ -2331,6 +2408,7 @@ static int remoteDispatchListInterfaces (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_list_interfaces_args *args, remote_list_interfaces_ret *ret) @@ -2364,6 +2442,7 @@ static int remoteDispatchNumOfDefinedInterfaces (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_num_of_defined_interfaces_ret *ret) @@ -2382,6 +2461,7 @@ static int remoteDispatchListDefinedInterfaces (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_list_defined_interfaces_args *args, remote_list_defined_interfaces_ret *ret) @@ -2415,6 +2495,7 @@ static int remoteDispatchInterfaceLookupByName (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_interface_lookup_by_name_args *args, remote_interface_lookup_by_name_ret *ret) @@ -2436,6 +2517,7 @@ static int remoteDispatchInterfaceLookupByMacString (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_interface_lookup_by_mac_string_args *args, remote_interface_lookup_by_mac_string_ret *ret) @@ -2457,6 +2539,7 @@ static int remoteDispatchInterfaceGetXmlDesc (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_interface_get_xml_desc_args *args, remote_interface_get_xml_desc_ret *ret) @@ -2484,6 +2567,7 @@ static int remoteDispatchInterfaceDefineXml (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_interface_define_xml_args *args, remote_interface_define_xml_ret *ret) @@ -2503,11 +2587,12 @@ remoteDispatchInterfaceDefineXml (struct qemud_server *server ATTRIBUTE_UNUSED, static int remoteDispatchInterfaceUndefine (struct qemud_server *server ATTRIBUTE_UNUSED, - struct qemud_client *client ATTRIBUTE_UNUSED, - virConnectPtr conn, - remote_error *rerr, - remote_interface_undefine_args *args, - void *ret ATTRIBUTE_UNUSED) + struct qemud_client *client ATTRIBUTE_UNUSED, + virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, + remote_error *rerr, + remote_interface_undefine_args *args, + void *ret ATTRIBUTE_UNUSED) { virInterfacePtr iface; @@ -2528,11 +2613,12 @@ remoteDispatchInterfaceUndefine (struct qemud_server *server ATTRIBUTE_UNUSED, static int remoteDispatchInterfaceCreate (struct qemud_server *server ATTRIBUTE_UNUSED, - struct qemud_client *client ATTRIBUTE_UNUSED, - virConnectPtr conn, - remote_error *rerr, - remote_interface_create_args *args, - void *ret ATTRIBUTE_UNUSED) + struct qemud_client *client ATTRIBUTE_UNUSED, + virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, + remote_error *rerr, + remote_interface_create_args *args, + void *ret ATTRIBUTE_UNUSED) { virInterfacePtr iface; @@ -2553,11 +2639,12 @@ remoteDispatchInterfaceCreate (struct qemud_server *server ATTRIBUTE_UNUSED, static int remoteDispatchInterfaceDestroy (struct qemud_server *server ATTRIBUTE_UNUSED, - struct qemud_client *client ATTRIBUTE_UNUSED, - virConnectPtr conn, - remote_error *rerr, - remote_interface_destroy_args *args, - void *ret ATTRIBUTE_UNUSED) + struct qemud_client *client ATTRIBUTE_UNUSED, + virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, + remote_error *rerr, + remote_interface_destroy_args *args, + void *ret ATTRIBUTE_UNUSED) { virInterfacePtr iface; @@ -2582,6 +2669,7 @@ static int remoteDispatchAuthList (struct qemud_server *server, struct qemud_client *client, virConnectPtr conn ATTRIBUTE_UNUSED, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_auth_list_ret *ret) @@ -2640,6 +2728,7 @@ static int remoteDispatchAuthSaslInit (struct qemud_server *server, struct qemud_client *client, virConnectPtr conn ATTRIBUTE_UNUSED, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_auth_sasl_init_ret *ret) @@ -2897,6 +2986,7 @@ static int remoteDispatchAuthSaslStart (struct qemud_server *server, struct qemud_client *client, virConnectPtr conn ATTRIBUTE_UNUSED, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_auth_sasl_start_args *args, remote_auth_sasl_start_ret *ret) @@ -2984,6 +3074,7 @@ static int remoteDispatchAuthSaslStep (struct qemud_server *server, struct qemud_client *client, virConnectPtr conn ATTRIBUTE_UNUSED, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_auth_sasl_step_args *args, remote_auth_sasl_step_ret *ret) @@ -3073,6 +3164,7 @@ static int remoteDispatchAuthSaslInit (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn ATTRIBUTE_UNUSED, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_auth_sasl_init_ret *ret ATTRIBUTE_UNUSED) @@ -3086,6 +3178,7 @@ static int remoteDispatchAuthSaslStart (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn ATTRIBUTE_UNUSED, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_auth_sasl_start_args *args ATTRIBUTE_UNUSED, remote_auth_sasl_start_ret *ret ATTRIBUTE_UNUSED) @@ -3099,6 +3192,7 @@ static int remoteDispatchAuthSaslStep (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn ATTRIBUTE_UNUSED, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_auth_sasl_step_args *args ATTRIBUTE_UNUSED, remote_auth_sasl_step_ret *ret ATTRIBUTE_UNUSED) @@ -3115,6 +3209,7 @@ static int remoteDispatchAuthPolkit (struct qemud_server *server, struct qemud_client *client, virConnectPtr conn ATTRIBUTE_UNUSED, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_auth_polkit_ret *ret) @@ -3188,6 +3283,7 @@ static int remoteDispatchAuthPolkit (struct qemud_server *server, struct qemud_client *client, virConnectPtr conn ATTRIBUTE_UNUSED, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_auth_polkit_ret *ret) @@ -3300,6 +3396,7 @@ static int remoteDispatchAuthPolkit (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn ATTRIBUTE_UNUSED, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_auth_polkit_ret *ret ATTRIBUTE_UNUSED) @@ -3320,6 +3417,7 @@ static int remoteDispatchListDefinedStoragePools (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_list_defined_storage_pools_args *args, remote_list_defined_storage_pools_ret *ret) @@ -3353,6 +3451,7 @@ static int remoteDispatchListStoragePools (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_list_storage_pools_args *args, remote_list_storage_pools_ret *ret) @@ -3386,6 +3485,7 @@ static int remoteDispatchFindStoragePoolSources (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_find_storage_pool_sources_args *args, remote_find_storage_pool_sources_ret *ret) @@ -3408,6 +3508,7 @@ static int remoteDispatchStoragePoolCreate (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_pool_create_args *args, void *ret ATTRIBUTE_UNUSED) @@ -3433,6 +3534,7 @@ static int remoteDispatchStoragePoolCreateXml (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_pool_create_xml_args *args, remote_storage_pool_create_xml_ret *ret) @@ -3454,6 +3556,7 @@ static int remoteDispatchStoragePoolDefineXml (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_pool_define_xml_args *args, remote_storage_pool_define_xml_ret *ret) @@ -3475,6 +3578,7 @@ static int remoteDispatchStoragePoolBuild (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_pool_build_args *args, void *ret ATTRIBUTE_UNUSED) @@ -3501,6 +3605,7 @@ static int remoteDispatchStoragePoolDestroy (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_pool_destroy_args *args, void *ret ATTRIBUTE_UNUSED) @@ -3526,6 +3631,7 @@ static int remoteDispatchStoragePoolDelete (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_pool_delete_args *args, void *ret ATTRIBUTE_UNUSED) @@ -3551,6 +3657,7 @@ static int remoteDispatchStoragePoolRefresh (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_pool_refresh_args *args, void *ret ATTRIBUTE_UNUSED) @@ -3576,6 +3683,7 @@ static int remoteDispatchStoragePoolGetInfo (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_pool_get_info_args *args, remote_storage_pool_get_info_ret *ret) @@ -3609,6 +3717,7 @@ static int remoteDispatchStoragePoolDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_pool_dump_xml_args *args, remote_storage_pool_dump_xml_ret *ret) @@ -3636,6 +3745,7 @@ static int remoteDispatchStoragePoolGetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_pool_get_autostart_args *args, remote_storage_pool_get_autostart_ret *ret) @@ -3662,6 +3772,7 @@ static int remoteDispatchStoragePoolLookupByName (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_pool_lookup_by_name_args *args, remote_storage_pool_lookup_by_name_ret *ret) @@ -3683,6 +3794,7 @@ static int remoteDispatchStoragePoolLookupByUuid (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_pool_lookup_by_uuid_args *args, remote_storage_pool_lookup_by_uuid_ret *ret) @@ -3704,6 +3816,7 @@ static int remoteDispatchStoragePoolLookupByVolume (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_pool_lookup_by_volume_args *args, remote_storage_pool_lookup_by_volume_ret *ret) @@ -3733,6 +3846,7 @@ static int remoteDispatchStoragePoolSetAutostart (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_pool_set_autostart_args *args, void *ret ATTRIBUTE_UNUSED) @@ -3758,6 +3872,7 @@ static int remoteDispatchStoragePoolUndefine (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_pool_undefine_args *args, void *ret ATTRIBUTE_UNUSED) @@ -3783,6 +3898,7 @@ static int remoteDispatchNumOfStoragePools (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_num_of_storage_pools_ret *ret) @@ -3801,6 +3917,7 @@ static int remoteDispatchNumOfDefinedStoragePools (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, void *args ATTRIBUTE_UNUSED, remote_num_of_defined_storage_pools_ret *ret) @@ -3819,6 +3936,7 @@ static int remoteDispatchStoragePoolListVolumes (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_pool_list_volumes_args *args, remote_storage_pool_list_volumes_ret *ret) @@ -3862,6 +3980,7 @@ static int remoteDispatchStoragePoolNumOfVolumes (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_pool_num_of_volumes_args *args, remote_storage_pool_num_of_volumes_ret *ret) @@ -3895,6 +4014,7 @@ static int remoteDispatchStorageVolCreateXml (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_vol_create_xml_args *args, remote_storage_vol_create_xml_ret *ret) @@ -3924,6 +4044,7 @@ static int remoteDispatchStorageVolCreateXmlFrom (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_vol_create_xml_from_args *args, remote_storage_vol_create_xml_from_ret *ret) @@ -3959,6 +4080,7 @@ static int remoteDispatchStorageVolDelete (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_vol_delete_args *args, void *ret ATTRIBUTE_UNUSED) @@ -3984,6 +4106,7 @@ static int remoteDispatchStorageVolGetInfo (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_vol_get_info_args *args, remote_storage_vol_get_info_ret *ret) @@ -4016,6 +4139,7 @@ static int remoteDispatchStorageVolDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_vol_dump_xml_args *args, remote_storage_vol_dump_xml_ret *ret) @@ -4044,6 +4168,7 @@ static int remoteDispatchStorageVolGetPath (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_vol_get_path_args *args, remote_storage_vol_get_path_ret *ret) @@ -4072,6 +4197,7 @@ static int remoteDispatchStorageVolLookupByName (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_vol_lookup_by_name_args *args, remote_storage_vol_lookup_by_name_ret *ret) @@ -4101,6 +4227,7 @@ static int remoteDispatchStorageVolLookupByKey (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_vol_lookup_by_key_args *args, remote_storage_vol_lookup_by_key_ret *ret) @@ -4123,6 +4250,7 @@ static int remoteDispatchStorageVolLookupByPath (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_storage_vol_lookup_by_path_args *args, remote_storage_vol_lookup_by_path_ret *ret) @@ -4149,6 +4277,7 @@ static int remoteDispatchNodeNumOfDevices (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_node_num_of_devices_args *args, remote_node_num_of_devices_ret *ret) @@ -4171,6 +4300,7 @@ static int remoteDispatchNodeListDevices (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_node_list_devices_args *args, remote_node_list_devices_ret *ret) @@ -4207,6 +4337,7 @@ static int remoteDispatchNodeDeviceLookupByName (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_node_device_lookup_by_name_args *args, remote_node_device_lookup_by_name_ret *ret) @@ -4231,6 +4362,7 @@ static int remoteDispatchNodeDeviceDumpXml (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_node_device_dump_xml_args *args, remote_node_device_dump_xml_ret *ret) @@ -4260,6 +4392,7 @@ static int remoteDispatchNodeDeviceGetParent (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_node_device_get_parent_args *args, remote_node_device_get_parent_ret *ret) @@ -4302,6 +4435,7 @@ static int remoteDispatchNodeDeviceNumOfCaps (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_node_device_num_of_caps_args *args, remote_node_device_num_of_caps_ret *ret) @@ -4330,6 +4464,7 @@ static int remoteDispatchNodeDeviceListCaps (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_node_device_list_caps_args *args, remote_node_device_list_caps_ret *ret) @@ -4372,6 +4507,7 @@ static int remoteDispatchNodeDeviceDettach (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_node_device_dettach_args *args, void *ret ATTRIBUTE_UNUSED) @@ -4398,6 +4534,7 @@ static int remoteDispatchNodeDeviceReAttach (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_node_device_re_attach_args *args, void *ret ATTRIBUTE_UNUSED) @@ -4424,6 +4561,7 @@ static int remoteDispatchNodeDeviceReset (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_node_device_reset_args *args, void *ret ATTRIBUTE_UNUSED) @@ -4450,6 +4588,7 @@ static int remoteDispatchNodeDeviceCreateXml(struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_node_device_create_xml_args *args, remote_node_device_create_xml_ret *ret) @@ -4473,6 +4612,7 @@ static int remoteDispatchNodeDeviceDestroy(struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr, remote_node_device_destroy_args *args, void *ret ATTRIBUTE_UNUSED) @@ -4502,6 +4642,7 @@ static int remoteDispatchDomainEventsRegister (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr ATTRIBUTE_UNUSED, void *args ATTRIBUTE_UNUSED, remote_domain_events_register_ret *ret ATTRIBUTE_UNUSED) @@ -4521,6 +4662,7 @@ static int remoteDispatchDomainEventsDeregister (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, remote_error *rerr ATTRIBUTE_UNUSED, void *args ATTRIBUTE_UNUSED, remote_domain_events_deregister_ret *ret ATTRIBUTE_UNUSED) @@ -4595,7 +4737,9 @@ error: static int remoteDispatchNumOfSecrets (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, - virConnectPtr conn, remote_error *err, + virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, + remote_error *err, void *args ATTRIBUTE_UNUSED, remote_num_of_secrets_ret *ret) { @@ -4611,7 +4755,9 @@ remoteDispatchNumOfSecrets (struct qemud_server *server ATTRIBUTE_UNUSED, static int remoteDispatchListSecrets (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, - virConnectPtr conn, remote_error *err, + virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, + remote_error *err, remote_list_secrets_args *args, remote_list_secrets_ret *ret) { @@ -4640,7 +4786,9 @@ remoteDispatchListSecrets (struct qemud_server *server ATTRIBUTE_UNUSED, static int remoteDispatchSecretDefineXml (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, - virConnectPtr conn, remote_error *err, + virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, + remote_error *err, remote_secret_define_xml_args *args, remote_secret_define_xml_ret *ret) { @@ -4660,7 +4808,9 @@ remoteDispatchSecretDefineXml (struct qemud_server *server ATTRIBUTE_UNUSED, static int remoteDispatchSecretGetValue (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, - virConnectPtr conn, remote_error *err, + virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, + remote_error *err, remote_secret_get_value_args *args, remote_secret_get_value_ret *ret) { @@ -4690,7 +4840,9 @@ remoteDispatchSecretGetValue (struct qemud_server *server ATTRIBUTE_UNUSED, static int remoteDispatchSecretGetXmlDesc (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, - virConnectPtr conn, remote_error *err, + virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, + remote_error *err, remote_secret_get_xml_desc_args *args, remote_secret_get_xml_desc_ret *ret) { @@ -4714,7 +4866,9 @@ remoteDispatchSecretGetXmlDesc (struct qemud_server *server ATTRIBUTE_UNUSED, static int remoteDispatchSecretLookupByUuid (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, - virConnectPtr conn, remote_error *err, + virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, + remote_error *err, remote_secret_lookup_by_uuid_args *args, remote_secret_lookup_by_uuid_ret *ret) { @@ -4734,7 +4888,9 @@ remoteDispatchSecretLookupByUuid (struct qemud_server *server ATTRIBUTE_UNUSED, static int remoteDispatchSecretSetValue (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, - virConnectPtr conn, remote_error *err, + virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, + remote_error *err, remote_secret_set_value_args *args, void *ret ATTRIBUTE_UNUSED) { @@ -4759,7 +4915,9 @@ remoteDispatchSecretSetValue (struct qemud_server *server ATTRIBUTE_UNUSED, static int remoteDispatchSecretUndefine (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, - virConnectPtr conn, remote_error *err, + virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, + remote_error *err, remote_secret_undefine_args *args, void *ret ATTRIBUTE_UNUSED) { @@ -4783,7 +4941,9 @@ remoteDispatchSecretUndefine (struct qemud_server *server ATTRIBUTE_UNUSED, static int remoteDispatchSecretLookupByUsage (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, - virConnectPtr conn, remote_error *err, + virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, + remote_error *err, remote_secret_lookup_by_usage_args *args, remote_secret_lookup_by_usage_ret *ret) { diff --git a/daemon/remote.h b/daemon/remote.h index 5df601b..24e8c73 100644 --- a/daemon/remote.h +++ b/daemon/remote.h @@ -54,6 +54,7 @@ typedef union { typedef int (*dispatch_fn) (struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, dispatch_args *args, dispatch_ret *ret); diff --git a/daemon/remote_dispatch_prototypes.h b/daemon/remote_dispatch_prototypes.h index 0605542..16e8bb0 100644 --- a/daemon/remote_dispatch_prototypes.h +++ b/daemon/remote_dispatch_prototypes.h @@ -6,6 +6,7 @@ static int remoteDispatchAuthList( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_auth_list_ret *ret); @@ -13,6 +14,7 @@ static int remoteDispatchAuthPolkit( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_auth_polkit_ret *ret); @@ -20,6 +22,7 @@ static int remoteDispatchAuthSaslInit( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_auth_sasl_init_ret *ret); @@ -27,6 +30,7 @@ static int remoteDispatchAuthSaslStart( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_auth_sasl_start_args *args, remote_auth_sasl_start_ret *ret); @@ -34,6 +38,7 @@ static int remoteDispatchAuthSaslStep( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_auth_sasl_step_args *args, remote_auth_sasl_step_ret *ret); @@ -41,6 +46,7 @@ static int remoteDispatchClose( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, void *ret); @@ -48,6 +54,7 @@ static int remoteDispatchDomainAttachDevice( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_attach_device_args *args, void *ret); @@ -55,6 +62,7 @@ static int remoteDispatchDomainBlockPeek( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_block_peek_args *args, remote_domain_block_peek_ret *ret); @@ -62,6 +70,7 @@ static int remoteDispatchDomainBlockStats( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_block_stats_args *args, remote_domain_block_stats_ret *ret); @@ -69,6 +78,7 @@ static int remoteDispatchDomainCoreDump( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_core_dump_args *args, void *ret); @@ -76,6 +86,7 @@ static int remoteDispatchDomainCreate( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_create_args *args, void *ret); @@ -83,6 +94,7 @@ static int remoteDispatchDomainCreateXml( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_create_xml_args *args, remote_domain_create_xml_ret *ret); @@ -90,6 +102,7 @@ static int remoteDispatchDomainDefineXml( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_define_xml_args *args, remote_domain_define_xml_ret *ret); @@ -97,6 +110,7 @@ static int remoteDispatchDomainDestroy( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_destroy_args *args, void *ret); @@ -104,6 +118,7 @@ static int remoteDispatchDomainDetachDevice( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_detach_device_args *args, void *ret); @@ -111,6 +126,7 @@ static int remoteDispatchDomainDumpXml( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_dump_xml_args *args, remote_domain_dump_xml_ret *ret); @@ -118,6 +134,7 @@ static int remoteDispatchDomainEventsDeregister( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_domain_events_deregister_ret *ret); @@ -125,6 +142,7 @@ static int remoteDispatchDomainEventsRegister( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_domain_events_register_ret *ret); @@ -132,6 +150,7 @@ static int remoteDispatchDomainGetAutostart( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_get_autostart_args *args, remote_domain_get_autostart_ret *ret); @@ -139,6 +158,7 @@ static int remoteDispatchDomainGetInfo( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_get_info_args *args, remote_domain_get_info_ret *ret); @@ -146,6 +166,7 @@ static int remoteDispatchDomainGetMaxMemory( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_get_max_memory_args *args, remote_domain_get_max_memory_ret *ret); @@ -153,6 +174,7 @@ static int remoteDispatchDomainGetMaxVcpus( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_get_max_vcpus_args *args, remote_domain_get_max_vcpus_ret *ret); @@ -160,6 +182,7 @@ static int remoteDispatchDomainGetOsType( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_get_os_type_args *args, remote_domain_get_os_type_ret *ret); @@ -167,6 +190,7 @@ static int remoteDispatchDomainGetSchedulerParameters( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_get_scheduler_parameters_args *args, remote_domain_get_scheduler_parameters_ret *ret); @@ -174,6 +198,7 @@ static int remoteDispatchDomainGetSchedulerType( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_get_scheduler_type_args *args, remote_domain_get_scheduler_type_ret *ret); @@ -181,6 +206,7 @@ static int remoteDispatchDomainGetSecurityLabel( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_get_security_label_args *args, remote_domain_get_security_label_ret *ret); @@ -188,6 +214,7 @@ static int remoteDispatchDomainGetVcpus( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_get_vcpus_args *args, remote_domain_get_vcpus_ret *ret); @@ -195,6 +222,7 @@ static int remoteDispatchDomainInterfaceStats( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_interface_stats_args *args, remote_domain_interface_stats_ret *ret); @@ -202,6 +230,7 @@ static int remoteDispatchDomainLookupById( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_lookup_by_id_args *args, remote_domain_lookup_by_id_ret *ret); @@ -209,6 +238,7 @@ static int remoteDispatchDomainLookupByName( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_lookup_by_name_args *args, remote_domain_lookup_by_name_ret *ret); @@ -216,6 +246,7 @@ static int remoteDispatchDomainLookupByUuid( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_lookup_by_uuid_args *args, remote_domain_lookup_by_uuid_ret *ret); @@ -223,6 +254,7 @@ static int remoteDispatchDomainMemoryPeek( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_memory_peek_args *args, remote_domain_memory_peek_ret *ret); @@ -230,6 +262,7 @@ static int remoteDispatchDomainMigrateFinish( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_migrate_finish_args *args, remote_domain_migrate_finish_ret *ret); @@ -237,6 +270,7 @@ static int remoteDispatchDomainMigrateFinish2( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_migrate_finish2_args *args, remote_domain_migrate_finish2_ret *ret); @@ -244,6 +278,7 @@ static int remoteDispatchDomainMigratePerform( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_migrate_perform_args *args, void *ret); @@ -251,6 +286,7 @@ static int remoteDispatchDomainMigratePrepare( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_migrate_prepare_args *args, remote_domain_migrate_prepare_ret *ret); @@ -258,6 +294,7 @@ static int remoteDispatchDomainMigratePrepare2( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_migrate_prepare2_args *args, remote_domain_migrate_prepare2_ret *ret); @@ -265,6 +302,7 @@ static int remoteDispatchDomainPinVcpu( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_pin_vcpu_args *args, void *ret); @@ -272,6 +310,7 @@ static int remoteDispatchDomainReboot( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_reboot_args *args, void *ret); @@ -279,6 +318,7 @@ static int remoteDispatchDomainRestore( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_restore_args *args, void *ret); @@ -286,6 +326,7 @@ static int remoteDispatchDomainResume( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_resume_args *args, void *ret); @@ -293,6 +334,7 @@ static int remoteDispatchDomainSave( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_save_args *args, void *ret); @@ -300,6 +342,7 @@ static int remoteDispatchDomainSetAutostart( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_set_autostart_args *args, void *ret); @@ -307,6 +350,7 @@ static int remoteDispatchDomainSetMaxMemory( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_set_max_memory_args *args, void *ret); @@ -314,6 +358,7 @@ static int remoteDispatchDomainSetMemory( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_set_memory_args *args, void *ret); @@ -321,6 +366,7 @@ static int remoteDispatchDomainSetSchedulerParameters( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_set_scheduler_parameters_args *args, void *ret); @@ -328,6 +374,7 @@ static int remoteDispatchDomainSetVcpus( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_set_vcpus_args *args, void *ret); @@ -335,6 +382,7 @@ static int remoteDispatchDomainShutdown( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_shutdown_args *args, void *ret); @@ -342,6 +390,7 @@ static int remoteDispatchDomainSuspend( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_suspend_args *args, void *ret); @@ -349,6 +398,7 @@ static int remoteDispatchDomainUndefine( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_undefine_args *args, void *ret); @@ -356,6 +406,7 @@ static int remoteDispatchDomainXmlFromNative( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_xml_from_native_args *args, remote_domain_xml_from_native_ret *ret); @@ -363,6 +414,7 @@ static int remoteDispatchDomainXmlToNative( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_domain_xml_to_native_args *args, remote_domain_xml_to_native_ret *ret); @@ -370,6 +422,7 @@ static int remoteDispatchFindStoragePoolSources( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_find_storage_pool_sources_args *args, remote_find_storage_pool_sources_ret *ret); @@ -377,6 +430,7 @@ static int remoteDispatchGetCapabilities( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_get_capabilities_ret *ret); @@ -384,6 +438,7 @@ static int remoteDispatchGetHostname( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_get_hostname_ret *ret); @@ -391,6 +446,7 @@ static int remoteDispatchGetMaxVcpus( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_get_max_vcpus_args *args, remote_get_max_vcpus_ret *ret); @@ -398,6 +454,7 @@ static int remoteDispatchGetType( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_get_type_ret *ret); @@ -405,6 +462,7 @@ static int remoteDispatchGetUri( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_get_uri_ret *ret); @@ -412,6 +470,7 @@ static int remoteDispatchGetVersion( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_get_version_ret *ret); @@ -419,6 +478,7 @@ static int remoteDispatchInterfaceCreate( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_interface_create_args *args, void *ret); @@ -426,6 +486,7 @@ static int remoteDispatchInterfaceDefineXml( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_interface_define_xml_args *args, remote_interface_define_xml_ret *ret); @@ -433,6 +494,7 @@ static int remoteDispatchInterfaceDestroy( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_interface_destroy_args *args, void *ret); @@ -440,6 +502,7 @@ static int remoteDispatchInterfaceGetXmlDesc( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_interface_get_xml_desc_args *args, remote_interface_get_xml_desc_ret *ret); @@ -447,6 +510,7 @@ static int remoteDispatchInterfaceLookupByMacString( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_interface_lookup_by_mac_string_args *args, remote_interface_lookup_by_mac_string_ret *ret); @@ -454,6 +518,7 @@ static int remoteDispatchInterfaceLookupByName( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_interface_lookup_by_name_args *args, remote_interface_lookup_by_name_ret *ret); @@ -461,6 +526,7 @@ static int remoteDispatchInterfaceUndefine( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_interface_undefine_args *args, void *ret); @@ -468,6 +534,7 @@ static int remoteDispatchListDefinedDomains( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_list_defined_domains_args *args, remote_list_defined_domains_ret *ret); @@ -475,6 +542,7 @@ static int remoteDispatchListDefinedInterfaces( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_list_defined_interfaces_args *args, remote_list_defined_interfaces_ret *ret); @@ -482,6 +550,7 @@ static int remoteDispatchListDefinedNetworks( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_list_defined_networks_args *args, remote_list_defined_networks_ret *ret); @@ -489,6 +558,7 @@ static int remoteDispatchListDefinedStoragePools( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_list_defined_storage_pools_args *args, remote_list_defined_storage_pools_ret *ret); @@ -496,6 +566,7 @@ static int remoteDispatchListDomains( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_list_domains_args *args, remote_list_domains_ret *ret); @@ -503,6 +574,7 @@ static int remoteDispatchListInterfaces( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_list_interfaces_args *args, remote_list_interfaces_ret *ret); @@ -510,6 +582,7 @@ static int remoteDispatchListNetworks( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_list_networks_args *args, remote_list_networks_ret *ret); @@ -517,6 +590,7 @@ static int remoteDispatchListSecrets( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_list_secrets_args *args, remote_list_secrets_ret *ret); @@ -524,6 +598,7 @@ static int remoteDispatchListStoragePools( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_list_storage_pools_args *args, remote_list_storage_pools_ret *ret); @@ -531,6 +606,7 @@ static int remoteDispatchNetworkCreate( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_network_create_args *args, void *ret); @@ -538,6 +614,7 @@ static int remoteDispatchNetworkCreateXml( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_network_create_xml_args *args, remote_network_create_xml_ret *ret); @@ -545,6 +622,7 @@ static int remoteDispatchNetworkDefineXml( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_network_define_xml_args *args, remote_network_define_xml_ret *ret); @@ -552,6 +630,7 @@ static int remoteDispatchNetworkDestroy( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_network_destroy_args *args, void *ret); @@ -559,6 +638,7 @@ static int remoteDispatchNetworkDumpXml( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_network_dump_xml_args *args, remote_network_dump_xml_ret *ret); @@ -566,6 +646,7 @@ static int remoteDispatchNetworkGetAutostart( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_network_get_autostart_args *args, remote_network_get_autostart_ret *ret); @@ -573,6 +654,7 @@ static int remoteDispatchNetworkGetBridgeName( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_network_get_bridge_name_args *args, remote_network_get_bridge_name_ret *ret); @@ -580,6 +662,7 @@ static int remoteDispatchNetworkLookupByName( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_network_lookup_by_name_args *args, remote_network_lookup_by_name_ret *ret); @@ -587,6 +670,7 @@ static int remoteDispatchNetworkLookupByUuid( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_network_lookup_by_uuid_args *args, remote_network_lookup_by_uuid_ret *ret); @@ -594,6 +678,7 @@ static int remoteDispatchNetworkSetAutostart( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_network_set_autostart_args *args, void *ret); @@ -601,6 +686,7 @@ static int remoteDispatchNetworkUndefine( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_network_undefine_args *args, void *ret); @@ -608,6 +694,7 @@ static int remoteDispatchNodeDeviceCreateXml( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_node_device_create_xml_args *args, remote_node_device_create_xml_ret *ret); @@ -615,6 +702,7 @@ static int remoteDispatchNodeDeviceDestroy( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_node_device_destroy_args *args, void *ret); @@ -622,6 +710,7 @@ static int remoteDispatchNodeDeviceDettach( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_node_device_dettach_args *args, void *ret); @@ -629,6 +718,7 @@ static int remoteDispatchNodeDeviceDumpXml( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_node_device_dump_xml_args *args, remote_node_device_dump_xml_ret *ret); @@ -636,6 +726,7 @@ static int remoteDispatchNodeDeviceGetParent( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_node_device_get_parent_args *args, remote_node_device_get_parent_ret *ret); @@ -643,6 +734,7 @@ static int remoteDispatchNodeDeviceListCaps( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_node_device_list_caps_args *args, remote_node_device_list_caps_ret *ret); @@ -650,6 +742,7 @@ static int remoteDispatchNodeDeviceLookupByName( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_node_device_lookup_by_name_args *args, remote_node_device_lookup_by_name_ret *ret); @@ -657,6 +750,7 @@ static int remoteDispatchNodeDeviceNumOfCaps( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_node_device_num_of_caps_args *args, remote_node_device_num_of_caps_ret *ret); @@ -664,6 +758,7 @@ static int remoteDispatchNodeDeviceReAttach( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_node_device_re_attach_args *args, void *ret); @@ -671,6 +766,7 @@ static int remoteDispatchNodeDeviceReset( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_node_device_reset_args *args, void *ret); @@ -678,6 +774,7 @@ static int remoteDispatchNodeGetCellsFreeMemory( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_node_get_cells_free_memory_args *args, remote_node_get_cells_free_memory_ret *ret); @@ -685,6 +782,7 @@ static int remoteDispatchNodeGetFreeMemory( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_node_get_free_memory_ret *ret); @@ -692,6 +790,7 @@ static int remoteDispatchNodeGetInfo( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_node_get_info_ret *ret); @@ -699,6 +798,7 @@ static int remoteDispatchNodeGetSecurityModel( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_node_get_security_model_ret *ret); @@ -706,6 +806,7 @@ static int remoteDispatchNodeListDevices( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_node_list_devices_args *args, remote_node_list_devices_ret *ret); @@ -713,6 +814,7 @@ static int remoteDispatchNodeNumOfDevices( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_node_num_of_devices_args *args, remote_node_num_of_devices_ret *ret); @@ -720,6 +822,7 @@ static int remoteDispatchNumOfDefinedDomains( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_num_of_defined_domains_ret *ret); @@ -727,6 +830,7 @@ static int remoteDispatchNumOfDefinedInterfaces( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_num_of_defined_interfaces_ret *ret); @@ -734,6 +838,7 @@ static int remoteDispatchNumOfDefinedNetworks( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_num_of_defined_networks_ret *ret); @@ -741,6 +846,7 @@ static int remoteDispatchNumOfDefinedStoragePools( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_num_of_defined_storage_pools_ret *ret); @@ -748,6 +854,7 @@ static int remoteDispatchNumOfDomains( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_num_of_domains_ret *ret); @@ -755,6 +862,7 @@ static int remoteDispatchNumOfInterfaces( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_num_of_interfaces_ret *ret); @@ -762,6 +870,7 @@ static int remoteDispatchNumOfNetworks( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_num_of_networks_ret *ret); @@ -769,6 +878,7 @@ static int remoteDispatchNumOfSecrets( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_num_of_secrets_ret *ret); @@ -776,6 +886,7 @@ static int remoteDispatchNumOfStoragePools( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, void *args, remote_num_of_storage_pools_ret *ret); @@ -783,6 +894,7 @@ static int remoteDispatchOpen( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_open_args *args, void *ret); @@ -790,6 +902,7 @@ static int remoteDispatchSecretDefineXml( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_secret_define_xml_args *args, remote_secret_define_xml_ret *ret); @@ -797,6 +910,7 @@ static int remoteDispatchSecretGetValue( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_secret_get_value_args *args, remote_secret_get_value_ret *ret); @@ -804,6 +918,7 @@ static int remoteDispatchSecretGetXmlDesc( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_secret_get_xml_desc_args *args, remote_secret_get_xml_desc_ret *ret); @@ -811,6 +926,7 @@ static int remoteDispatchSecretLookupByUsage( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_secret_lookup_by_usage_args *args, remote_secret_lookup_by_usage_ret *ret); @@ -818,6 +934,7 @@ static int remoteDispatchSecretLookupByUuid( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_secret_lookup_by_uuid_args *args, remote_secret_lookup_by_uuid_ret *ret); @@ -825,6 +942,7 @@ static int remoteDispatchSecretSetValue( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_secret_set_value_args *args, void *ret); @@ -832,6 +950,7 @@ static int remoteDispatchSecretUndefine( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_secret_undefine_args *args, void *ret); @@ -839,6 +958,7 @@ static int remoteDispatchStoragePoolBuild( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_pool_build_args *args, void *ret); @@ -846,6 +966,7 @@ static int remoteDispatchStoragePoolCreate( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_pool_create_args *args, void *ret); @@ -853,6 +974,7 @@ static int remoteDispatchStoragePoolCreateXml( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_pool_create_xml_args *args, remote_storage_pool_create_xml_ret *ret); @@ -860,6 +982,7 @@ static int remoteDispatchStoragePoolDefineXml( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_pool_define_xml_args *args, remote_storage_pool_define_xml_ret *ret); @@ -867,6 +990,7 @@ static int remoteDispatchStoragePoolDelete( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_pool_delete_args *args, void *ret); @@ -874,6 +998,7 @@ static int remoteDispatchStoragePoolDestroy( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_pool_destroy_args *args, void *ret); @@ -881,6 +1006,7 @@ static int remoteDispatchStoragePoolDumpXml( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_pool_dump_xml_args *args, remote_storage_pool_dump_xml_ret *ret); @@ -888,6 +1014,7 @@ static int remoteDispatchStoragePoolGetAutostart( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_pool_get_autostart_args *args, remote_storage_pool_get_autostart_ret *ret); @@ -895,6 +1022,7 @@ static int remoteDispatchStoragePoolGetInfo( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_pool_get_info_args *args, remote_storage_pool_get_info_ret *ret); @@ -902,6 +1030,7 @@ static int remoteDispatchStoragePoolListVolumes( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_pool_list_volumes_args *args, remote_storage_pool_list_volumes_ret *ret); @@ -909,6 +1038,7 @@ static int remoteDispatchStoragePoolLookupByName( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_pool_lookup_by_name_args *args, remote_storage_pool_lookup_by_name_ret *ret); @@ -916,6 +1046,7 @@ static int remoteDispatchStoragePoolLookupByUuid( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_pool_lookup_by_uuid_args *args, remote_storage_pool_lookup_by_uuid_ret *ret); @@ -923,6 +1054,7 @@ static int remoteDispatchStoragePoolLookupByVolume( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_pool_lookup_by_volume_args *args, remote_storage_pool_lookup_by_volume_ret *ret); @@ -930,6 +1062,7 @@ static int remoteDispatchStoragePoolNumOfVolumes( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_pool_num_of_volumes_args *args, remote_storage_pool_num_of_volumes_ret *ret); @@ -937,6 +1070,7 @@ static int remoteDispatchStoragePoolRefresh( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_pool_refresh_args *args, void *ret); @@ -944,6 +1078,7 @@ static int remoteDispatchStoragePoolSetAutostart( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_pool_set_autostart_args *args, void *ret); @@ -951,6 +1086,7 @@ static int remoteDispatchStoragePoolUndefine( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_pool_undefine_args *args, void *ret); @@ -958,6 +1094,7 @@ static int remoteDispatchStorageVolCreateXml( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_vol_create_xml_args *args, remote_storage_vol_create_xml_ret *ret); @@ -965,6 +1102,7 @@ static int remoteDispatchStorageVolCreateXmlFrom( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_vol_create_xml_from_args *args, remote_storage_vol_create_xml_from_ret *ret); @@ -972,6 +1110,7 @@ static int remoteDispatchStorageVolDelete( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_vol_delete_args *args, void *ret); @@ -979,6 +1118,7 @@ static int remoteDispatchStorageVolDumpXml( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_vol_dump_xml_args *args, remote_storage_vol_dump_xml_ret *ret); @@ -986,6 +1126,7 @@ static int remoteDispatchStorageVolGetInfo( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_vol_get_info_args *args, remote_storage_vol_get_info_ret *ret); @@ -993,6 +1134,7 @@ static int remoteDispatchStorageVolGetPath( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_vol_get_path_args *args, remote_storage_vol_get_path_ret *ret); @@ -1000,6 +1142,7 @@ static int remoteDispatchStorageVolLookupByKey( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_vol_lookup_by_key_args *args, remote_storage_vol_lookup_by_key_ret *ret); @@ -1007,6 +1150,7 @@ static int remoteDispatchStorageVolLookupByName( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_vol_lookup_by_name_args *args, remote_storage_vol_lookup_by_name_ret *ret); @@ -1014,6 +1158,7 @@ static int remoteDispatchStorageVolLookupByPath( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_storage_vol_lookup_by_path_args *args, remote_storage_vol_lookup_by_path_ret *ret); @@ -1021,6 +1166,7 @@ static int remoteDispatchSupportsFeature( struct qemud_server *server, struct qemud_client *client, virConnectPtr conn, + remote_message_header *hdr, remote_error *err, remote_supports_feature_args *args, remote_supports_feature_ret *ret); diff --git a/daemon/remote_generate_stubs.pl b/daemon/remote_generate_stubs.pl index 9bca0cc..8b26e3d 100755 --- a/daemon/remote_generate_stubs.pl +++ b/daemon/remote_generate_stubs.pl @@ -115,6 +115,7 @@ elsif ($opt_p) { print " struct qemud_server *server,\n"; print " struct qemud_client *client,\n"; print " virConnectPtr conn,\n"; + print " remote_message_header *hdr,\n"; print " remote_error *err,\n"; print " $calls{$_}->{args} *args,\n"; print " $calls{$_}->{ret} *ret);\n"; -- 1.6.0.6

On Wed, Sep 30, 2009 at 01:27:15PM +0200, Chris Lalancette wrote:
This is necessary for the dispatch functions to be able to use streams in the future.
Signed-off-by: Chris Lalancette <clalance@redhat.com> --- daemon/dispatch.c | 2 +- daemon/remote.c | 208 +++++++++++++++++++++++++++++++---- daemon/remote.h | 1 + daemon/remote_dispatch_prototypes.h | 146 ++++++++++++++++++++++++ daemon/remote_generate_stubs.pl | 1 + 5 files changed, 333 insertions(+), 25 deletions(-)
ACK, I forgot that this one was needed Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

Signed-off-by: Chris Lalancette <clalance@redhat.com> --- src/remote/remote_driver.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index d8b9cf8..135b0d6 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -6728,7 +6728,7 @@ remoteStreamPacket(virStreamPtr st, const char *data, size_t nbytes) { - DEBUG("st=%p status=%d data=%p nbytes=%d", st, status, data, nbytes); + DEBUG("st=%p status=%d data=%p nbytes=%zu", st, status, data, nbytes); struct private_data *priv = st->conn->privateData; struct private_stream_data *privst = st->privateData; XDR xdr; @@ -6788,7 +6788,7 @@ remoteStreamPacket(virStreamPtr st, if (status == REMOTE_CONTINUE) { if (((4 + REMOTE_MESSAGE_MAX) - thiscall->bufferLength) < nbytes) { errorf(st->conn, - VIR_ERR_RPC, _("data size %d too large for payload %d"), + VIR_ERR_RPC, _("data size %zu too large for payload %d"), nbytes, ((4 + REMOTE_MESSAGE_MAX) - thiscall->bufferLength)); goto error; } @@ -6874,7 +6874,7 @@ remoteStreamSend(virStreamPtr st, const char *data, size_t nbytes) { - DEBUG("st=%p data=%p nbytes=%d", st, data, nbytes); + DEBUG("st=%p data=%p nbytes=%zu", st, data, nbytes); struct private_data *priv = st->conn->privateData; int rv = -1; @@ -6903,7 +6903,7 @@ remoteStreamRecv(virStreamPtr st, char *data, size_t nbytes) { - DEBUG("st=%p data=%p nbytes=%d", st, data, nbytes); + DEBUG("st=%p data=%p nbytes=%zu", st, data, nbytes); struct private_data *priv = st->conn->privateData; struct private_stream_data *privst = st->privateData; int rv = -1; -- 1.6.0.6

On Wed, Sep 30, 2009 at 01:27:16PM +0200, Chris Lalancette wrote:
Signed-off-by: Chris Lalancette <clalance@redhat.com> --- src/remote/remote_driver.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index d8b9cf8..135b0d6 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -6728,7 +6728,7 @@ remoteStreamPacket(virStreamPtr st, const char *data, size_t nbytes) { - DEBUG("st=%p status=%d data=%p nbytes=%d", st, status, data, nbytes); + DEBUG("st=%p status=%d data=%p nbytes=%zu", st, status, data, nbytes); struct private_data *priv = st->conn->privateData; struct private_stream_data *privst = st->privateData; XDR xdr; @@ -6788,7 +6788,7 @@ remoteStreamPacket(virStreamPtr st, if (status == REMOTE_CONTINUE) { if (((4 + REMOTE_MESSAGE_MAX) - thiscall->bufferLength) < nbytes) { errorf(st->conn, - VIR_ERR_RPC, _("data size %d too large for payload %d"), + VIR_ERR_RPC, _("data size %zu too large for payload %d"), nbytes, ((4 + REMOTE_MESSAGE_MAX) - thiscall->bufferLength)); goto error; } @@ -6874,7 +6874,7 @@ remoteStreamSend(virStreamPtr st, const char *data, size_t nbytes) { - DEBUG("st=%p data=%p nbytes=%d", st, data, nbytes); + DEBUG("st=%p data=%p nbytes=%zu", st, data, nbytes); struct private_data *priv = st->conn->privateData; int rv = -1;
@@ -6903,7 +6903,7 @@ remoteStreamRecv(virStreamPtr st, char *data, size_t nbytes) { - DEBUG("st=%p data=%p nbytes=%d", st, data, nbytes); + DEBUG("st=%p data=%p nbytes=%zu", st, data, nbytes); struct private_data *priv = st->conn->privateData; struct private_stream_data *privst = st->privateData; int rv = -1; --
ACK Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

Signed-off-by: Chris Lalancette <clalance@redhat.com> --- daemon/THREADING.txt | 2 +- docs/drvqemu.html.in | 2 +- libvirt.spec.in | 2 +- src/esx/esx_driver.c | 2 +- src/libvirt.c | 2 +- src/openvz/openvz_driver.c | 4 ++-- src/remote/remote_driver.c | 2 +- src/security/security_selinux.c | 2 +- src/util/util.c | 2 +- src/vbox/vbox_tmpl.c | 8 ++++---- tests/object-locking.ml | 2 +- tools/virt-pki-validate.in | 4 ++-- 12 files changed, 17 insertions(+), 17 deletions(-) diff --git a/daemon/THREADING.txt b/daemon/THREADING.txt index 4c7a616..4be71d6 100644 --- a/daemon/THREADING.txt +++ b/daemon/THREADING.txt @@ -59,4 +59,4 @@ for the associated RPC call. While the helper method is executing, no locks are held on either the client or server, but the ref count on the 'struct qemud_client' object is incremented to ensure its not deleted. The helper can -now safely invoke the neccessary libvirt API call. +now safely invoke the necessary libvirt API call. diff --git a/docs/drvqemu.html.in b/docs/drvqemu.html.in index dd89fc3..024835c 100644 --- a/docs/drvqemu.html.in +++ b/docs/drvqemu.html.in @@ -208,7 +208,7 @@ Thus, if a vendor / distributor has configured their libvirt package to run as 'qemu' by default, a number of changes will be required before an administrator can change a host to run guests as root. - In particular it will be neccessary to change ownership on the + In particular it will be necessary to change ownership on the directories <code>/var/run/libvirt/qemu/</code>, <code>/var/lib/libvirt/qemu/</code> and <code>/var/cache/libvirt/qemu/</code> back to root, in addition diff --git a/libvirt.spec.in b/libvirt.spec.in index 7b5c4d7..e02e588 100644 --- a/libvirt.spec.in +++ b/libvirt.spec.in @@ -22,7 +22,7 @@ %endif -# Now set the defaults for all the important features, independant +# Now set the defaults for all the important features, independent # of any particular OS # First the daemon itself diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c index 5754b24..ec0cc14 100644 --- a/src/esx/esx_driver.c +++ b/src/esx/esx_driver.c @@ -1486,7 +1486,7 @@ esxDomainDestroy(virDomainPtr domain) if (taskInfoState != esxVI_TaskInfoState_Success) { ESX_ERROR(domain->conn, VIR_ERR_INTERNAL_ERROR, - "Could not destory domain"); + "Could not destroy domain"); goto failure; } diff --git a/src/libvirt.c b/src/libvirt.c index bcb89e1..ee5fbfd 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -9423,7 +9423,7 @@ virStreamRef(virStreamPtr stream) * Write a series of bytes to the stream. This method may * block the calling application for an arbitrary amount * of time. Once an application has finished sending data - * it should call virStreamFinish to wait for succesful + * it should call virStreamFinish to wait for successful * confirmation from the driver, or detect any error * * This method may not be used if a stream source has been diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c index 54bcaa9..d577be1 100644 --- a/src/openvz/openvz_driver.c +++ b/src/openvz/openvz_driver.c @@ -780,7 +780,7 @@ openvzDomainDefineXML(virConnectPtr conn, const char *xml) if (openvzSetInitialConfig(conn, vm->def) < 0) { openvzError(conn, VIR_ERR_INTERNAL_ERROR, - "%s", _("Error creating intial configuration")); + "%s", _("Error creating initial configuration")); goto cleanup; } @@ -847,7 +847,7 @@ openvzDomainCreateXML(virConnectPtr conn, const char *xml, if (openvzSetInitialConfig(conn, vm->def) < 0) { openvzError(conn, VIR_ERR_INTERNAL_ERROR, - "%s", _("Error creating intial configuration")); + "%s", _("Error creating initial configuration")); goto cleanup; } diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index 135b0d6..731b213 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -7915,7 +7915,7 @@ error: * NB(4) This is very complicated. Due to connection cloning, multiple * threads can want to use the socket at once. Obviously only one of * them can. So if someone's using the socket, other threads are put - * to sleep on condition variables. THe existing thread may completely + * to sleep on condition variables. The existing thread may completely * send & receive their RPC call/reply while they're asleep. Or it * may only get around to dealing with sending the call. Or it may * get around to neither. So upon waking up from slumber, the other diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c index 670fcb2..bdd9eb2 100644 --- a/src/security/security_selinux.c +++ b/src/security/security_selinux.c @@ -329,7 +329,7 @@ SELinuxSetFilecon(virConnectPtr conn, const char *path, char *tcon) /* if the error complaint is related to an image hosted on * an nfs mount, or a usbfs/sysfs filesystem not supporting * labelling, then just ignore it & hope for the best. - * The user hopefully set one of the neccessary SELinux + * The user hopefully set one of the necessary SELinux * virt_use_{nfs,usb,pci} boolean tunables to allow it... */ if (setfilecon_errno != EOPNOTSUPP) { diff --git a/src/util/util.c b/src/util/util.c index ef07a6a..f474ead 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -297,7 +297,7 @@ static int virClearCapabilities(void) /* * @conn Connection to report errors against * @argv argv to exec - * @envp optional enviroment to use for exec + * @envp optional environment to use for exec * @keepfd options fd_ret to keep open for child process * @retpid optional pointer to store child process pid * @infd optional file descriptor to use as child input, otherwise /dev/null diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index 154859a..72220e1 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -4761,7 +4761,7 @@ static virDrvOpenStatus vboxNetworkOpen(virConnectPtr conn, (data->vboxSession == NULL)) goto cleanup; - DEBUG0("network intialized"); + DEBUG0("network initialized"); /* conn->networkPrivateData = some network specific data */ return VIR_DRV_OPEN_SUCCESS; @@ -4770,7 +4770,7 @@ cleanup: } static int vboxNetworkClose(virConnectPtr conn) { - DEBUG0("network unintialized"); + DEBUG0("network uninitialized"); conn->networkPrivateData = NULL; return 0; } @@ -5606,7 +5606,7 @@ static virDrvOpenStatus vboxStorageOpen (virConnectPtr conn, (data->vboxSession == NULL)) goto cleanup; - DEBUG0("vbox storage intialized"); + DEBUG0("vbox storage initialized"); /* conn->storagePrivateData = some storage specific data */ return VIR_DRV_OPEN_SUCCESS; @@ -5615,7 +5615,7 @@ cleanup: } static int vboxStorageClose (virConnectPtr conn) { - DEBUG0("vbox storage unintialized"); + DEBUG0("vbox storage uninitialized"); conn->storagePrivateData = NULL; return 0; } diff --git a/tests/object-locking.ml b/tests/object-locking.ml index 0c66fc7..a4cd77d 100644 --- a/tests/object-locking.ml +++ b/tests/object-locking.ml @@ -332,7 +332,7 @@ let isLockableDriverNull exp = (* - * Prior to validating a function, intialize these + * Prior to validating a function, initialize these * to VS.empty * * They contain the list of driver and object variables diff --git a/tools/virt-pki-validate.in b/tools/virt-pki-validate.in index f3d3218..a428a96 100755 --- a/tools/virt-pki-validate.in +++ b/tools/virt-pki-validate.in @@ -275,10 +275,10 @@ exit 0 =head1 DESCRIPTION -This tool validates that the neccessary PKI files are configured for +This tool validates that the necessary PKI files are configured for a secure libvirt server or client using the TLS encryption protocol. It will report any missing certificate or key files on the host. It -should be run as root to ensure it can read all the neccessary files +should be run as root to ensure it can read all the necessary files =head1 EXIT STATUS -- 1.6.0.6

On Wed, Sep 30, 2009 at 01:27:17PM +0200, Chris Lalancette wrote:
Signed-off-by: Chris Lalancette <clalance@redhat.com> --- daemon/THREADING.txt | 2 +- docs/drvqemu.html.in | 2 +- libvirt.spec.in | 2 +- src/esx/esx_driver.c | 2 +- src/libvirt.c | 2 +- src/openvz/openvz_driver.c | 4 ++-- src/remote/remote_driver.c | 2 +- src/security/security_selinux.c | 2 +- src/util/util.c | 2 +- src/vbox/vbox_tmpl.c | 8 ++++---- tests/object-locking.ml | 2 +- tools/virt-pki-validate.in | 4 ++-- 12 files changed, 17 insertions(+), 17 deletions(-)
ACK Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

Right now, the stream stuff assumes that a stream is always going to be used for transmit. This is not the case, and in fact doesn't work with the tunnelled migration stuff. Add a flag to remoteClientStream() to allow it to do RX only. Signed-off-by: Chris Lalancette <clalance@redhat.com> --- daemon/stream.c | 6 ++++-- daemon/stream.h | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/daemon/stream.c b/daemon/stream.c index 584268d..d64fe73 100644 --- a/daemon/stream.c +++ b/daemon/stream.c @@ -259,7 +259,8 @@ void remoteFreeClientStream(struct qemud_client *client, * @stream: a stream to add */ int remoteAddClientStream(struct qemud_client *client, - struct qemud_client_stream *stream) + struct qemud_client_stream *stream, + int transmit) { struct qemud_client_stream *tmp = client->streams; @@ -280,7 +281,8 @@ int remoteAddClientStream(struct qemud_client *client, stream->filter.next = client->filters; client->filters = &stream->filter; - stream->tx = 1; + if (transmit) + stream->tx = 1; remoteStreamUpdateEvents(stream); diff --git a/daemon/stream.h b/daemon/stream.h index 2e2d249..181080f 100644 --- a/daemon/stream.h +++ b/daemon/stream.h @@ -36,7 +36,8 @@ void remoteFreeClientStream(struct qemud_client *client, struct qemud_client_stream *stream); int remoteAddClientStream(struct qemud_client *client, - struct qemud_client_stream *stream); + struct qemud_client_stream *stream, + int transmit); struct qemud_client_stream * remoteFindClientStream(struct qemud_client *client, -- 1.6.0.6

On Wed, Sep 30, 2009 at 01:27:18PM +0200, Chris Lalancette wrote:
Right now, the stream stuff assumes that a stream is always going to be used for transmit. This is not the case, and in fact doesn't work with the tunnelled migration stuff. Add a flag to remoteClientStream() to allow it to do RX only.
Signed-off-by: Chris Lalancette <clalance@redhat.com> --- daemon/stream.c | 6 ++++-- daemon/stream.h | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/daemon/stream.c b/daemon/stream.c index 584268d..d64fe73 100644 --- a/daemon/stream.c +++ b/daemon/stream.c @@ -259,7 +259,8 @@ void remoteFreeClientStream(struct qemud_client *client, * @stream: a stream to add */ int remoteAddClientStream(struct qemud_client *client, - struct qemud_client_stream *stream) + struct qemud_client_stream *stream, + int transmit) { struct qemud_client_stream *tmp = client->streams;
@@ -280,7 +281,8 @@ int remoteAddClientStream(struct qemud_client *client, stream->filter.next = client->filters; client->filters = &stream->filter;
- stream->tx = 1; + if (transmit) + stream->tx = 1;
remoteStreamUpdateEvents(stream);
diff --git a/daemon/stream.h b/daemon/stream.h index 2e2d249..181080f 100644 --- a/daemon/stream.h +++ b/daemon/stream.h @@ -36,7 +36,8 @@ void remoteFreeClientStream(struct qemud_client *client, struct qemud_client_stream *stream);
int remoteAddClientStream(struct qemud_client *client, - struct qemud_client_stream *stream); + struct qemud_client_stream *stream, + int transmit);
struct qemud_client_stream * remoteFindClientStream(struct qemud_client *client,
ACK Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

Signed-off-by: Chris Lalancette <clalance@redhat.com> --- src/qemu/qemu_conf.c | 2 ++ src/qemu/qemu_conf.h | 1 + 2 files changed, 3 insertions(+), 0 deletions(-) diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 2db38df..ac63570 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -892,6 +892,8 @@ static unsigned int qemudComputeCmdFlags(const char *help, if (version >= 10000) { flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP; flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC; + if (version >= 12000) + flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX; } else if (kvm_version >= 79) { flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP; if (kvm_version >= 80) diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h index 96b7c0c..f9a970f 100644 --- a/src/qemu/qemu_conf.h +++ b/src/qemu/qemu_conf.h @@ -70,6 +70,7 @@ enum qemud_cmd_flags { QEMUD_CMD_FLAG_MEM_PATH = (1 << 18), /* mmap'ped guest backing supported */ QEMUD_CMD_FLAG_DRIVE_SERIAL = (1 << 19), /* -driver serial= available */ QEMUD_CMD_FLAG_XEN_DOMID = (1 << 20), /* -xen-domid (new style xen integration) */ + QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX = (1 << 21), /* Does qemu support unix domain sockets for migration? */ }; /* Main driver state */ -- 1.6.0.6

On Wed, Sep 30, 2009 at 01:27:19PM +0200, Chris Lalancette wrote:
Signed-off-by: Chris Lalancette <clalance@redhat.com> --- src/qemu/qemu_conf.c | 2 ++ src/qemu/qemu_conf.h | 1 + 2 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 2db38df..ac63570 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -892,6 +892,8 @@ static unsigned int qemudComputeCmdFlags(const char *help, if (version >= 10000) { flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP; flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC; + if (version >= 12000) + flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX; } else if (kvm_version >= 79) { flags |= QEMUD_CMD_FLAG_MIGRATE_QEMU_TCP; if (kvm_version >= 80) diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h index 96b7c0c..f9a970f 100644 --- a/src/qemu/qemu_conf.h +++ b/src/qemu/qemu_conf.h @@ -70,6 +70,7 @@ enum qemud_cmd_flags { QEMUD_CMD_FLAG_MEM_PATH = (1 << 18), /* mmap'ped guest backing supported */ QEMUD_CMD_FLAG_DRIVE_SERIAL = (1 << 19), /* -driver serial= available */ QEMUD_CMD_FLAG_XEN_DOMID = (1 << 20), /* -xen-domid (new style xen integration) */ + QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX = (1 << 21), /* Does qemu support unix domain sockets for migration? */ };
/* Main driver state */
ACK Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

The upcoming tunnelled migration needs to be able to set a migration in progress in the background, as well as be able to cancel a migration when a problem has happened. This patch allows for both of these to properly work. Signed-off-by: Chris Lalancette <clalance@redhat.com> --- src/qemu/qemu_monitor_text.c | 26 ++++++++++++++++++++------ src/qemu/qemu_monitor_text.h | 7 +++++++ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c index f57460c..c72f919 100644 --- a/src/qemu/qemu_monitor_text.c +++ b/src/qemu/qemu_monitor_text.c @@ -123,7 +123,7 @@ static char *qemuMonitorEscape(const char *in, int shell) return out; } -static char *qemuMonitorEscapeArg(const char *in) +char *qemuMonitorEscapeArg(const char *in) { return qemuMonitorEscape(in, 0); } @@ -1137,20 +1137,27 @@ cleanup: } -static int qemuMonitorMigrate(const virDomainObjPtr vm, - const char *dest) +int qemuMonitorMigrate(const virDomainObjPtr vm, + int background, + const char *dest) { char *cmd = NULL; char *info = NULL; int ret = -1; char *safedest = qemuMonitorEscapeArg(dest); + const char *extra; if (!safedest) { virReportOOMError(NULL); return -1; } - if (virAsprintf(&cmd, "migrate \"%s\"", safedest) < 0) { + if (background) + extra = "-d "; + else + extra = " "; + + if (virAsprintf(&cmd, "migrate %s\"%s\"", extra, safedest) < 0) { virReportOOMError(NULL); goto cleanup; } @@ -1200,7 +1207,7 @@ int qemuMonitorMigrateToHost(const virDomainObjPtr vm, return -1; } - ret = qemuMonitorMigrate(vm, uri); + ret = qemuMonitorMigrate(vm, 0, uri); VIR_FREE(uri); @@ -1238,7 +1245,7 @@ int qemuMonitorMigrateToCommand(const virDomainObjPtr vm, goto cleanup; } - ret = qemuMonitorMigrate(vm, dest); + ret = qemuMonitorMigrate(vm, 0, dest); cleanup: VIR_FREE(safe_target); @@ -1248,6 +1255,13 @@ cleanup: } +void qemuMonitorMigrateCancel(const virDomainObjPtr vm) +{ + char *info = NULL; + qemuMonitorCommand(vm, "migrate cancel", &info); + VIR_FREE(info); +} + int qemuMonitorAddUSBDisk(const virDomainObjPtr vm, const char *path) { diff --git a/src/qemu/qemu_monitor_text.h b/src/qemu/qemu_monitor_text.h index 82dc5df..4283570 100644 --- a/src/qemu/qemu_monitor_text.h +++ b/src/qemu/qemu_monitor_text.h @@ -104,6 +104,10 @@ int qemuMonitorMigrateToCommand(const virDomainObjPtr vm, const char *target); +int qemuMonitorMigrate(const virDomainObjPtr vm, + int background, + const char *dest); + /* XXX disk driver type eg, qcow/etc. * XXX cache mode */ @@ -170,4 +174,7 @@ int qemuMonitorRemoveHostNetwork(const virDomainObjPtr vm, int vlan, const char *netname); +char *qemuMonitorEscapeArg(const char *in); +void qemuMonitorMigrateCancel(const virDomainObjPtr vm); + #endif /* QEMU_MONITOR_TEXT_H */ -- 1.6.0.6

On Wed, Sep 30, 2009 at 01:27:20PM +0200, Chris Lalancette wrote:
The upcoming tunnelled migration needs to be able to set a migration in progress in the background, as well as be able to cancel a migration when a problem has happened. This patch allows for both of these to properly work.
NACK, these are internal methods intentionally not exported since their usage is dependant on the text based monitor syntax. You should add another qemuMonitorMigrateToUNIX() API for doing UNIX socket based migration which simply takes the socket path name, and use the qemuMonitorMigrateToCommand() API for the back-compat exec/nc based impl. Can easily add another boolean flag to these for putting migration in the background too Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

Daniel P. Berrange wrote:
On Wed, Sep 30, 2009 at 01:27:20PM +0200, Chris Lalancette wrote:
The upcoming tunnelled migration needs to be able to set a migration in progress in the background, as well as be able to cancel a migration when a problem has happened. This patch allows for both of these to properly work.
NACK, these are internal methods intentionally not exported since their usage is dependant on the text based monitor syntax.
You should add another qemuMonitorMigrateToUNIX() API for doing UNIX socket based migration which simply takes the socket path name, and use the qemuMonitorMigrateToCommand() API for the back-compat exec/nc based impl.
Can easily add another boolean flag to these for putting migration in the background too
OK, I wasn't quite sure if this one would fly. I've pushed the preliminary cleanup patches; I'll rework this one and the Tunnelled migration one with your fixes/suggestions. -- Chris Lalancette

Implementation of tunnelled migration, using a Unix Domain Socket on the qemu backend. Note that this requires very new versions of qemu (0.10.7 at least) in order to get the appropriate bugfixes. Signed-off-by: Chris Lalancette <clalance@redhat.com> --- daemon/remote.c | 45 +++ daemon/remote_dispatch_args.h | 1 + daemon/remote_dispatch_prototypes.h | 8 + daemon/remote_dispatch_table.h | 5 + docs/apibuild.py | 1 + include/libvirt/libvirt.h.in | 1 + src/driver.h | 11 + src/esx/esx_driver.c | 1 + src/libvirt.c | 181 ++++++++-- src/libvirt_internal.h | 8 +- src/libvirt_private.syms | 1 + src/lxc/lxc_driver.c | 1 + src/opennebula/one_driver.c | 1 + src/openvz/openvz_driver.c | 1 + src/phyp/phyp_driver.c | 1 + src/qemu/qemu_driver.c | 725 +++++++++++++++++++++++++++++++++-- src/remote/remote_driver.c | 46 +++- src/remote/remote_protocol.c | 17 + src/remote/remote_protocol.h | 13 + src/remote/remote_protocol.x | 12 +- src/test/test_driver.c | 1 + src/uml/uml_driver.c | 1 + src/vbox/vbox_tmpl.c | 2 +- src/xen/xen_driver.c | 1 + tools/virsh.c | 28 ++- 25 files changed, 1049 insertions(+), 64 deletions(-) diff --git a/daemon/remote.c b/daemon/remote.c index ba97379..4e02850 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -55,6 +55,7 @@ #include "datatypes.h" #include "memory.h" #include "util.h" +#include "stream.h" #define VIR_FROM_THIS VIR_FROM_REMOTE #define REMOTE_DEBUG(fmt, ...) DEBUG(fmt, __VA_ARGS__) @@ -1493,6 +1494,50 @@ remoteDispatchDomainMigrateFinish2 (struct qemud_server *server ATTRIBUTE_UNUSED } static int +remoteDispatchDomainMigratePrepareTunnel(struct qemud_server *server ATTRIBUTE_UNUSED, + struct qemud_client *client, + virConnectPtr conn, + remote_message_header *hdr, + remote_error *rerr, + remote_domain_migrate_prepare_tunnel_args *args, + void *ret ATTRIBUTE_UNUSED) +{ + int r; + char *uri_in; + char *dname; + struct qemud_client_stream *stream; + CHECK_CONN (client); + + uri_in = args->uri_in == NULL ? NULL : *args->uri_in; + dname = args->dname == NULL ? NULL : *args->dname; + + stream = remoteCreateClientStream(conn, hdr); + if (!stream) { + remoteDispatchOOMError(rerr); + return -1; + } + + fprintf(stderr, "dom_xml is %p\n",args->dom_xml); + r = virDomainMigratePrepareTunnel(conn, stream->st, uri_in, + args->flags, dname, args->resource, + args->dom_xml); + if (r == -1) { + remoteFreeClientStream(client, stream); + remoteDispatchConnError(rerr, conn); + return -1; + } + + if (remoteAddClientStream(client, stream, 0) < 0) { + remoteDispatchConnError(rerr, conn); + virStreamAbort(stream->st); + remoteFreeClientStream(client, stream); + return -1; + } + + return 0; +} + +static int remoteDispatchListDefinedDomains (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client ATTRIBUTE_UNUSED, virConnectPtr conn, diff --git a/daemon/remote_dispatch_args.h b/daemon/remote_dispatch_args.h index 95f668a..aceead1 100644 --- a/daemon/remote_dispatch_args.h +++ b/daemon/remote_dispatch_args.h @@ -125,3 +125,4 @@ remote_secret_get_value_args val_remote_secret_get_value_args; remote_secret_undefine_args val_remote_secret_undefine_args; remote_secret_lookup_by_usage_args val_remote_secret_lookup_by_usage_args; + remote_domain_migrate_prepare_tunnel_args val_remote_domain_migrate_prepare_tunnel_args; diff --git a/daemon/remote_dispatch_prototypes.h b/daemon/remote_dispatch_prototypes.h index 16e8bb0..9afd2c7 100644 --- a/daemon/remote_dispatch_prototypes.h +++ b/daemon/remote_dispatch_prototypes.h @@ -298,6 +298,14 @@ static int remoteDispatchDomainMigratePrepare2( remote_error *err, remote_domain_migrate_prepare2_args *args, remote_domain_migrate_prepare2_ret *ret); +static int remoteDispatchDomainMigratePrepareTunnel( + struct qemud_server *server, + struct qemud_client *client, + virConnectPtr conn, + remote_message_header *hdr, + remote_error *err, + remote_domain_migrate_prepare_tunnel_args *args, + void *ret); static int remoteDispatchDomainPinVcpu( struct qemud_server *server, struct qemud_client *client, diff --git a/daemon/remote_dispatch_table.h b/daemon/remote_dispatch_table.h index 6b5df80..bb13f4c 100644 --- a/daemon/remote_dispatch_table.h +++ b/daemon/remote_dispatch_table.h @@ -742,3 +742,8 @@ .args_filter = (xdrproc_t) xdr_remote_secret_lookup_by_usage_args, .ret_filter = (xdrproc_t) xdr_remote_secret_lookup_by_usage_ret, }, +{ /* DomainMigratePrepareTunnel => 148 */ + .fn = (dispatch_fn) remoteDispatchDomainMigratePrepareTunnel, + .args_filter = (xdrproc_t) xdr_remote_domain_migrate_prepare_tunnel_args, + .ret_filter = (xdrproc_t) xdr_void, +}, diff --git a/docs/apibuild.py b/docs/apibuild.py index 70a7efc..b00619f 100755 --- a/docs/apibuild.py +++ b/docs/apibuild.py @@ -38,6 +38,7 @@ ignored_functions = { "virDomainMigratePerform": "private function for migration", "virDomainMigratePrepare": "private function for migration", "virDomainMigratePrepare2": "private function for migration", + "virDomainMigratePrepareTunnel": "private function for tunnelled migration", "virDrvSupportsFeature": "private function for remote access", "DllMain": "specific function for Win32", } diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in index 4e63e48..60be41b 100644 --- a/include/libvirt/libvirt.h.in +++ b/include/libvirt/libvirt.h.in @@ -337,6 +337,7 @@ typedef virDomainInterfaceStatsStruct *virDomainInterfaceStatsPtr; /* Domain migration flags. */ typedef enum { VIR_MIGRATE_LIVE = 1, /* live migration */ + VIR_MIGRATE_TUNNELLED = 2, /* tunnelled migration */ } virDomainMigrateFlags; /* Domain migration. */ diff --git a/src/driver.h b/src/driver.h index 6a3dcc2..c926614 100644 --- a/src/driver.h +++ b/src/driver.h @@ -347,6 +347,16 @@ typedef int (*virDrvNodeDeviceReset) (virNodeDevicePtr dev); +typedef int + (*virDrvDomainMigratePrepareTunnel) + (virConnectPtr conn, + virStreamPtr st, + const char *uri_in, + unsigned long flags, + const char *dname, + unsigned long resource, + const char *dom_xml); + /** * _virDriver: * @@ -427,6 +437,7 @@ struct _virDriver { virDrvNodeDeviceDettach nodeDeviceDettach; virDrvNodeDeviceReAttach nodeDeviceReAttach; virDrvNodeDeviceReset nodeDeviceReset; + virDrvDomainMigratePrepareTunnel domainMigratePrepareTunnel; }; typedef int diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c index ec0cc14..e063b46 100644 --- a/src/esx/esx_driver.c +++ b/src/esx/esx_driver.c @@ -3274,6 +3274,7 @@ static virDriver esxDriver = { NULL, /* nodeDeviceDettach */ NULL, /* nodeDeviceReAttach */ NULL, /* nodeDeviceReset */ + NULL, /* domainMigratePrepareTunnel */ }; diff --git a/src/libvirt.c b/src/libvirt.c index ee5fbfd..bdb8023 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -3044,6 +3044,70 @@ virDomainMigrateVersion2 (virDomainPtr domain, return ddomain; } +/* + * Tunnelled migration has the following flow: + * + * virDomainMigrate(src, uri) + * - virDomainMigratePerform(src, uri) + * - dst = virConnectOpen(uri) + * - virDomainMigratePrepareTunnel(dst) + * - while (1) + * - virStreamSend(dst, data) + * - virDomainMigrateFinish(dst) + * - virConnectClose(dst) + */ +static virDomainPtr +virDomainMigrateTunnelled(virDomainPtr domain, + unsigned long flags, + const char *dname, + const char *uri, + unsigned long bandwidth) +{ + virConnectPtr dconn; + virDomainPtr ddomain = NULL; + + if (uri == NULL) { + /* if you are doing a secure migration, you *must* also pass a uri */ + virLibConnError(domain->conn, VIR_ERR_INVALID_ARG, + _("requested TUNNELLED migration, but no URI passed")); + return NULL; + } + + if (domain->conn->flags & VIR_CONNECT_RO) { + virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__); + return NULL; + } + + /* FIXME: do we even need this check? In theory, V1 of the protocol + * should be able to do tunnelled migration as well + */ + if (!VIR_DRV_SUPPORTS_FEATURE(domain->conn->driver, domain->conn, + VIR_DRV_FEATURE_MIGRATION_V2)) { + virLibConnError(domain->conn, VIR_ERR_NO_SUPPORT, __FUNCTION__); + return NULL; + } + + /* Perform the migration. The driver isn't supposed to return + * until the migration is complete. + */ + if (domain->conn->driver->domainMigratePerform + (domain, NULL, 0, uri, flags, dname, bandwidth) == -1) + return NULL; + + dconn = virConnectOpen(uri); + if (dconn == NULL) + /* FIXME: this is pretty crappy; as far as we know, the migration has + * now succeeded, but we can't connect back to the other side + */ + return NULL; + + ddomain = virDomainLookupByName(dconn, dname ? dname : domain->name); + + virConnectClose(dconn); + + return ddomain; +} + /** * virDomainMigrate: * @domain: a domain object @@ -3058,6 +3122,8 @@ virDomainMigrateVersion2 (virDomainPtr domain, * * Flags may be one of more of the following: * VIR_MIGRATE_LIVE Attempt a live migration. + * VIR_MIGRATE_TUNNELLED Attempt to do a migration tunnelled through the + * libvirt RPC mechanism * * If a hypervisor supports renaming domains during migration, * then you may set the dname parameter to the new name (otherwise @@ -3116,31 +3182,47 @@ virDomainMigrate (virDomainPtr domain, goto error; } - /* Now checkout the destination */ - if (!VIR_IS_CONNECT (dconn)) { - virLibConnError (domain->conn, VIR_ERR_INVALID_CONN, __FUNCTION__); - goto error; + if (flags & VIR_MIGRATE_TUNNELLED) { + /* tunnelled migration is more or less a completely different migration + * protocol. dconn has to be NULL, uri has to be set, and the flow + * of logic is completely different. Hence, here we split off from + * the main migration flow and use a separate function. + */ + if (dconn != NULL) { + virLibConnError(domain->conn, VIR_ERR_INVALID_ARG, + _("requested TUNNELLED migration, but non-NULL dconn")); + goto error; + } + + ddomain = virDomainMigrateTunnelled(domain, flags, dname, uri, bandwidth); } - if (dconn->flags & VIR_CONNECT_RO) { - /* NB, deliberately report error against source object, not dest */ - virLibDomainError (domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__); - goto error; - } - - /* Check that migration is supported by both drivers. */ - if (VIR_DRV_SUPPORTS_FEATURE (domain->conn->driver, domain->conn, - VIR_DRV_FEATURE_MIGRATION_V1) && - VIR_DRV_SUPPORTS_FEATURE (dconn->driver, dconn, - VIR_DRV_FEATURE_MIGRATION_V1)) - ddomain = virDomainMigrateVersion1 (domain, dconn, flags, dname, uri, bandwidth); - else if (VIR_DRV_SUPPORTS_FEATURE (domain->conn->driver, domain->conn, - VIR_DRV_FEATURE_MIGRATION_V2) && - VIR_DRV_SUPPORTS_FEATURE (dconn->driver, dconn, - VIR_DRV_FEATURE_MIGRATION_V2)) - ddomain = virDomainMigrateVersion2 (domain, dconn, flags, dname, uri, bandwidth); else { - virLibConnError (domain->conn, VIR_ERR_NO_SUPPORT, __FUNCTION__); - goto error; + /* Now checkout the destination */ + if (!VIR_IS_CONNECT(dconn)) { + virLibConnError(domain->conn, VIR_ERR_INVALID_CONN, __FUNCTION__); + goto error; + } + if (dconn->flags & VIR_CONNECT_RO) { + /* NB, deliberately report error against source object, not dest */ + virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__); + goto error; + } + + /* Check that migration is supported by both drivers. */ + if (VIR_DRV_SUPPORTS_FEATURE(domain->conn->driver, domain->conn, + VIR_DRV_FEATURE_MIGRATION_V1) && + VIR_DRV_SUPPORTS_FEATURE(dconn->driver, dconn, + VIR_DRV_FEATURE_MIGRATION_V1)) + ddomain = virDomainMigrateVersion1(domain, dconn, flags, dname, uri, bandwidth); + else if (VIR_DRV_SUPPORTS_FEATURE(domain->conn->driver, domain->conn, + VIR_DRV_FEATURE_MIGRATION_V2) && + VIR_DRV_SUPPORTS_FEATURE(dconn->driver, dconn, + VIR_DRV_FEATURE_MIGRATION_V2)) + ddomain = virDomainMigrateVersion2(domain, dconn, flags, dname, uri, bandwidth); + else { + virLibConnError(domain->conn, VIR_ERR_NO_SUPPORT, __FUNCTION__); + goto error; + } } if (ddomain == NULL) @@ -3398,6 +3480,59 @@ error: } +/* + * Not for public use. This function is part of the internal + * implementation of migration in the remote case. + */ +int +virDomainMigratePrepareTunnel(virConnectPtr conn, + virStreamPtr st, + const char *uri_in, + unsigned long flags, + const char *dname, + unsigned long bandwidth, + const char *dom_xml) + +{ + VIR_DEBUG("conn=%p, stream=%p, uri_in=%s, flags=%lu, dname=%s, " + "bandwidth=%lu, dom_xml=%s", conn, st, uri_in, flags, + NULLSTR(dname), bandwidth, dom_xml); + + virResetLastError(); + + if (!VIR_IS_CONNECT(conn)) { + virLibConnError(NULL, VIR_ERR_INVALID_CONN, __FUNCTION__); + return -1; + } + + if (conn->flags & VIR_CONNECT_RO) { + virLibConnError(conn, VIR_ERR_OPERATION_DENIED, __FUNCTION__); + goto error; + } + + if (conn != st->conn) { + virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__); + goto error; + } + + if (conn->driver->domainMigratePrepareTunnel) { + int rv = conn->driver->domainMigratePrepareTunnel(conn, st, uri_in, + flags, dname, + bandwidth, dom_xml); + if (rv < 0) + goto error; + return rv; + } + + virLibConnError(conn, VIR_ERR_NO_SUPPORT, __FUNCTION__); + +error: + /* Copy to connection error object for back compatability */ + virSetConnError(conn); + return -1; +} + + /** * virNodeGetInfo: * @conn: pointer to the hypervisor connection diff --git a/src/libvirt_internal.h b/src/libvirt_internal.h index 5913798..8f1ac3d 100644 --- a/src/libvirt_internal.h +++ b/src/libvirt_internal.h @@ -70,6 +70,12 @@ virDomainPtr virDomainMigrateFinish2 (virConnectPtr dconn, const char *uri, unsigned long flags, int retcode); - +int virDomainMigratePrepareTunnel(virConnectPtr conn, + virStreamPtr st, + const char *uri_in, + unsigned long flags, + const char *dname, + unsigned long resource, + const char *dom_xml); #endif diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index b699fb2..49bbf96 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -239,6 +239,7 @@ virDomainMigratePerform; virDomainMigrateFinish; virDomainMigratePrepare2; virDomainMigrateFinish2; +virDomainMigratePrepareTunnel; virRegisterDriver; virRegisterInterfaceDriver; virRegisterNetworkDriver; diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 0a9cc28..5fb4105 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -2147,6 +2147,7 @@ static virDriver lxcDriver = { NULL, /* nodeDeviceDettach */ NULL, /* nodeDeviceReAttach */ NULL, /* nodeDeviceReset */ + NULL, /* domainMigratePrepareTunnel */ }; static virStateDriver lxcStateDriver = { diff --git a/src/opennebula/one_driver.c b/src/opennebula/one_driver.c index 0ca1e9b..9bcd5c3 100644 --- a/src/opennebula/one_driver.c +++ b/src/opennebula/one_driver.c @@ -787,6 +787,7 @@ static virDriver oneDriver = { NULL, /* nodeDeviceDettach; */ NULL, /* nodeDeviceReAttach; */ NULL, /* nodeDeviceReset; */ + NULL, /* domainMigratePrepareTunnel */ }; static virStateDriver oneStateDriver = { diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c index d577be1..f64ad1e 100644 --- a/src/openvz/openvz_driver.c +++ b/src/openvz/openvz_driver.c @@ -1432,6 +1432,7 @@ static virDriver openvzDriver = { NULL, /* nodeDeviceDettach */ NULL, /* nodeDeviceReAttach */ NULL, /* nodeDeviceReset */ + NULL, /* domainMigratePrepareTunnel */ }; int openvzRegister(void) { diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c index fbb8982..ef465ed 100644 --- a/src/phyp/phyp_driver.c +++ b/src/phyp/phyp_driver.c @@ -1377,6 +1377,7 @@ virDriver phypDriver = { NULL, /* nodeDeviceDettach */ NULL, /* nodeDeviceReAttach */ NULL, /* nodeDeviceReset */ + NULL, /* domainMigratePrepareTunnel */ }; int diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 155e4a3..01981bd 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -71,6 +71,7 @@ #include "hostusb.h" #include "security/security_driver.h" #include "cgroup.h" +#include "libvirt_internal.h" #define VIR_FROM_THIS VIR_FROM_QEMU @@ -5796,6 +5797,432 @@ static void qemuDomainEventQueue(struct qemud_driver *driver, /* Migration support. */ +/* Tunnelled migration stream support */ +struct qemuStreamMigFile { + int fd; + + int watch; + unsigned int cbRemoved; + unsigned int dispatching; + virStreamEventCallback cb; + void *opaque; + virFreeCallback ff; +}; + +static int qemuStreamMigRemoveCallback(virStreamPtr stream) +{ + struct qemud_driver *driver = stream->conn->privateData; + struct qemuStreamMigFile *qemust = stream->privateData; + int ret = -1; + + if (!qemust) { + qemudReportError(stream->conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, + "%s", _("stream is not open")); + return -1; + } + + qemuDriverLock(driver); + if (qemust->watch == 0) { + qemudReportError(stream->conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, + "%s", _("stream does not have a callback registered")); + goto cleanup; + } + + virEventRemoveHandle(qemust->watch); + if (qemust->dispatching) + qemust->cbRemoved = 1; + else if (qemust->ff) + (qemust->ff)(qemust->opaque); + + qemust->watch = 0; + qemust->ff = NULL; + qemust->cb = NULL; + qemust->opaque = NULL; + + ret = 0; + +cleanup: + qemuDriverUnlock(driver); + return ret; +} + +static int qemuStreamMigUpdateCallback(virStreamPtr stream, int events) +{ + struct qemud_driver *driver = stream->conn->privateData; + struct qemuStreamMigFile *qemust = stream->privateData; + int ret = -1; + + if (!qemust) { + qemudReportError(stream->conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, + "%s", _("stream is not open")); + return -1; + } + + qemuDriverLock(driver); + if (qemust->watch == 0) { + qemudReportError(stream->conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, + "%s", _("stream does not have a callback registered")); + goto cleanup; + } + + virEventUpdateHandle(qemust->watch, events); + + ret = 0; + +cleanup: + qemuDriverUnlock(driver); + return ret; +} + +static void qemuStreamMigEvent(int watch ATTRIBUTE_UNUSED, + int fd ATTRIBUTE_UNUSED, + int events, + void *opaque) +{ + virStreamPtr stream = opaque; + struct qemud_driver *driver = stream->conn->privateData; + struct qemuStreamMigFile *qemust = stream->privateData; + virStreamEventCallback cb; + void *cbopaque; + virFreeCallback ff; + + qemuDriverLock(driver); + if (!qemust || !qemust->cb) { + qemuDriverUnlock(driver); + return; + } + + cb = qemust->cb; + cbopaque = qemust->opaque; + ff = qemust->ff; + qemust->dispatching = 1; + qemuDriverUnlock(driver); + + cb(stream, events, cbopaque); + + qemuDriverLock(driver); + qemust->dispatching = 0; + if (qemust->cbRemoved && ff) + (ff)(cbopaque); + qemuDriverUnlock(driver); +} + +static int +qemuStreamMigAddCallback(virStreamPtr st, + int events, + virStreamEventCallback cb, + void *opaque, + virFreeCallback ff) +{ + struct qemud_driver *driver = st->conn->privateData; + struct qemuStreamMigFile *qemust = st->privateData; + int ret = -1; + + if (!qemust) { + qemudReportError(st->conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, + "%s", _("stream is not open")); + return -1; + } + + qemuDriverLock(driver); + if (qemust->watch != 0) { + qemudReportError(st->conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, + "%s", _("stream already has a callback registered")); + goto cleanup; + } + + if ((qemust->watch = virEventAddHandle(qemust->fd, + events, + qemuStreamMigEvent, + st, + NULL)) < 0) { + qemudReportError(st->conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, + "%s", _("cannot register file watch on stream")); + goto cleanup; + } + + qemust->cbRemoved = 0; + qemust->cb = cb; + qemust->opaque = opaque; + qemust->ff = ff; + virStreamRef(st); + + ret = 0; + +cleanup: + qemuDriverUnlock(driver); + return ret; +} + +static void qemuStreamMigFree(struct qemuStreamMigFile *qemust) +{ + if (qemust->fd != -1) + close(qemust->fd); + VIR_FREE(qemust); +} + +static struct qemuStreamMigFile *qemuStreamMigOpen(virStreamPtr st, + const char *unixfile) +{ + struct qemuStreamMigFile *qemust = NULL; + struct sockaddr_un sa_qemu; + int i = 0; + int timeout = 3; + int ret; + + if (VIR_ALLOC(qemust) < 0) + return NULL; + + qemust->fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (qemust->fd < 0) + goto cleanup; + + memset(&sa_qemu, 0, sizeof(sa_qemu)); + sa_qemu.sun_family = AF_UNIX; + if (virStrcpy(sa_qemu.sun_path, unixfile, sizeof(sa_qemu.sun_path)) == NULL) + goto cleanup; + + do { + ret = connect(qemust->fd, (struct sockaddr *)&sa_qemu, sizeof(sa_qemu)); + if (ret == 0) + break; + + if (errno == ENOENT || errno == ECONNREFUSED) { + /* ENOENT : Socket may not have shown up yet + * ECONNREFUSED : Leftover socket hasn't been removed yet */ + continue; + } + + goto cleanup; + } while ((++i <= timeout*5) && (usleep(.2 * 1000000) <= 0)); + + if ((st->flags & VIR_STREAM_NONBLOCK) && virSetNonBlock(qemust->fd) < 0) + goto cleanup; + + return qemust; + +cleanup: + qemuStreamMigFree(qemust); + return NULL; +} + +static int +qemuStreamMigClose(virStreamPtr st) +{ + struct qemud_driver *driver = st->conn->privateData; + struct qemuStreamMigFile *qemust = st->privateData; + + if (!qemust) + return 0; + + qemuDriverLock(driver); + + qemuStreamMigFree(qemust); + + st->privateData = NULL; + + qemuDriverUnlock(driver); + + return 0; +} + +static int qemuStreamMigWrite(virStreamPtr st, const char *bytes, size_t nbytes) +{ + struct qemud_driver *driver = st->conn->privateData; + struct qemuStreamMigFile *qemust = st->privateData; + int ret; + + if (!qemust) { + qemudReportError(st->conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, + "%s", _("stream is not open")); + return -1; + } + + qemuDriverLock(driver); + +retry: + ret = write(qemust->fd, bytes, nbytes); + if (ret < 0) { + if (errno == EAGAIN || errno == EWOULDBLOCK) { + ret = -2; + } else if (errno == EINTR) { + goto retry; + } else { + ret = -1; + virReportSystemError(st->conn, errno, "%s", + _("cannot write to stream")); + } + } + + qemuDriverUnlock(driver); + return ret; +} + +static virStreamDriver qemuStreamMigDrv = { + .streamSend = qemuStreamMigWrite, + .streamFinish = qemuStreamMigClose, + .streamAbort = qemuStreamMigClose, + .streamAddCallback = qemuStreamMigAddCallback, + .streamUpdateCallback = qemuStreamMigUpdateCallback, + .streamRemoveCallback = qemuStreamMigRemoveCallback +}; + +/* Prepare is the first step, and it runs on the destination host. + * + * This version starts an empty VM listening on a localhost TCP port, and + * sets up the corresponding virStream to handle the incoming data. + */ +static int +qemudDomainMigratePrepareTunnel(virConnectPtr dconn, + virStreamPtr st, + const char *uri_in, + unsigned long flags, + const char *dname, + unsigned long resource ATTRIBUTE_UNUSED, + const char *dom_xml) +{ + struct qemud_driver *driver = dconn->privateData; + virDomainDefPtr def = NULL; + virDomainObjPtr vm = NULL; + char *migrateFrom; + virDomainEventPtr event = NULL; + int ret = -1; + int internalret; + char *unixfile = NULL; + unsigned int qemuCmdFlags; + struct qemuStreamMigFile *qemust = NULL; + + qemuDriverLock(driver); + if (!dom_xml) { + qemudReportError(dconn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, + "%s", _("no domain XML passed")); + goto cleanup; + } + if (!uri_in) { + qemudReportError(dconn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, + "%s", _("no URI passed")); + goto cleanup; + } + if (!(flags & VIR_MIGRATE_TUNNELLED)) { + qemudReportError(dconn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, + "%s", _("PrepareTunnel called but no TUNNELLED flag set")); + goto cleanup; + } + if (st == NULL) { + qemudReportError(dconn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, + "%s", _("tunnelled migration requested but NULL stream passed")); + goto cleanup; + } + + /* Parse the domain XML. */ + if (!(def = virDomainDefParseString(dconn, driver->caps, dom_xml, + VIR_DOMAIN_XML_INACTIVE))) { + qemudReportError(dconn, NULL, NULL, VIR_ERR_OPERATION_FAILED, + "%s", _("failed to parse XML")); + goto cleanup; + } + + /* Target domain name, maybe renamed. */ + dname = dname ? dname : def->name; + + /* Ensure the name and UUID don't already exist in an active VM */ + vm = virDomainFindByUUID(&driver->domains, def->uuid); + + if (!vm) vm = virDomainFindByName(&driver->domains, dname); + if (vm) { + if (virDomainIsActive(vm)) { + qemudReportError(dconn, NULL, NULL, VIR_ERR_OPERATION_FAILED, + _("domain with the same name or UUID already exists as '%s'"), + vm->def->name); + goto cleanup; + } + virDomainObjUnlock(vm); + } + + if (!(vm = virDomainAssignDef(dconn, + &driver->domains, + def))) { + qemudReportError(dconn, NULL, NULL, VIR_ERR_OPERATION_FAILED, + "%s", _("failed to assign new VM")); + goto cleanup; + } + def = NULL; + + /* Domain starts inactive, even if the domain XML had an id field. */ + vm->def->id = -1; + + if (virAsprintf(&unixfile, "%s/qemu.tunnelmigrate.dest.%s", + driver->stateDir, vm->def->name) < 0) { + virReportOOMError (dconn); + goto cleanup; + } + unlink(unixfile); + + /* check that this qemu version supports the interactive exec */ + if (qemudExtractVersionInfo(vm->def->emulator, NULL, &qemuCmdFlags) < 0) { + qemudReportError(dconn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, + _("Cannot determine QEMU argv syntax %s"), + vm->def->emulator); + goto cleanup; + } + if (qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX) + internalret = virAsprintf(&migrateFrom, "unix:%s", unixfile); + else if (qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC) + internalret = virAsprintf(&migrateFrom, "exec:nc -U -l %s", unixfile); + else { + qemudReportError(dconn, NULL, NULL, VIR_ERR_OPERATION_FAILED, + "%s", _("Destination qemu is too old to support tunnelled migration")); + goto cleanup; + } + if (internalret < 0) { + virReportOOMError(dconn); + goto cleanup; + } + /* Start the QEMU daemon, with the same command-line arguments plus + * -incoming unix:/path/to/file or exec:nc -U /path/to/file + */ + internalret = qemudStartVMDaemon(dconn, driver, vm, migrateFrom, -1); + VIR_FREE(migrateFrom); + if (internalret < 0) { + /* Note that we don't set an error here because qemudStartVMDaemon + * should have already done that. + */ + if (!vm->persistent) { + virDomainRemoveInactive(&driver->domains, vm); + vm = NULL; + } + goto cleanup; + } + + qemust = qemuStreamMigOpen(st, unixfile); + if (qemust == NULL) { + qemudShutdownVMDaemon(NULL, driver, vm); + virReportSystemError(dconn, errno, + _("cannot open unix socket '%s' for tunnelled migration"), + unixfile); + goto cleanup; + } + + st->driver = &qemuStreamMigDrv; + st->privateData = qemust; + + event = virDomainEventNewFromObj(vm, + VIR_DOMAIN_EVENT_STARTED, + VIR_DOMAIN_EVENT_STARTED_MIGRATED); + ret = 0; + +cleanup: + virDomainDefFree(def); + unlink(unixfile); + VIR_FREE(unixfile); + if (vm) + virDomainObjUnlock(vm); + if (event) + qemuDomainEventQueue(driver, event); + qemuDriverUnlock(driver); + return ret; +} + /* Prepare is the first step, and it runs on the destination host. * * This starts an empty VM listening on a TCP port. @@ -5806,7 +6233,7 @@ qemudDomainMigratePrepare2 (virConnectPtr dconn, int *cookielen ATTRIBUTE_UNUSED, const char *uri_in, char **uri_out, - unsigned long flags ATTRIBUTE_UNUSED, + unsigned long flags, const char *dname, unsigned long resource ATTRIBUTE_UNUSED, const char *dom_xml) @@ -5826,6 +6253,15 @@ qemudDomainMigratePrepare2 (virConnectPtr dconn, *uri_out = NULL; qemuDriverLock(driver); + if (flags & VIR_MIGRATE_TUNNELLED) { + /* this is a logical error; we never should have gotten here with + * VIR_MIGRATE_TUNNELLED set + */ + qemudReportError(dconn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, + "%s", _("Tunnelled migration requested but invalid RPC method called")); + goto cleanup; + } + if (!dom_xml) { qemudReportError (dconn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, "%s", _("no domain XML passed")); @@ -5967,6 +6403,223 @@ cleanup: qemuDomainEventQueue(driver, event); qemuDriverUnlock(driver); return ret; + +} + +static int doTunnelMigrate(virDomainPtr dom, + virDomainObjPtr vm, + const char *uri, + unsigned long flags, + const char *dname, + unsigned long resource) +{ + struct qemud_driver *driver = dom->conn->privateData; + int client_sock, qemu_sock; + struct sockaddr_un sa_qemu, sa_client; + socklen_t addrlen; + virConnectPtr dconn; + virDomainPtr ddomain; + char *dest; + int retval = -1; + ssize_t bytes; + char buffer[65536]; + char *safe_uri; + virStreamPtr st; + char *dom_xml = NULL; + char *unixfile; + int internalret; + unsigned int qemuCmdFlags; + int status; + unsigned long long transferred, remaining, total; + + /* the order of operations is important here; we make sure the + * destination side is completely setup before we touch the source + */ + + safe_uri = qemuMonitorEscapeArg(uri); + if (!safe_uri) { + virReportOOMError(dom->conn); + return -1; + } + + dconn = virConnectOpen(safe_uri); + VIR_FREE (safe_uri); + if (dconn == NULL) { + qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED, + _("Failed to connect to remote libvirt URI %s"), uri); + return -1; + } + if (!VIR_DRV_SUPPORTS_FEATURE(dconn->driver, dconn, + VIR_DRV_FEATURE_MIGRATION_V2)) { + qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED, "%s", + _("Destination libvirt does not support required migration protocol 2")); + goto close_dconn; + } + + st = virStreamNew(dconn, 0); + if (st == NULL) + /* virStreamNew only fails on OOM, and it reports the error itself */ + goto close_dconn; + + dom_xml = virDomainDefFormat(dom->conn, vm->def, VIR_DOMAIN_XML_SECURE); + if (!dom_xml) { + qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED, + "%s", _("failed to get domain xml")); + goto close_stream; + } + + internalret = dconn->driver->domainMigratePrepareTunnel(dconn, st, uri, + flags, dname, + resource, dom_xml); + VIR_FREE(dom_xml); + if (internalret < 0) + /* domainMigratePrepareTunnel sets the error for us */ + goto close_stream; + + if (virAsprintf(&unixfile, "%s/qemu.tunnelmigrate.src.%s", + driver->stateDir, vm->def->name) < 0) { + virReportOOMError(dom->conn); + goto finish_migrate; + } + + qemu_sock = socket(AF_UNIX, SOCK_STREAM, 0); + if (qemu_sock < 0) { + virReportSystemError(dom->conn, errno, "%s", + _("cannot open tunnelled migration socket")); + goto free_unix_path; + } + memset(&sa_qemu, 0, sizeof(sa_qemu)); + sa_qemu.sun_family = AF_UNIX; + if (virStrcpy(sa_qemu.sun_path, unixfile, + sizeof(sa_qemu.sun_path)) == NULL) { + qemudReportError(dom->conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, + _("Unix socket '%s' too big for destination"), + unixfile); + goto close_qemu_sock; + } + unlink(unixfile); + if (bind(qemu_sock, (struct sockaddr *)&sa_qemu, sizeof(sa_qemu)) < 0) { + virReportSystemError(dom->conn, errno, + _("Cannot bind to unix socket '%s' for tunnelled migration"), + unixfile); + goto close_qemu_sock; + } + if (listen(qemu_sock, 1) < 0) { + virReportSystemError(dom->conn, errno, + _("Cannot listen on unix socket '%s' for tunnelled migration"), + unixfile); + goto close_qemu_sock; + } + + /* check that this qemu version supports the unix migration */ + if (qemudExtractVersionInfo(vm->def->emulator, NULL, &qemuCmdFlags) < 0) { + qemudReportError(dom->conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, + _("Cannot extract Qemu version from '%s'"), + vm->def->emulator); + goto close_qemu_sock; + } + if (qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX) + internalret = virAsprintf(&dest, "unix:%s", unixfile); + else if (qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC) + internalret = virAsprintf(&dest, "exec:nc -U %s", unixfile); + else { + qemudReportError(dom->conn, NULL, NULL, VIR_ERR_OPERATION_FAILED, + "%s", _("Source qemu is too old to support tunnelled migration")); + goto close_qemu_sock; + } + if (internalret < 0) { + virReportOOMError(dom->conn); + goto close_qemu_sock; + } + + internalret = qemuMonitorMigrate(vm, 1, dest); + VIR_FREE(dest); + if (internalret < 0) { + qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED, + "%s", _("tunnelled migration monitor command failed")); + goto close_qemu_sock; + } + + /* it is also possible that the migrate didn't fail initially, but + * rather failed later on. Check the output of "info migrate" + */ + if (qemuMonitorGetMigrationStatus(vm, &status, + &transferred, + &remaining, + &total) < 0) { + goto qemu_cancel_migration; + } + + if (status == QEMU_MONITOR_MIGRATION_STATUS_ERROR) { + qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED, + "%s",_("migrate failed")); + goto qemu_cancel_migration; + } + + addrlen = sizeof(sa_client); + while ((client_sock = accept(qemu_sock, (struct sockaddr *)&sa_client, &addrlen)) < 0) { + if (errno == EAGAIN || errno == EINTR) + continue; + virReportSystemError(dom->conn, errno, "%s", + _("tunnelled migration failed to accept from qemu")); + goto qemu_cancel_migration; + } + + for (;;) { + bytes = saferead(client_sock, buffer, sizeof(buffer)); + if (bytes < 0) { + virReportSystemError(dconn, errno, "%s", + _("tunnelled migration failed to read from qemu")); + goto close_client_sock; + } + else if (bytes == 0) + /* EOF; get out of here */ + break; + + if (virStreamSend(st, buffer, bytes) < 0) { + qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED, + _("Failed to write migration data to remote libvirtd")); + virStreamAbort(st); + goto close_client_sock; + } + } + + if (virStreamFinish(st) < 0) + /* virStreamFinish set the error for us */ + goto close_client_sock; + + retval = 0; + +close_client_sock: + close(client_sock); + +qemu_cancel_migration: + if (retval != 0) + qemuMonitorMigrateCancel(vm); + +close_qemu_sock: + close(qemu_sock); + +free_unix_path: + unlink(unixfile); + VIR_FREE(unixfile); + +finish_migrate: + dname = dname ? dname : dom->name; + ddomain = dconn->driver->domainMigrateFinish2 + (dconn, dname, NULL, 0, uri, flags, retval); + if (ddomain) + virUnrefDomain(ddomain); + +close_stream: + /* don't call virStreamFree(), because that resets any pending errors */ + virUnrefStream(st); + +close_dconn: + /* don't call virConnectClose(), because that resets any pending errors */ + virUnrefConnect(dconn); + + return retval; } /* Perform is the second step, and it runs on the source host. */ @@ -6022,42 +6675,49 @@ qemudDomainMigratePerform (virDomainPtr dom, qemuMonitorSetMigrationSpeed(vm, resource) < 0) goto cleanup; - /* Issue the migrate command. */ - if (STRPREFIX(uri, "tcp:") && !STRPREFIX(uri, "tcp://")) { - /* HACK: source host generates bogus URIs, so fix them up */ - char *tmpuri; - if (virAsprintf(&tmpuri, "tcp://%s", uri + strlen("tcp:")) < 0) { - virReportOOMError(dom->conn); + if (!(flags & VIR_MIGRATE_TUNNELLED)) { + /* Issue the migrate command. */ + if (STRPREFIX(uri, "tcp:") && !STRPREFIX(uri, "tcp://")) { + /* HACK: source host generates bogus URIs, so fix them up */ + char *tmpuri; + if (virAsprintf(&tmpuri, "tcp://%s", uri + strlen("tcp:")) < 0) { + virReportOOMError(dom->conn); + goto cleanup; + } + uribits = xmlParseURI(tmpuri); + VIR_FREE(tmpuri); + } else { + uribits = xmlParseURI(uri); + } + if (!uribits) { + qemudReportError(dom->conn, dom, NULL, VIR_ERR_INTERNAL_ERROR, + _("cannot parse URI %s"), uri); goto cleanup; } - uribits = xmlParseURI(tmpuri); - VIR_FREE(tmpuri); - } else { - uribits = xmlParseURI(uri); - } - if (!uribits) { - qemudReportError(dom->conn, dom, NULL, VIR_ERR_INTERNAL_ERROR, - _("cannot parse URI %s"), uri); - goto cleanup; - } - if (qemuMonitorMigrateToHost(vm, uribits->server, uribits->port) < 0) - goto cleanup; + if (qemuMonitorMigrateToHost(vm, uribits->server, uribits->port) < 0) + goto cleanup; - /* it is also possible that the migrate didn't fail initially, but - * rather failed later on. Check the output of "info migrate" - */ - if (qemuMonitorGetMigrationStatus(vm, &status, - &transferred, - &remaining, - &total) < 0) { - goto cleanup; - } + /* it is also possible that the migrate didn't fail initially, but + * rather failed later on. Check the output of "info migrate" + */ + if (qemuMonitorGetMigrationStatus(vm, &status, + &transferred, + &remaining, + &total) < 0) { + goto cleanup; + } - if (status != QEMU_MONITOR_MIGRATION_STATUS_COMPLETED) { - qemudReportError (dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED, - "%s", _("migrate did not successfully complete")); - goto cleanup; + if (status != QEMU_MONITOR_MIGRATION_STATUS_COMPLETED) { + qemudReportError (dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED, + "%s", _("migrate did not successfully complete")); + goto cleanup; + } + } + else { + if (doTunnelMigrate(dom, vm, uri, flags, dname, resource) < 0) + /* doTunnelMigrate already set the error, so just get out */ + goto cleanup; } /* Clean up the source domain. */ @@ -6357,6 +7017,7 @@ static virDriver qemuDriver = { qemudNodeDeviceDettach, /* nodeDeviceDettach */ qemudNodeDeviceReAttach, /* nodeDeviceReAttach */ qemudNodeDeviceReset, /* nodeDeviceReset */ + qemudDomainMigratePrepareTunnel, /* domainMigratePrepareTunnel */ }; diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index 731b213..25aaf32 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -6698,7 +6698,6 @@ done: } -#if 0 static struct private_stream_data * remoteStreamOpen(virStreamPtr st, int output ATTRIBUTE_UNUSED, @@ -7049,9 +7048,51 @@ static virStreamDriver remoteStreamDrv = { .streamUpdateCallback = remoteStreamEventUpdateCallback, .streamRemoveCallback = remoteStreamEventRemoveCallback, }; -#endif +static int +remoteDomainMigratePrepareTunnel(virConnectPtr conn, + virStreamPtr st, + const char *uri_in, + unsigned long flags, + const char *dname, + unsigned long resource, + const char *dom_xml) +{ + struct private_data *priv = conn->privateData; + struct private_stream_data *privst = NULL; + int rv = -1; + remote_domain_migrate_prepare_tunnel_args args; + + remoteDriverLock(priv); + + if (!(privst = remoteStreamOpen(st, 1, REMOTE_PROC_DOMAIN_MIGRATE_PREPARE_TUNNEL, priv->counter))) + goto done; + + st->driver = &remoteStreamDrv; + st->privateData = privst; + + args.uri_in = uri_in == NULL ? NULL : (char **) &uri_in; + args.flags = flags; + args.dname = dname == NULL ? NULL : (char **) &dname; + args.resource = resource; + args.dom_xml = (char *) dom_xml; + + if (call(conn, priv, 0, REMOTE_PROC_DOMAIN_MIGRATE_PREPARE_TUNNEL, + (xdrproc_t) xdr_remote_domain_migrate_prepare_tunnel_args, (char *) &args, + (xdrproc_t) xdr_void, NULL) == -1) { + remoteStreamRelease(st); + goto done; + } + + rv = 0; + +done: + remoteDriverUnlock(priv); + + return rv; +} + /*----------------------------------------------------------------------*/ @@ -8410,6 +8451,7 @@ static virDriver remote_driver = { remoteNodeDeviceDettach, /* nodeDeviceDettach */ remoteNodeDeviceReAttach, /* nodeDeviceReAttach */ remoteNodeDeviceReset, /* nodeDeviceReset */ + remoteDomainMigratePrepareTunnel, /* domainMigratePrepareTunnel */ }; static virNetworkDriver network_driver = { diff --git a/src/remote/remote_protocol.c b/src/remote/remote_protocol.c index 1d2d242..8c61712 100644 --- a/src/remote/remote_protocol.c +++ b/src/remote/remote_protocol.c @@ -2698,6 +2698,23 @@ xdr_remote_secret_lookup_by_usage_ret (XDR *xdrs, remote_secret_lookup_by_usage_ } bool_t +xdr_remote_domain_migrate_prepare_tunnel_args (XDR *xdrs, remote_domain_migrate_prepare_tunnel_args *objp) +{ + + if (!xdr_remote_string (xdrs, &objp->uri_in)) + return FALSE; + if (!xdr_uint64_t (xdrs, &objp->flags)) + return FALSE; + if (!xdr_remote_string (xdrs, &objp->dname)) + return FALSE; + if (!xdr_uint64_t (xdrs, &objp->resource)) + return FALSE; + if (!xdr_remote_nonnull_string (xdrs, &objp->dom_xml)) + return FALSE; + return TRUE; +} + +bool_t xdr_remote_procedure (XDR *xdrs, remote_procedure *objp) { diff --git a/src/remote/remote_protocol.h b/src/remote/remote_protocol.h index 64da9fa..245f411 100644 --- a/src/remote/remote_protocol.h +++ b/src/remote/remote_protocol.h @@ -1528,6 +1528,16 @@ struct remote_secret_lookup_by_usage_ret { remote_nonnull_secret secret; }; typedef struct remote_secret_lookup_by_usage_ret remote_secret_lookup_by_usage_ret; + +struct remote_domain_migrate_prepare_tunnel_args { + remote_string uri_in; + uint64_t flags; + remote_string dname; + uint64_t resource; + remote_nonnull_string dom_xml; +}; +typedef struct remote_domain_migrate_prepare_tunnel_args remote_domain_migrate_prepare_tunnel_args; + #define REMOTE_PROGRAM 0x20008086 #define REMOTE_PROTOCOL_VERSION 1 @@ -1679,6 +1689,7 @@ enum remote_procedure { REMOTE_PROC_SECRET_GET_VALUE = 145, REMOTE_PROC_SECRET_UNDEFINE = 146, REMOTE_PROC_SECRET_LOOKUP_BY_USAGE = 147, + REMOTE_PROC_DOMAIN_MIGRATE_PREPARE_TUNNEL = 148, }; typedef enum remote_procedure remote_procedure; @@ -1959,6 +1970,7 @@ extern bool_t xdr_remote_secret_get_value_ret (XDR *, remote_secret_get_value_r extern bool_t xdr_remote_secret_undefine_args (XDR *, remote_secret_undefine_args*); extern bool_t xdr_remote_secret_lookup_by_usage_args (XDR *, remote_secret_lookup_by_usage_args*); extern bool_t xdr_remote_secret_lookup_by_usage_ret (XDR *, remote_secret_lookup_by_usage_ret*); +extern bool_t xdr_remote_domain_migrate_prepare_tunnel_args (XDR *, remote_domain_migrate_prepare_tunnel_args*); extern bool_t xdr_remote_procedure (XDR *, remote_procedure*); extern bool_t xdr_remote_message_type (XDR *, remote_message_type*); extern bool_t xdr_remote_message_status (XDR *, remote_message_status*); @@ -2213,6 +2225,7 @@ extern bool_t xdr_remote_secret_get_value_ret (); extern bool_t xdr_remote_secret_undefine_args (); extern bool_t xdr_remote_secret_lookup_by_usage_args (); extern bool_t xdr_remote_secret_lookup_by_usage_ret (); +extern bool_t xdr_remote_domain_migrate_prepare_tunnel_args (); extern bool_t xdr_remote_procedure (); extern bool_t xdr_remote_message_type (); extern bool_t xdr_remote_message_status (); diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x index 6b0a784..537a838 100644 --- a/src/remote/remote_protocol.x +++ b/src/remote/remote_protocol.x @@ -1355,6 +1355,14 @@ struct remote_secret_lookup_by_usage_ret { remote_nonnull_secret secret; }; +struct remote_domain_migrate_prepare_tunnel_args { + remote_string uri_in; + unsigned hyper flags; + remote_string dname; + unsigned hyper resource; + remote_nonnull_string dom_xml; +}; + /*----- Protocol. -----*/ /* Define the program number, protocol version and procedure numbers here. */ @@ -1523,7 +1531,9 @@ enum remote_procedure { REMOTE_PROC_SECRET_SET_VALUE = 144, REMOTE_PROC_SECRET_GET_VALUE = 145, REMOTE_PROC_SECRET_UNDEFINE = 146, - REMOTE_PROC_SECRET_LOOKUP_BY_USAGE = 147 + REMOTE_PROC_SECRET_LOOKUP_BY_USAGE = 147, + + REMOTE_PROC_DOMAIN_MIGRATE_PREPARE_TUNNEL = 148 }; diff --git a/src/test/test_driver.c b/src/test/test_driver.c index cb48f64..f57c92a 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -4267,6 +4267,7 @@ static virDriver testDriver = { NULL, /* nodeDeviceDettach */ NULL, /* nodeDeviceReAttach */ NULL, /* nodeDeviceReset */ + NULL, /* domainMigratePrepareTunnel */ }; static virNetworkDriver testNetworkDriver = { diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c index f0d5fd4..9a7fe42 100644 --- a/src/uml/uml_driver.c +++ b/src/uml/uml_driver.c @@ -1861,6 +1861,7 @@ static virDriver umlDriver = { NULL, /* nodeDeviceDettach */ NULL, /* nodeDeviceReAttach */ NULL, /* nodeDeviceReset */ + NULL, /* domainMigratePrepareTunnel */ }; diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index 72220e1..4f43901 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -6467,7 +6467,7 @@ virDriver NAME(Driver) = { NULL, /* nodeDeviceDettach */ NULL, /* nodeDeviceReAttach */ NULL, /* nodeDeviceReset */ - + NULL, /* domainMigratePrepareTunnel */ }; virNetworkDriver NAME(NetworkDriver) = { diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c index 9e1bc32..76b896a 100644 --- a/src/xen/xen_driver.c +++ b/src/xen/xen_driver.c @@ -1722,6 +1722,7 @@ static virDriver xenUnifiedDriver = { xenUnifiedNodeDeviceDettach, /* nodeDeviceDettach */ xenUnifiedNodeDeviceReAttach, /* nodeDeviceReAttach */ xenUnifiedNodeDeviceReset, /* nodeDeviceReset */ + NULL, /* domainMigratePrepareTunnel */ }; /** diff --git a/tools/virsh.c b/tools/virsh.c index 3482389..2222269 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -2462,6 +2462,7 @@ static const vshCmdInfo info_migrate[] = { static const vshCmdOptDef opts_migrate[] = { {"live", VSH_OT_BOOL, 0, gettext_noop("live migration")}, + {"tunnelled", VSH_OT_BOOL, 0, gettext_noop("tunnelled migration")}, {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("domain name, id or uuid")}, {"desturi", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("connection URI of the destination host")}, {"migrateuri", VSH_OT_DATA, 0, gettext_noop("migration URI, usually can be omitted")}, @@ -2499,12 +2500,31 @@ cmdMigrate (vshControl *ctl, const vshCmd *cmd) if (vshCommandOptBool (cmd, "live")) flags |= VIR_MIGRATE_LIVE; - /* Temporarily connect to the destination host. */ - dconn = virConnectOpenAuth (desturi, virConnectAuthPtrDefault, 0); - if (!dconn) goto done; + if (vshCommandOptBool (cmd, "tunnelled")) + flags |= VIR_MIGRATE_TUNNELLED; + + if (!(flags & VIR_MIGRATE_TUNNELLED)) { + /* For regular live migration, temporarily connect to the destination + * host. For tunnelled migration, that will be done by the remote + * libvirtd. + */ + dconn = virConnectOpenAuth(desturi, virConnectAuthPtrDefault, 0); + if (!dconn) goto done; + } + else { + /* when doing tunnelled migration, use migrateuri if it's available, + * but if not, fall back to desturi. This allows both of these + * to work: + * + * virsh migrate guest qemu+tls://dest/system + * virsh migrate guest qemu+tls://dest/system qemu+tls://dest-alt/system + */ + if (migrateuri == NULL) + migrateuri = desturi; + } /* Migrate. */ - ddom = virDomainMigrate (dom, dconn, flags, dname, migrateuri, 0); + ddom = virDomainMigrate(dom, dconn, flags, dname, migrateuri, 0); if (!ddom) goto done; ret = TRUE; -- 1.6.0.6

On Wed, Sep 30, 2009 at 01:27:21PM +0200, Chris Lalancette wrote:
+static int doTunnelMigrate(virDomainPtr dom, + virDomainObjPtr vm, + const char *uri, + unsigned long flags, + const char *dname, + unsigned long resource) +{ + struct qemud_driver *driver = dom->conn->privateData; + int client_sock, qemu_sock; + struct sockaddr_un sa_qemu, sa_client; + socklen_t addrlen; + virConnectPtr dconn; + virDomainPtr ddomain; + char *dest; + int retval = -1; + ssize_t bytes; + char buffer[65536]; + char *safe_uri; + virStreamPtr st; + char *dom_xml = NULL; + char *unixfile; + int internalret; + unsigned int qemuCmdFlags; + int status; + unsigned long long transferred, remaining, total; + + /* the order of operations is important here; we make sure the + * destination side is completely setup before we touch the source + */ + + safe_uri = qemuMonitorEscapeArg(uri); + if (!safe_uri) { + virReportOOMError(dom->conn); + return -1; + } + + dconn = virConnectOpen(safe_uri); + VIR_FREE (safe_uri);
virConnectOpen() doesn't want a URI that's been escaped for QEMU monitor syntax - it should just take the original 'uri' surely ?
+ if (qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX) + internalret = virAsprintf(&dest, "unix:%s", unixfile); + else if (qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC) + internalret = virAsprintf(&dest, "exec:nc -U %s", unixfile);
+ + internalret = qemuMonitorMigrate(vm, 1, dest);
This is the bit that should be done via strongly typed monitor APIs, eg something like if (qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_UNIX) internalret = qemuMonitorMigrateToUNIX(vm, unixfile); else if (qemuCmdFlags & QEMUD_CMD_FLAG_MIGRATE_QEMU_EXEC) { const char *args[] = { "nc", "-U", unixfile, NULL}; internalret = qemuMonitorMigrateToCommand(vm, args, "/dev/null"); } else { ....error }
+ for (;;) { + bytes = saferead(client_sock, buffer, sizeof(buffer)); + if (bytes < 0) { + virReportSystemError(dconn, errno, "%s", + _("tunnelled migration failed to read from qemu")); + goto close_client_sock; + } + else if (bytes == 0) + /* EOF; get out of here */ + break; + + if (virStreamSend(st, buffer, bytes) < 0) { + qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED, + _("Failed to write migration data to remote libvirtd")); + virStreamAbort(st); + goto close_client_sock; + } + }
The virStreamSend() API isn't guaranteed to have sent all the bytes you passed in, so its neccessary to check the return value to see how much has actually been sent, and loop until its all gone even in blocking mode. Regards, Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
participants (2)
-
Chris Lalancette
-
Daniel P. Berrange