On Sat, May 05, 2007 at 11:53:32AM +0100, Richard W.M. Jones wrote:
Richard W.M. Jones wrote:
>2 Client-server protocol
>------------------------
>
>A qemud/remote_protocol.x
>A qemud/rpcgen_fix.pl
>A qemud/remote_protocol.c
>A qemud/remote_protocol.h
These are the additional files required to describe the XDR-based
protocol for client-server communications, with the homebrew RPC
mechanism on top. The first file is the protocol itself.
The second file is a Perl script to run after rpcgen which allows the
code to compile with -Wall -Werror -fstrict-aliasing, and fixes a 64 bit
bug (that fix really should go upstream BTW). The strict-aliasing issue
isn't fully fixed yet - I expect that eventually we should compile
remote_protocol.c with -fno-strict-aliasing, for safety. Daniel
Veillard also asked that this be rewritten in Python (pah!) which I
might do at the same time.
The last two files are the actual rpcgen-generated rpcgen_fix-fixed
code. I put these two files into EXTRA_DIST because I feel that people
shouldn't be required to have rpcgen & Perl just to compile libvirt.
(These files are arch-independent so there is no need to recompile them
unless remote_protocol.x itself changes).
While I generally don't like having auto-generated files in CVS, I wonder
if this makes us better off for portability to Solaris / BSD. eg, the
Perl post-processor probably wouldn't work with someone else's rpcgen
output. As long as the generated files are calling 100% public RPC related
APIs internally we're probably best off distributing the generated files
as part of the release & only manually doing re-generation when we have
real changes.
struct remote_open_args {
/* NB. "name" might be NULL although in practice you can't
* yet do that using the remote_internal driver.
*/
remote_string name;
int flags;
};
Historically NULL == 'Xen', so should we just force 'name = Xen' in
src/libvirt.c
and then no internal driver ever has to worry about NULLs in this scenario again.
struct remote_get_max_vcpus_args {
/* The only backend which supports this call is Xen HV, and
* there the type is ignored so it could be NULL.
*/
remote_string type;
};
Good point. I'll implement this API for QEMU real soon now....
struct remote_domain_lookup_by_id_ret {
/* XXX "Not found" semantic is ill-defined. */
remote_nonnull_domain dom;
};
struct remote_domain_lookup_by_uuid_ret {
/* XXX "Not found" semantic is ill-defined. */
remote_nonnull_domain dom;
};
struct remote_domain_lookup_by_name_ret {
/* XXX "Not found" semantic is ill-defined. */
remote_nonnull_domain dom;
};
We should remember to formally define the semantics before release :-)
struct remote_domain_get_info_ret {
unsigned char state;
unsigned hyper max_mem;
unsigned hyper memory;
unsigned short nr_virt_cpu;
/* XXX cpu_time is declared as unsigned long long */
unsigned hyper cpu_time;
};
hyper == 64-bits according to the latest XDR spec isn't it. The
only guarentee we need is that cpu_time is at least 64-bits. Given
the granularity we should never hit a scenario where cpu_time would
overflow 64-bits. So if long long ever happens to be 128, then it
shouldn't matter that hyper were only 64. So I reckon we can remove
the XXX there.
struct remote_network_lookup_by_uuid_ret {
/* XXX "Not found" semantic is ill-defined. */
remote_nonnull_network net;
};
struct remote_network_lookup_by_name_ret {
/* XXX "Not found" semantic is ill-defined. */
remote_nonnull_network net;
};
As above.
const REMOTE_PROGRAM = 0x20008086;
Any significance to this number :-)
Regards,
Dan.
--
|=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=|
|=- Perl modules:
http://search.cpan.org/~danberr/ -=|
|=- Projects:
http://freshmeat.net/~danielpb/ -=|
|=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|