From: Wouter Verhelst Date: Sat, 24 Jul 2010 19:48:24 +0000 (+0200) Subject: Add nbd.h to source X-Git-Url: http://git.alex.org.uk Add nbd.h to source Previously, we would depend on an out-of-tree nbd.h. This is error-prone on Linux (if the kernel nbd.h changes incompatibly, the userspace tools won't compile anymore) and problematic on non-Linux (where you'd have to manage somehow to fetch a working nbd.h) So, stop being silly. --- diff --git a/.gitignore b/.gitignore index df0ce32..28edb7f 100644 --- a/.gitignore +++ b/.gitignore @@ -21,7 +21,6 @@ nbd-server doc nbd-server.config nbd-server.5 -nbd.h *.o nbd-client.8.in nbd-server.1.in diff --git a/Makefile.am b/Makefile.am index e1a58b7..fafbfac 100644 --- a/Makefile.am +++ b/Makefile.am @@ -5,7 +5,7 @@ TESTS = cmd cfg1 cfgmulti check_PROGRAMS = nbd-tester-client knbd_client_SOURCES = nbd-client.c cliserv.h nbd_client_SOURCES = nbd-client.c cliserv.h -nbd_server_SOURCES = nbd-server.c cliserv.h lfs.h +nbd_server_SOURCES = nbd-server.c cliserv.h lfs.h nbd.h nbd_tester_client_SOURCES = nbd-tester-client.c cliserv.h nbd_server_CFLAGS = @CFLAGS@ @GLIB_CFLAGS@ nbd_tester_client_CFLAGS = @CFLAGS@ @GLIB_CFLAGS@ diff --git a/cliserv.h b/cliserv.h index 77310c3..649eb3e 100644 --- a/cliserv.h +++ b/cliserv.h @@ -35,21 +35,9 @@ typedef unsigned long long u64; #error I need at least some 64-bit type #endif -#ifdef NBD_H_LOCAL -/* 2.6.18 and above use __be* rather than u* */ #define __be32 u32 #define __be64 u64 #include "nbd.h" -#endif -#ifdef NBD_H_LINUX -# ifdef HAVE_LINUX_TYPES_H -# include -# else -# define __be32 u32 -# define __be64 u64 -# endif -# include -#endif #if NBD_LFS==1 #define _LARGEFILE_SOURCE diff --git a/configure.ac b/configure.ac index 2676ff0..d549567 100644 --- a/configure.ac +++ b/configure.ac @@ -103,57 +103,6 @@ case $host_os in ;; *) AC_MSG_RESULT(no) ;; esac -AC_MSG_CHECKING(where to find a working nbd.h) -AC_TRY_COMPILE([#define u32 int -#define u64 int -#define __be32 int -#define __be64 int -#include "nbd.h" -#ifdef __GNUC__ -#define UNUSED __attribute__((__unused__)) -#else -#define UNUSED -#endif -], -[int UNUSED foo=NBD_CMD_DISC], - [AC_DEFINE(NBD_H_LOCAL, 1, Set to 1 if a (2.6) nbd.h can be found in the current directory) - NBD_H='"nbd.h"'], - AC_TRY_COMPILE([#define u32 int -#define u64 int -#define __be32 int -#define __be64 int -#include -#ifdef __GNUC__ -#define UNUSED __attribute__((__unused__)) -#else -#define UNUSED -#endif - ], -[int UNUSED foo=NBD_CMD_DISC], - [AC_DEFINE(NBD_H_LINUX, 1, Set to 1 if a (2.6) nbd.h can be found in the linux directory in the search path) - NBD_H=''], - AC_TRY_COMPILE([#include -#ifdef __GNUC__ -#define UNUSED __attribute__((__unused__)) -#else -#define UNUSED -#endif - ], - [int UNUSED foo=NBD_CMD_DISC], - [AC_DEFINE(NBD_H_LINUX, 1, Set to 1 if a (2.6) nbd.h can be found in the linux directory in the search path) - NBD_H=''], - AC_MSG_ERROR(Could not find an nbd.h from 2.6 or above.) - ) - ) -) -if test -f nbd.h -then - if test "$NBD_H" = '' - then - AC_MSG_WARN([there is a local nbd.h, but it is from the 2.4-series of kernels. Using the system-provided, working, nbd.h]) - fi -fi -AC_MSG_RESULT($NBD_H) AC_SEARCH_LIBS(bind, socket,, AC_MSG_ERROR([Could not find an implementation of the bind() system call])) AC_SEARCH_LIBS(inet_ntoa, nsl,, AC_MSG_ERROR([Could not find an implementation of the inet_ntoa() system call])) AC_SEARCH_LIBS(daemon, resolv,, AC_MSG_ERROR([Could not find an implementation of the daemon() system call])) diff --git a/nbd.h b/nbd.h new file mode 100644 index 0000000..15b2d0a --- /dev/null +++ b/nbd.h @@ -0,0 +1,182 @@ +/* + * 1999 Copyright (C) Pavel Machek, pavel@ucw.cz. This code is GPL. + * 1999/11/04 Copyright (C) 1999 VMware, Inc. (Regis "HPReg" Duchesne) + * Made nbd_end_request() use the io_request_lock + * 2001 Copyright (C) Steven Whitehouse + * New nbd_end_request() for compatibility with new linux block + * layer code. + * 2003/06/24 Louis D. Langholtz + * Removed unneeded blksize_bits field from nbd_device struct. + * Cleanup PARANOIA usage & code. + * 2004/02/19 Paul Clements + * Removed PARANOIA, plus various cleanup and comments + */ + +#ifndef LINUX_NBD_H +#define LINUX_NBD_H + +#define NBD_SET_SOCK _IO( 0xab, 0 ) +#define NBD_SET_BLKSIZE _IO( 0xab, 1 ) +#define NBD_SET_SIZE _IO( 0xab, 2 ) +#define NBD_DO_IT _IO( 0xab, 3 ) +#define NBD_CLEAR_SOCK _IO( 0xab, 4 ) +#define NBD_CLEAR_QUE _IO( 0xab, 5 ) +#define NBD_PRINT_DEBUG _IO( 0xab, 6 ) +#define NBD_SET_SIZE_BLOCKS _IO( 0xab, 7 ) +#define NBD_DISCONNECT _IO( 0xab, 8 ) + +enum { + NBD_CMD_READ = 0, + NBD_CMD_WRITE = 1, + NBD_CMD_DISC = 2 +}; + +#define nbd_cmd(req) ((req)->cmd[0]) +#define MAX_NBD 128 + +/* userspace doesn't need the nbd_device structure */ +#ifdef __KERNEL__ + +/* values for flags field */ +#define NBD_READ_ONLY 0x0001 +#define NBD_WRITE_NOCHK 0x0002 + +struct nbd_device { + int flags; + int harderror; /* Code of hard error */ + struct socket * sock; + struct file * file; /* If == NULL, device is not ready, yet */ + int magic; + spinlock_t queue_lock; + struct list_head queue_head;/* Requests are added here... */ + struct semaphore tx_lock; + struct gendisk *disk; + int blksize; + u64 bytesize; +}; + +#endif + +/* These are sent over the network in the request/reply magic fields */ + +#define NBD_REQUEST_MAGIC 0x25609513 +#define NBD_REPLY_MAGIC 0x67446698 +/* Do *not* use magics: 0x12560953 0x96744668. */ + +/* + * This is the packet used for communication between client and + * server. All data are in network byte order. + */ +struct nbd_request { + u32 magic; + u32 type; /* == READ || == WRITE */ + char handle[8]; + u64 from; + u32 len; +} +#ifdef __GNUC__ + __attribute__ ((packed)) +#endif +; + +/* + * This is the reply packet that nbd-server sends back to the client after + * it has completed an I/O request (or an error occurs). + */ +struct nbd_reply { + u32 magic; + u32 error; /* 0 = ok, else error */ + char handle[8]; /* handle you got from request */ +}; +#endif +/* + * 1999 Copyright (C) Pavel Machek, pavel@ucw.cz. This code is GPL. + * 1999/11/04 Copyright (C) 1999 VMware, Inc. (Regis "HPReg" Duchesne) + * Made nbd_end_request() use the io_request_lock + * 2001 Copyright (C) Steven Whitehouse + * New nbd_end_request() for compatibility with new linux block + * layer code. + * 2003/06/24 Louis D. Langholtz + * Removed unneeded blksize_bits field from nbd_device struct. + * Cleanup PARANOIA usage & code. + * 2004/02/19 Paul Clements + * Removed PARANOIA, plus various cleanup and comments + */ + +#ifndef LINUX_NBD_H +#define LINUX_NBD_H + +#define NBD_SET_SOCK _IO( 0xab, 0 ) +#define NBD_SET_BLKSIZE _IO( 0xab, 1 ) +#define NBD_SET_SIZE _IO( 0xab, 2 ) +#define NBD_DO_IT _IO( 0xab, 3 ) +#define NBD_CLEAR_SOCK _IO( 0xab, 4 ) +#define NBD_CLEAR_QUE _IO( 0xab, 5 ) +#define NBD_PRINT_DEBUG _IO( 0xab, 6 ) +#define NBD_SET_SIZE_BLOCKS _IO( 0xab, 7 ) +#define NBD_DISCONNECT _IO( 0xab, 8 ) + +enum { + NBD_CMD_READ = 0, + NBD_CMD_WRITE = 1, + NBD_CMD_DISC = 2 +}; + +#define nbd_cmd(req) ((req)->cmd[0]) +#define MAX_NBD 128 + +/* userspace doesn't need the nbd_device structure */ +#ifdef __KERNEL__ + +/* values for flags field */ +#define NBD_READ_ONLY 0x0001 +#define NBD_WRITE_NOCHK 0x0002 + +struct nbd_device { + int flags; + int harderror; /* Code of hard error */ + struct socket * sock; + struct file * file; /* If == NULL, device is not ready, yet */ + int magic; + spinlock_t queue_lock; + struct list_head queue_head;/* Requests are added here... */ + struct semaphore tx_lock; + struct gendisk *disk; + int blksize; + u64 bytesize; +}; + +#endif + +/* These are sent over the network in the request/reply magic fields */ + +#define NBD_REQUEST_MAGIC 0x25609513 +#define NBD_REPLY_MAGIC 0x67446698 +/* Do *not* use magics: 0x12560953 0x96744668. */ + +/* + * This is the packet used for communication between client and + * server. All data are in network byte order. + */ +struct nbd_request { + u32 magic; + u32 type; /* == READ || == WRITE */ + char handle[8]; + u64 from; + u32 len; +} +#ifdef __GNUC__ + __attribute__ ((packed)) +#endif +; + +/* + * This is the reply packet that nbd-server sends back to the client after + * it has completed an I/O request (or an error occurs). + */ +struct nbd_reply { + u32 magic; + u32 error; /* 0 = ok, else error */ + char handle[8]; /* handle you got from request */ +}; +#endif