qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC][PATCH v4 10/18] virtagent: add agent_shutdown mon


From: Jes Sorensen
Subject: Re: [Qemu-devel] [RFC][PATCH v4 10/18] virtagent: add agent_shutdown monitor command
Date: Thu, 18 Nov 2010 15:19:52 +0100
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.12) Gecko/20101103 Fedora/1.0-0.33.b2pre.fc14 Lightning/1.0b3pre Thunderbird/3.1.6

On 11/16/10 17:01, Michael Roth wrote:
> Provide monitor command to initiate guest shutdown/reboot/powerdown

> +int do_agent_shutdown(Monitor *mon, const QDict *mon_params,
> +                      MonitorCompletion cb, void *opaque)
> +{
> +    xmlrpc_env env;
> +    xmlrpc_value *params;
> +    VARPCData *rpc_data;
> +    const char *shutdown_type;
> +    int ret;
> +
> +    TRACE("called");
> +
> +    xmlrpc_env_init(&env);
> +    shutdown_type = qdict_get_str(mon_params, "shutdown_type");
> +    params = xmlrpc_build_value(&env, "(s)", shutdown_type);
> +    if (rpc_has_error(&env)) {
> +        return -1;
> +    }
> +
> +    rpc_data = qemu_mallocz(sizeof(VARPCData));
> +    rpc_data->cb = do_agent_shutdown_cb;
> +    rpc_data->mon_cb = cb;
> +    rpc_data->mon_data = opaque;
> +
> +    ret = rpc_execute(&env, "va_shutdown", params, rpc_data);
> +    if (ret == -EREMOTE) {
> +        monitor_printf(mon, "RPC Failed (%i): %s\n", env.fault_code,
> +                       env.fault_string);
> +        return -1;
> +    } else if (ret == -1) {
> +        monitor_printf(mon, "RPC communication error\n");
> +        return -1;
> +    }

I would think you could put a lot of this into a utility function
instead of having it open coded for each command you want to support?

Cheers,
Jes


> +
> +    return 0;
> +}
> diff --git a/virtagent.h b/virtagent.h
> index c077582..96c6260 100644
> --- a/virtagent.h
> +++ b/virtagent.h
> @@ -29,5 +29,7 @@ int do_agent_viewfile(Monitor *mon, const QDict *mon_params,
>  void do_agent_viewdmesg_print(Monitor *mon, const QObject *qobject);
>  int do_agent_viewdmesg(Monitor *mon, const QDict *mon_params,
>                        MonitorCompletion cb, void *opaque);
> +int do_agent_shutdown(Monitor *mon, const QDict *mon_params,
> +                      MonitorCompletion cb, void *opaque);
>  
>  #endif /* VIRTAGENT_H */




reply via email to

[Prev in Thread] Current Thread [Next in Thread]