[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 08 of 16 RFC] blktap3: Introduce message types and structures
The main difference over the the XEN version is the addition of the stats structure (used for retrieving stats from a running tapdisk), and the addition of the tapdisk_message_blkif struct, which is required for the user-space counterpart of blktap/blkback to communicate with tapdisk. diff -r 17eea5a9a20c -r 23e2537c7257 tools/blktap3/include/tapdisk-message.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/blktap3/include/tapdisk-message.h Wed Oct 24 17:25:37 2012 +0100 @@ -0,0 +1,267 @@ +/* FIXME this is the github blktap2 license (which is the same the blktap2 + * license) + * + * Copyright (c) 2008, XenSource Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of XenSource Inc. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __TAPDISK_MESSAGE_H__ +#define __TAPDISK_MESSAGE_H__ + +#include <inttypes.h> +#include <sys/types.h> + +#define TAPDISK_MESSAGE_MAX_PATH_LENGTH 256 +#define TAPDISK_MESSAGE_STRING_LENGTH 256 + +#define TAPDISK_MESSAGE_MAX_MINORS \ + ((TAPDISK_MESSAGE_MAX_PATH_LENGTH / sizeof(int)) - 1) + +#define TAPDISK_MESSAGE_FLAG_SHARED 0x001 +#define TAPDISK_MESSAGE_FLAG_RDONLY 0x002 +#define TAPDISK_MESSAGE_FLAG_ADD_CACHE 0x004 +#define TAPDISK_MESSAGE_FLAG_VHD_INDEX 0x008 +#define TAPDISK_MESSAGE_FLAG_LOG_DIRTY 0x010 +#define TAPDISK_MESSAGE_FLAG_ADD_LCACHE 0x020 +#define TAPDISK_MESSAGE_FLAG_REUSE_PRT 0x040 +#define TAPDISK_MESSAGE_FLAG_SECONDARY 0x080 +#define TAPDISK_MESSAGE_FLAG_STANDBY 0x100 + +typedef struct tapdisk_message tapdisk_message_t; +typedef uint32_t tapdisk_message_flag_t; +typedef struct tapdisk_message_image tapdisk_message_image_t; +typedef struct tapdisk_message_params tapdisk_message_params_t; +typedef struct tapdisk_message_string tapdisk_message_string_t; +typedef struct tapdisk_message_response tapdisk_message_response_t; +typedef struct tapdisk_message_minors tapdisk_message_minors_t; +typedef struct tapdisk_message_list tapdisk_message_list_t; +typedef struct tapdisk_message_stat tapdisk_message_stat_t; +typedef struct tapdisk_message_blkif tapdisk_message_blkif_t; + +struct tapdisk_message_params { + tapdisk_message_flag_t flags; + + uint32_t devnum; + uint32_t domid; + char path[TAPDISK_MESSAGE_MAX_PATH_LENGTH]; + uint32_t prt_devnum; + char secondary[TAPDISK_MESSAGE_MAX_PATH_LENGTH]; +}; + +struct tapdisk_message_image { + uint64_t sectors; + uint32_t sector_size; + uint32_t info; +}; + +struct tapdisk_message_string { + char text[TAPDISK_MESSAGE_STRING_LENGTH]; +}; + +struct tapdisk_message_response { + int error; + char message[TAPDISK_MESSAGE_STRING_LENGTH]; +}; + +struct tapdisk_message_minors { + int count; + int list[TAPDISK_MESSAGE_MAX_MINORS]; +}; + +struct tapdisk_message_list { + int count; + int minor; + int state; + char path[TAPDISK_MESSAGE_MAX_PATH_LENGTH]; +}; + +struct tapdisk_message_stat { + uint16_t type; + uint16_t cookie; + size_t length; +}; + +struct tapdisk_message_blkif { + uint32_t domid; + uint32_t devid; + uint32_t gref[8]; + uint32_t order; + uint32_t proto; + char pool[TAPDISK_MESSAGE_STRING_LENGTH]; + uint32_t port; +}; + +struct tapdisk_message { + uint16_t type; + uint16_t cookie; + + union { + pid_t tapdisk_pid; + tapdisk_message_image_t image; + tapdisk_message_params_t params; + tapdisk_message_string_t string; + tapdisk_message_minors_t minors; + tapdisk_message_response_t response; + tapdisk_message_list_t list; + tapdisk_message_stat_t info; + tapdisk_message_blkif_t blkif; + } u; +}; + +enum tapdisk_message_id { + TAPDISK_MESSAGE_ERROR = 1, + TAPDISK_MESSAGE_RUNTIME_ERROR, + TAPDISK_MESSAGE_PID, + TAPDISK_MESSAGE_PID_RSP, + TAPDISK_MESSAGE_ATTACH, + TAPDISK_MESSAGE_ATTACH_RSP, + TAPDISK_MESSAGE_OPEN, + TAPDISK_MESSAGE_OPEN_RSP, + TAPDISK_MESSAGE_PAUSE, + TAPDISK_MESSAGE_PAUSE_RSP, + TAPDISK_MESSAGE_RESUME, + TAPDISK_MESSAGE_RESUME_RSP, + TAPDISK_MESSAGE_CLOSE, + TAPDISK_MESSAGE_CLOSE_RSP, + TAPDISK_MESSAGE_DETACH, + TAPDISK_MESSAGE_DETACH_RSP, + TAPDISK_MESSAGE_LIST_MINORS, + TAPDISK_MESSAGE_LIST_MINORS_RSP, + TAPDISK_MESSAGE_LIST, + TAPDISK_MESSAGE_LIST_RSP, + TAPDISK_MESSAGE_STATS, + TAPDISK_MESSAGE_STATS_RSP, + TAPDISK_MESSAGE_FORCE_SHUTDOWN, + TAPDISK_MESSAGE_DISK_INFO, + TAPDISK_MESSAGE_DISK_INFO_RSP, + TAPDISK_MESSAGE_XENBLKIF_CONNECT, + TAPDISK_MESSAGE_XENBLKIF_CONNECT_RSP, + TAPDISK_MESSAGE_XENBLKIF_DISCONNECT, + TAPDISK_MESSAGE_XENBLKIF_DISCONNECT_RSP, + TAPDISK_MESSAGE_EXIT, +}; + +#define TAPDISK_MESSAGE_MAX TAPDISK_MESSAGE_EXIT + +/** + * Retrieves the human-readable representation of the type of the message. + */ +static inline char *tapdisk_message_name(enum tapdisk_message_id id) +{ + switch (id) { + case TAPDISK_MESSAGE_ERROR: + return "error"; + + case TAPDISK_MESSAGE_PID: + return "pid"; + + case TAPDISK_MESSAGE_PID_RSP: + return "pid response"; + + case TAPDISK_MESSAGE_OPEN: + return "open"; + + case TAPDISK_MESSAGE_OPEN_RSP: + return "open response"; + + case TAPDISK_MESSAGE_PAUSE: + return "pause"; + + case TAPDISK_MESSAGE_PAUSE_RSP: + return "pause response"; + + case TAPDISK_MESSAGE_RESUME: + return "resume"; + + case TAPDISK_MESSAGE_RESUME_RSP: + return "resume response"; + + case TAPDISK_MESSAGE_CLOSE: + return "close"; + + case TAPDISK_MESSAGE_FORCE_SHUTDOWN: + return "force shutdown"; + + case TAPDISK_MESSAGE_CLOSE_RSP: + return "close response"; + + case TAPDISK_MESSAGE_ATTACH: + return "attach"; + + case TAPDISK_MESSAGE_ATTACH_RSP: + return "attach response"; + + case TAPDISK_MESSAGE_DETACH: + return "detach"; + + case TAPDISK_MESSAGE_DETACH_RSP: + return "detach response"; + + case TAPDISK_MESSAGE_LIST_MINORS: + return "list minors"; + + case TAPDISK_MESSAGE_LIST_MINORS_RSP: + return "list minors response"; + + case TAPDISK_MESSAGE_LIST: + return "list"; + + case TAPDISK_MESSAGE_LIST_RSP: + return "list response"; + + case TAPDISK_MESSAGE_STATS: + return "stats"; + + case TAPDISK_MESSAGE_STATS_RSP: + return "stats response"; + + case TAPDISK_MESSAGE_DISK_INFO: + return "disk info"; + + case TAPDISK_MESSAGE_DISK_INFO_RSP: + return "disk info response"; + + case TAPDISK_MESSAGE_XENBLKIF_CONNECT: + return "blkif connect"; + + case TAPDISK_MESSAGE_XENBLKIF_CONNECT_RSP: + return "blkif connect response"; + + case TAPDISK_MESSAGE_XENBLKIF_DISCONNECT: + return "blkif disconnect"; + + case TAPDISK_MESSAGE_XENBLKIF_DISCONNECT_RSP: + return "blkif disconnect response"; + + case TAPDISK_MESSAGE_EXIT: + return "exit"; + + default: + return "unknown"; + } +} + +#endif /* __TAPDISK_MESSAGE_H__ */ _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |