X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=generator%2Fgenerator_xdr.ml;h=07f3ff977bd4f0895877a77788eca8516bf3fa9c;hb=d029fa69db88e216faeedad6ebe0ca337a76fa6e;hp=7f2e6eb92fc4a77bbd3751148a50e45d52b1f005;hpb=04d8209077d2227eb1d42695ba71147f78987050;p=libguestfs.git diff --git a/generator/generator_xdr.ml b/generator/generator_xdr.ml index 7f2e6eb..07f3ff9 100644 --- a/generator/generator_xdr.ml +++ b/generator/generator_xdr.ml @@ -1,5 +1,5 @@ (* libguestfs - * Copyright (C) 2009-2010 Red Hat Inc. + * Copyright (C) 2009-2011 Red Hat Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -64,10 +64,15 @@ let generate_xdr () = ) structs; List.iter ( - fun (shortname, style, _, _, _, _, _) -> + fun (shortname, (ret, args, optargs), _, _, _, _, _) -> let name = "guestfs_" ^ shortname in - (match snd style with + (* Ordinary arguments and optional arguments are concatenated + * together in the XDR args struct. The optargs_bitmask field + * in the header controls which optional arguments are + * meaningful. + *) + (match args @ optargs with | [] -> () | args -> pr "struct %s_args {\n" name; @@ -83,10 +88,11 @@ let generate_xdr () = | BufferIn n -> pr " opaque %s<>;\n" n | FileIn _ | FileOut _ -> () + | Pointer _ -> assert false ) args; pr "};\n\n" ); - (match fst style with + (match ret with | RErr -> () | RInt n -> pr "struct %s_ret {\n" name; @@ -154,7 +160,7 @@ let generate_xdr () = */ const GUESTFS_PROGRAM = 0x2000F5F5; -const GUESTFS_PROTOCOL_VERSION = 2; +const GUESTFS_PROTOCOL_VERSION = 4; /* These constants must be larger than any possible message length. */ const GUESTFS_LAUNCH_FLAG = 0xf5f55ff5; @@ -178,7 +184,8 @@ enum guestfs_message_status { pr "\ struct guestfs_message_error { - int linux_errno; /* Linux errno if available. */ + string errno_string<32>; /* errno eg. \"EINVAL\", empty string + if errno not available */ string error_message; }; @@ -188,6 +195,8 @@ struct guestfs_message_header { guestfs_procedure proc; /* GUESTFS_PROC_x */ guestfs_message_direction direction; unsigned serial; /* message serial number */ + unsigned hyper progress_hint; /* upload hint for progress bar */ + unsigned hyper optargs_bitmask; /* bitmask for optional args */ guestfs_message_status status; }; @@ -205,8 +214,14 @@ struct guestfs_chunk { * 'position' and 'total' have undefined units; however they may * have meaning for some calls. * - * NB. guestfs___recv_from_daemon assumes the XDR-encoded + * Notes: + * + * (1) guestfs___recv_from_daemon assumes the XDR-encoded * structure is 24 bytes long. + * + * (2) daemon/proto.c:async_safe_send_pulse assumes the progress + * message is laid out precisely in this way. So if you change + * this then you'd better change that function as well. */ struct guestfs_progress { guestfs_procedure proc; /* @0: GUESTFS_PROC_x */