[libvirt] [PATCH 1/4] Add virDomainSendProcessSignal API

Peter Krempa pkrempa at redhat.com
Wed Nov 28 14:17:33 UTC 2012


On 11/28/12 12:31, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
>
> Add an API for sending signals to arbitrary processes in the
> guest OS. This is primarily useful for container based virt,
> but can be used for machine virt too, if there is a suitable
> guest agent,
>
> * include/libvirt/libvirt.h.in: Add virDomainSendProcessSignal
>    and virDomainProcessSignal enum
> * src/driver.h: Driver entry point
> * src/libvirt.c, src/libvirt_public.syms: Impl for new API
> ---
>   include/libvirt/libvirt.h.in | 60 ++++++++++++++++++++++++++++++++++++
>   src/driver.h                 |  7 +++++
>   src/libvirt.c                | 72 ++++++++++++++++++++++++++++++++++++++++++++
>   src/libvirt_public.syms      |  5 +++
>   4 files changed, 144 insertions(+)
>

> diff --git a/src/libvirt.c b/src/libvirt.c
> index 4af6089..83550cd 100644
> --- a/src/libvirt.c
> +++ b/src/libvirt.c
> @@ -8589,6 +8589,78 @@ error:
>       return -1;
>   }
>
> +
> +/**
> + * virDomainSendProcessSignal:
> + * @domain: pointer to domain object
> + * @pid_value: a positive integer process ID greater than zero
> + * @signum: a signal from the virDomainProcessSignal enum
> + * @flags: one of the virDomainProcessSignalFlag values
> + *
> + * Send a signal to the designated process in the guest
> + *
> + * The signal numbers must be taken from the virDomainProcessSignal
> + * enum. These will be translated to the corresponding signal
> + * number for the guest OS, by the guest agent delivering the
> + * signal.
> + *
> + * The @pid_value must specify a process ID greater than zero. The
> + * @pid_value numbers are from the container/guest namespace.
> + *
> + * If the @signum is VIR_DOMAIN_PROCESS_SIGNAL_NOP then this
> + * API will simply report whether the process is running in
> + * the container/guest

s/guest/guest./

> + *
> + * Returns 0 in case of success, -1 in case of failure.
> + */
> +int virDomainSendProcessSignal(virDomainPtr domain,
> +                               unsigned int pid_value,
> +                               unsigned int signum,
> +                               unsigned int flags)
> +{
> +    virConnectPtr conn;
> +    VIR_DOMAIN_DEBUG(domain, "pid=%u, signum=%u flags=%x",
> +                     pid_value, signum, flags);
> +
> +    virResetLastError();
> +
> +    if (pid_value == 0) {

Use virCheckNonZeroArgGoto here.

> +        virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
> +        virDispatchError(NULL);
> +        return -1;
> +    }
> +
> +    if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
> +        virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
> +        virDispatchError(NULL);
> +        return -1;
> +    }

ACK to the code. As this is a API change, please wait a day or two for 
other possible comments to the semantic of this API.

Peter




More information about the libvir-list mailing list