88 lines
		
	
	
	
		
			2 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			88 lines
		
	
	
	
		
			2 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*
 | ||
|  |  * Details of the "wire" protocol between Xen Store Daemon and client | ||
|  |  * library or guest kernel. | ||
|  |  * Copyright (C) 2005 Rusty Russell IBM Corporation | ||
|  |  */ | ||
|  | 
 | ||
|  | #ifndef _XS_WIRE_H
 | ||
|  | #define _XS_WIRE_H
 | ||
|  | 
 | ||
|  | enum xsd_sockmsg_type | ||
|  | { | ||
|  |     XS_DEBUG, | ||
|  |     XS_DIRECTORY, | ||
|  |     XS_READ, | ||
|  |     XS_GET_PERMS, | ||
|  |     XS_WATCH, | ||
|  |     XS_UNWATCH, | ||
|  |     XS_TRANSACTION_START, | ||
|  |     XS_TRANSACTION_END, | ||
|  |     XS_INTRODUCE, | ||
|  |     XS_RELEASE, | ||
|  |     XS_GET_DOMAIN_PATH, | ||
|  |     XS_WRITE, | ||
|  |     XS_MKDIR, | ||
|  |     XS_RM, | ||
|  |     XS_SET_PERMS, | ||
|  |     XS_WATCH_EVENT, | ||
|  |     XS_ERROR, | ||
|  |     XS_IS_DOMAIN_INTRODUCED | ||
|  | }; | ||
|  | 
 | ||
|  | #define XS_WRITE_NONE "NONE"
 | ||
|  | #define XS_WRITE_CREATE "CREATE"
 | ||
|  | #define XS_WRITE_CREATE_EXCL "CREATE|EXCL"
 | ||
|  | 
 | ||
|  | /* We hand errors as strings, for portability. */ | ||
|  | struct xsd_errors | ||
|  | { | ||
|  |     int errnum; | ||
|  |     const char *errstring; | ||
|  | }; | ||
|  | #define XSD_ERROR(x) { x, #x }
 | ||
|  | static struct xsd_errors xsd_errors[] __attribute__((unused)) = { | ||
|  |     XSD_ERROR(EINVAL), | ||
|  |     XSD_ERROR(EACCES), | ||
|  |     XSD_ERROR(EEXIST), | ||
|  |     XSD_ERROR(EISDIR), | ||
|  |     XSD_ERROR(ENOENT), | ||
|  |     XSD_ERROR(ENOMEM), | ||
|  |     XSD_ERROR(ENOSPC), | ||
|  |     XSD_ERROR(EIO), | ||
|  |     XSD_ERROR(ENOTEMPTY), | ||
|  |     XSD_ERROR(ENOSYS), | ||
|  |     XSD_ERROR(EROFS), | ||
|  |     XSD_ERROR(EBUSY), | ||
|  |     XSD_ERROR(EAGAIN), | ||
|  |     XSD_ERROR(EISCONN) | ||
|  | }; | ||
|  | 
 | ||
|  | struct xsd_sockmsg | ||
|  | { | ||
|  |     uint32_t type;  /* XS_??? */ | ||
|  |     uint32_t req_id;/* Request identifier, echoed in daemon's response.  */ | ||
|  |     uint32_t tx_id; /* Transaction id (0 if not related to a transaction). */ | ||
|  |     uint32_t len;   /* Length of data following this. */ | ||
|  | 
 | ||
|  |     /* Generally followed by nul-terminated string(s). */ | ||
|  | }; | ||
|  | 
 | ||
|  | enum xs_watch_type | ||
|  | { | ||
|  |     XS_WATCH_PATH = 0, | ||
|  |     XS_WATCH_TOKEN | ||
|  | }; | ||
|  | 
 | ||
|  | /* Inter-domain shared memory communications. */ | ||
|  | #define XENSTORE_RING_SIZE 1024
 | ||
|  | typedef uint32_t XENSTORE_RING_IDX; | ||
|  | #define MASK_XENSTORE_IDX(idx) ((idx) & (XENSTORE_RING_SIZE-1))
 | ||
|  | struct xenstore_domain_interface { | ||
|  |     char req[XENSTORE_RING_SIZE]; /* Requests to xenstore daemon. */ | ||
|  |     char rsp[XENSTORE_RING_SIZE]; /* Replies and async watch events. */ | ||
|  |     XENSTORE_RING_IDX req_cons, req_prod; | ||
|  |     XENSTORE_RING_IDX rsp_cons, rsp_prod; | ||
|  | }; | ||
|  | 
 | ||
|  | #endif /* _XS_WIRE_H */
 |