[libvirt] PATCH: Add NUMA apis to remote driver

For some reason the virNodeGetFreeMemroy and virNodeGetCellsFreeMemory NUMA APIs were never added to the remote driver. THis patch fixes that. It also updates the 2 perl scripts which post-process the RPC files to not insert TABs, since we'd previously removed them from all the generated files. Finally, the remote_protocol.x has TAB -> SPACE conversion since we missed that first time around qemud/remote.c | 47 + qemud/remote_dispatch_localvars.h | 3 qemud/remote_dispatch_proc_switch.h | 15 qemud/remote_dispatch_prototypes.h | 2 qemud/remote_generate_stubs.pl | 20 qemud/remote_protocol.c | 30 + qemud/remote_protocol.h | 918 ++++++++++++++++++------------------ qemud/remote_protocol.x | 21 qemud/rpcgen_fix.pl | 4 src/remote_internal.c | 55 ++ 10 files changed, 657 insertions(+), 458 deletions(-) Regards, Daniel Index: src/remote_internal.c =================================================================== RCS file: /data/cvs/libvirt/src/remote_internal.c,v retrieving revision 1.74 diff -u -p -r1.74 remote_internal.c --- src/remote_internal.c 15 May 2008 14:21:34 -0000 1.74 +++ src/remote_internal.c 15 May 2008 21:07:22 -0000 @@ -1329,6 +1329,58 @@ remoteGetCapabilities (virConnectPtr con } static int +remoteNodeGetCellsFreeMemory(virConnectPtr conn, + unsigned long long *freeMems, + int startCell, + int maxCells) +{ + remote_node_get_cells_free_memory_args args; + remote_node_get_cells_free_memory_ret ret; + int i; + GET_PRIVATE (conn, -1); + + if (maxCells > REMOTE_NODE_MAX_CELLS) { + errorf (conn, VIR_ERR_RPC, + _("too many NUMA cells: %d > %d"), + maxCells, + REMOTE_NODE_MAX_CELLS); + return -1; + } + + args.startCell = startCell; + args.maxCells = maxCells; + + memset (&ret, 0, sizeof ret); + if (call (conn, priv, 0, REMOTE_PROC_NODE_GET_CELLS_FREE_MEMORY, + (xdrproc_t) xdr_remote_node_get_cells_free_memory_args, (char *)&args, + (xdrproc_t) xdr_remote_node_get_cells_free_memory_ret, (char *)&ret) == -1) + return -1; + + for (i = 0 ; i < ret.freeMems.freeMems_len ; i++) + freeMems[i] = ret.freeMems.freeMems_val[i]; + + xdr_free((xdrproc_t) xdr_remote_node_get_cells_free_memory_ret, (char *) &ret); + + return ret.freeMems.freeMems_len; +} + +static unsigned long long +remoteNodeGetFreeMemory (virConnectPtr conn) +{ + remote_node_get_free_memory_ret ret; + GET_PRIVATE (conn, -1); + + memset (&ret, 0, sizeof ret); + if (call (conn, priv, 0, REMOTE_PROC_NODE_GET_FREE_MEMORY, + (xdrproc_t) xdr_void, NULL, + (xdrproc_t) xdr_remote_node_get_free_memory_ret, (char *)&ret) == -1) + return 0; + + return ret.freeMem; +} + + +static int remoteListDomains (virConnectPtr conn, int *ids, int maxids) { int i; @@ -4728,7 +4780,8 @@ static virDriver driver = { .domainMigrateFinish = remoteDomainMigrateFinish, .domainBlockStats = remoteDomainBlockStats, .domainInterfaceStats = remoteDomainInterfaceStats, - .nodeGetCellsFreeMemory = NULL, + .nodeGetCellsFreeMemory = remoteNodeGetCellsFreeMemory, + .getFreeMemory = remoteNodeGetFreeMemory, }; static virNetworkDriver network_driver = { Index: qemud/remote.c =================================================================== RCS file: /data/cvs/libvirt/qemud/remote.c,v retrieving revision 1.31 diff -u -p -r1.31 remote.c --- qemud/remote.c 15 May 2008 06:12:32 -0000 1.31 +++ qemud/remote.c 15 May 2008 21:07:31 -0000 @@ -596,6 +596,53 @@ remoteDispatchGetCapabilities (struct qe } static int +remoteDispatchNodeGetCellsFreeMemory (struct qemud_server *server ATTRIBUTE_UNUSED, + struct qemud_client *client, + remote_message_header *req, + remote_node_get_cells_free_memory_args *args, + remote_node_get_cells_free_memory_ret *ret) +{ + CHECK_CONN(client); + + if (args->maxCells > REMOTE_NODE_MAX_CELLS) { + remoteDispatchError (client, req, + "%s", _("maxCells > REMOTE_NODE_MAX_CELLS")); + return -2; + } + + /* Allocate return buffer. */ + ret->freeMems.freeMems_val = calloc (args->maxCells, sizeof (*(ret->freeMems.freeMems_val))); + + ret->freeMems.freeMems_len = virNodeGetCellsFreeMemory(client->conn, + (unsigned long long *)ret->freeMems.freeMems_val, + args->startCell, + args->maxCells); + if (ret->freeMems.freeMems_len == 0) + return -1; + + return 0; +} + + +static int +remoteDispatchNodeGetFreeMemory (struct qemud_server *server ATTRIBUTE_UNUSED, + struct qemud_client *client, + remote_message_header *req, + void *args ATTRIBUTE_UNUSED, + remote_node_get_free_memory_ret *ret) +{ + unsigned long long freeMem; + CHECK_CONN(client); + + freeMem = virNodeGetFreeMemory(client->conn); + if (freeMem == 0) return -1; + + ret->freeMem = freeMem; + return 0; +} + + +static int remoteDispatchDomainGetSchedulerType (struct qemud_server *server ATTRIBUTE_UNUSED, struct qemud_client *client, remote_message_header *req, Index: qemud/remote_dispatch_localvars.h =================================================================== RCS file: /data/cvs/libvirt/qemud/remote_dispatch_localvars.h,v retrieving revision 1.9 diff -u -p -r1.9 remote_dispatch_localvars.h --- qemud/remote_dispatch_localvars.h 20 Feb 2008 15:22:35 -0000 1.9 +++ qemud/remote_dispatch_localvars.h 15 May 2008 21:07:31 -0000 @@ -98,6 +98,8 @@ remote_domain_save_args lv_remote_domain remote_domain_migrate_prepare_args lv_remote_domain_migrate_prepare_args; remote_domain_migrate_prepare_ret lv_remote_domain_migrate_prepare_ret; remote_domain_undefine_args lv_remote_domain_undefine_args; +remote_node_get_cells_free_memory_args lv_remote_node_get_cells_free_memory_args; +remote_node_get_cells_free_memory_ret lv_remote_node_get_cells_free_memory_ret; remote_domain_get_scheduler_type_args lv_remote_domain_get_scheduler_type_args; remote_domain_get_scheduler_type_ret lv_remote_domain_get_scheduler_type_ret; remote_get_version_ret lv_remote_get_version_ret; @@ -122,6 +124,7 @@ remote_storage_pool_undefine_args lv_rem remote_domain_set_autostart_args lv_remote_domain_set_autostart_args; remote_storage_pool_get_autostart_args lv_remote_storage_pool_get_autostart_args; remote_storage_pool_get_autostart_ret lv_remote_storage_pool_get_autostart_ret; +remote_node_get_free_memory_ret lv_remote_node_get_free_memory_ret; remote_storage_vol_get_path_args lv_remote_storage_vol_get_path_args; remote_storage_vol_get_path_ret lv_remote_storage_vol_get_path_ret; remote_domain_lookup_by_id_args lv_remote_domain_lookup_by_id_args; Index: qemud/remote_dispatch_proc_switch.h =================================================================== RCS file: /data/cvs/libvirt/qemud/remote_dispatch_proc_switch.h,v retrieving revision 1.10 diff -u -p -r1.10 remote_dispatch_proc_switch.h --- qemud/remote_dispatch_proc_switch.h 10 Apr 2008 16:54:54 -0000 1.10 +++ qemud/remote_dispatch_proc_switch.h 15 May 2008 21:07:31 -0000 @@ -491,6 +491,21 @@ case REMOTE_PROC_NETWORK_UNDEFINE: args = (char *) &lv_remote_network_undefine_args; memset (&lv_remote_network_undefine_args, 0, sizeof lv_remote_network_undefine_args); break; +case REMOTE_PROC_NODE_GET_CELLS_FREE_MEMORY: + fn = (dispatch_fn) remoteDispatchNodeGetCellsFreeMemory; + args_filter = (xdrproc_t) xdr_remote_node_get_cells_free_memory_args; + args = (char *) &lv_remote_node_get_cells_free_memory_args; + memset (&lv_remote_node_get_cells_free_memory_args, 0, sizeof lv_remote_node_get_cells_free_memory_args); + ret_filter = (xdrproc_t) xdr_remote_node_get_cells_free_memory_ret; + ret = (char *) &lv_remote_node_get_cells_free_memory_ret; + memset (&lv_remote_node_get_cells_free_memory_ret, 0, sizeof lv_remote_node_get_cells_free_memory_ret); + break; +case REMOTE_PROC_NODE_GET_FREE_MEMORY: + fn = (dispatch_fn) remoteDispatchNodeGetFreeMemory; + ret_filter = (xdrproc_t) xdr_remote_node_get_free_memory_ret; + ret = (char *) &lv_remote_node_get_free_memory_ret; + memset (&lv_remote_node_get_free_memory_ret, 0, sizeof lv_remote_node_get_free_memory_ret); + break; case REMOTE_PROC_NODE_GET_INFO: fn = (dispatch_fn) remoteDispatchNodeGetInfo; ret_filter = (xdrproc_t) xdr_remote_node_get_info_ret; Index: qemud/remote_dispatch_prototypes.h =================================================================== RCS file: /data/cvs/libvirt/qemud/remote_dispatch_prototypes.h,v retrieving revision 1.10 diff -u -p -r1.10 remote_dispatch_prototypes.h --- qemud/remote_dispatch_prototypes.h 20 Feb 2008 15:22:35 -0000 1.10 +++ qemud/remote_dispatch_prototypes.h 15 May 2008 21:07:31 -0000 @@ -67,6 +67,8 @@ static int remoteDispatchNetworkLookupBy static int remoteDispatchNetworkLookupByUuid (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_network_lookup_by_uuid_args *args, remote_network_lookup_by_uuid_ret *ret); static int remoteDispatchNetworkSetAutostart (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_network_set_autostart_args *args, void *ret); static int remoteDispatchNetworkUndefine (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_network_undefine_args *args, void *ret); +static int remoteDispatchNodeGetCellsFreeMemory (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_node_get_cells_free_memory_args *args, remote_node_get_cells_free_memory_ret *ret); +static int remoteDispatchNodeGetFreeMemory (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_node_get_free_memory_ret *ret); static int remoteDispatchNodeGetInfo (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_node_get_info_ret *ret); static int remoteDispatchNumOfDefinedDomains (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_num_of_defined_domains_ret *ret); static int remoteDispatchNumOfDefinedNetworks (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_num_of_defined_networks_ret *ret); Index: qemud/remote_generate_stubs.pl =================================================================== RCS file: /data/cvs/libvirt/qemud/remote_generate_stubs.pl,v retrieving revision 1.2 diff -u -p -r1.2 remote_generate_stubs.pl --- qemud/remote_generate_stubs.pl 5 Dec 2007 15:34:05 -0000 1.2 +++ qemud/remote_generate_stubs.pl 15 May 2008 21:07:31 -0000 @@ -84,8 +84,8 @@ if ($opt_d) { my @keys = sort (keys %calls); foreach (@keys) { print "$_:\n"; - print "\tname $calls{$_}->{name} ($calls{$_}->{ProcName})\n"; - print "\t$calls{$_}->{args} -> $calls{$_}->{ret}\n"; + print " name $calls{$_}->{name} ($calls{$_}->{ProcName})\n"; + print " $calls{$_}->{args} -> $calls{$_}->{ret}\n"; } } @@ -117,18 +117,18 @@ elsif ($opt_w) { my @keys = sort (keys %calls); foreach (@keys) { print "case REMOTE_PROC_$calls{$_}->{UC_NAME}:\n"; - print "\tfn = (dispatch_fn) remoteDispatch$calls{$_}->{ProcName};\n"; + print " fn = (dispatch_fn) remoteDispatch$calls{$_}->{ProcName};\n"; if ($calls{$_}->{args} ne "void") { - print "\targs_filter = (xdrproc_t) xdr_$calls{$_}->{args};\n"; - print "\targs = (char *) &lv_$calls{$_}->{args};\n"; - print "\tmemset (&lv_$calls{$_}->{args}, 0, sizeof lv_$calls{$_}->{args});\n" + print " args_filter = (xdrproc_t) xdr_$calls{$_}->{args};\n"; + print " args = (char *) &lv_$calls{$_}->{args};\n"; + print " memset (&lv_$calls{$_}->{args}, 0, sizeof lv_$calls{$_}->{args});\n" } if ($calls{$_}->{ret} ne "void") { - print "\tret_filter = (xdrproc_t) xdr_$calls{$_}->{ret};\n"; - print "\tret = (char *) &lv_$calls{$_}->{ret};\n"; - print "\tmemset (&lv_$calls{$_}->{ret}, 0, sizeof lv_$calls{$_}->{ret});\n" + print " ret_filter = (xdrproc_t) xdr_$calls{$_}->{ret};\n"; + print " ret = (char *) &lv_$calls{$_}->{ret};\n"; + print " memset (&lv_$calls{$_}->{ret}, 0, sizeof lv_$calls{$_}->{ret});\n" } - print "\tbreak;\n"; + print " break;\n"; } } Index: qemud/remote_protocol.c =================================================================== RCS file: /data/cvs/libvirt/qemud/remote_protocol.c,v retrieving revision 1.10 diff -u -p -r1.10 remote_protocol.c --- qemud/remote_protocol.c 10 Apr 2008 16:54:54 -0000 1.10 +++ qemud/remote_protocol.c 15 May 2008 21:07:31 -0000 @@ -387,6 +387,36 @@ xdr_remote_get_capabilities_ret (XDR *xd } bool_t +xdr_remote_node_get_cells_free_memory_args (XDR *xdrs, remote_node_get_cells_free_memory_args *objp) +{ + + if (!xdr_int (xdrs, &objp->startCell)) + return FALSE; + if (!xdr_int (xdrs, &objp->maxCells)) + return FALSE; + return TRUE; +} + +bool_t +xdr_remote_node_get_cells_free_memory_ret (XDR *xdrs, remote_node_get_cells_free_memory_ret *objp) +{ + + if (!xdr_array (xdrs, (char **)&objp->freeMems.freeMems_val, (u_int *) &objp->freeMems.freeMems_len, REMOTE_NODE_MAX_CELLS, + sizeof (quad_t), (xdrproc_t) xdr_quad_t)) + return FALSE; + return TRUE; +} + +bool_t +xdr_remote_node_get_free_memory_ret (XDR *xdrs, remote_node_get_free_memory_ret *objp) +{ + + if (!xdr_quad_t (xdrs, &objp->freeMem)) + return FALSE; + return TRUE; +} + +bool_t xdr_remote_domain_get_scheduler_type_args (XDR *xdrs, remote_domain_get_scheduler_type_args *objp) { Index: qemud/remote_protocol.h =================================================================== RCS file: /data/cvs/libvirt/qemud/remote_protocol.h,v retrieving revision 1.11 diff -u -p -r1.11 remote_protocol.h --- qemud/remote_protocol.h 10 Apr 2008 16:54:54 -0000 1.11 +++ qemud/remote_protocol.h 15 May 2008 21:07:31 -0000 @@ -30,34 +30,35 @@ typedef remote_nonnull_string *remote_st #define REMOTE_STORAGE_POOL_NAME_LIST_MAX 256 #define REMOTE_STORAGE_VOL_NAME_LIST_MAX 1024 #define REMOTE_DOMAIN_SCHEDULER_PARAMETERS_MAX 16 +#define REMOTE_NODE_MAX_CELLS 1024 #define REMOTE_AUTH_SASL_DATA_MAX 65536 #define REMOTE_AUTH_TYPE_LIST_MAX 20 typedef char remote_uuid[VIR_UUID_BUFLEN]; struct remote_nonnull_domain { - remote_nonnull_string name; - remote_uuid uuid; - int id; + remote_nonnull_string name; + remote_uuid uuid; + int id; }; typedef struct remote_nonnull_domain remote_nonnull_domain; struct remote_nonnull_network { - remote_nonnull_string name; - remote_uuid uuid; + remote_nonnull_string name; + remote_uuid uuid; }; typedef struct remote_nonnull_network remote_nonnull_network; struct remote_nonnull_storage_pool { - remote_nonnull_string name; - remote_uuid uuid; + remote_nonnull_string name; + remote_uuid uuid; }; typedef struct remote_nonnull_storage_pool remote_nonnull_storage_pool; struct remote_nonnull_storage_vol { - remote_nonnull_string pool; - remote_nonnull_string name; - remote_nonnull_string key; + remote_nonnull_string pool; + remote_nonnull_string name; + remote_nonnull_string key; }; typedef struct remote_nonnull_storage_vol remote_nonnull_storage_vol; @@ -70,1076 +71,1097 @@ typedef remote_nonnull_storage_pool *rem typedef remote_nonnull_storage_vol *remote_storage_vol; struct remote_error { - int code; - int domain; - remote_string message; - int level; - remote_domain dom; - remote_string str1; - remote_string str2; - remote_string str3; - int int1; - int int2; - remote_network net; + int code; + int domain; + remote_string message; + int level; + remote_domain dom; + remote_string str1; + remote_string str2; + remote_string str3; + int int1; + int int2; + remote_network net; }; typedef struct remote_error remote_error; enum remote_auth_type { - REMOTE_AUTH_NONE = 0, - REMOTE_AUTH_SASL = 1, - REMOTE_AUTH_POLKIT = 2, + REMOTE_AUTH_NONE = 0, + REMOTE_AUTH_SASL = 1, + REMOTE_AUTH_POLKIT = 2, }; typedef enum remote_auth_type remote_auth_type; struct remote_vcpu_info { - u_int number; - int state; - u_quad_t cpu_time; - int cpu; + u_int number; + int state; + u_quad_t cpu_time; + int cpu; }; typedef struct remote_vcpu_info remote_vcpu_info; struct remote_sched_param_value { - int type; - union { - int i; - u_int ui; - quad_t l; - u_quad_t ul; - double d; - int b; - } remote_sched_param_value_u; + int type; + union { + int i; + u_int ui; + quad_t l; + u_quad_t ul; + double d; + int b; + } remote_sched_param_value_u; }; typedef struct remote_sched_param_value remote_sched_param_value; struct remote_sched_param { - remote_nonnull_string field; - remote_sched_param_value value; + remote_nonnull_string field; + remote_sched_param_value value; }; typedef struct remote_sched_param remote_sched_param; struct remote_open_args { - remote_string name; - int flags; + remote_string name; + int flags; }; typedef struct remote_open_args remote_open_args; struct remote_supports_feature_args { - int feature; + int feature; }; typedef struct remote_supports_feature_args remote_supports_feature_args; struct remote_supports_feature_ret { - int supported; + int supported; }; typedef struct remote_supports_feature_ret remote_supports_feature_ret; struct remote_get_type_ret { - remote_nonnull_string type; + remote_nonnull_string type; }; typedef struct remote_get_type_ret remote_get_type_ret; struct remote_get_version_ret { - quad_t hv_ver; + quad_t hv_ver; }; typedef struct remote_get_version_ret remote_get_version_ret; struct remote_get_hostname_ret { - remote_nonnull_string hostname; + remote_nonnull_string hostname; }; typedef struct remote_get_hostname_ret remote_get_hostname_ret; struct remote_get_max_vcpus_args { - remote_string type; + remote_string type; }; typedef struct remote_get_max_vcpus_args remote_get_max_vcpus_args; struct remote_get_max_vcpus_ret { - int max_vcpus; + int max_vcpus; }; typedef struct remote_get_max_vcpus_ret remote_get_max_vcpus_ret; struct remote_node_get_info_ret { - char model[32]; - quad_t memory; - int cpus; - int mhz; - int nodes; - int sockets; - int cores; - int threads; + char model[32]; + quad_t memory; + int cpus; + int mhz; + int nodes; + int sockets; + int cores; + int threads; }; typedef struct remote_node_get_info_ret remote_node_get_info_ret; struct remote_get_capabilities_ret { - remote_nonnull_string capabilities; + remote_nonnull_string capabilities; }; typedef struct remote_get_capabilities_ret remote_get_capabilities_ret; +struct remote_node_get_cells_free_memory_args { + int startCell; + int maxCells; +}; +typedef struct remote_node_get_cells_free_memory_args remote_node_get_cells_free_memory_args; + +struct remote_node_get_cells_free_memory_ret { + struct { + u_int freeMems_len; + quad_t *freeMems_val; + } freeMems; +}; +typedef struct remote_node_get_cells_free_memory_ret remote_node_get_cells_free_memory_ret; + +struct remote_node_get_free_memory_ret { + quad_t freeMem; +}; +typedef struct remote_node_get_free_memory_ret remote_node_get_free_memory_ret; + struct remote_domain_get_scheduler_type_args { - remote_nonnull_domain dom; + remote_nonnull_domain dom; }; typedef struct remote_domain_get_scheduler_type_args remote_domain_get_scheduler_type_args; struct remote_domain_get_scheduler_type_ret { - remote_nonnull_string type; - int nparams; + remote_nonnull_string type; + int nparams; }; typedef struct remote_domain_get_scheduler_type_ret remote_domain_get_scheduler_type_ret; struct remote_domain_get_scheduler_parameters_args { - remote_nonnull_domain dom; - int nparams; + remote_nonnull_domain dom; + int nparams; }; typedef struct remote_domain_get_scheduler_parameters_args remote_domain_get_scheduler_parameters_args; struct remote_domain_get_scheduler_parameters_ret { - struct { - u_int params_len; - remote_sched_param *params_val; - } params; + struct { + u_int params_len; + remote_sched_param *params_val; + } params; }; typedef struct remote_domain_get_scheduler_parameters_ret remote_domain_get_scheduler_parameters_ret; struct remote_domain_set_scheduler_parameters_args { - remote_nonnull_domain dom; - struct { - u_int params_len; - remote_sched_param *params_val; - } params; + remote_nonnull_domain dom; + struct { + u_int params_len; + remote_sched_param *params_val; + } params; }; typedef struct remote_domain_set_scheduler_parameters_args remote_domain_set_scheduler_parameters_args; struct remote_domain_block_stats_args { - remote_nonnull_domain dom; - remote_nonnull_string path; + remote_nonnull_domain dom; + remote_nonnull_string path; }; typedef struct remote_domain_block_stats_args remote_domain_block_stats_args; struct remote_domain_block_stats_ret { - quad_t rd_req; - quad_t rd_bytes; - quad_t wr_req; - quad_t wr_bytes; - quad_t errs; + quad_t rd_req; + quad_t rd_bytes; + quad_t wr_req; + quad_t wr_bytes; + quad_t errs; }; typedef struct remote_domain_block_stats_ret remote_domain_block_stats_ret; struct remote_domain_interface_stats_args { - remote_nonnull_domain dom; - remote_nonnull_string path; + remote_nonnull_domain dom; + remote_nonnull_string path; }; typedef struct remote_domain_interface_stats_args remote_domain_interface_stats_args; struct remote_domain_interface_stats_ret { - quad_t rx_bytes; - quad_t rx_packets; - quad_t rx_errs; - quad_t rx_drop; - quad_t tx_bytes; - quad_t tx_packets; - quad_t tx_errs; - quad_t tx_drop; + quad_t rx_bytes; + quad_t rx_packets; + quad_t rx_errs; + quad_t rx_drop; + quad_t tx_bytes; + quad_t tx_packets; + quad_t tx_errs; + quad_t tx_drop; }; typedef struct remote_domain_interface_stats_ret remote_domain_interface_stats_ret; struct remote_list_domains_args { - int maxids; + int maxids; }; typedef struct remote_list_domains_args remote_list_domains_args; struct remote_list_domains_ret { - struct { - u_int ids_len; - int *ids_val; - } ids; + struct { + u_int ids_len; + int *ids_val; + } ids; }; typedef struct remote_list_domains_ret remote_list_domains_ret; struct remote_num_of_domains_ret { - int num; + int num; }; typedef struct remote_num_of_domains_ret remote_num_of_domains_ret; struct remote_domain_create_linux_args { - remote_nonnull_string xml_desc; - int flags; + remote_nonnull_string xml_desc; + int flags; }; typedef struct remote_domain_create_linux_args remote_domain_create_linux_args; struct remote_domain_create_linux_ret { - remote_nonnull_domain dom; + remote_nonnull_domain dom; }; typedef struct remote_domain_create_linux_ret remote_domain_create_linux_ret; struct remote_domain_lookup_by_id_args { - int id; + int id; }; typedef struct remote_domain_lookup_by_id_args remote_domain_lookup_by_id_args; struct remote_domain_lookup_by_id_ret { - remote_nonnull_domain dom; + remote_nonnull_domain dom; }; typedef struct remote_domain_lookup_by_id_ret remote_domain_lookup_by_id_ret; struct remote_domain_lookup_by_uuid_args { - remote_uuid uuid; + remote_uuid uuid; }; typedef struct remote_domain_lookup_by_uuid_args remote_domain_lookup_by_uuid_args; struct remote_domain_lookup_by_uuid_ret { - remote_nonnull_domain dom; + remote_nonnull_domain dom; }; typedef struct remote_domain_lookup_by_uuid_ret remote_domain_lookup_by_uuid_ret; struct remote_domain_lookup_by_name_args { - remote_nonnull_string name; + remote_nonnull_string name; }; typedef struct remote_domain_lookup_by_name_args remote_domain_lookup_by_name_args; struct remote_domain_lookup_by_name_ret { - remote_nonnull_domain dom; + remote_nonnull_domain dom; }; typedef struct remote_domain_lookup_by_name_ret remote_domain_lookup_by_name_ret; struct remote_domain_suspend_args { - remote_nonnull_domain dom; + remote_nonnull_domain dom; }; typedef struct remote_domain_suspend_args remote_domain_suspend_args; struct remote_domain_resume_args { - remote_nonnull_domain dom; + remote_nonnull_domain dom; }; typedef struct remote_domain_resume_args remote_domain_resume_args; struct remote_domain_shutdown_args { - remote_nonnull_domain dom; + remote_nonnull_domain dom; }; typedef struct remote_domain_shutdown_args remote_domain_shutdown_args; struct remote_domain_reboot_args { - remote_nonnull_domain dom; - int flags; + remote_nonnull_domain dom; + int flags; }; typedef struct remote_domain_reboot_args remote_domain_reboot_args; struct remote_domain_destroy_args { - remote_nonnull_domain dom; + remote_nonnull_domain dom; }; typedef struct remote_domain_destroy_args remote_domain_destroy_args; struct remote_domain_get_os_type_args { - remote_nonnull_domain dom; + remote_nonnull_domain dom; }; typedef struct remote_domain_get_os_type_args remote_domain_get_os_type_args; struct remote_domain_get_os_type_ret { - remote_nonnull_string type; + remote_nonnull_string type; }; typedef struct remote_domain_get_os_type_ret remote_domain_get_os_type_ret; struct remote_domain_get_max_memory_args { - remote_nonnull_domain dom; + remote_nonnull_domain dom; }; typedef struct remote_domain_get_max_memory_args remote_domain_get_max_memory_args; struct remote_domain_get_max_memory_ret { - u_quad_t memory; + u_quad_t memory; }; typedef struct remote_domain_get_max_memory_ret remote_domain_get_max_memory_ret; struct remote_domain_set_max_memory_args { - remote_nonnull_domain dom; - u_quad_t memory; + remote_nonnull_domain dom; + u_quad_t memory; }; typedef struct remote_domain_set_max_memory_args remote_domain_set_max_memory_args; struct remote_domain_set_memory_args { - remote_nonnull_domain dom; - u_quad_t memory; + remote_nonnull_domain dom; + u_quad_t memory; }; typedef struct remote_domain_set_memory_args remote_domain_set_memory_args; struct remote_domain_get_info_args { - remote_nonnull_domain dom; + remote_nonnull_domain dom; }; typedef struct remote_domain_get_info_args remote_domain_get_info_args; struct remote_domain_get_info_ret { - u_char state; - u_quad_t max_mem; - u_quad_t memory; - u_short nr_virt_cpu; - u_quad_t cpu_time; + u_char state; + u_quad_t max_mem; + u_quad_t memory; + u_short nr_virt_cpu; + u_quad_t cpu_time; }; typedef struct remote_domain_get_info_ret remote_domain_get_info_ret; struct remote_domain_save_args { - remote_nonnull_domain dom; - remote_nonnull_string to; + remote_nonnull_domain dom; + remote_nonnull_string to; }; typedef struct remote_domain_save_args remote_domain_save_args; struct remote_domain_restore_args { - remote_nonnull_string from; + remote_nonnull_string from; }; typedef struct remote_domain_restore_args remote_domain_restore_args; struct remote_domain_core_dump_args { - remote_nonnull_domain dom; - remote_nonnull_string to; - int flags; + remote_nonnull_domain dom; + remote_nonnull_string to; + int flags; }; typedef struct remote_domain_core_dump_args remote_domain_core_dump_args; struct remote_domain_dump_xml_args { - remote_nonnull_domain dom; - int flags; + remote_nonnull_domain dom; + int flags; }; typedef struct remote_domain_dump_xml_args remote_domain_dump_xml_args; struct remote_domain_dump_xml_ret { - remote_nonnull_string xml; + remote_nonnull_string xml; }; typedef struct remote_domain_dump_xml_ret remote_domain_dump_xml_ret; struct remote_domain_migrate_prepare_args { - remote_string uri_in; - u_quad_t flags; - remote_string dname; - u_quad_t resource; + remote_string uri_in; + u_quad_t flags; + remote_string dname; + u_quad_t resource; }; typedef struct remote_domain_migrate_prepare_args remote_domain_migrate_prepare_args; struct remote_domain_migrate_prepare_ret { - struct { - u_int cookie_len; - char *cookie_val; - } cookie; - remote_string uri_out; + struct { + u_int cookie_len; + char *cookie_val; + } cookie; + remote_string uri_out; }; typedef struct remote_domain_migrate_prepare_ret remote_domain_migrate_prepare_ret; struct remote_domain_migrate_perform_args { - remote_nonnull_domain dom; - struct { - u_int cookie_len; - char *cookie_val; - } cookie; - remote_nonnull_string uri; - u_quad_t flags; - remote_string dname; - u_quad_t resource; + remote_nonnull_domain dom; + struct { + u_int cookie_len; + char *cookie_val; + } cookie; + remote_nonnull_string uri; + u_quad_t flags; + remote_string dname; + u_quad_t resource; }; typedef struct remote_domain_migrate_perform_args remote_domain_migrate_perform_args; struct remote_domain_migrate_finish_args { - remote_nonnull_string dname; - struct { - u_int cookie_len; - char *cookie_val; - } cookie; - remote_nonnull_string uri; - u_quad_t flags; + remote_nonnull_string dname; + struct { + u_int cookie_len; + char *cookie_val; + } cookie; + remote_nonnull_string uri; + u_quad_t flags; }; typedef struct remote_domain_migrate_finish_args remote_domain_migrate_finish_args; struct remote_domain_migrate_finish_ret { - remote_nonnull_domain ddom; + remote_nonnull_domain ddom; }; typedef struct remote_domain_migrate_finish_ret remote_domain_migrate_finish_ret; struct remote_list_defined_domains_args { - int maxnames; + int maxnames; }; typedef struct remote_list_defined_domains_args remote_list_defined_domains_args; struct remote_list_defined_domains_ret { - struct { - u_int names_len; - remote_nonnull_string *names_val; - } names; + struct { + u_int names_len; + remote_nonnull_string *names_val; + } names; }; typedef struct remote_list_defined_domains_ret remote_list_defined_domains_ret; struct remote_num_of_defined_domains_ret { - int num; + int num; }; typedef struct remote_num_of_defined_domains_ret remote_num_of_defined_domains_ret; struct remote_domain_create_args { - remote_nonnull_domain dom; + remote_nonnull_domain dom; }; typedef struct remote_domain_create_args remote_domain_create_args; struct remote_domain_define_xml_args { - remote_nonnull_string xml; + remote_nonnull_string xml; }; typedef struct remote_domain_define_xml_args remote_domain_define_xml_args; struct remote_domain_define_xml_ret { - remote_nonnull_domain dom; + remote_nonnull_domain dom; }; typedef struct remote_domain_define_xml_ret remote_domain_define_xml_ret; struct remote_domain_undefine_args { - remote_nonnull_domain dom; + remote_nonnull_domain dom; }; typedef struct remote_domain_undefine_args remote_domain_undefine_args; struct remote_domain_set_vcpus_args { - remote_nonnull_domain dom; - int nvcpus; + remote_nonnull_domain dom; + int nvcpus; }; typedef struct remote_domain_set_vcpus_args remote_domain_set_vcpus_args; struct remote_domain_pin_vcpu_args { - remote_nonnull_domain dom; - int vcpu; - struct { - u_int cpumap_len; - char *cpumap_val; - } cpumap; + remote_nonnull_domain dom; + int vcpu; + struct { + u_int cpumap_len; + char *cpumap_val; + } cpumap; }; typedef struct remote_domain_pin_vcpu_args remote_domain_pin_vcpu_args; struct remote_domain_get_vcpus_args { - remote_nonnull_domain dom; - int maxinfo; - int maplen; + remote_nonnull_domain dom; + int maxinfo; + int maplen; }; typedef struct remote_domain_get_vcpus_args remote_domain_get_vcpus_args; struct remote_domain_get_vcpus_ret { - struct { - u_int info_len; - remote_vcpu_info *info_val; - } info; - struct { - u_int cpumaps_len; - char *cpumaps_val; - } cpumaps; + struct { + u_int info_len; + remote_vcpu_info *info_val; + } info; + struct { + u_int cpumaps_len; + char *cpumaps_val; + } cpumaps; }; typedef struct remote_domain_get_vcpus_ret remote_domain_get_vcpus_ret; struct remote_domain_get_max_vcpus_args { - remote_nonnull_domain dom; + remote_nonnull_domain dom; }; typedef struct remote_domain_get_max_vcpus_args remote_domain_get_max_vcpus_args; struct remote_domain_get_max_vcpus_ret { - int num; + int num; }; typedef struct remote_domain_get_max_vcpus_ret remote_domain_get_max_vcpus_ret; struct remote_domain_attach_device_args { - remote_nonnull_domain dom; - remote_nonnull_string xml; + remote_nonnull_domain dom; + remote_nonnull_string xml; }; typedef struct remote_domain_attach_device_args remote_domain_attach_device_args; struct remote_domain_detach_device_args { - remote_nonnull_domain dom; - remote_nonnull_string xml; + remote_nonnull_domain dom; + remote_nonnull_string xml; }; typedef struct remote_domain_detach_device_args remote_domain_detach_device_args; struct remote_domain_get_autostart_args { - remote_nonnull_domain dom; + remote_nonnull_domain dom; }; typedef struct remote_domain_get_autostart_args remote_domain_get_autostart_args; struct remote_domain_get_autostart_ret { - int autostart; + int autostart; }; typedef struct remote_domain_get_autostart_ret remote_domain_get_autostart_ret; struct remote_domain_set_autostart_args { - remote_nonnull_domain dom; - int autostart; + remote_nonnull_domain dom; + int autostart; }; typedef struct remote_domain_set_autostart_args remote_domain_set_autostart_args; struct remote_num_of_networks_ret { - int num; + int num; }; typedef struct remote_num_of_networks_ret remote_num_of_networks_ret; struct remote_list_networks_args { - int maxnames; + int maxnames; }; typedef struct remote_list_networks_args remote_list_networks_args; struct remote_list_networks_ret { - struct { - u_int names_len; - remote_nonnull_string *names_val; - } names; + struct { + u_int names_len; + remote_nonnull_string *names_val; + } names; }; typedef struct remote_list_networks_ret remote_list_networks_ret; struct remote_num_of_defined_networks_ret { - int num; + int num; }; typedef struct remote_num_of_defined_networks_ret remote_num_of_defined_networks_ret; struct remote_list_defined_networks_args { - int maxnames; + int maxnames; }; typedef struct remote_list_defined_networks_args remote_list_defined_networks_args; struct remote_list_defined_networks_ret { - struct { - u_int names_len; - remote_nonnull_string *names_val; - } names; + struct { + u_int names_len; + remote_nonnull_string *names_val; + } names; }; typedef struct remote_list_defined_networks_ret remote_list_defined_networks_ret; struct remote_network_lookup_by_uuid_args { - remote_uuid uuid; + remote_uuid uuid; }; typedef struct remote_network_lookup_by_uuid_args remote_network_lookup_by_uuid_args; struct remote_network_lookup_by_uuid_ret { - remote_nonnull_network net; + remote_nonnull_network net; }; typedef struct remote_network_lookup_by_uuid_ret remote_network_lookup_by_uuid_ret; struct remote_network_lookup_by_name_args { - remote_nonnull_string name; + remote_nonnull_string name; }; typedef struct remote_network_lookup_by_name_args remote_network_lookup_by_name_args; struct remote_network_lookup_by_name_ret { - remote_nonnull_network net; + remote_nonnull_network net; }; typedef struct remote_network_lookup_by_name_ret remote_network_lookup_by_name_ret; struct remote_network_create_xml_args { - remote_nonnull_string xml; + remote_nonnull_string xml; }; typedef struct remote_network_create_xml_args remote_network_create_xml_args; struct remote_network_create_xml_ret { - remote_nonnull_network net; + remote_nonnull_network net; }; typedef struct remote_network_create_xml_ret remote_network_create_xml_ret; struct remote_network_define_xml_args { - remote_nonnull_string xml; + remote_nonnull_string xml; }; typedef struct remote_network_define_xml_args remote_network_define_xml_args; struct remote_network_define_xml_ret { - remote_nonnull_network net; + remote_nonnull_network net; }; typedef struct remote_network_define_xml_ret remote_network_define_xml_ret; struct remote_network_undefine_args { - remote_nonnull_network net; + remote_nonnull_network net; }; typedef struct remote_network_undefine_args remote_network_undefine_args; struct remote_network_create_args { - remote_nonnull_network net; + remote_nonnull_network net; }; typedef struct remote_network_create_args remote_network_create_args; struct remote_network_destroy_args { - remote_nonnull_network net; + remote_nonnull_network net; }; typedef struct remote_network_destroy_args remote_network_destroy_args; struct remote_network_dump_xml_args { - remote_nonnull_network net; - int flags; + remote_nonnull_network net; + int flags; }; typedef struct remote_network_dump_xml_args remote_network_dump_xml_args; struct remote_network_dump_xml_ret { - remote_nonnull_string xml; + remote_nonnull_string xml; }; typedef struct remote_network_dump_xml_ret remote_network_dump_xml_ret; struct remote_network_get_bridge_name_args { - remote_nonnull_network net; + remote_nonnull_network net; }; typedef struct remote_network_get_bridge_name_args remote_network_get_bridge_name_args; struct remote_network_get_bridge_name_ret { - remote_nonnull_string name; + remote_nonnull_string name; }; typedef struct remote_network_get_bridge_name_ret remote_network_get_bridge_name_ret; struct remote_network_get_autostart_args { - remote_nonnull_network net; + remote_nonnull_network net; }; typedef struct remote_network_get_autostart_args remote_network_get_autostart_args; struct remote_network_get_autostart_ret { - int autostart; + int autostart; }; typedef struct remote_network_get_autostart_ret remote_network_get_autostart_ret; struct remote_network_set_autostart_args { - remote_nonnull_network net; - int autostart; + remote_nonnull_network net; + int autostart; }; typedef struct remote_network_set_autostart_args remote_network_set_autostart_args; struct remote_auth_list_ret { - struct { - u_int types_len; - remote_auth_type *types_val; - } types; + struct { + u_int types_len; + remote_auth_type *types_val; + } types; }; typedef struct remote_auth_list_ret remote_auth_list_ret; struct remote_auth_sasl_init_ret { - remote_nonnull_string mechlist; + remote_nonnull_string mechlist; }; typedef struct remote_auth_sasl_init_ret remote_auth_sasl_init_ret; struct remote_auth_sasl_start_args { - remote_nonnull_string mech; - int nil; - struct { - u_int data_len; - char *data_val; - } data; + remote_nonnull_string mech; + int nil; + struct { + u_int data_len; + char *data_val; + } data; }; typedef struct remote_auth_sasl_start_args remote_auth_sasl_start_args; struct remote_auth_sasl_start_ret { - int complete; - int nil; - struct { - u_int data_len; - char *data_val; - } data; + int complete; + int nil; + struct { + u_int data_len; + char *data_val; + } data; }; typedef struct remote_auth_sasl_start_ret remote_auth_sasl_start_ret; struct remote_auth_sasl_step_args { - int nil; - struct { - u_int data_len; - char *data_val; - } data; + int nil; + struct { + u_int data_len; + char *data_val; + } data; }; typedef struct remote_auth_sasl_step_args remote_auth_sasl_step_args; struct remote_auth_sasl_step_ret { - int complete; - int nil; - struct { - u_int data_len; - char *data_val; - } data; + int complete; + int nil; + struct { + u_int data_len; + char *data_val; + } data; }; typedef struct remote_auth_sasl_step_ret remote_auth_sasl_step_ret; struct remote_auth_polkit_ret { - int complete; + int complete; }; typedef struct remote_auth_polkit_ret remote_auth_polkit_ret; struct remote_num_of_storage_pools_ret { - int num; + int num; }; typedef struct remote_num_of_storage_pools_ret remote_num_of_storage_pools_ret; struct remote_list_storage_pools_args { - int maxnames; + int maxnames; }; typedef struct remote_list_storage_pools_args remote_list_storage_pools_args; struct remote_list_storage_pools_ret { - struct { - u_int names_len; - remote_nonnull_string *names_val; - } names; + struct { + u_int names_len; + remote_nonnull_string *names_val; + } names; }; typedef struct remote_list_storage_pools_ret remote_list_storage_pools_ret; struct remote_num_of_defined_storage_pools_ret { - int num; + int num; }; typedef struct remote_num_of_defined_storage_pools_ret remote_num_of_defined_storage_pools_ret; struct remote_list_defined_storage_pools_args { - int maxnames; + int maxnames; }; typedef struct remote_list_defined_storage_pools_args remote_list_defined_storage_pools_args; struct remote_list_defined_storage_pools_ret { - struct { - u_int names_len; - remote_nonnull_string *names_val; - } names; + struct { + u_int names_len; + remote_nonnull_string *names_val; + } names; }; typedef struct remote_list_defined_storage_pools_ret remote_list_defined_storage_pools_ret; struct remote_storage_pool_lookup_by_uuid_args { - remote_uuid uuid; + remote_uuid uuid; }; typedef struct remote_storage_pool_lookup_by_uuid_args remote_storage_pool_lookup_by_uuid_args; struct remote_storage_pool_lookup_by_uuid_ret { - remote_nonnull_storage_pool pool; + remote_nonnull_storage_pool pool; }; typedef struct remote_storage_pool_lookup_by_uuid_ret remote_storage_pool_lookup_by_uuid_ret; struct remote_storage_pool_lookup_by_name_args { - remote_nonnull_string name; + remote_nonnull_string name; }; typedef struct remote_storage_pool_lookup_by_name_args remote_storage_pool_lookup_by_name_args; struct remote_storage_pool_lookup_by_name_ret { - remote_nonnull_storage_pool pool; + remote_nonnull_storage_pool pool; }; typedef struct remote_storage_pool_lookup_by_name_ret remote_storage_pool_lookup_by_name_ret; struct remote_storage_pool_lookup_by_volume_args { - remote_nonnull_storage_vol vol; + remote_nonnull_storage_vol vol; }; typedef struct remote_storage_pool_lookup_by_volume_args remote_storage_pool_lookup_by_volume_args; struct remote_storage_pool_lookup_by_volume_ret { - remote_nonnull_storage_pool pool; + remote_nonnull_storage_pool pool; }; typedef struct remote_storage_pool_lookup_by_volume_ret remote_storage_pool_lookup_by_volume_ret; struct remote_storage_pool_create_xml_args { - remote_nonnull_string xml; - u_int flags; + remote_nonnull_string xml; + u_int flags; }; typedef struct remote_storage_pool_create_xml_args remote_storage_pool_create_xml_args; struct remote_storage_pool_create_xml_ret { - remote_nonnull_storage_pool pool; + remote_nonnull_storage_pool pool; }; typedef struct remote_storage_pool_create_xml_ret remote_storage_pool_create_xml_ret; struct remote_storage_pool_define_xml_args { - remote_nonnull_string xml; - u_int flags; + remote_nonnull_string xml; + u_int flags; }; typedef struct remote_storage_pool_define_xml_args remote_storage_pool_define_xml_args; struct remote_storage_pool_define_xml_ret { - remote_nonnull_storage_pool pool; + remote_nonnull_storage_pool pool; }; typedef struct remote_storage_pool_define_xml_ret remote_storage_pool_define_xml_ret; struct remote_storage_pool_build_args { - remote_nonnull_storage_pool pool; - u_int flags; + remote_nonnull_storage_pool pool; + u_int flags; }; typedef struct remote_storage_pool_build_args remote_storage_pool_build_args; struct remote_storage_pool_undefine_args { - remote_nonnull_storage_pool pool; + remote_nonnull_storage_pool pool; }; typedef struct remote_storage_pool_undefine_args remote_storage_pool_undefine_args; struct remote_storage_pool_create_args { - remote_nonnull_storage_pool pool; - u_int flags; + remote_nonnull_storage_pool pool; + u_int flags; }; typedef struct remote_storage_pool_create_args remote_storage_pool_create_args; struct remote_storage_pool_destroy_args { - remote_nonnull_storage_pool pool; + remote_nonnull_storage_pool pool; }; typedef struct remote_storage_pool_destroy_args remote_storage_pool_destroy_args; struct remote_storage_pool_delete_args { - remote_nonnull_storage_pool pool; - u_int flags; + remote_nonnull_storage_pool pool; + u_int flags; }; typedef struct remote_storage_pool_delete_args remote_storage_pool_delete_args; struct remote_storage_pool_refresh_args { - remote_nonnull_storage_pool pool; - u_int flags; + remote_nonnull_storage_pool pool; + u_int flags; }; typedef struct remote_storage_pool_refresh_args remote_storage_pool_refresh_args; struct remote_storage_pool_dump_xml_args { - remote_nonnull_storage_pool pool; - u_int flags; + remote_nonnull_storage_pool pool; + u_int flags; }; typedef struct remote_storage_pool_dump_xml_args remote_storage_pool_dump_xml_args; struct remote_storage_pool_dump_xml_ret { - remote_nonnull_string xml; + remote_nonnull_string xml; }; typedef struct remote_storage_pool_dump_xml_ret remote_storage_pool_dump_xml_ret; struct remote_storage_pool_get_info_args { - remote_nonnull_storage_pool pool; + remote_nonnull_storage_pool pool; }; typedef struct remote_storage_pool_get_info_args remote_storage_pool_get_info_args; struct remote_storage_pool_get_info_ret { - u_char state; - u_quad_t capacity; - u_quad_t allocation; - u_quad_t available; + u_char state; + u_quad_t capacity; + u_quad_t allocation; + u_quad_t available; }; typedef struct remote_storage_pool_get_info_ret remote_storage_pool_get_info_ret; struct remote_storage_pool_get_autostart_args { - remote_nonnull_storage_pool pool; + remote_nonnull_storage_pool pool; }; typedef struct remote_storage_pool_get_autostart_args remote_storage_pool_get_autostart_args; struct remote_storage_pool_get_autostart_ret { - int autostart; + int autostart; }; typedef struct remote_storage_pool_get_autostart_ret remote_storage_pool_get_autostart_ret; struct remote_storage_pool_set_autostart_args { - remote_nonnull_storage_pool pool; - int autostart; + remote_nonnull_storage_pool pool; + int autostart; }; typedef struct remote_storage_pool_set_autostart_args remote_storage_pool_set_autostart_args; struct remote_storage_pool_num_of_volumes_args { - remote_nonnull_storage_pool pool; + remote_nonnull_storage_pool pool; }; typedef struct remote_storage_pool_num_of_volumes_args remote_storage_pool_num_of_volumes_args; struct remote_storage_pool_num_of_volumes_ret { - int num; + int num; }; typedef struct remote_storage_pool_num_of_volumes_ret remote_storage_pool_num_of_volumes_ret; struct remote_storage_pool_list_volumes_args { - remote_nonnull_storage_pool pool; - int maxnames; + remote_nonnull_storage_pool pool; + int maxnames; }; typedef struct remote_storage_pool_list_volumes_args remote_storage_pool_list_volumes_args; struct remote_storage_pool_list_volumes_ret { - struct { - u_int names_len; - remote_nonnull_string *names_val; - } names; + struct { + u_int names_len; + remote_nonnull_string *names_val; + } names; }; typedef struct remote_storage_pool_list_volumes_ret remote_storage_pool_list_volumes_ret; struct remote_storage_vol_lookup_by_name_args { - remote_nonnull_storage_pool pool; - remote_nonnull_string name; + remote_nonnull_storage_pool pool; + remote_nonnull_string name; }; typedef struct remote_storage_vol_lookup_by_name_args remote_storage_vol_lookup_by_name_args; struct remote_storage_vol_lookup_by_name_ret { - remote_nonnull_storage_vol vol; + remote_nonnull_storage_vol vol; }; typedef struct remote_storage_vol_lookup_by_name_ret remote_storage_vol_lookup_by_name_ret; struct remote_storage_vol_lookup_by_key_args { - remote_nonnull_string key; + remote_nonnull_string key; }; typedef struct remote_storage_vol_lookup_by_key_args remote_storage_vol_lookup_by_key_args; struct remote_storage_vol_lookup_by_key_ret { - remote_nonnull_storage_vol vol; + remote_nonnull_storage_vol vol; }; typedef struct remote_storage_vol_lookup_by_key_ret remote_storage_vol_lookup_by_key_ret; struct remote_storage_vol_lookup_by_path_args { - remote_nonnull_string path; + remote_nonnull_string path; }; typedef struct remote_storage_vol_lookup_by_path_args remote_storage_vol_lookup_by_path_args; struct remote_storage_vol_lookup_by_path_ret { - remote_nonnull_storage_vol vol; + remote_nonnull_storage_vol vol; }; typedef struct remote_storage_vol_lookup_by_path_ret remote_storage_vol_lookup_by_path_ret; struct remote_storage_vol_create_xml_args { - remote_nonnull_storage_pool pool; - remote_nonnull_string xml; - u_int flags; + remote_nonnull_storage_pool pool; + remote_nonnull_string xml; + u_int flags; }; typedef struct remote_storage_vol_create_xml_args remote_storage_vol_create_xml_args; struct remote_storage_vol_create_xml_ret { - remote_nonnull_storage_vol vol; + remote_nonnull_storage_vol vol; }; typedef struct remote_storage_vol_create_xml_ret remote_storage_vol_create_xml_ret; struct remote_storage_vol_delete_args { - remote_nonnull_storage_vol vol; - u_int flags; + remote_nonnull_storage_vol vol; + u_int flags; }; typedef struct remote_storage_vol_delete_args remote_storage_vol_delete_args; struct remote_storage_vol_dump_xml_args { - remote_nonnull_storage_vol vol; - u_int flags; + remote_nonnull_storage_vol vol; + u_int flags; }; typedef struct remote_storage_vol_dump_xml_args remote_storage_vol_dump_xml_args; struct remote_storage_vol_dump_xml_ret { - remote_nonnull_string xml; + remote_nonnull_string xml; }; typedef struct remote_storage_vol_dump_xml_ret remote_storage_vol_dump_xml_ret; struct remote_storage_vol_get_info_args { - remote_nonnull_storage_vol vol; + remote_nonnull_storage_vol vol; }; typedef struct remote_storage_vol_get_info_args remote_storage_vol_get_info_args; struct remote_storage_vol_get_info_ret { - char type; - u_quad_t capacity; - u_quad_t allocation; + char type; + u_quad_t capacity; + u_quad_t allocation; }; typedef struct remote_storage_vol_get_info_ret remote_storage_vol_get_info_ret; struct remote_storage_vol_get_path_args { - remote_nonnull_storage_vol vol; + remote_nonnull_storage_vol vol; }; typedef struct remote_storage_vol_get_path_args remote_storage_vol_get_path_args; struct remote_storage_vol_get_path_ret { - remote_nonnull_string name; + remote_nonnull_string name; }; typedef struct remote_storage_vol_get_path_ret remote_storage_vol_get_path_ret; #define REMOTE_PROGRAM 0x20008086 #define REMOTE_PROTOCOL_VERSION 1 enum remote_procedure { - REMOTE_PROC_OPEN = 1, - REMOTE_PROC_CLOSE = 2, - REMOTE_PROC_GET_TYPE = 3, - REMOTE_PROC_GET_VERSION = 4, - REMOTE_PROC_GET_MAX_VCPUS = 5, - REMOTE_PROC_NODE_GET_INFO = 6, - REMOTE_PROC_GET_CAPABILITIES = 7, - REMOTE_PROC_DOMAIN_ATTACH_DEVICE = 8, - REMOTE_PROC_DOMAIN_CREATE = 9, - REMOTE_PROC_DOMAIN_CREATE_LINUX = 10, - REMOTE_PROC_DOMAIN_DEFINE_XML = 11, - REMOTE_PROC_DOMAIN_DESTROY = 12, - REMOTE_PROC_DOMAIN_DETACH_DEVICE = 13, - REMOTE_PROC_DOMAIN_DUMP_XML = 14, - REMOTE_PROC_DOMAIN_GET_AUTOSTART = 15, - REMOTE_PROC_DOMAIN_GET_INFO = 16, - REMOTE_PROC_DOMAIN_GET_MAX_MEMORY = 17, - REMOTE_PROC_DOMAIN_GET_MAX_VCPUS = 18, - REMOTE_PROC_DOMAIN_GET_OS_TYPE = 19, - REMOTE_PROC_DOMAIN_GET_VCPUS = 20, - REMOTE_PROC_LIST_DEFINED_DOMAINS = 21, - REMOTE_PROC_DOMAIN_LOOKUP_BY_ID = 22, - REMOTE_PROC_DOMAIN_LOOKUP_BY_NAME = 23, - REMOTE_PROC_DOMAIN_LOOKUP_BY_UUID = 24, - REMOTE_PROC_NUM_OF_DEFINED_DOMAINS = 25, - REMOTE_PROC_DOMAIN_PIN_VCPU = 26, - REMOTE_PROC_DOMAIN_REBOOT = 27, - REMOTE_PROC_DOMAIN_RESUME = 28, - REMOTE_PROC_DOMAIN_SET_AUTOSTART = 29, - REMOTE_PROC_DOMAIN_SET_MAX_MEMORY = 30, - REMOTE_PROC_DOMAIN_SET_MEMORY = 31, - REMOTE_PROC_DOMAIN_SET_VCPUS = 32, - REMOTE_PROC_DOMAIN_SHUTDOWN = 33, - REMOTE_PROC_DOMAIN_SUSPEND = 34, - REMOTE_PROC_DOMAIN_UNDEFINE = 35, - REMOTE_PROC_LIST_DEFINED_NETWORKS = 36, - REMOTE_PROC_LIST_DOMAINS = 37, - REMOTE_PROC_LIST_NETWORKS = 38, - REMOTE_PROC_NETWORK_CREATE = 39, - REMOTE_PROC_NETWORK_CREATE_XML = 40, - REMOTE_PROC_NETWORK_DEFINE_XML = 41, - REMOTE_PROC_NETWORK_DESTROY = 42, - REMOTE_PROC_NETWORK_DUMP_XML = 43, - REMOTE_PROC_NETWORK_GET_AUTOSTART = 44, - REMOTE_PROC_NETWORK_GET_BRIDGE_NAME = 45, - REMOTE_PROC_NETWORK_LOOKUP_BY_NAME = 46, - REMOTE_PROC_NETWORK_LOOKUP_BY_UUID = 47, - REMOTE_PROC_NETWORK_SET_AUTOSTART = 48, - REMOTE_PROC_NETWORK_UNDEFINE = 49, - REMOTE_PROC_NUM_OF_DEFINED_NETWORKS = 50, - REMOTE_PROC_NUM_OF_DOMAINS = 51, - REMOTE_PROC_NUM_OF_NETWORKS = 52, - REMOTE_PROC_DOMAIN_CORE_DUMP = 53, - REMOTE_PROC_DOMAIN_RESTORE = 54, - REMOTE_PROC_DOMAIN_SAVE = 55, - REMOTE_PROC_DOMAIN_GET_SCHEDULER_TYPE = 56, - REMOTE_PROC_DOMAIN_GET_SCHEDULER_PARAMETERS = 57, - REMOTE_PROC_DOMAIN_SET_SCHEDULER_PARAMETERS = 58, - REMOTE_PROC_GET_HOSTNAME = 59, - REMOTE_PROC_SUPPORTS_FEATURE = 60, - REMOTE_PROC_DOMAIN_MIGRATE_PREPARE = 61, - REMOTE_PROC_DOMAIN_MIGRATE_PERFORM = 62, - REMOTE_PROC_DOMAIN_MIGRATE_FINISH = 63, - REMOTE_PROC_DOMAIN_BLOCK_STATS = 64, - REMOTE_PROC_DOMAIN_INTERFACE_STATS = 65, - REMOTE_PROC_AUTH_LIST = 66, - REMOTE_PROC_AUTH_SASL_INIT = 67, - REMOTE_PROC_AUTH_SASL_START = 68, - REMOTE_PROC_AUTH_SASL_STEP = 69, - REMOTE_PROC_AUTH_POLKIT = 70, - REMOTE_PROC_NUM_OF_STORAGE_POOLS = 71, - REMOTE_PROC_LIST_STORAGE_POOLS = 72, - REMOTE_PROC_NUM_OF_DEFINED_STORAGE_POOLS = 73, - REMOTE_PROC_LIST_DEFINED_STORAGE_POOLS = 74, - REMOTE_PROC_DISCOVER_STORAGE_POOLS = 75, - REMOTE_PROC_STORAGE_POOL_CREATE_XML = 76, - REMOTE_PROC_STORAGE_POOL_DEFINE_XML = 77, - REMOTE_PROC_STORAGE_POOL_CREATE = 78, - REMOTE_PROC_STORAGE_POOL_BUILD = 79, - REMOTE_PROC_STORAGE_POOL_DESTROY = 80, - REMOTE_PROC_STORAGE_POOL_DELETE = 81, - REMOTE_PROC_STORAGE_POOL_UNDEFINE = 82, - REMOTE_PROC_STORAGE_POOL_REFRESH = 83, - REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_NAME = 84, - REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_UUID = 85, - REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_VOLUME = 86, - REMOTE_PROC_STORAGE_POOL_GET_INFO = 87, - REMOTE_PROC_STORAGE_POOL_DUMP_XML = 88, - REMOTE_PROC_STORAGE_POOL_GET_AUTOSTART = 89, - REMOTE_PROC_STORAGE_POOL_SET_AUTOSTART = 90, - REMOTE_PROC_STORAGE_POOL_NUM_OF_VOLUMES = 91, - REMOTE_PROC_STORAGE_POOL_LIST_VOLUMES = 92, - REMOTE_PROC_STORAGE_VOL_CREATE_XML = 93, - REMOTE_PROC_STORAGE_VOL_DELETE = 94, - REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_NAME = 95, - REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_KEY = 96, - REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_PATH = 97, - REMOTE_PROC_STORAGE_VOL_GET_INFO = 98, - REMOTE_PROC_STORAGE_VOL_DUMP_XML = 99, - REMOTE_PROC_STORAGE_VOL_GET_PATH = 100, + REMOTE_PROC_OPEN = 1, + REMOTE_PROC_CLOSE = 2, + REMOTE_PROC_GET_TYPE = 3, + REMOTE_PROC_GET_VERSION = 4, + REMOTE_PROC_GET_MAX_VCPUS = 5, + REMOTE_PROC_NODE_GET_INFO = 6, + REMOTE_PROC_GET_CAPABILITIES = 7, + REMOTE_PROC_DOMAIN_ATTACH_DEVICE = 8, + REMOTE_PROC_DOMAIN_CREATE = 9, + REMOTE_PROC_DOMAIN_CREATE_LINUX = 10, + REMOTE_PROC_DOMAIN_DEFINE_XML = 11, + REMOTE_PROC_DOMAIN_DESTROY = 12, + REMOTE_PROC_DOMAIN_DETACH_DEVICE = 13, + REMOTE_PROC_DOMAIN_DUMP_XML = 14, + REMOTE_PROC_DOMAIN_GET_AUTOSTART = 15, + REMOTE_PROC_DOMAIN_GET_INFO = 16, + REMOTE_PROC_DOMAIN_GET_MAX_MEMORY = 17, + REMOTE_PROC_DOMAIN_GET_MAX_VCPUS = 18, + REMOTE_PROC_DOMAIN_GET_OS_TYPE = 19, + REMOTE_PROC_DOMAIN_GET_VCPUS = 20, + REMOTE_PROC_LIST_DEFINED_DOMAINS = 21, + REMOTE_PROC_DOMAIN_LOOKUP_BY_ID = 22, + REMOTE_PROC_DOMAIN_LOOKUP_BY_NAME = 23, + REMOTE_PROC_DOMAIN_LOOKUP_BY_UUID = 24, + REMOTE_PROC_NUM_OF_DEFINED_DOMAINS = 25, + REMOTE_PROC_DOMAIN_PIN_VCPU = 26, + REMOTE_PROC_DOMAIN_REBOOT = 27, + REMOTE_PROC_DOMAIN_RESUME = 28, + REMOTE_PROC_DOMAIN_SET_AUTOSTART = 29, + REMOTE_PROC_DOMAIN_SET_MAX_MEMORY = 30, + REMOTE_PROC_DOMAIN_SET_MEMORY = 31, + REMOTE_PROC_DOMAIN_SET_VCPUS = 32, + REMOTE_PROC_DOMAIN_SHUTDOWN = 33, + REMOTE_PROC_DOMAIN_SUSPEND = 34, + REMOTE_PROC_DOMAIN_UNDEFINE = 35, + REMOTE_PROC_LIST_DEFINED_NETWORKS = 36, + REMOTE_PROC_LIST_DOMAINS = 37, + REMOTE_PROC_LIST_NETWORKS = 38, + REMOTE_PROC_NETWORK_CREATE = 39, + REMOTE_PROC_NETWORK_CREATE_XML = 40, + REMOTE_PROC_NETWORK_DEFINE_XML = 41, + REMOTE_PROC_NETWORK_DESTROY = 42, + REMOTE_PROC_NETWORK_DUMP_XML = 43, + REMOTE_PROC_NETWORK_GET_AUTOSTART = 44, + REMOTE_PROC_NETWORK_GET_BRIDGE_NAME = 45, + REMOTE_PROC_NETWORK_LOOKUP_BY_NAME = 46, + REMOTE_PROC_NETWORK_LOOKUP_BY_UUID = 47, + REMOTE_PROC_NETWORK_SET_AUTOSTART = 48, + REMOTE_PROC_NETWORK_UNDEFINE = 49, + REMOTE_PROC_NUM_OF_DEFINED_NETWORKS = 50, + REMOTE_PROC_NUM_OF_DOMAINS = 51, + REMOTE_PROC_NUM_OF_NETWORKS = 52, + REMOTE_PROC_DOMAIN_CORE_DUMP = 53, + REMOTE_PROC_DOMAIN_RESTORE = 54, + REMOTE_PROC_DOMAIN_SAVE = 55, + REMOTE_PROC_DOMAIN_GET_SCHEDULER_TYPE = 56, + REMOTE_PROC_DOMAIN_GET_SCHEDULER_PARAMETERS = 57, + REMOTE_PROC_DOMAIN_SET_SCHEDULER_PARAMETERS = 58, + REMOTE_PROC_GET_HOSTNAME = 59, + REMOTE_PROC_SUPPORTS_FEATURE = 60, + REMOTE_PROC_DOMAIN_MIGRATE_PREPARE = 61, + REMOTE_PROC_DOMAIN_MIGRATE_PERFORM = 62, + REMOTE_PROC_DOMAIN_MIGRATE_FINISH = 63, + REMOTE_PROC_DOMAIN_BLOCK_STATS = 64, + REMOTE_PROC_DOMAIN_INTERFACE_STATS = 65, + REMOTE_PROC_AUTH_LIST = 66, + REMOTE_PROC_AUTH_SASL_INIT = 67, + REMOTE_PROC_AUTH_SASL_START = 68, + REMOTE_PROC_AUTH_SASL_STEP = 69, + REMOTE_PROC_AUTH_POLKIT = 70, + REMOTE_PROC_NUM_OF_STORAGE_POOLS = 71, + REMOTE_PROC_LIST_STORAGE_POOLS = 72, + REMOTE_PROC_NUM_OF_DEFINED_STORAGE_POOLS = 73, + REMOTE_PROC_LIST_DEFINED_STORAGE_POOLS = 74, + REMOTE_PROC_DISCOVER_STORAGE_POOLS = 75, + REMOTE_PROC_STORAGE_POOL_CREATE_XML = 76, + REMOTE_PROC_STORAGE_POOL_DEFINE_XML = 77, + REMOTE_PROC_STORAGE_POOL_CREATE = 78, + REMOTE_PROC_STORAGE_POOL_BUILD = 79, + REMOTE_PROC_STORAGE_POOL_DESTROY = 80, + REMOTE_PROC_STORAGE_POOL_DELETE = 81, + REMOTE_PROC_STORAGE_POOL_UNDEFINE = 82, + REMOTE_PROC_STORAGE_POOL_REFRESH = 83, + REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_NAME = 84, + REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_UUID = 85, + REMOTE_PROC_STORAGE_POOL_LOOKUP_BY_VOLUME = 86, + REMOTE_PROC_STORAGE_POOL_GET_INFO = 87, + REMOTE_PROC_STORAGE_POOL_DUMP_XML = 88, + REMOTE_PROC_STORAGE_POOL_GET_AUTOSTART = 89, + REMOTE_PROC_STORAGE_POOL_SET_AUTOSTART = 90, + REMOTE_PROC_STORAGE_POOL_NUM_OF_VOLUMES = 91, + REMOTE_PROC_STORAGE_POOL_LIST_VOLUMES = 92, + REMOTE_PROC_STORAGE_VOL_CREATE_XML = 93, + REMOTE_PROC_STORAGE_VOL_DELETE = 94, + REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_NAME = 95, + REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_KEY = 96, + REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_PATH = 97, + REMOTE_PROC_STORAGE_VOL_GET_INFO = 98, + REMOTE_PROC_STORAGE_VOL_DUMP_XML = 99, + REMOTE_PROC_STORAGE_VOL_GET_PATH = 100, + REMOTE_PROC_NODE_GET_CELLS_FREE_MEMORY = 101, + REMOTE_PROC_NODE_GET_FREE_MEMORY = 102, }; typedef enum remote_procedure remote_procedure; enum remote_message_direction { - REMOTE_CALL = 0, - REMOTE_REPLY = 1, - REMOTE_MESSAGE = 2, + REMOTE_CALL = 0, + REMOTE_REPLY = 1, + REMOTE_MESSAGE = 2, }; typedef enum remote_message_direction remote_message_direction; enum remote_message_status { - REMOTE_OK = 0, - REMOTE_ERROR = 1, + REMOTE_OK = 0, + REMOTE_ERROR = 1, }; typedef enum remote_message_status remote_message_status; #define REMOTE_MESSAGE_HEADER_XDR_LEN 4 struct remote_message_header { - u_int prog; - u_int vers; - remote_procedure proc; - remote_message_direction direction; - u_int serial; - remote_message_status status; + u_int prog; + u_int vers; + remote_procedure proc; + remote_message_direction direction; + u_int serial; + remote_message_status status; }; typedef struct remote_message_header remote_message_header; @@ -1172,6 +1194,9 @@ extern bool_t xdr_remote_get_max_vcpus_ extern bool_t xdr_remote_get_max_vcpus_ret (XDR *, remote_get_max_vcpus_ret*); extern bool_t xdr_remote_node_get_info_ret (XDR *, remote_node_get_info_ret*); extern bool_t xdr_remote_get_capabilities_ret (XDR *, remote_get_capabilities_ret*); +extern bool_t xdr_remote_node_get_cells_free_memory_args (XDR *, remote_node_get_cells_free_memory_args*); +extern bool_t xdr_remote_node_get_cells_free_memory_ret (XDR *, remote_node_get_cells_free_memory_ret*); +extern bool_t xdr_remote_node_get_free_memory_ret (XDR *, remote_node_get_free_memory_ret*); extern bool_t xdr_remote_domain_get_scheduler_type_args (XDR *, remote_domain_get_scheduler_type_args*); extern bool_t xdr_remote_domain_get_scheduler_type_ret (XDR *, remote_domain_get_scheduler_type_ret*); extern bool_t xdr_remote_domain_get_scheduler_parameters_args (XDR *, remote_domain_get_scheduler_parameters_args*); @@ -1344,6 +1369,9 @@ extern bool_t xdr_remote_get_max_vcpus_a extern bool_t xdr_remote_get_max_vcpus_ret (); extern bool_t xdr_remote_node_get_info_ret (); extern bool_t xdr_remote_get_capabilities_ret (); +extern bool_t xdr_remote_node_get_cells_free_memory_args (); +extern bool_t xdr_remote_node_get_cells_free_memory_ret (); +extern bool_t xdr_remote_node_get_free_memory_ret (); extern bool_t xdr_remote_domain_get_scheduler_type_args (); extern bool_t xdr_remote_domain_get_scheduler_type_ret (); extern bool_t xdr_remote_domain_get_scheduler_parameters_args (); Index: qemud/remote_protocol.x =================================================================== RCS file: /data/cvs/libvirt/qemud/remote_protocol.x,v retrieving revision 1.11 diff -u -p -r1.11 remote_protocol.x --- qemud/remote_protocol.x 10 Apr 2008 16:53:29 -0000 1.11 +++ qemud/remote_protocol.x 15 May 2008 21:07:31 -0000 @@ -87,6 +87,9 @@ const REMOTE_STORAGE_VOL_NAME_LIST_MAX = /* Upper limit on list of scheduler parameters. */ const REMOTE_DOMAIN_SCHEDULER_PARAMETERS_MAX = 16; +/* Upper limit on number of NUMA cells */ +const REMOTE_NODE_MAX_CELLS = 1024; + /* Upper limit on SASL auth negotiation packet */ const REMOTE_AUTH_SASL_DATA_MAX = 65536; @@ -254,6 +257,19 @@ struct remote_get_capabilities_ret { remote_nonnull_string capabilities; }; +struct remote_node_get_cells_free_memory_args { + int startCell; + int maxCells; +}; + +struct remote_node_get_cells_free_memory_ret { + hyper freeMems<REMOTE_NODE_MAX_CELLS>; +}; + +struct remote_node_get_free_memory_ret { + hyper freeMem; +}; + struct remote_domain_get_scheduler_type_args { remote_nonnull_domain dom; }; @@ -1017,7 +1033,10 @@ enum remote_procedure { REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_PATH = 97, REMOTE_PROC_STORAGE_VOL_GET_INFO = 98, REMOTE_PROC_STORAGE_VOL_DUMP_XML = 99, - REMOTE_PROC_STORAGE_VOL_GET_PATH = 100 + REMOTE_PROC_STORAGE_VOL_GET_PATH = 100, + + REMOTE_PROC_NODE_GET_CELLS_FREE_MEMORY = 101, + REMOTE_PROC_NODE_GET_FREE_MEMORY = 102 }; /* Custom RPC structure. */ Index: qemud/rpcgen_fix.pl =================================================================== RCS file: /data/cvs/libvirt/qemud/rpcgen_fix.pl,v retrieving revision 1.1 diff -u -p -r1.1 rpcgen_fix.pl --- qemud/rpcgen_fix.pl 11 Jun 2007 11:36:17 -0000 1.1 +++ qemud/rpcgen_fix.pl 15 May 2008 21:07:31 -0000 @@ -24,6 +24,8 @@ while (<>) { next; } + s/\t/ /g; + if (m/^}/) { $in_function = 0; @@ -52,7 +54,7 @@ while (<>) { foreach (keys %uses) { $i = $uses{$_}; unshift @function, - ("\tchar **objp_cpp$i = (char **) (void *) &$_;\n"); + (" char **objp_cpp$i = (char **) (void *) &$_;\n"); $i++; } @function = -- |: Red Hat, Engineering, Boston -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

On Thu, May 15, 2008 at 10:08:42PM +0100, Daniel P. Berrange wrote:
For some reason the virNodeGetFreeMemroy and virNodeGetCellsFreeMemory NUMA APIs were never added to the remote driver. THis patch fixes that. It also updates the 2 perl scripts which post-process the RPC files to not insert TABs, since we'd previously removed them from all the generated files. Finally, the remote_protocol.x has TAB -> SPACE conversion since we missed that first time around
Yes, looks good. Rich. -- Richard Jones, Emerging Technologies, Red Hat http://et.redhat.com/~rjones virt-top is 'top' for virtual machines. Tiny program with many powerful monitoring features, net stats, disk stats, logging, etc. http://et.redhat.com/~rjones/virt-top

"Daniel P. Berrange" <berrange@redhat.com> wrote:
For some reason the virNodeGetFreeMemroy and virNodeGetCellsFreeMemory NUMA APIs were never added to the remote driver. THis patch fixes that. It also updates the 2 perl scripts which post-process the RPC files to not insert TABs, since we'd previously removed them from all the generated files. Finally, the remote_protocol.x has TAB -> SPACE conversion since we missed that first time around
qemud/remote.c | 47 + qemud/remote_dispatch_localvars.h | 3 qemud/remote_dispatch_proc_switch.h | 15 qemud/remote_dispatch_prototypes.h | 2 qemud/remote_generate_stubs.pl | 20 qemud/remote_protocol.c | 30 + qemud/remote_protocol.h | 918 ++++++++++++++++++------------------ qemud/remote_protocol.x | 21 qemud/rpcgen_fix.pl | 4 src/remote_internal.c | 55 ++ 10 files changed, 657 insertions(+), 458 deletions(-)
Hi Dan, Looks fine. Though you'll want to undo the global re-indentation-with-TABs in qemud/remote_protocol.h: Even ignoring all of the lines where 8-spaces -> TAB, there are a few new TABs: $ git diff -w qemud/remote_protocol.h|cat -A|grep '\^I' +^Iint startCell;$ +^Iint maxCells;$ +^Istruct {$ +^I^Iu_int freeMems_len;$ +^I^Iquad_t *freeMems_val;$ +^I} freeMems;$ +^Iquad_t freeMem;$ +^IREMOTE_PROC_NODE_GET_CELLS_FREE_MEMORY = 101,$ +^IREMOTE_PROC_NODE_GET_FREE_MEMORY = 102,$

On Tue, May 20, 2008 at 01:49:08PM +0200, Jim Meyering wrote:
"Daniel P. Berrange" <berrange@redhat.com> wrote:
For some reason the virNodeGetFreeMemroy and virNodeGetCellsFreeMemory NUMA APIs were never added to the remote driver. THis patch fixes that. It also updates the 2 perl scripts which post-process the RPC files to not insert TABs, since we'd previously removed them from all the generated files. Finally, the remote_protocol.x has TAB -> SPACE conversion since we missed that first time around
qemud/remote.c | 47 + qemud/remote_dispatch_localvars.h | 3 qemud/remote_dispatch_proc_switch.h | 15 qemud/remote_dispatch_prototypes.h | 2 qemud/remote_generate_stubs.pl | 20 qemud/remote_protocol.c | 30 + qemud/remote_protocol.h | 918 ++++++++++++++++++------------------ qemud/remote_protocol.x | 21 qemud/rpcgen_fix.pl | 4 src/remote_internal.c | 55 ++ 10 files changed, 657 insertions(+), 458 deletions(-)
Hi Dan,
Looks fine. Though you'll want to undo the global re-indentation-with-TABs in qemud/remote_protocol.h: Even ignoring all of the lines where 8-spaces -> TAB, there are a few new TABs:
This is an autogenerated file. I mistakenly only fixed generation of the C file and not the header. I'll redo the generation & fixup. Dan. -- |: Red Hat, Engineering, Boston -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

"Daniel P. Berrange" <berrange@redhat.com> wrote:
On Tue, May 20, 2008 at 01:49:08PM +0200, Jim Meyering wrote:
"Daniel P. Berrange" <berrange@redhat.com> wrote:
For some reason the virNodeGetFreeMemroy and virNodeGetCellsFreeMemory NUMA APIs were never added to the remote driver. THis patch fixes that. It also updates the 2 perl scripts which post-process the RPC files to not insert TABs, since we'd previously removed them from all the generated files. Finally, the remote_protocol.x has TAB -> SPACE conversion since we missed that first time around
qemud/remote.c | 47 + qemud/remote_dispatch_localvars.h | 3 qemud/remote_dispatch_proc_switch.h | 15 qemud/remote_dispatch_prototypes.h | 2 qemud/remote_generate_stubs.pl | 20 qemud/remote_protocol.c | 30 + qemud/remote_protocol.h | 918 ++++++++++++++++++------------------ qemud/remote_protocol.x | 21 qemud/rpcgen_fix.pl | 4 src/remote_internal.c | 55 ++ 10 files changed, 657 insertions(+), 458 deletions(-)
Hi Dan,
Looks fine. Though you'll want to undo the global re-indentation-with-TABs in qemud/remote_protocol.h: Even ignoring all of the lines where 8-spaces -> TAB, there are a few new TABs:
This is an autogenerated file. I mistakenly only fixed generation of the C file and not the header. I'll redo the generation & fixup.
Oh! That's what I thought at first, but when I found no rule for it in the Makefile.am, I presumed it was not. Should have known better. It's just generated as a side-effect of generating the .c file. Which means we can remove the .h file and it won't be regenerated. We should correct that, eventually.

On Tue, May 20, 2008 at 02:18:37PM +0200, Jim Meyering wrote:
"Daniel P. Berrange" <berrange@redhat.com> wrote:
On Tue, May 20, 2008 at 01:49:08PM +0200, Jim Meyering wrote:
Looks fine. Though you'll want to undo the global re-indentation-with-TABs in qemud/remote_protocol.h: Even ignoring all of the lines where 8-spaces -> TAB, there are a few new TABs:
This is an autogenerated file. I mistakenly only fixed generation of the C file and not the header. I'll redo the generation & fixup.
Oh! That's what I thought at first, but when I found no rule for it in the Makefile.am, I presumed it was not. Should have known better. It's just generated as a side-effect of generating the .c file. Which means we can remove the .h file and it won't be regenerated. We should correct that, eventually.
Its already correct AFAICT - the (simplified) rules we have in qemud/Makefile.am are: .x.c: rm -f $@ rpcgen -c -o $@ $< .x.h: rm -f $@ rpcgen -h -o $@ $< I merely needed to add a post procesing section to the latter if GLIBC_RPCGEN mv $@ $@.bak sed -e 's/\t/ /g' $@.bak > $@ endif to kill the tabs it inserts. Revised patch follows... qemud/Makefile.am | 4 ++ qemud/remote.c | 47 ++++++++++++++++++++++++++++++ qemud/remote_dispatch_localvars.h | 3 + qemud/remote_dispatch_proc_switch.h | 15 +++++++++ qemud/remote_dispatch_prototypes.h | 2 + qemud/remote_generate_stubs.pl | 20 ++++++------- qemud/remote_protocol.c | 30 +++++++++++++++++++ qemud/remote_protocol.h | 28 ++++++++++++++++++ qemud/remote_protocol.x | 21 +++++++++++++ qemud/rpcgen_fix.pl | 4 +- src/remote_internal.c | 55 +++++++++++++++++++++++++++++++++++- 11 files changed, 216 insertions(+), 13 deletions(-) Dan. diff -r 261f28ba431e qemud/Makefile.am --- a/qemud/Makefile.am Fri May 16 16:09:50 2008 -0400 +++ b/qemud/Makefile.am Tue May 20 10:49:20 2008 -0400 @@ -26,6 +26,10 @@ .x.h: rm -f $@ rpcgen -h -o $@ $< +if GLIBC_RPCGEN + mv $@ $@.bak + sed -e 's/\t/ /g' $@.bak > $@ +endif endif remote_protocol.c: remote_protocol.h diff -r 261f28ba431e qemud/remote.c --- a/qemud/remote.c Fri May 16 16:09:50 2008 -0400 +++ b/qemud/remote.c Tue May 20 10:49:20 2008 -0400 @@ -594,6 +594,53 @@ ret->capabilities = caps; return 0; } + +static int +remoteDispatchNodeGetCellsFreeMemory (struct qemud_server *server ATTRIBUTE_UNUSED, + struct qemud_client *client, + remote_message_header *req, + remote_node_get_cells_free_memory_args *args, + remote_node_get_cells_free_memory_ret *ret) +{ + CHECK_CONN(client); + + if (args->maxCells > REMOTE_NODE_MAX_CELLS) { + remoteDispatchError (client, req, + "%s", _("maxCells > REMOTE_NODE_MAX_CELLS")); + return -2; + } + + /* Allocate return buffer. */ + ret->freeMems.freeMems_val = calloc (args->maxCells, sizeof (*(ret->freeMems.freeMems_val))); + + ret->freeMems.freeMems_len = virNodeGetCellsFreeMemory(client->conn, + (unsigned long long *)ret->freeMems.freeMems_val, + args->startCell, + args->maxCells); + if (ret->freeMems.freeMems_len == 0) + return -1; + + return 0; +} + + +static int +remoteDispatchNodeGetFreeMemory (struct qemud_server *server ATTRIBUTE_UNUSED, + struct qemud_client *client, + remote_message_header *req, + void *args ATTRIBUTE_UNUSED, + remote_node_get_free_memory_ret *ret) +{ + unsigned long long freeMem; + CHECK_CONN(client); + + freeMem = virNodeGetFreeMemory(client->conn); + if (freeMem == 0) return -1; + + ret->freeMem = freeMem; + return 0; +} + static int remoteDispatchDomainGetSchedulerType (struct qemud_server *server ATTRIBUTE_UNUSED, diff -r 261f28ba431e qemud/remote_dispatch_localvars.h --- a/qemud/remote_dispatch_localvars.h Fri May 16 16:09:50 2008 -0400 +++ b/qemud/remote_dispatch_localvars.h Tue May 20 10:49:20 2008 -0400 @@ -98,6 +98,8 @@ remote_domain_migrate_prepare_args lv_remote_domain_migrate_prepare_args; remote_domain_migrate_prepare_ret lv_remote_domain_migrate_prepare_ret; remote_domain_undefine_args lv_remote_domain_undefine_args; +remote_node_get_cells_free_memory_args lv_remote_node_get_cells_free_memory_args; +remote_node_get_cells_free_memory_ret lv_remote_node_get_cells_free_memory_ret; remote_domain_get_scheduler_type_args lv_remote_domain_get_scheduler_type_args; remote_domain_get_scheduler_type_ret lv_remote_domain_get_scheduler_type_ret; remote_get_version_ret lv_remote_get_version_ret; @@ -122,6 +124,7 @@ remote_domain_set_autostart_args lv_remote_domain_set_autostart_args; remote_storage_pool_get_autostart_args lv_remote_storage_pool_get_autostart_args; remote_storage_pool_get_autostart_ret lv_remote_storage_pool_get_autostart_ret; +remote_node_get_free_memory_ret lv_remote_node_get_free_memory_ret; remote_storage_vol_get_path_args lv_remote_storage_vol_get_path_args; remote_storage_vol_get_path_ret lv_remote_storage_vol_get_path_ret; remote_domain_lookup_by_id_args lv_remote_domain_lookup_by_id_args; diff -r 261f28ba431e qemud/remote_dispatch_proc_switch.h --- a/qemud/remote_dispatch_proc_switch.h Fri May 16 16:09:50 2008 -0400 +++ b/qemud/remote_dispatch_proc_switch.h Tue May 20 10:49:20 2008 -0400 @@ -491,6 +491,21 @@ args = (char *) &lv_remote_network_undefine_args; memset (&lv_remote_network_undefine_args, 0, sizeof lv_remote_network_undefine_args); break; +case REMOTE_PROC_NODE_GET_CELLS_FREE_MEMORY: + fn = (dispatch_fn) remoteDispatchNodeGetCellsFreeMemory; + args_filter = (xdrproc_t) xdr_remote_node_get_cells_free_memory_args; + args = (char *) &lv_remote_node_get_cells_free_memory_args; + memset (&lv_remote_node_get_cells_free_memory_args, 0, sizeof lv_remote_node_get_cells_free_memory_args); + ret_filter = (xdrproc_t) xdr_remote_node_get_cells_free_memory_ret; + ret = (char *) &lv_remote_node_get_cells_free_memory_ret; + memset (&lv_remote_node_get_cells_free_memory_ret, 0, sizeof lv_remote_node_get_cells_free_memory_ret); + break; +case REMOTE_PROC_NODE_GET_FREE_MEMORY: + fn = (dispatch_fn) remoteDispatchNodeGetFreeMemory; + ret_filter = (xdrproc_t) xdr_remote_node_get_free_memory_ret; + ret = (char *) &lv_remote_node_get_free_memory_ret; + memset (&lv_remote_node_get_free_memory_ret, 0, sizeof lv_remote_node_get_free_memory_ret); + break; case REMOTE_PROC_NODE_GET_INFO: fn = (dispatch_fn) remoteDispatchNodeGetInfo; ret_filter = (xdrproc_t) xdr_remote_node_get_info_ret; diff -r 261f28ba431e qemud/remote_dispatch_prototypes.h --- a/qemud/remote_dispatch_prototypes.h Fri May 16 16:09:50 2008 -0400 +++ b/qemud/remote_dispatch_prototypes.h Tue May 20 10:49:20 2008 -0400 @@ -67,6 +67,8 @@ static int remoteDispatchNetworkLookupByUuid (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_network_lookup_by_uuid_args *args, remote_network_lookup_by_uuid_ret *ret); static int remoteDispatchNetworkSetAutostart (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_network_set_autostart_args *args, void *ret); static int remoteDispatchNetworkUndefine (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_network_undefine_args *args, void *ret); +static int remoteDispatchNodeGetCellsFreeMemory (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, remote_node_get_cells_free_memory_args *args, remote_node_get_cells_free_memory_ret *ret); +static int remoteDispatchNodeGetFreeMemory (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_node_get_free_memory_ret *ret); static int remoteDispatchNodeGetInfo (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_node_get_info_ret *ret); static int remoteDispatchNumOfDefinedDomains (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_num_of_defined_domains_ret *ret); static int remoteDispatchNumOfDefinedNetworks (struct qemud_server *server, struct qemud_client *client, remote_message_header *req, void *args, remote_num_of_defined_networks_ret *ret); diff -r 261f28ba431e qemud/remote_generate_stubs.pl --- a/qemud/remote_generate_stubs.pl Fri May 16 16:09:50 2008 -0400 +++ b/qemud/remote_generate_stubs.pl Tue May 20 10:49:20 2008 -0400 @@ -84,8 +84,8 @@ my @keys = sort (keys %calls); foreach (@keys) { print "$_:\n"; - print "\tname $calls{$_}->{name} ($calls{$_}->{ProcName})\n"; - print "\t$calls{$_}->{args} -> $calls{$_}->{ret}\n"; + print " name $calls{$_}->{name} ($calls{$_}->{ProcName})\n"; + print " $calls{$_}->{args} -> $calls{$_}->{ret}\n"; } } @@ -117,18 +117,18 @@ my @keys = sort (keys %calls); foreach (@keys) { print "case REMOTE_PROC_$calls{$_}->{UC_NAME}:\n"; - print "\tfn = (dispatch_fn) remoteDispatch$calls{$_}->{ProcName};\n"; + print " fn = (dispatch_fn) remoteDispatch$calls{$_}->{ProcName};\n"; if ($calls{$_}->{args} ne "void") { - print "\targs_filter = (xdrproc_t) xdr_$calls{$_}->{args};\n"; - print "\targs = (char *) &lv_$calls{$_}->{args};\n"; - print "\tmemset (&lv_$calls{$_}->{args}, 0, sizeof lv_$calls{$_}->{args});\n" + print " args_filter = (xdrproc_t) xdr_$calls{$_}->{args};\n"; + print " args = (char *) &lv_$calls{$_}->{args};\n"; + print " memset (&lv_$calls{$_}->{args}, 0, sizeof lv_$calls{$_}->{args});\n" } if ($calls{$_}->{ret} ne "void") { - print "\tret_filter = (xdrproc_t) xdr_$calls{$_}->{ret};\n"; - print "\tret = (char *) &lv_$calls{$_}->{ret};\n"; - print "\tmemset (&lv_$calls{$_}->{ret}, 0, sizeof lv_$calls{$_}->{ret});\n" + print " ret_filter = (xdrproc_t) xdr_$calls{$_}->{ret};\n"; + print " ret = (char *) &lv_$calls{$_}->{ret};\n"; + print " memset (&lv_$calls{$_}->{ret}, 0, sizeof lv_$calls{$_}->{ret});\n" } - print "\tbreak;\n"; + print " break;\n"; } } diff -r 261f28ba431e qemud/remote_protocol.c --- a/qemud/remote_protocol.c Fri May 16 16:09:50 2008 -0400 +++ b/qemud/remote_protocol.c Tue May 20 10:49:20 2008 -0400 @@ -382,6 +382,36 @@ { if (!xdr_remote_nonnull_string (xdrs, &objp->capabilities)) + return FALSE; + return TRUE; +} + +bool_t +xdr_remote_node_get_cells_free_memory_args (XDR *xdrs, remote_node_get_cells_free_memory_args *objp) +{ + + if (!xdr_int (xdrs, &objp->startCell)) + return FALSE; + if (!xdr_int (xdrs, &objp->maxCells)) + return FALSE; + return TRUE; +} + +bool_t +xdr_remote_node_get_cells_free_memory_ret (XDR *xdrs, remote_node_get_cells_free_memory_ret *objp) +{ + + if (!xdr_array (xdrs, (char **)&objp->freeMems.freeMems_val, (u_int *) &objp->freeMems.freeMems_len, REMOTE_NODE_MAX_CELLS, + sizeof (quad_t), (xdrproc_t) xdr_quad_t)) + return FALSE; + return TRUE; +} + +bool_t +xdr_remote_node_get_free_memory_ret (XDR *xdrs, remote_node_get_free_memory_ret *objp) +{ + + if (!xdr_quad_t (xdrs, &objp->freeMem)) return FALSE; return TRUE; } diff -r 261f28ba431e qemud/remote_protocol.h --- a/qemud/remote_protocol.h Fri May 16 16:09:50 2008 -0400 +++ b/qemud/remote_protocol.h Tue May 20 10:49:20 2008 -0400 @@ -30,6 +30,7 @@ #define REMOTE_STORAGE_POOL_NAME_LIST_MAX 256 #define REMOTE_STORAGE_VOL_NAME_LIST_MAX 1024 #define REMOTE_DOMAIN_SCHEDULER_PARAMETERS_MAX 16 +#define REMOTE_NODE_MAX_CELLS 1024 #define REMOTE_AUTH_SASL_DATA_MAX 65536 #define REMOTE_AUTH_TYPE_LIST_MAX 20 @@ -175,6 +176,25 @@ remote_nonnull_string capabilities; }; typedef struct remote_get_capabilities_ret remote_get_capabilities_ret; + +struct remote_node_get_cells_free_memory_args { + int startCell; + int maxCells; +}; +typedef struct remote_node_get_cells_free_memory_args remote_node_get_cells_free_memory_args; + +struct remote_node_get_cells_free_memory_ret { + struct { + u_int freeMems_len; + quad_t *freeMems_val; + } freeMems; +}; +typedef struct remote_node_get_cells_free_memory_ret remote_node_get_cells_free_memory_ret; + +struct remote_node_get_free_memory_ret { + quad_t freeMem; +}; +typedef struct remote_node_get_free_memory_ret remote_node_get_free_memory_ret; struct remote_domain_get_scheduler_type_args { remote_nonnull_domain dom; @@ -1116,6 +1136,8 @@ REMOTE_PROC_STORAGE_VOL_GET_INFO = 98, REMOTE_PROC_STORAGE_VOL_DUMP_XML = 99, REMOTE_PROC_STORAGE_VOL_GET_PATH = 100, + REMOTE_PROC_NODE_GET_CELLS_FREE_MEMORY = 101, + REMOTE_PROC_NODE_GET_FREE_MEMORY = 102, }; typedef enum remote_procedure remote_procedure; @@ -1172,6 +1194,9 @@ extern bool_t xdr_remote_get_max_vcpus_ret (XDR *, remote_get_max_vcpus_ret*); extern bool_t xdr_remote_node_get_info_ret (XDR *, remote_node_get_info_ret*); extern bool_t xdr_remote_get_capabilities_ret (XDR *, remote_get_capabilities_ret*); +extern bool_t xdr_remote_node_get_cells_free_memory_args (XDR *, remote_node_get_cells_free_memory_args*); +extern bool_t xdr_remote_node_get_cells_free_memory_ret (XDR *, remote_node_get_cells_free_memory_ret*); +extern bool_t xdr_remote_node_get_free_memory_ret (XDR *, remote_node_get_free_memory_ret*); extern bool_t xdr_remote_domain_get_scheduler_type_args (XDR *, remote_domain_get_scheduler_type_args*); extern bool_t xdr_remote_domain_get_scheduler_type_ret (XDR *, remote_domain_get_scheduler_type_ret*); extern bool_t xdr_remote_domain_get_scheduler_parameters_args (XDR *, remote_domain_get_scheduler_parameters_args*); @@ -1344,6 +1369,9 @@ extern bool_t xdr_remote_get_max_vcpus_ret (); extern bool_t xdr_remote_node_get_info_ret (); extern bool_t xdr_remote_get_capabilities_ret (); +extern bool_t xdr_remote_node_get_cells_free_memory_args (); +extern bool_t xdr_remote_node_get_cells_free_memory_ret (); +extern bool_t xdr_remote_node_get_free_memory_ret (); extern bool_t xdr_remote_domain_get_scheduler_type_args (); extern bool_t xdr_remote_domain_get_scheduler_type_ret (); extern bool_t xdr_remote_domain_get_scheduler_parameters_args (); diff -r 261f28ba431e qemud/remote_protocol.x --- a/qemud/remote_protocol.x Fri May 16 16:09:50 2008 -0400 +++ b/qemud/remote_protocol.x Tue May 20 10:49:20 2008 -0400 @@ -86,6 +86,9 @@ /* Upper limit on list of scheduler parameters. */ const REMOTE_DOMAIN_SCHEDULER_PARAMETERS_MAX = 16; + +/* Upper limit on number of NUMA cells */ +const REMOTE_NODE_MAX_CELLS = 1024; /* Upper limit on SASL auth negotiation packet */ const REMOTE_AUTH_SASL_DATA_MAX = 65536; @@ -252,6 +255,19 @@ struct remote_get_capabilities_ret { remote_nonnull_string capabilities; +}; + +struct remote_node_get_cells_free_memory_args { + int startCell; + int maxCells; +}; + +struct remote_node_get_cells_free_memory_ret { + hyper freeMems<REMOTE_NODE_MAX_CELLS>; +}; + +struct remote_node_get_free_memory_ret { + hyper freeMem; }; struct remote_domain_get_scheduler_type_args { @@ -1017,7 +1033,10 @@ REMOTE_PROC_STORAGE_VOL_LOOKUP_BY_PATH = 97, REMOTE_PROC_STORAGE_VOL_GET_INFO = 98, REMOTE_PROC_STORAGE_VOL_DUMP_XML = 99, - REMOTE_PROC_STORAGE_VOL_GET_PATH = 100 + REMOTE_PROC_STORAGE_VOL_GET_PATH = 100, + + REMOTE_PROC_NODE_GET_CELLS_FREE_MEMORY = 101, + REMOTE_PROC_NODE_GET_FREE_MEMORY = 102 }; /* Custom RPC structure. */ diff -r 261f28ba431e qemud/rpcgen_fix.pl --- a/qemud/rpcgen_fix.pl Fri May 16 16:09:50 2008 -0400 +++ b/qemud/rpcgen_fix.pl Tue May 20 10:49:20 2008 -0400 @@ -23,6 +23,8 @@ print; next; } + + s/\t/ /g; if (m/^}/) { $in_function = 0; @@ -52,7 +54,7 @@ foreach (keys %uses) { $i = $uses{$_}; unshift @function, - ("\tchar **objp_cpp$i = (char **) (void *) &$_;\n"); + (" char **objp_cpp$i = (char **) (void *) &$_;\n"); $i++; } @function = diff -r 261f28ba431e src/remote_internal.c --- a/src/remote_internal.c Fri May 16 16:09:50 2008 -0400 +++ b/src/remote_internal.c Tue May 20 10:49:20 2008 -0400 @@ -1327,6 +1327,58 @@ /* Caller frees this. */ return ret.capabilities; } + +static int +remoteNodeGetCellsFreeMemory(virConnectPtr conn, + unsigned long long *freeMems, + int startCell, + int maxCells) +{ + remote_node_get_cells_free_memory_args args; + remote_node_get_cells_free_memory_ret ret; + int i; + GET_PRIVATE (conn, -1); + + if (maxCells > REMOTE_NODE_MAX_CELLS) { + errorf (conn, VIR_ERR_RPC, + _("too many NUMA cells: %d > %d"), + maxCells, + REMOTE_NODE_MAX_CELLS); + return -1; + } + + args.startCell = startCell; + args.maxCells = maxCells; + + memset (&ret, 0, sizeof ret); + if (call (conn, priv, 0, REMOTE_PROC_NODE_GET_CELLS_FREE_MEMORY, + (xdrproc_t) xdr_remote_node_get_cells_free_memory_args, (char *)&args, + (xdrproc_t) xdr_remote_node_get_cells_free_memory_ret, (char *)&ret) == -1) + return -1; + + for (i = 0 ; i < ret.freeMems.freeMems_len ; i++) + freeMems[i] = ret.freeMems.freeMems_val[i]; + + xdr_free((xdrproc_t) xdr_remote_node_get_cells_free_memory_ret, (char *) &ret); + + return ret.freeMems.freeMems_len; +} + +static unsigned long long +remoteNodeGetFreeMemory (virConnectPtr conn) +{ + remote_node_get_free_memory_ret ret; + GET_PRIVATE (conn, -1); + + memset (&ret, 0, sizeof ret); + if (call (conn, priv, 0, REMOTE_PROC_NODE_GET_FREE_MEMORY, + (xdrproc_t) xdr_void, NULL, + (xdrproc_t) xdr_remote_node_get_free_memory_ret, (char *)&ret) == -1) + return 0; + + return ret.freeMem; +} + static int remoteListDomains (virConnectPtr conn, int *ids, int maxids) @@ -4728,7 +4780,8 @@ .domainMigrateFinish = remoteDomainMigrateFinish, .domainBlockStats = remoteDomainBlockStats, .domainInterfaceStats = remoteDomainInterfaceStats, - .nodeGetCellsFreeMemory = NULL, + .nodeGetCellsFreeMemory = remoteNodeGetCellsFreeMemory, + .getFreeMemory = remoteNodeGetFreeMemory, }; static virNetworkDriver network_driver = { -- |: Red Hat, Engineering, Boston -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

On Tue, May 20, 2008 at 03:51:53PM +0100, Daniel P. Berrange wrote:
+if GLIBC_RPCGEN + mv $@ $@.bak + sed -e 's/\t/ /g' $@.bak > $@ +endif
I guess it doesn't matter in a generated file, but is the above correct? Probably better to use the 'expand' command, if it is available. Rich. -- Richard Jones, Emerging Technologies, Red Hat http://et.redhat.com/~rjones virt-top is 'top' for virtual machines. Tiny program with many powerful monitoring features, net stats, disk stats, logging, etc. http://et.redhat.com/~rjones/virt-top

"Richard W.M. Jones" <rjones@redhat.com> wrote:
On Tue, May 20, 2008 at 03:51:53PM +0100, Daniel P. Berrange wrote:
+if GLIBC_RPCGEN + mv $@ $@.bak + sed -e 's/\t/ /g' $@.bak > $@ +endif
I guess it doesn't matter in a generated file, but is the above correct? Probably better to use the 'expand' command, if it is available.
Thanks for bringing that up. While I don't know how portable expand is, (I've never used it in a portable build script or Makefile) it's certain to be less portable than sed. However, (to my constant chagrin) \t is not portable in sed regexps. Makes me want to use perl -pe 's/...//' FILE instead. With Perl, "\t" *does* work portably. On the other hand, maybe using perl (or expand) would be ok here, since the only time an end user runs those rules is if/when they modify a dependent .x file. Otherwise just use a literal TAB character.

On Wed, May 21, 2008 at 05:18:49PM +0200, Jim Meyering wrote:
"Richard W.M. Jones" <rjones@redhat.com> wrote:
On Tue, May 20, 2008 at 03:51:53PM +0100, Daniel P. Berrange wrote:
+if GLIBC_RPCGEN + mv $@ $@.bak + sed -e 's/\t/ /g' $@.bak > $@ +endif
I guess it doesn't matter in a generated file, but is the above correct? Probably better to use the 'expand' command, if it is available.
Thanks for bringing that up. While I don't know how portable expand is, (I've never used it in a portable build script or Makefile) it's certain to be less portable than sed.
However, (to my constant chagrin) \t is not portable in sed regexps. Makes me want to use perl -pe 's/...//' FILE instead. With Perl, "\t" *does* work portably. On the other hand, maybe using perl (or expand) would be ok here, since the only time an end user runs those rules is if/when they modify a dependent .x file.
We already use Perl extensively to post-process the .c file generated from rpcgen, so I just switched to use perl for the .h file too, and we can use its inplace edit to avoid the temporary file too, so I committed with: if GLIBC_RPCGEN perl -i -p -e 's/\t/ /g' $@ endif Dan. -- |: Red Hat, Engineering, Boston -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
participants (3)
-
Daniel P. Berrange
-
Jim Meyering
-
Richard W.M. Jones