>>> On 12/15/2014 at 11:27 AM, in message <548EC58D0200006600084AF9@xxxxxxxxxxxxxxxxxxxxx>, "Chun Yan Liu" <cyliu@xxxxxxxx> wrote: > >>>> On 12/12/2014 at 05:35 PM, in message <20141212093545.GD136165@xxxxxxxxxx>, > Jiri Denemark <jdenemar@xxxxxxxxxx> wrote: > > On Fri, Dec 12, 2014 at 10:18:36 +0100, Peter Krempa wrote: > > > On 12/12/14 10:04, Chunyan Liu wrote: > > > > Add public API virDomainSendSysrq for sending SysRequest key. > > > > > > > > Signed-off-by: Chunyan Liu <cyliu@xxxxxxxx> > > > > --- > > > > include/libvirt/libvirt-domain.h | 3 +++ > > > > src/driver-hypervisor.h | 4 ++++ > > > > src/libvirt-domain.c | 38 > > ++++++++++++++++++++++++++++++++++++++ > > > > src/libvirt_public.syms | 1 + > > > > 4 files changed, 46 insertions(+) > > > > > > > > > > [...] > > > > > > > diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c > > > > index cb76d8c..4658fd7 100644 > > > > --- a/src/libvirt-domain.c > > > > +++ b/src/libvirt-domain.c > > > > @@ -11192,3 +11192,41 @@ virDomainFSInfoFree(virDomainFSInfoPtr info) > > > > VIR_FREE(info->devAlias[i]); > > > > VIR_FREE(info->devAlias); > > > > } > > > > + > > > > + > > > > +/** > > > > + * virDomainSendSysrq: > > > > + * @domain: pointer to domain object, or NULL for Domain0 > > > > + * @key: SysRq key, like h, c, ... > > > > + * > > > > + * Send SysRq key to the guest. > > > > + * > > > > + * Returns 0 in case of success, -1 in case of failure. > > > > + */ > > > > +int > > > > +virDomainSendSysrq(virDomainPtr domain, const char *key) > > > > > > The new API should definitely have a 'flags' argument although it may be > > > unused for now. > > > > Moreover, passing a single character by reference sounds pretty strange, > > why not just "char key"? > > I tried to define as 'char key', but meet some trouble in remote protocol, > +struct remote_domain_send_sysrq_args { > + remote_nonnull_domain dom; > + char key; > +}; > will report 'char key' as unsupported type. Any ideas here? With 'char key' in remote_protocol.x, it'll report: "unhandled type for argument value: char key; at ./rpc/gendispatch.pl line 1234." I didn't find a way to avoid that, that's why I turned to use 'char *key' (a string, and when calling libxl API, pass key[0]). > > > Moreover, wouldn't it be better to provide an > > enum of possible values with meaningful names (rather than keys), such > > as > > > > typedef enum { > > VIR_DOMAIN_SYSRQ_REBOOT, > > VIR_DOMAIN_SYSRQ_CRASH, > > VIR_DOMAIN_SYSRQ_OOM_KILL, > > VIR_DOMAIN_SYSRQ_SYNC, > > ... > > } virDomainSysrqCommand; > > > > This way, virDomainSendSysrq(dom, VIR_DOMAIN_SYSRQ_OOM_KILL, 0) would be > > pretty self-explaining. The prototype would have to change to > > Mainly because xen/libxl API both accept letter as parameter directly, so > define > enum will need to map enum to letter before calling xen/libxl API. > > Chunyan > > > > > int virDomainSendSysrq(virDomainPtr domain, > > int command, /* one of virDomainSysrqCommand */ > > unsigned int flags); > > > > Jirka > > > > > > > > -- > libvir-list mailing list > libvir-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libvir-list > > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list