6 Server-side QEMUD modifications
---------------------------------
A qemud/protocol.x
A qemud/protocol.c
M qemud/protocol.h
M qemud/Makefile.am
M qemud/conf.c
M qemud/dispatch.c
M qemud/dispatch.h
M qemud/internal.h
M qemud/qemud.c
M qemud/uuid.c
Again, this is Dan's patch to make QEMUD use the XDR protocol:
http://www.redhat.com/archives/libvir-list/2007-March/msg00333.html
The modifications I have made:
(1) Use REMOTE_MESSAGE_MAX from remote_protocol.x
(2) Make the protocol superficially similar to the remote protocol so
that we can dispatch on it, although in the current implementation this
is actually not used. Instead we make our dispatch decision based on
whether the daemon was started with --remote on the command line.
(3) Allow the daemon to listen on TCP sockets.
(4) Allow the daemon to require GnuTLS encryption negotiation on
sockets. In addition, the daemon can now check the client's IP address
and certificate against a whitelist.
(5) Add support for a configuration file (/etc/libvirt/libvirtd.conf by
default, but can be overridden on the command line), which allows the
sockets and certificate stuff to be configured.
To do:
Find a good default place in the filesystem to find the CA and client
certificates.
Change the start-up script so that it can start a QEMU/network daemon
and a remote daemon.
Rich.
--
Emerging Technologies, Red Hat
http://et.redhat.com/~rjones/
64 Baker Street, London, W1U 7DF Mobile: +44 7866 314 421
Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod
Street, Windsor, Berkshire, SL4 1TE, United Kingdom.
Registered in England and Wales under Company Registration No. 3798903
Directors: Michael Cunningham (USA), Charlie Peters (USA) and David
Owens (Ireland)
/* -*- c -*-
* protocol_xdr.x: wire protocol message format & data structures
*
* Copyright (C) 2006, 2007 Red Hat, Inc.
* Copyright (C) 2006 Daniel P. Berrange
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Daniel P. Berrange <berrange(a)redhat.com>
*/
const QEMUD_UUID_RAW_LEN = 16;
const QEMUD_MAX_NAME_LEN = 50;
const QEMUD_MAX_XML_LEN = 4096;
/*#define QEMUD_MAX_IFNAME_LEN IF_NAMESIZE */
const QEMUD_MAX_IFNAME_LEN = 50;
const QEMUD_MAX_NUM_DOMAINS = 100;
const QEMUD_MAX_NUM_NETWORKS = 100;
/*
* Damn, we can't do multiplcation when declaring
* constants with XDR !
* These two should be QEMUD_MAX_NUM_DOMAIN * QEMUD_MAX_NAME_LEN
*/
const QEMUD_MAX_DOMAINS_NAME_BUF = 5000;
const QEMUD_MAX_NETWORKS_NAME_BUF = 5000;
const QEMUD_MAX_ERROR_LEN = 1024;
/* Possible guest VM states */
enum qemud_domain_runstate {
QEMUD_STATE_RUNNING = 1,
QEMUD_STATE_PAUSED,
QEMUD_STATE_STOPPED
};
/* Message sent by a client */
enum qemud_packet_client_data_type {
QEMUD_CLIENT_PKT_GET_VERSION,
QEMUD_CLIENT_PKT_GET_NODEINFO,
QEMUD_CLIENT_PKT_LIST_DOMAINS,
QEMUD_CLIENT_PKT_NUM_DOMAINS,
QEMUD_CLIENT_PKT_DOMAIN_CREATE,
QEMUD_CLIENT_PKT_DOMAIN_LOOKUP_BY_ID,
QEMUD_CLIENT_PKT_DOMAIN_LOOKUP_BY_UUID,
QEMUD_CLIENT_PKT_DOMAIN_LOOKUP_BY_NAME,
QEMUD_CLIENT_PKT_DOMAIN_SUSPEND,
QEMUD_CLIENT_PKT_DOMAIN_RESUME,
QEMUD_CLIENT_PKT_DOMAIN_DESTROY,
QEMUD_CLIENT_PKT_DOMAIN_GET_INFO,
QEMUD_CLIENT_PKT_DOMAIN_SAVE,
QEMUD_CLIENT_PKT_DOMAIN_RESTORE,
QEMUD_CLIENT_PKT_DUMP_XML,
QEMUD_CLIENT_PKT_LIST_DEFINED_DOMAINS,
QEMUD_CLIENT_PKT_NUM_DEFINED_DOMAINS,
QEMUD_CLIENT_PKT_DOMAIN_START,
QEMUD_CLIENT_PKT_DOMAIN_DEFINE,
QEMUD_CLIENT_PKT_DOMAIN_UNDEFINE,
QEMUD_CLIENT_PKT_NUM_NETWORKS,
QEMUD_CLIENT_PKT_LIST_NETWORKS,
QEMUD_CLIENT_PKT_NUM_DEFINED_NETWORKS,
QEMUD_CLIENT_PKT_LIST_DEFINED_NETWORKS,
QEMUD_CLIENT_PKT_NETWORK_LOOKUP_BY_UUID,
QEMUD_CLIENT_PKT_NETWORK_LOOKUP_BY_NAME,
QEMUD_CLIENT_PKT_NETWORK_CREATE,
QEMUD_CLIENT_PKT_NETWORK_DEFINE,
QEMUD_CLIENT_PKT_NETWORK_UNDEFINE,
QEMUD_CLIENT_PKT_NETWORK_START,
QEMUD_CLIENT_PKT_NETWORK_DESTROY,
QEMUD_CLIENT_PKT_NETWORK_DUMP_XML,
QEMUD_CLIENT_PKT_NETWORK_GET_BRIDGE_NAME,
QEMUD_CLIENT_PKT_DOMAIN_GET_AUTOSTART,
QEMUD_CLIENT_PKT_DOMAIN_SET_AUTOSTART,
QEMUD_CLIENT_PKT_NETWORK_GET_AUTOSTART,
QEMUD_CLIENT_PKT_NETWORK_SET_AUTOSTART,
QEMUD_CLIENT_PKT_GET_CAPABILITIES,
QEMUD_CLIENT_PKT_MAX
};
/* Messages sent by a server */
enum qemud_packet_server_data_type {
QEMUD_SERVER_PKT_FAILURE = 0,
QEMUD_SERVER_PKT_GET_VERSION,
QEMUD_SERVER_PKT_GET_NODEINFO,
QEMUD_SERVER_PKT_LIST_DOMAINS,
QEMUD_SERVER_PKT_NUM_DOMAINS,
QEMUD_SERVER_PKT_DOMAIN_CREATE,
QEMUD_SERVER_PKT_DOMAIN_LOOKUP_BY_ID,
QEMUD_SERVER_PKT_DOMAIN_LOOKUP_BY_UUID,
QEMUD_SERVER_PKT_DOMAIN_LOOKUP_BY_NAME,
QEMUD_SERVER_PKT_DOMAIN_SUSPEND,
QEMUD_SERVER_PKT_DOMAIN_RESUME,
QEMUD_SERVER_PKT_DOMAIN_DESTROY,
QEMUD_SERVER_PKT_DOMAIN_GET_INFO,
QEMUD_SERVER_PKT_DOMAIN_SAVE,
QEMUD_SERVER_PKT_DOMAIN_RESTORE,
QEMUD_SERVER_PKT_DUMP_XML,
QEMUD_SERVER_PKT_LIST_DEFINED_DOMAINS,
QEMUD_SERVER_PKT_NUM_DEFINED_DOMAINS,
QEMUD_SERVER_PKT_DOMAIN_START,
QEMUD_SERVER_PKT_DOMAIN_DEFINE,
QEMUD_SERVER_PKT_DOMAIN_UNDEFINE,
QEMUD_SERVER_PKT_NUM_NETWORKS,
QEMUD_SERVER_PKT_LIST_NETWORKS,
QEMUD_SERVER_PKT_NUM_DEFINED_NETWORKS,
QEMUD_SERVER_PKT_LIST_DEFINED_NETWORKS,
QEMUD_SERVER_PKT_NETWORK_LOOKUP_BY_UUID,
QEMUD_SERVER_PKT_NETWORK_LOOKUP_BY_NAME,
QEMUD_SERVER_PKT_NETWORK_CREATE,
QEMUD_SERVER_PKT_NETWORK_DEFINE,
QEMUD_SERVER_PKT_NETWORK_UNDEFINE,
QEMUD_SERVER_PKT_NETWORK_START,
QEMUD_SERVER_PKT_NETWORK_DESTROY,
QEMUD_SERVER_PKT_NETWORK_DUMP_XML,
QEMUD_SERVER_PKT_NETWORK_GET_BRIDGE_NAME,
QEMUD_SERVER_PKT_DOMAIN_GET_AUTOSTART,
QEMUD_SERVER_PKT_DOMAIN_SET_AUTOSTART,
QEMUD_SERVER_PKT_NETWORK_GET_AUTOSTART,
QEMUD_SERVER_PKT_NETWORK_SET_AUTOSTART,
QEMUD_SERVER_PKT_GET_CAPABILITIES,
QEMUD_SERVER_PKT_MAX
};
struct qemud_packet_failure_reply {
uint32_t code;
char message[QEMUD_MAX_ERROR_LEN];
};
struct qemud_packet_get_version_reply {
uint32_t versionNum;
};
struct qemud_packet_get_node_info_reply {
char model[32];
uint32_t memory;
uint32_t cpus;
uint32_t mhz;
uint32_t nodes;
uint32_t sockets;
uint32_t cores;
uint32_t threads;
};
struct qemud_packet_get_capabilities_reply {
char xml[QEMUD_MAX_XML_LEN];
};
struct qemud_packet_list_domains_reply {
int32_t numDomains;
int32_t domains[QEMUD_MAX_NUM_DOMAINS];
};
struct qemud_packet_num_domains_reply{
int32_t numDomains;
};
struct qemud_packet_domain_create_request {
char xml[QEMUD_MAX_XML_LEN];
};
struct qemud_packet_domain_create_reply {
int32_t id;
unsigned char uuid[QEMUD_UUID_RAW_LEN];
char name[QEMUD_MAX_NAME_LEN];
};
struct qemud_packet_domain_lookup_by_id_request {
int32_t id;
};
struct qemud_packet_domain_lookup_by_id_reply {
unsigned char uuid[QEMUD_UUID_RAW_LEN];
char name[QEMUD_MAX_NAME_LEN];
};
struct qemud_packet_domain_lookup_by_name_request {
char name[QEMUD_MAX_NAME_LEN];
};
struct qemud_packet_domain_lookup_by_name_reply {
int32_t id;
unsigned char uuid[QEMUD_UUID_RAW_LEN];
};
struct qemud_packet_domain_lookup_by_uuid_request {
unsigned char uuid[QEMUD_UUID_RAW_LEN];
};
struct qemud_packet_domain_lookup_by_uuid_reply {
int32_t id;
char name[QEMUD_MAX_NAME_LEN];
};
struct qemud_packet_domain_suspend_request {
int32_t id;
};
struct qemud_packet_domain_resume_request {
int32_t id;
};
struct qemud_packet_domain_destroy_request {
int32_t id;
};
struct qemud_packet_domain_get_info_request {
unsigned char uuid[QEMUD_UUID_RAW_LEN];
};
struct qemud_packet_domain_get_info_reply {
uint64_t cpuTime;
uint32_t runstate;
uint32_t memory;
uint32_t maxmem;
uint32_t nrVirtCpu;
};
struct qemud_packet_domain_save_request {
int32_t id;
char file[PATH_MAX];
};
struct qemud_packet_domain_restore_request {
char file[PATH_MAX];
};
struct qemud_packet_domain_restore_reply {
int32_t id;
};
struct qemud_packet_domain_dump_xml_request {
unsigned char uuid[QEMUD_UUID_RAW_LEN];
};
struct qemud_packet_domain_dump_xml_reply {
char xml[QEMUD_MAX_XML_LEN];
};
struct qemud_packet_list_defined_domains_reply{
uint32_t numDomains;
char domains[QEMUD_MAX_DOMAINS_NAME_BUF];
};
struct qemud_packet_num_defined_domains_reply{
uint32_t numDomains;
};
struct qemud_packet_domain_start_request {
unsigned char uuid[QEMUD_UUID_RAW_LEN];
};
struct qemud_packet_domain_start_reply {
int32_t id;
};
struct qemud_packet_domain_define_request {
char xml[QEMUD_MAX_XML_LEN];
};
struct qemud_packet_domain_define_reply {
unsigned char uuid[QEMUD_UUID_RAW_LEN];
char name[QEMUD_MAX_NAME_LEN];
};
struct qemud_packet_domain_undefine_request {
unsigned char uuid[QEMUD_UUID_RAW_LEN];
};
struct qemud_packet_num_networks_reply {
uint32_t numNetworks;
};
struct qemud_packet_list_networks_reply {
uint32_t numNetworks;
char networks[QEMUD_MAX_NETWORKS_NAME_BUF];
};
struct qemud_packet_num_defined_networks_reply {
uint32_t numNetworks;
};
struct qemud_packet_list_defined_networks_reply {
uint32_t numNetworks;
char networks[QEMUD_MAX_NETWORKS_NAME_BUF];
};
struct qemud_packet_network_lookup_by_name_request {
char name[QEMUD_MAX_NAME_LEN];
};
struct qemud_packet_network_lookup_by_name_reply {
int32_t id;
unsigned char uuid[QEMUD_UUID_RAW_LEN];
};
struct qemud_packet_network_lookup_by_uuid_request {
unsigned char uuid[QEMUD_UUID_RAW_LEN];
};
struct qemud_packet_network_lookup_by_uuid_reply {
int32_t id;
char name[QEMUD_MAX_NAME_LEN];
};
struct qemud_packet_network_create_request {
char xml[QEMUD_MAX_XML_LEN];
};
struct qemud_packet_network_create_reply {
unsigned char uuid[QEMUD_UUID_RAW_LEN];
char name[QEMUD_MAX_NAME_LEN];
};
struct qemud_packet_network_define_request {
char xml[QEMUD_MAX_XML_LEN];
};
struct qemud_packet_network_define_reply {
unsigned char uuid[QEMUD_UUID_RAW_LEN];
char name[QEMUD_MAX_NAME_LEN];
};
struct qemud_packet_network_undefine_request {
unsigned char uuid[QEMUD_UUID_RAW_LEN];
};
struct qemud_packet_network_start_request {
unsigned char uuid[QEMUD_UUID_RAW_LEN];
};
struct qemud_packet_network_destroy_request {
unsigned char uuid[QEMUD_UUID_RAW_LEN];
};
struct qemud_packet_network_dump_xml_request {
unsigned char uuid[QEMUD_UUID_RAW_LEN];
};
struct qemud_packet_network_dump_xml_reply {
char xml[QEMUD_MAX_XML_LEN];
};
struct qemud_packet_network_get_bridge_name_request {
unsigned char uuid[QEMUD_UUID_RAW_LEN];
};
struct qemud_packet_network_get_bridge_name_reply {
char ifname[QEMUD_MAX_IFNAME_LEN];
};
struct qemud_packet_domain_get_autostart_request{
unsigned char uuid[QEMUD_UUID_RAW_LEN];
};
struct qemud_packet_domain_get_autostart_reply {
uint32_t autostart;
};
struct qemud_packet_domain_set_autostart_request {
unsigned char uuid[QEMUD_UUID_RAW_LEN];
uint32_t autostart;
};
struct qemud_packet_network_get_autostart_request {
unsigned char uuid[QEMUD_UUID_RAW_LEN];
};
struct qemud_packet_network_get_autostart_reply {
uint32_t autostart;
};
struct qemud_packet_network_set_autostart_request {
unsigned char uuid[QEMUD_UUID_RAW_LEN];
uint32_t autostart;
};
union qemud_packet_client_data switch (qemud_packet_client_data_type type) {
case QEMUD_CLIENT_PKT_GET_VERSION:
void;
case QEMUD_CLIENT_PKT_GET_NODEINFO:
void;
case QEMUD_CLIENT_PKT_LIST_DOMAINS:
void;
case QEMUD_CLIENT_PKT_NUM_DOMAINS:
void;
case QEMUD_CLIENT_PKT_DOMAIN_CREATE:
qemud_packet_domain_create_request domainCreateRequest;
case QEMUD_CLIENT_PKT_DOMAIN_LOOKUP_BY_ID:
qemud_packet_domain_lookup_by_id_request domainLookupByIDRequest;
case QEMUD_CLIENT_PKT_DOMAIN_LOOKUP_BY_UUID:
qemud_packet_domain_lookup_by_uuid_request domainLookupByUUIDRequest;
case QEMUD_CLIENT_PKT_DOMAIN_LOOKUP_BY_NAME:
qemud_packet_domain_lookup_by_name_request domainLookupByNameRequest;
case QEMUD_CLIENT_PKT_DOMAIN_SUSPEND:
qemud_packet_domain_suspend_request domainSuspendRequest;
case QEMUD_CLIENT_PKT_DOMAIN_RESUME:
qemud_packet_domain_resume_request domainResumeRequest;
case QEMUD_CLIENT_PKT_DOMAIN_DESTROY:
qemud_packet_domain_destroy_request domainDestroyRequest;
case QEMUD_CLIENT_PKT_DOMAIN_GET_INFO:
qemud_packet_domain_get_info_request domainGetInfoRequest;
case QEMUD_CLIENT_PKT_DOMAIN_SAVE:
qemud_packet_domain_save_request domainSaveRequest;
case QEMUD_CLIENT_PKT_DOMAIN_RESTORE:
qemud_packet_domain_restore_request domainRestoreRequest;
case QEMUD_CLIENT_PKT_DUMP_XML:
qemud_packet_domain_dump_xml_request domainDumpXMLRequest;
case QEMUD_CLIENT_PKT_LIST_DEFINED_DOMAINS:
void;
case QEMUD_CLIENT_PKT_NUM_DEFINED_DOMAINS:
void;
case QEMUD_CLIENT_PKT_DOMAIN_START:
qemud_packet_domain_start_request domainStartRequest;
case QEMUD_CLIENT_PKT_DOMAIN_DEFINE:
qemud_packet_domain_define_request domainDefineRequest;
case QEMUD_CLIENT_PKT_DOMAIN_UNDEFINE:
qemud_packet_domain_undefine_request domainUndefineRequest;
case QEMUD_CLIENT_PKT_NUM_NETWORKS:
void;
case QEMUD_CLIENT_PKT_LIST_NETWORKS:
void;
case QEMUD_CLIENT_PKT_NUM_DEFINED_NETWORKS:
void;
case QEMUD_CLIENT_PKT_LIST_DEFINED_NETWORKS:
void;
case QEMUD_CLIENT_PKT_NETWORK_LOOKUP_BY_UUID:
qemud_packet_network_lookup_by_uuid_request networkLookupByUUIDRequest;
case QEMUD_CLIENT_PKT_NETWORK_LOOKUP_BY_NAME:
qemud_packet_network_lookup_by_name_request networkLookupByNameRequest;
case QEMUD_CLIENT_PKT_NETWORK_CREATE:
qemud_packet_network_create_request networkCreateRequest;
case QEMUD_CLIENT_PKT_NETWORK_DEFINE:
qemud_packet_network_define_request networkDefineRequest;
case QEMUD_CLIENT_PKT_NETWORK_UNDEFINE:
qemud_packet_network_undefine_request networkUndefineRequest;
case QEMUD_CLIENT_PKT_NETWORK_START:
qemud_packet_network_start_request networkStartRequest;
case QEMUD_CLIENT_PKT_NETWORK_DESTROY:
qemud_packet_network_destroy_request networkDestroyRequest;
case QEMUD_CLIENT_PKT_NETWORK_DUMP_XML:
qemud_packet_network_dump_xml_request networkDumpXMLRequest;
case QEMUD_CLIENT_PKT_NETWORK_GET_BRIDGE_NAME:
qemud_packet_network_get_bridge_name_request networkGetBridgeNameRequest;
case QEMUD_CLIENT_PKT_DOMAIN_GET_AUTOSTART:
qemud_packet_domain_get_autostart_request domainGetAutostartRequest;
case QEMUD_CLIENT_PKT_DOMAIN_SET_AUTOSTART:
qemud_packet_domain_set_autostart_request domainSetAutostartRequest;
case QEMUD_CLIENT_PKT_NETWORK_GET_AUTOSTART:
qemud_packet_network_get_autostart_request networkGetAutostartRequest;
case QEMUD_CLIENT_PKT_NETWORK_SET_AUTOSTART:
qemud_packet_network_set_autostart_request networkSetAutostartRequest;
case QEMUD_CLIENT_PKT_GET_CAPABILITIES:
void;
};
union qemud_packet_server_data switch (qemud_packet_server_data_type type) {
case QEMUD_SERVER_PKT_FAILURE:
qemud_packet_failure_reply failureReply;
case QEMUD_SERVER_PKT_GET_VERSION:
qemud_packet_get_version_reply getVersionReply;
case QEMUD_SERVER_PKT_GET_NODEINFO:
qemud_packet_get_node_info_reply getNodeInfoReply;
case QEMUD_SERVER_PKT_LIST_DOMAINS:
qemud_packet_list_domains_reply listDomainsReply;
case QEMUD_SERVER_PKT_NUM_DOMAINS:
qemud_packet_num_domains_reply numDomainsReply;
case QEMUD_SERVER_PKT_DOMAIN_CREATE:
qemud_packet_domain_create_reply domainCreateReply;
case QEMUD_SERVER_PKT_DOMAIN_LOOKUP_BY_ID:
qemud_packet_domain_lookup_by_id_reply domainLookupByIDReply;
case QEMUD_SERVER_PKT_DOMAIN_LOOKUP_BY_UUID:
qemud_packet_domain_lookup_by_uuid_reply domainLookupByUUIDReply;
case QEMUD_SERVER_PKT_DOMAIN_LOOKUP_BY_NAME:
qemud_packet_domain_lookup_by_name_reply domainLookupByNameReply;
case QEMUD_SERVER_PKT_DOMAIN_SUSPEND:
void;
case QEMUD_SERVER_PKT_DOMAIN_RESUME:
void;
case QEMUD_SERVER_PKT_DOMAIN_DESTROY:
void;
case QEMUD_SERVER_PKT_DOMAIN_GET_INFO:
qemud_packet_domain_get_info_reply domainGetInfoReply;
case QEMUD_SERVER_PKT_DOMAIN_SAVE:
void;
case QEMUD_SERVER_PKT_DOMAIN_RESTORE:
qemud_packet_domain_restore_reply domainRestoreReply;
case QEMUD_SERVER_PKT_DUMP_XML:
qemud_packet_domain_dump_xml_reply domainDumpXMLReply;
case QEMUD_SERVER_PKT_LIST_DEFINED_DOMAINS:
qemud_packet_list_defined_domains_reply listDefinedDomainsReply;
case QEMUD_SERVER_PKT_NUM_DEFINED_DOMAINS:
qemud_packet_num_defined_domains_reply numDefinedDomainsReply;
case QEMUD_SERVER_PKT_DOMAIN_START:
qemud_packet_domain_start_reply domainStartReply;
case QEMUD_SERVER_PKT_DOMAIN_DEFINE:
qemud_packet_domain_define_reply domainDefineReply;
case QEMUD_SERVER_PKT_DOMAIN_UNDEFINE:
void;
case QEMUD_SERVER_PKT_NUM_NETWORKS:
qemud_packet_num_networks_reply numNetworksReply;
case QEMUD_SERVER_PKT_LIST_NETWORKS:
qemud_packet_list_networks_reply listNetworksReply;
case QEMUD_SERVER_PKT_NUM_DEFINED_NETWORKS:
qemud_packet_num_defined_networks_reply numDefinedNetworksReply;
case QEMUD_SERVER_PKT_LIST_DEFINED_NETWORKS:
qemud_packet_list_defined_networks_reply listDefinedNetworksReply;
case QEMUD_SERVER_PKT_NETWORK_LOOKUP_BY_UUID:
qemud_packet_network_lookup_by_uuid_reply networkLookupByUUIDReply;
case QEMUD_SERVER_PKT_NETWORK_LOOKUP_BY_NAME:
qemud_packet_network_lookup_by_name_reply networkLookupByNameReply;
case QEMUD_SERVER_PKT_NETWORK_CREATE:
qemud_packet_network_create_reply networkCreateReply;
case QEMUD_SERVER_PKT_NETWORK_DEFINE:
qemud_packet_network_define_reply networkDefineReply;
case QEMUD_SERVER_PKT_NETWORK_UNDEFINE:
void;
case QEMUD_SERVER_PKT_NETWORK_START:
void;
case QEMUD_SERVER_PKT_NETWORK_DESTROY:
void;
case QEMUD_SERVER_PKT_NETWORK_DUMP_XML:
qemud_packet_network_dump_xml_reply networkDumpXMLReply;
case QEMUD_SERVER_PKT_NETWORK_GET_BRIDGE_NAME:
qemud_packet_network_get_bridge_name_reply networkGetBridgeNameReply;
case QEMUD_SERVER_PKT_DOMAIN_GET_AUTOSTART:
qemud_packet_domain_get_autostart_reply domainGetAutostartReply;
case QEMUD_SERVER_PKT_DOMAIN_SET_AUTOSTART:
void;
case QEMUD_SERVER_PKT_NETWORK_GET_AUTOSTART:
qemud_packet_network_get_autostart_reply networkGetAutostartReply;
case QEMUD_SERVER_PKT_NETWORK_SET_AUTOSTART:
void;
case QEMUD_SERVER_PKT_GET_CAPABILITIES:
qemud_packet_get_capabilities_reply getCapabilitiesReply;
};
struct qemud_packet_client {
uint32_t serial;
struct qemud_packet_client_data data;
};
struct qemud_packet_server {
uint32_t serial;
uint32_t inReplyTo;
struct qemud_packet_server_data data;
};
/* The first two words in the messages are length and program number
* (previously called "magic"). This makes the protocol compatible
* with the remote protocol, although beyond the first two words
* the protocols are completely different.
*
* Note the length is the total number of bytes in the message
* _including_ the length and program number.
*/
const QEMUD_PROGRAM = 0x20001A64;
const QEMUD_PKT_HEADER_XDR_LEN = 8;
struct qemud_packet_header {
uint32_t length;
uint32_t prog;
};