From: Daniel P. Berrange Date: Thu, 5 May 2011 16:31:58 +0000 (+0100) Subject: Define remote wire protocol & impls for virDomainQemuAttach X-Git-Tag: v0.9.4-rc1~240 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=44036460;p=thirdparty%2Flibvirt.git Define remote wire protocol & impls for virDomainQemuAttach This tweaks the RPC generator to cope with some naming conventions used for the QEMU specific APIs * daemon/remote.c: Server side dispatcher * src/remote/remote_driver.c: Client side dispatcher * src/remote/qemu_protocol.x: Wire protocol definition * src/rpc/gendispatch.pl: Use '$structprefix' in method names, fix QEMU flags and fix dispatcher method names --- diff --git a/po/POTFILES.in b/po/POTFILES.in index 1b63378908..5782cbf1df 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1,4 +1,5 @@ daemon/libvirtd.c +daemon/qemu_dispatch.h daemon/remote.c daemon/remote_dispatch.h daemon/stream.c diff --git a/src/qemu_protocol-structs b/src/qemu_protocol-structs index e93e8bff9b..9c5f6aaae6 100644 --- a/src/qemu_protocol-structs +++ b/src/qemu_protocol-structs @@ -12,3 +12,10 @@ struct qemu_monitor_command_args { struct qemu_monitor_command_ret { remote_nonnull_string result; }; +struct qemu_domain_attach_args { + u_int pid; + u_int flags; +}; +struct qemu_domain_attach_ret { + remote_nonnull_domain dom; +}; diff --git a/src/remote/qemu_protocol.x b/src/remote/qemu_protocol.x index fa453f4bbc..9792f709a5 100644 --- a/src/remote/qemu_protocol.x +++ b/src/remote/qemu_protocol.x @@ -37,6 +37,16 @@ struct qemu_monitor_command_ret { remote_nonnull_string result; }; + +struct qemu_domain_attach_args { + unsigned int pid; + unsigned int flags; +}; + +struct qemu_domain_attach_ret { + remote_nonnull_domain dom; +}; + /* Define the program number, protocol version and procedure numbers here. */ const QEMU_PROGRAM = 0x20008087; const QEMU_PROTOCOL_VERSION = 1; @@ -45,5 +55,6 @@ enum qemu_procedure { /* Each function must have a two-word comment. The first word is * whether remote_generator.pl handles daemon, the second whether * it handles src/remote. */ - QEMU_PROC_MONITOR_COMMAND = 1 /* skipgen skipgen */ + QEMU_PROC_MONITOR_COMMAND = 1, /* skipgen skipgen */ + QEMU_PROC_DOMAIN_ATTACH = 2 /* autogen autogen */ }; diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index 6921c153f5..a2c62ba6ce 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -4237,6 +4237,7 @@ static virDriver remote_driver = { .domainRevertToSnapshot = remoteDomainRevertToSnapshot, /* 0.8.0 */ .domainSnapshotDelete = remoteDomainSnapshotDelete, /* 0.8.0 */ .qemuDomainMonitorCommand = remoteQemuDomainMonitorCommand, /* 0.8.3 */ + .qemuDomainAttach = qemuDomainAttach, /* 0.9.4 */ .domainOpenConsole = remoteDomainOpenConsole, /* 0.8.6 */ .domainInjectNMI = remoteDomainInjectNMI, /* 0.9.2 */ .domainMigrateBegin3 = remoteDomainMigrateBegin3, /* 0.9.2 */ diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl index c69c5a2cca..85a0c0eead 100755 --- a/src/rpc/gendispatch.pl +++ b/src/rpc/gendispatch.pl @@ -821,6 +821,8 @@ elsif ($opt_b) { $proc_name = "ConnectBaselineCPU" } elsif ($call->{ProcName} eq "CPUCompare") { $proc_name = "ConnectCompareCPU" + } elsif ($structprefix eq "qemu" && $call->{ProcName} =~ /^Domain/) { + $proc_name =~ s/^(Domain)/${1}Qemu/; } if ($single_ret_as_list) { @@ -1323,7 +1325,7 @@ elsif ($opt_k) { # print function print "\n"; print "static $single_ret_type\n"; - print "remote$call->{ProcName}("; + print "$structprefix$call->{ProcName}("; print join(", ", @args_list); @@ -1417,8 +1419,13 @@ elsif ($opt_k) { print " memset(&ret, 0, sizeof ret);\n"; } + my $callflags = "0"; + if ($structprefix eq "qemu") { + $callflags = "REMOTE_CALL_QEMU"; + } + print "\n"; - print " if (call($priv_src, priv, 0, ${procprefix}_PROC_$call->{UC_NAME},\n"; + print " if (call($priv_src, priv, $callflags, ${procprefix}_PROC_$call->{UC_NAME},\n"; print " (xdrproc_t)xdr_$argtype, (char *)$call_args,\n"; print " (xdrproc_t)xdr_$rettype, (char *)$call_ret) == -1) {\n";