mirror of https://gitee.com/openkylin/libvirt.git
Extend RPC server to allow FD passing
The RPC server classes are extended to allow FDs to be received from clients with calls. There is not currently any way for a procedure to pass FDs back to the client with replies * daemon/remote.c, src/rpc/gendispatch.pl: Change virNetMessageHeaderPtr param to virNetMessagePtr in dispatcher impls * src/rpc/virnetserver.c, src/rpc/virnetserverclient.c, src/rpc/virnetserverprogram.c, src/rpc/virnetserverprogram.h: Extend to support FD passing
This commit is contained in:
parent
36a9c83de4
commit
3ae0ab67e6
125
daemon/remote.c
125
daemon/remote.c
|
@ -586,7 +586,7 @@ int remoteClientInitHook(virNetServerPtr srv ATTRIBUTE_UNUSED,
|
|||
static int
|
||||
remoteDispatchOpen(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
struct remote_open_args *args)
|
||||
{
|
||||
|
@ -633,7 +633,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchClose(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr ATTRIBUTE_UNUSED)
|
||||
{
|
||||
virNetServerClientDelayedClose(client);
|
||||
|
@ -644,7 +644,7 @@ remoteDispatchClose(virNetServerPtr server ATTRIBUTE_UNUSED,
|
|||
static int
|
||||
remoteDispatchDomainGetSchedulerType(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_get_scheduler_type_args *args,
|
||||
remote_domain_get_scheduler_type_ret *ret)
|
||||
|
@ -819,7 +819,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchDomainGetSchedulerParameters(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_get_scheduler_parameters_args *args,
|
||||
remote_domain_get_scheduler_parameters_ret *ret)
|
||||
|
@ -872,7 +872,7 @@ no_memory:
|
|||
static int
|
||||
remoteDispatchDomainGetSchedulerParametersFlags(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_get_scheduler_parameters_flags_args *args,
|
||||
remote_domain_get_scheduler_parameters_flags_ret *ret)
|
||||
|
@ -926,7 +926,7 @@ no_memory:
|
|||
static int
|
||||
remoteDispatchDomainMemoryStats(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_memory_stats_args *args,
|
||||
remote_domain_memory_stats_ret *ret)
|
||||
|
@ -988,7 +988,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchDomainBlockPeek(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_block_peek_args *args,
|
||||
remote_domain_block_peek_ret *ret)
|
||||
|
@ -1045,7 +1045,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchDomainBlockStatsFlags(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_block_stats_flags_args *args,
|
||||
remote_domain_block_stats_flags_ret *ret)
|
||||
|
@ -1116,7 +1116,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchDomainMemoryPeek(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_memory_peek_args *args,
|
||||
remote_domain_memory_peek_ret *ret)
|
||||
|
@ -1171,7 +1171,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchDomainGetSecurityLabel(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_get_security_label_args *args,
|
||||
remote_domain_get_security_label_ret *ret)
|
||||
|
@ -1220,7 +1220,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchNodeGetSecurityModel(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_node_get_security_model_ret *ret)
|
||||
{
|
||||
|
@ -1263,7 +1263,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchDomainGetVcpuPinInfo(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_get_vcpu_pin_info_args *args,
|
||||
remote_domain_get_vcpu_pin_info_ret *ret)
|
||||
|
@ -1333,7 +1333,7 @@ no_memory:
|
|||
static int
|
||||
remoteDispatchDomainGetVcpus(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_get_vcpus_args *args,
|
||||
remote_domain_get_vcpus_ret *ret)
|
||||
|
@ -1418,7 +1418,7 @@ no_memory:
|
|||
static int
|
||||
remoteDispatchDomainMigratePrepare(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_migrate_prepare_args *args,
|
||||
remote_domain_migrate_prepare_ret *ret)
|
||||
|
@ -1475,7 +1475,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchDomainMigratePrepare2(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_migrate_prepare2_args *args,
|
||||
remote_domain_migrate_prepare2_ret *ret)
|
||||
|
@ -1527,7 +1527,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchDomainGetMemoryParameters(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_get_memory_parameters_args *args,
|
||||
remote_domain_get_memory_parameters_ret *ret)
|
||||
|
@ -1590,7 +1590,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchDomainGetBlkioParameters(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_get_blkio_parameters_args *args,
|
||||
remote_domain_get_blkio_parameters_ret *ret)
|
||||
|
@ -1653,7 +1653,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchNodeGetCPUStats(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_node_get_cpu_stats_args *args,
|
||||
remote_node_get_cpu_stats_ret *ret)
|
||||
|
@ -1731,7 +1731,7 @@ no_memory:
|
|||
static int
|
||||
remoteDispatchNodeGetMemoryStats(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_node_get_memory_stats_args *args,
|
||||
remote_node_get_memory_stats_ret *ret)
|
||||
|
@ -1809,7 +1809,7 @@ no_memory:
|
|||
static int
|
||||
remoteDispatchDomainGetBlockJobInfo(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_get_block_job_info_args *args,
|
||||
remote_domain_get_block_job_info_ret *ret)
|
||||
|
@ -1853,7 +1853,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchAuthList(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_auth_list_ret *ret)
|
||||
{
|
||||
|
@ -1923,7 +1923,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchAuthSaslInit(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_auth_sasl_init_ret *ret)
|
||||
{
|
||||
|
@ -2047,7 +2047,7 @@ error:
|
|||
static int
|
||||
remoteDispatchAuthSaslStart(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_auth_sasl_start_args *args,
|
||||
remote_auth_sasl_start_ret *ret)
|
||||
|
@ -2145,7 +2145,7 @@ error:
|
|||
static int
|
||||
remoteDispatchAuthSaslStep(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_auth_sasl_step_args *args,
|
||||
remote_auth_sasl_step_ret *ret)
|
||||
|
@ -2242,7 +2242,7 @@ error:
|
|||
static int
|
||||
remoteDispatchAuthSaslInit(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_auth_sasl_init_ret *ret ATTRIBUTE_UNUSED)
|
||||
{
|
||||
|
@ -2255,7 +2255,7 @@ remoteDispatchAuthSaslInit(virNetServerPtr server ATTRIBUTE_UNUSED,
|
|||
static int
|
||||
remoteDispatchAuthSaslStart(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_auth_sasl_start_args *args ATTRIBUTE_UNUSED,
|
||||
remote_auth_sasl_start_ret *ret ATTRIBUTE_UNUSED)
|
||||
|
@ -2269,7 +2269,7 @@ remoteDispatchAuthSaslStart(virNetServerPtr server ATTRIBUTE_UNUSED,
|
|||
static int
|
||||
remoteDispatchAuthSaslStep(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_auth_sasl_step_args *args ATTRIBUTE_UNUSED,
|
||||
remote_auth_sasl_step_ret *ret ATTRIBUTE_UNUSED)
|
||||
|
@ -2288,7 +2288,7 @@ remoteDispatchAuthSaslStep(virNetServerPtr server ATTRIBUTE_UNUSED,
|
|||
static int
|
||||
remoteDispatchAuthPolkit(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_auth_polkit_ret *ret)
|
||||
{
|
||||
|
@ -2388,7 +2388,7 @@ authdeny:
|
|||
static int
|
||||
remoteDispatchAuthPolkit(virNetServerPtr server,
|
||||
virNetServerClientPtr client,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_auth_polkit_ret *ret)
|
||||
{
|
||||
|
@ -2527,7 +2527,7 @@ authdeny:
|
|||
static int
|
||||
remoteDispatchAuthPolkit(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_auth_polkit_ret *ret ATTRIBUTE_UNUSED)
|
||||
{
|
||||
|
@ -2547,7 +2547,7 @@ remoteDispatchAuthPolkit(virNetServerPtr server ATTRIBUTE_UNUSED,
|
|||
static int
|
||||
remoteDispatchNodeDeviceGetParent(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_node_device_get_parent_args *args,
|
||||
remote_node_device_get_parent_ret *ret)
|
||||
|
@ -2602,7 +2602,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchDomainEventsRegister(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr ATTRIBUTE_UNUSED,
|
||||
remote_domain_events_register_ret *ret ATTRIBUTE_UNUSED)
|
||||
{
|
||||
|
@ -2644,7 +2644,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchDomainEventsDeregister(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr ATTRIBUTE_UNUSED,
|
||||
remote_domain_events_deregister_ret *ret ATTRIBUTE_UNUSED)
|
||||
{
|
||||
|
@ -2718,7 +2718,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchSecretGetValue(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_secret_get_value_args *args,
|
||||
remote_secret_get_value_ret *ret)
|
||||
|
@ -2757,7 +2757,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchDomainGetState(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_get_state_args *args,
|
||||
remote_domain_get_state_ret *ret)
|
||||
|
@ -2791,7 +2791,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchDomainEventsRegisterAny(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr ATTRIBUTE_UNUSED,
|
||||
remote_domain_events_register_any_args *args)
|
||||
{
|
||||
|
@ -2840,7 +2840,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchDomainEventsDeregisterAny(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr ATTRIBUTE_UNUSED,
|
||||
remote_domain_events_deregister_any_args *args)
|
||||
{
|
||||
|
@ -2885,7 +2885,7 @@ cleanup:
|
|||
static int
|
||||
qemuDispatchMonitorCommand(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
qemu_monitor_command_args *args,
|
||||
qemu_monitor_command_ret *ret)
|
||||
|
@ -2921,7 +2921,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchDomainMigrateBegin3(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_migrate_begin3_args *args,
|
||||
remote_domain_migrate_begin3_ret *ret)
|
||||
|
@ -2973,7 +2973,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchDomainMigratePrepare3(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_migrate_prepare3_args *args,
|
||||
remote_domain_migrate_prepare3_ret *ret)
|
||||
|
@ -3031,7 +3031,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchDomainMigratePerform3(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_migrate_perform3_args *args,
|
||||
remote_domain_migrate_perform3_ret *ret)
|
||||
|
@ -3087,7 +3087,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchDomainMigrateFinish3(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_migrate_finish3_args *args,
|
||||
remote_domain_migrate_finish3_ret *ret)
|
||||
|
@ -3141,7 +3141,7 @@ cleanup:
|
|||
static int
|
||||
remoteDispatchDomainMigrateConfirm3(virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client ATTRIBUTE_UNUSED,
|
||||
virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_domain_migrate_confirm3_args *args)
|
||||
{
|
||||
|
@ -3175,6 +3175,45 @@ cleanup:
|
|||
}
|
||||
|
||||
|
||||
static int remoteDispatchSupportsFeature(
|
||||
virNetServerPtr server ATTRIBUTE_UNUSED,
|
||||
virNetServerClientPtr client,
|
||||
virNetMessagePtr msg ATTRIBUTE_UNUSED,
|
||||
virNetMessageErrorPtr rerr,
|
||||
remote_supports_feature_args *args,
|
||||
remote_supports_feature_ret *ret)
|
||||
{
|
||||
int rv = -1;
|
||||
int supported;
|
||||
struct daemonClientPrivate *priv =
|
||||
virNetServerClientGetPrivateData(client);
|
||||
|
||||
if (!priv->conn) {
|
||||
virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
switch (args->feature) {
|
||||
case VIR_DRV_FEATURE_FD_PASSING:
|
||||
supported = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
if ((supported = virDrvSupportsFeature(priv->conn, args->feature)) < 0)
|
||||
goto cleanup;
|
||||
break;
|
||||
}
|
||||
|
||||
ret->supported = supported;
|
||||
rv = 0;
|
||||
|
||||
cleanup:
|
||||
if (rv < 0)
|
||||
virNetMessageSaveError(rerr);
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
/*----- Helpers. -----*/
|
||||
|
||||
/* get_nonnull_domain and get_nonnull_network turn an on-wire
|
||||
|
|
|
@ -1191,6 +1191,7 @@ virNetClientHasPassFD;
|
|||
# virnetmessage.h
|
||||
virNetMessageClear;
|
||||
virNetMessageDecodeNumFDs;
|
||||
virNetMessageDupFD;
|
||||
virNetMessageEncodeHeader;
|
||||
virNetMessageEncodePayload;
|
||||
virNetMessageEncodeNumFDs;
|
||||
|
|
|
@ -2348,7 +2348,7 @@ enum remote_procedure {
|
|||
REMOTE_PROC_DOMAIN_GET_SCHEDULER_PARAMETERS = 57, /* skipgen autogen */
|
||||
REMOTE_PROC_DOMAIN_SET_SCHEDULER_PARAMETERS = 58, /* autogen autogen */
|
||||
REMOTE_PROC_GET_HOSTNAME = 59, /* autogen autogen priority:high */
|
||||
REMOTE_PROC_SUPPORTS_FEATURE = 60, /* autogen autogen priority:high */
|
||||
REMOTE_PROC_SUPPORTS_FEATURE = 60, /* skipgen autogen priority:high */
|
||||
|
||||
REMOTE_PROC_DOMAIN_MIGRATE_PREPARE = 61, /* skipgen skipgen */
|
||||
REMOTE_PROC_DOMAIN_MIGRATE_PERFORM = 62, /* autogen autogen */
|
||||
|
|
|
@ -298,7 +298,7 @@ elsif ($opt_b) {
|
|||
print "static int ${name}(\n";
|
||||
print " virNetServerPtr server,\n";
|
||||
print " virNetServerClientPtr client,\n";
|
||||
print " virNetMessageHeaderPtr hdr,\n";
|
||||
print " virNetMessagePtr msg,\n";
|
||||
print " virNetMessageErrorPtr rerr";
|
||||
if ($argtype ne "void") {
|
||||
print ",\n $argtype *args";
|
||||
|
@ -315,13 +315,13 @@ elsif ($opt_b) {
|
|||
print "static int ${name}Helper(\n";
|
||||
print " virNetServerPtr server,\n";
|
||||
print " virNetServerClientPtr client,\n";
|
||||
print " virNetMessageHeaderPtr hdr,\n";
|
||||
print " virNetMessagePtr msg,\n";
|
||||
print " virNetMessageErrorPtr rerr,\n";
|
||||
print " void *args$argann,\n";
|
||||
print " void *ret$retann)\n";
|
||||
print "{\n";
|
||||
print " VIR_DEBUG(\"server=%p client=%p hdr=%p rerr=%p args=%p ret=%p\", server, client, hdr, rerr, args, ret);\n";
|
||||
print " return $name(server, client, hdr, rerr";
|
||||
print " VIR_DEBUG(\"server=%p client=%p msg=%p rerr=%p args=%p ret=%p\", server, client, msg, rerr, args, ret);\n";
|
||||
print " return $name(server, client, msg, rerr";
|
||||
if ($argtype ne "void") {
|
||||
print ", args";
|
||||
}
|
||||
|
@ -750,7 +750,7 @@ elsif ($opt_b) {
|
|||
print "static int $name(\n";
|
||||
print " virNetServerPtr server ATTRIBUTE_UNUSED,\n";
|
||||
print " virNetServerClientPtr client,\n";
|
||||
print " virNetMessageHeaderPtr hdr ATTRIBUTE_UNUSED,\n";
|
||||
print " virNetMessagePtr msg ATTRIBUTE_UNUSED,\n";
|
||||
print " virNetMessageErrorPtr rerr";
|
||||
if ($argtype ne "void") {
|
||||
print ",\n $argtype *args";
|
||||
|
@ -809,7 +809,7 @@ elsif ($opt_b) {
|
|||
print " if (!(st = virStreamNew(priv->conn, VIR_STREAM_NONBLOCK)))\n";
|
||||
print " goto cleanup;\n";
|
||||
print "\n";
|
||||
print " if (!(stream = daemonCreateClientStream(client, st, remoteProgram, hdr)))\n";
|
||||
print " if (!(stream = daemonCreateClientStream(client, st, remoteProgram, &msg->header)))\n";
|
||||
print " goto cleanup;\n";
|
||||
print "\n";
|
||||
}
|
||||
|
|
|
@ -138,7 +138,8 @@ static void virNetServerHandleJob(void *jobOpaque, void *opaque)
|
|||
* message types are not expecting replies, so we
|
||||
* must just log it & drop them
|
||||
*/
|
||||
if (job->msg->header.type == VIR_NET_CALL) {
|
||||
if (job->msg->header.type == VIR_NET_CALL ||
|
||||
job->msg->header.type == VIR_NET_CALL_WITH_FDS) {
|
||||
if (virNetServerProgramUnknownError(job->client,
|
||||
job->msg,
|
||||
&job->msg->header) < 0)
|
||||
|
|
|
@ -770,6 +770,7 @@ readmore:
|
|||
/* Grab the completed message */
|
||||
virNetMessagePtr msg = virNetMessageQueueServe(&client->rx);
|
||||
virNetServerClientFilterPtr filter;
|
||||
size_t i;
|
||||
|
||||
/* Decode the header so we can use it for routing decisions */
|
||||
if (virNetMessageDecodeHeader(msg) < 0) {
|
||||
|
@ -778,6 +779,20 @@ readmore:
|
|||
return;
|
||||
}
|
||||
|
||||
if (msg->header.type == VIR_NET_CALL_WITH_FDS &&
|
||||
virNetMessageDecodeNumFDs(msg) < 0) {
|
||||
virNetMessageFree(msg);
|
||||
client->wantClose = true;
|
||||
return;
|
||||
}
|
||||
for (i = 0 ; i < msg->nfds ; i++) {
|
||||
if ((msg->fds[i] = virNetSocketRecvFD(client->sock)) < 0) {
|
||||
virNetMessageFree(msg);
|
||||
client->wantClose = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
PROBE(RPC_SERVER_CLIENT_MSG_RX,
|
||||
"client=%p len=%zu prog=%u vers=%u proc=%u type=%u status=%u serial=%u",
|
||||
client, msg->bufferLength,
|
||||
|
@ -883,6 +898,15 @@ virNetServerClientDispatchWrite(virNetServerClientPtr client)
|
|||
|
||||
if (client->tx->bufferOffset == client->tx->bufferLength) {
|
||||
virNetMessagePtr msg;
|
||||
size_t i;
|
||||
|
||||
for (i = 0 ; i < client->tx->nfds ; i++) {
|
||||
if (virNetSocketSendFD(client->sock, client->tx->fds[i]) < 0) {
|
||||
client->wantClose = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
#if HAVE_SASL
|
||||
/* Completed this 'tx' operation, so now read for all
|
||||
* future rx/tx to be under a SASL SSF layer
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "memory.h"
|
||||
#include "virterror_internal.h"
|
||||
#include "logging.h"
|
||||
#include "virfile.h"
|
||||
|
||||
#define VIR_FROM_THIS VIR_FROM_RPC
|
||||
#define virNetError(code, ...) \
|
||||
|
@ -284,6 +285,7 @@ int virNetServerProgramDispatch(virNetServerProgramPtr prog,
|
|||
|
||||
switch (msg->header.type) {
|
||||
case VIR_NET_CALL:
|
||||
case VIR_NET_CALL_WITH_FDS:
|
||||
ret = virNetServerProgramDispatchCall(prog, server, client, msg);
|
||||
break;
|
||||
|
||||
|
@ -314,7 +316,8 @@ int virNetServerProgramDispatch(virNetServerProgramPtr prog,
|
|||
return ret;
|
||||
|
||||
error:
|
||||
if (msg->header.type == VIR_NET_CALL) {
|
||||
if (msg->header.type == VIR_NET_CALL ||
|
||||
msg->header.type == VIR_NET_CALL_WITH_FDS) {
|
||||
ret = virNetServerProgramSendReplyError(prog, client, msg, &rerr, &msg->header);
|
||||
} else {
|
||||
/* Send a dummy reply to free up 'msg' & unblock client rx */
|
||||
|
@ -355,6 +358,7 @@ virNetServerProgramDispatchCall(virNetServerProgramPtr prog,
|
|||
int rv = -1;
|
||||
virNetServerProgramProcPtr dispatcher;
|
||||
virNetMessageError rerr;
|
||||
size_t i;
|
||||
|
||||
memset(&rerr, 0, sizeof(rerr));
|
||||
|
||||
|
@ -409,7 +413,20 @@ virNetServerProgramDispatchCall(virNetServerProgramPtr prog,
|
|||
*
|
||||
* 'args and 'ret'
|
||||
*/
|
||||
rv = (dispatcher->func)(server, client, &msg->header, &rerr, arg, ret);
|
||||
rv = (dispatcher->func)(server, client, msg, &rerr, arg, ret);
|
||||
|
||||
/*
|
||||
* Clear out the FDs we got from the client, we don't
|
||||
* want to send them back !
|
||||
*
|
||||
* XXX we don't have a way to let dispatcher->func
|
||||
* return any FDs. Fortunately we don't need this
|
||||
* capability just yet
|
||||
*/
|
||||
for (i = 0 ; i < msg->nfds ; i++)
|
||||
VIR_FORCE_CLOSE(msg->fds[i]);
|
||||
VIR_FREE(msg->fds);
|
||||
msg->nfds = 0;
|
||||
|
||||
xdr_free(dispatcher->arg_filter, arg);
|
||||
|
||||
|
@ -421,7 +438,7 @@ virNetServerProgramDispatchCall(virNetServerProgramPtr prog,
|
|||
/*msg->header.prog = msg->header.prog;*/
|
||||
/*msg->header.vers = msg->header.vers;*/
|
||||
/*msg->header.proc = msg->header.proc;*/
|
||||
msg->header.type = VIR_NET_REPLY;
|
||||
msg->header.type = msg->nfds ? VIR_NET_REPLY_WITH_FDS : VIR_NET_REPLY;
|
||||
/*msg->header.serial = msg->header.serial;*/
|
||||
msg->header.status = VIR_NET_OK;
|
||||
|
||||
|
@ -430,6 +447,12 @@ virNetServerProgramDispatchCall(virNetServerProgramPtr prog,
|
|||
goto error;
|
||||
}
|
||||
|
||||
if (msg->nfds &&
|
||||
virNetMessageEncodeNumFDs(msg) < 0) {
|
||||
xdr_free(dispatcher->ret_filter, ret);
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (virNetMessageEncodePayload(msg, dispatcher->ret_filter, ret) < 0) {
|
||||
xdr_free(dispatcher->ret_filter, ret);
|
||||
goto error;
|
||||
|
|
|
@ -41,7 +41,7 @@ typedef virNetServerProgramProc *virNetServerProgramProcPtr;
|
|||
|
||||
typedef int (*virNetServerProgramDispatchFunc)(virNetServerPtr server,
|
||||
virNetServerClientPtr client,
|
||||
virNetMessageHeaderPtr hdr,
|
||||
virNetMessagePtr msg,
|
||||
virNetMessageErrorPtr rerr,
|
||||
void *args,
|
||||
void *ret);
|
||||
|
|
Loading…
Reference in New Issue