home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / nbd.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.5 KB  |  101 lines

  1. /*
  2.  * 1999 Copyright (C) Pavel Machek, pavel@ucw.cz. This code is GPL.
  3.  * 1999/11/04 Copyright (C) 1999 VMware, Inc. (Regis "HPReg" Duchesne)
  4.  *            Made nbd_end_request() use the io_request_lock
  5.  * 2001 Copyright (C) Steven Whitehouse
  6.  *            New nbd_end_request() for compatibility with new linux block
  7.  *            layer code.
  8.  * 2003/06/24 Louis D. Langholtz <ldl@aros.net>
  9.  *            Removed unneeded blksize_bits field from nbd_device struct.
  10.  *            Cleanup PARANOIA usage & code.
  11.  * 2004/02/19 Paul Clements
  12.  *            Removed PARANOIA, plus various cleanup and comments
  13.  */
  14.  
  15. #ifndef LINUX_NBD_H
  16. #define LINUX_NBD_H
  17.  
  18. #define NBD_SET_SOCK    _IO( 0xab, 0 )
  19. #define NBD_SET_BLKSIZE    _IO( 0xab, 1 )
  20. #define NBD_SET_SIZE    _IO( 0xab, 2 )
  21. #define NBD_DO_IT    _IO( 0xab, 3 )
  22. #define NBD_CLEAR_SOCK    _IO( 0xab, 4 )
  23. #define NBD_CLEAR_QUE    _IO( 0xab, 5 )
  24. #define NBD_PRINT_DEBUG    _IO( 0xab, 6 )
  25. #define NBD_SET_SIZE_BLOCKS    _IO( 0xab, 7 )
  26. #define NBD_DISCONNECT  _IO( 0xab, 8 )
  27.  
  28. enum {
  29.     NBD_CMD_READ = 0,
  30.     NBD_CMD_WRITE = 1,
  31.     NBD_CMD_DISC = 2
  32. };
  33.  
  34. #define nbd_cmd(req) ((req)->cmd[0])
  35. #define MAX_NBD 128
  36.  
  37. /* userspace doesn't need the nbd_device structure */
  38. #ifdef __KERNEL__
  39.  
  40. #include <linux/wait.h>
  41. #include <linux/mutex.h>
  42.  
  43. /* values for flags field */
  44. #define NBD_READ_ONLY 0x0001
  45. #define NBD_WRITE_NOCHK 0x0002
  46.  
  47. struct request;
  48.  
  49. struct nbd_device {
  50.     int flags;
  51.     int harderror;        /* Code of hard error            */
  52.     struct socket * sock;
  53.     struct file * file;     /* If == NULL, device is not ready, yet    */
  54.     int magic;
  55.  
  56.     spinlock_t queue_lock;
  57.     struct list_head queue_head;/* Requests are added here...    */
  58.     struct request *active_req;
  59.     wait_queue_head_t active_wq;
  60.  
  61.     struct mutex tx_lock;
  62.     struct gendisk *disk;
  63.     int blksize;
  64.     u64 bytesize;
  65. };
  66.  
  67. #endif
  68.  
  69. /* These are sent over the network in the request/reply magic fields */
  70.  
  71. #define NBD_REQUEST_MAGIC 0x25609513
  72. #define NBD_REPLY_MAGIC 0x67446698
  73. /* Do *not* use magics: 0x12560953 0x96744668. */
  74.  
  75. /*
  76.  * This is the packet used for communication between client and
  77.  * server. All data are in network byte order.
  78.  */
  79. struct nbd_request {
  80.     __u32 magic;
  81.     __u32 type;    /* == READ || == WRITE     */
  82.     char handle[8];
  83.     __u64 from;
  84.     __u32 len;
  85. }
  86. #ifdef __GNUC__
  87.     __attribute__ ((packed))
  88. #endif
  89. ;
  90.  
  91. /*
  92.  * This is the reply packet that nbd-server sends back to the client after
  93.  * it has completed an I/O request (or an error occurs).
  94.  */
  95. struct nbd_reply {
  96.     __u32 magic;
  97.     __u32 error;        /* 0 = ok, else error    */
  98.     char handle[8];        /* handle you got from request    */
  99. };
  100. #endif
  101.