|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] tools: remove blktap2 source code
commit 44b2829a8b97a8b04e063a93303dbe3a468642e3
Author: Wei Liu <wei.liu2@xxxxxxxxxx>
AuthorDate: Mon Aug 15 12:05:44 2016 +0100
Commit: Wei Liu <wei.liu2@xxxxxxxxxx>
CommitDate: Tue Sep 6 11:02:36 2016 +0100
tools: remove blktap2 source code
Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
---
tools/blktap2/Makefile | 20 -
tools/blktap2/README | 321 ---
tools/blktap2/control/Makefile | 80 -
tools/blktap2/control/tap-ctl-allocate.c | 242 --
tools/blktap2/control/tap-ctl-attach.c | 61 -
tools/blktap2/control/tap-ctl-check.c | 79 -
tools/blktap2/control/tap-ctl-close.c | 87 -
tools/blktap2/control/tap-ctl-create.c | 67 -
tools/blktap2/control/tap-ctl-destroy.c | 56 -
tools/blktap2/control/tap-ctl-detach.c | 61 -
tools/blktap2/control/tap-ctl-free.c | 54 -
tools/blktap2/control/tap-ctl-ipc.c | 249 ---
tools/blktap2/control/tap-ctl-list.c | 536 -----
tools/blktap2/control/tap-ctl-major.c | 69 -
tools/blktap2/control/tap-ctl-open.c | 75 -
tools/blktap2/control/tap-ctl-pause.c | 59 -
tools/blktap2/control/tap-ctl-spawn.c | 174 --
tools/blktap2/control/tap-ctl-unpause.c | 64 -
tools/blktap2/control/tap-ctl.c | 815 -------
tools/blktap2/control/tap-ctl.h | 101 -
tools/blktap2/drivers/Makefile | 113 -
tools/blktap2/drivers/aes.c | 1319 -----------
tools/blktap2/drivers/aes.h | 28 -
tools/blktap2/drivers/atomicio.c | 61 -
tools/blktap2/drivers/blk.h | 36 -
tools/blktap2/drivers/blk_linux.c | 43 -
tools/blktap2/drivers/blk_netbsd.c | 41 -
tools/blktap2/drivers/block-aio.c | 258 ---
tools/blktap2/drivers/block-cache.c | 787 -------
tools/blktap2/drivers/block-log.c | 665 ------
tools/blktap2/drivers/block-qcow.c | 1501 -------------
tools/blktap2/drivers/block-ram.c | 256 ---
tools/blktap2/drivers/block-remus.c | 1733 --------------
tools/blktap2/drivers/block-vhd.c | 2322 -------------------
tools/blktap2/drivers/bswap.h | 179 --
tools/blktap2/drivers/check_gcrypt | 18 -
tools/blktap2/drivers/hashtable.c | 279 ---
tools/blktap2/drivers/hashtable.h | 204 --
tools/blktap2/drivers/hashtable_itr.c | 195 --
tools/blktap2/drivers/hashtable_itr.h | 96 -
tools/blktap2/drivers/hashtable_private.h | 90 -
tools/blktap2/drivers/hashtable_utility.c | 71 -
tools/blktap2/drivers/hashtable_utility.h | 55 -
tools/blktap2/drivers/img2qcow.c | 316 ---
tools/blktap2/drivers/io-optimize.c | 671 ------
tools/blktap2/drivers/io-optimize.h | 68 -
tools/blktap2/drivers/libaio-compat.h | 102 -
tools/blktap2/drivers/lock.c | 1000 ---------
tools/blktap2/drivers/lock.h | 51 -
tools/blktap2/drivers/log.h | 123 -
tools/blktap2/drivers/md5.c | 278 ---
tools/blktap2/drivers/md5.h | 15 -
tools/blktap2/drivers/profile.h | 191 --
tools/blktap2/drivers/qcow-create.c | 121 -
tools/blktap2/drivers/qcow.h | 131 --
tools/blktap2/drivers/qcow2raw.c | 443 ----
tools/blktap2/drivers/scheduler.c | 265 ---
tools/blktap2/drivers/scheduler.h | 65 -
tools/blktap2/drivers/tapdisk-client.c | 496 -----
tools/blktap2/drivers/tapdisk-control.c | 837 -------
tools/blktap2/drivers/tapdisk-control.h | 35 -
tools/blktap2/drivers/tapdisk-diff.c | 802 -------
tools/blktap2/drivers/tapdisk-disktype.c | 200 --
tools/blktap2/drivers/tapdisk-disktype.h | 62 -
tools/blktap2/drivers/tapdisk-driver.c | 101 -
tools/blktap2/drivers/tapdisk-driver.h | 62 -
tools/blktap2/drivers/tapdisk-filter.c | 272 ---
tools/blktap2/drivers/tapdisk-filter.h | 67 -
tools/blktap2/drivers/tapdisk-image.c | 169 --
tools/blktap2/drivers/tapdisk-image.h | 56 -
tools/blktap2/drivers/tapdisk-interface.c | 259 ---
tools/blktap2/drivers/tapdisk-interface.h | 54 -
tools/blktap2/drivers/tapdisk-log.c | 257 ---
tools/blktap2/drivers/tapdisk-log.h | 51 -
tools/blktap2/drivers/tapdisk-queue.c | 743 ------
tools/blktap2/drivers/tapdisk-queue.h | 125 --
tools/blktap2/drivers/tapdisk-ring.c | 439 ----
tools/blktap2/drivers/tapdisk-ring.h | 87 -
tools/blktap2/drivers/tapdisk-server.c | 345 ---
tools/blktap2/drivers/tapdisk-server.h | 67 -
tools/blktap2/drivers/tapdisk-stream.c | 605 -----
tools/blktap2/drivers/tapdisk-utils.c | 214 --
tools/blktap2/drivers/tapdisk-utils.h | 45 -
tools/blktap2/drivers/tapdisk-vbd.c | 1723 --------------
tools/blktap2/drivers/tapdisk-vbd.h | 207 --
tools/blktap2/drivers/tapdisk.h | 169 --
tools/blktap2/drivers/tapdisk2.c | 138 --
tools/blktap2/drivers/td.c | 691 ------
tools/blktap2/drivers/xmsnap | 78 -
tools/blktap2/include/Makefile | 17 -
tools/blktap2/include/atomicio.h | 33 -
tools/blktap2/include/blktap2.h | 67 -
tools/blktap2/include/blktaplib.h | 242 --
tools/blktap2/include/libvhd-journal.h | 68 -
tools/blktap2/include/libvhd.h | 326 ---
tools/blktap2/include/list.h | 125 --
tools/blktap2/include/lvm-util.h | 71 -
tools/blktap2/include/relative-path.h | 43 -
tools/blktap2/include/tapdisk-message.h | 203 --
tools/blktap2/include/vhd-util.h | 44 -
tools/blktap2/include/vhd-uuid.h | 63 -
tools/blktap2/include/vhd.h | 219 --
tools/blktap2/lvm/Makefile | 36 -
tools/blktap2/lvm/lvm-util.c | 349 ---
tools/blktap2/vhd/Makefile | 51 -
tools/blktap2/vhd/lib/Makefile | 82 -
tools/blktap2/vhd/lib/atomicio.c | 61 -
tools/blktap2/vhd/lib/libvhd-journal.c | 1534 -------------
tools/blktap2/vhd/lib/libvhd.c | 3348 ----------------------------
tools/blktap2/vhd/lib/relative-path.c | 299 ---
tools/blktap2/vhd/lib/vhd-util-check.c | 980 --------
tools/blktap2/vhd/lib/vhd-util-coalesce.c | 218 --
tools/blktap2/vhd/lib/vhd-util-create.c | 80 -
tools/blktap2/vhd/lib/vhd-util-fill.c | 105 -
tools/blktap2/vhd/lib/vhd-util-modify.c | 132 --
tools/blktap2/vhd/lib/vhd-util-query.c | 159 --
tools/blktap2/vhd/lib/vhd-util-read.c | 742 ------
tools/blktap2/vhd/lib/vhd-util-repair.c | 84 -
tools/blktap2/vhd/lib/vhd-util-resize.c | 1131 ----------
tools/blktap2/vhd/lib/vhd-util-revert.c | 106 -
tools/blktap2/vhd/lib/vhd-util-scan.c | 1317 -----------
tools/blktap2/vhd/lib/vhd-util-set-field.c | 106 -
tools/blktap2/vhd/lib/vhd-util-snapshot.c | 216 --
tools/blktap2/vhd/lib/vhd-util-uuid.c | 128 --
tools/blktap2/vhd/vhd-update.c | 259 ---
tools/blktap2/vhd/vhd-util.c | 163 --
126 files changed, 40123 deletions(-)
diff --git a/tools/blktap2/Makefile b/tools/blktap2/Makefile
deleted file mode 100644
index 94200dc..0000000
--- a/tools/blktap2/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-XEN_ROOT = $(CURDIR)/../..
-include $(XEN_ROOT)/tools/Rules.mk
-
-CFLAGS += $(CFLAGS_libxenctrl)
-LDLIBS += $(LDLIBS_libxenctrl)
-
-SUBDIRS-y :=
-SUBDIRS-y += include
-SUBDIRS-y += lvm
-SUBDIRS-y += vhd
-SUBDIRS-$(CONFIG_Linux) += drivers
-SUBDIRS-$(CONFIG_Linux) += control
-
-clean:
- rm -rf *.a *.so *.o *.rpm $(LIB) *~ $(DEPS) TAGS
-
-distclean: clean
-
-.PHONY: all clean install distclean
-all clean install distclean: %: subdirs-%
diff --git a/tools/blktap2/README b/tools/blktap2/README
deleted file mode 100644
index 75fc614..0000000
--- a/tools/blktap2/README
+++ /dev/null
@@ -1,321 +0,0 @@
-Blktap2 Userspace Tools + Library
-================================
-
-Dutch Meyer
-4th June 2009
-
-Andrew Warfield and Julian Chesterfield
-16th June 2006
-
-
-The blktap2 userspace toolkit provides a user-level disk I/O
-interface. The blktap2 mechanism involves a kernel driver that acts
-similarly to the existing Xen/Linux blkback driver, and a set of
-associated user-level libraries. Using these tools, blktap2 allows
-virtual block devices presented to VMs to be implemented in userspace
-and to be backed by raw partitions, files, network, etc.
-
-The key benefit of blktap2 is that it makes it easy and fast to write
-arbitrary block backends, and that these user-level backends actually
-perform very well. Specifically:
-
-- Metadata disk formats such as Copy-on-Write, encrypted disks, sparse
- formats and other compression features can be easily implemented.
-
-- Accessing file-based images from userspace avoids problems related
- to flushing dirty pages which are present in the Linux loopback
- driver. (Specifically, doing a large number of writes to an
- NFS-backed image don't result in the OOM killer going berserk.)
-
-- Per-disk handler processes enable easier userspace policing of block
- resources, and process-granularity QoS techniques (disk scheduling
- and related tools) may be trivially applied to block devices.
-
-- It's very easy to take advantage of userspace facilities such as
- networking libraries, compression utilities, peer-to-peer
- file-sharing systems and so on to build more complex block backends.
-
-- Crashes are contained -- incremental development/debugging is very
- fast.
-
-How it works (in one paragraph):
-
-Working in conjunction with the kernel blktap2 driver, all disk I/O
-requests from VMs are passed to the userspace deamon (using a shared
-memory interface) through a character device. Each active disk is
-mapped to an individual device node, allowing per-disk processes to
-implement individual block devices where desired. The userspace
-drivers are implemented using asynchronous (Linux libaio),
-O_DIRECT-based calls to preserve the unbuffered, batched and
-asynchronous request dispatch achieved with the existing blkback
-code. We provide a simple, asynchronous virtual disk interface that
-makes it quite easy to add new disk implementations.
-
-As of June 2009 the current supported disk formats are:
-
- - Raw Images (both on partitions and in image files)
- - Fast sharable RAM disk between VMs (requires some form of
- cluster-based filesystem support e.g. OCFS2 in the guest kernel)
- - VHD, including snapshots and sparse images
- - Qcow, including snapshots and sparse images
-
-
-Build and Installation Instructions
-===================================
-
-Make to configure the blktap2 backend driver in your dom0 kernel. It
-will inter-operate with the existing backend and frontend drivers. It
-will also cohabitate with the original blktap driver. However, some
-formats (currently aio and qcow) will default to their blktap2
-versions when specified in a vm configuration file.
-
-To build the tools separately, "make && make install" in
-tools/blktap2.
-
-
-Using the Tools
-===============
-
-Preparing an image for boot:
-
-The userspace disk agent is configured to start automatically via xend
-
-Customize the VM config file to use the 'tap:tapdisk' handler,
-followed by the driver type. e.g. for a raw image such as a file or
-partition:
-
-disk = ['tap:tapdisk:aio:<FILENAME>,sda1,w']
-
-Alternatively, the vhd-util tool (installed with make install, or in
-/blktap2/vhd) can be used to build sparse copy-on-write vhd images.
-
-For example, to build a sparse image -
- vhd-util create -n MyVHDFile -s 1024
-
-This creates a sparse 1GB file named "MyVHDFile" that can be mounted
-and populated with data.
-
-One can also base the image on a raw file -
- vhd-util snapshot -n MyVHDFile -p SomeRawFile -m
-
-This creates a sparse VHD file named "MyVHDFile" using "SomeRawFile"
-as a parent image. Copy-on-write semantics ensure that writes will be
-stored in "MyVHDFile" while reads will be directed to the most
-recently written version of the data, either in "MyVHDFile" or
-"SomeRawFile" as is appropriate. Other options exist as well, consult
-the vhd-util application for the complete set of VHD tools.
-
-VHD files can be mounted automatically in a guest similarly to the
-above AIO example simply by specifying the vhd driver.
-
-disk = ['tap:tapdisk:vhd:<VHD FILENAME>,sda1,w']
-
-
-Snapshots:
-
-Pausing a guest will also plug the corresponding IO queue for blktap2
-devices and stop blktap2 drivers. This can be used to implement a
-safe live snapshot of qcow and vhd disks. An example script "xmsnap"
-is shown in the tools/blktap2/drivers directory. This script will
-perform a live snapshot of a qcow disk. VHD files can use the
-"vhd-util snapshot" tool discussed above. If this snapshot command is
-applied to a raw file mounted with tap:tapdisk:AIO, include the -m
-flag and the driver will be reloaded as VHD. If applied to an already
-mounted VHD file, omit the -m flag.
-
-
-Mounting images in Dom0 using the blktap2 driver
-===============================================
-Tap (and blkback) disks are also mountable in Dom0 without requiring an
-active VM to attach.
-
-The syntax is -
- tapdisk2 -n <type>:<full path to file>
-
-For example -
- tapdisk2 -n aio:/home/images/rawFile.img
-
-When successful the location of the new device will be provided by
-tapdisk2 to stdout and tapdisk2 will terminate. From that point
-forward control of the device is provided through sysfs in the
-directory-
-
- /sys/class/blktap2/blktap#/
-
-Where # is a blktap2 device number present in the path that tapdisk2
-printed before terminating. The sysfs interface is largely intuitive,
-for example, to remove tap device 0 one would-
-
- echo 1 > /sys/class/blktap2/blktap0/remove
-
-Similarly, a pause control is available, which is can be used to plug
-the request queue of a live running guest.
-
-Previous versions of blktap mounted devices in dom0 by using blkfront
-in dom0 and the xm block-attach command. This approach is still
-available, though slightly more cumbersome.
-
-
-Tapdisk Development
-===============================================
-
-People regularly ask how to develop their own tapdisk drivers, and
-while it has not yet been well documented, the process is relatively
-easy. Here I will provide a brief overview. The best reference, of
-course, comes from the existing drivers. Specifically,
-blktap2/drivers/block-ram.c and blktap2/drivers/block-aio.c provide
-the clearest examples of simple drivers.
-
-
-Setup:
-
-First you need to register your new driver with blktap. This is done
-in disktypes.h. There are five things that you must do. To
-demonstrate, I will create a disk called "mynewdisk", you can name
-yours freely.
-
-1) Forward declare an instance of struct tap_disk.
-
-e.g. -
- extern struct tap_disk tapdisk_mynewdisk;
-
-2) Claim one of the unused disk type numbers, take care to observe the
-MAX_DISK_TYPES macro, increasing the number if necessary.
-
-e.g. -
- #define DISK_TYPE_MYNEWDISK 10
-
-3) Create an instance of disk_info_t. The bulk of this file contains examples
of these.
-
-e.g. -
- static disk_info_t mynewdisk_disk = {
- DISK_TYPE_MYNEWDISK,
- "My New Disk (mynewdisk)",
- "mynewdisk",
- 0,
- #ifdef TAPDISK
- &tapdisk_mynewdisk,
- #endif
- };
-
-A few words about what these mean. The first field must be the disk
-type number you claimed in step (2). The second field is a string
-describing your disk, and may contain any relevant info. The third
-field is the name of your disk as will be used by the tapdisk2 utility
-and xend (for example tapdisk2 -n mynewdisk:/path/to/disk.image, or in
-your xm create config file). The forth is binary and determines
-whether you will have one instance of your driver, or many. Here, a 1
-means that your driver is a singleton and will coordinate access to
-any number of tap devices. 0 is more common, meaning that you will
-have one driver for each device that is created. The final field
-should contain a reference to the struct tap_disk you created in step
-(1).
-
-4) Add a reference to your disk info structure (from step (3)) to the
-dtypes array. Take care here - you need to place it in the position
-corresponding to the device type number you claimed in step (2). So
-we would place &mynewdisk_disk in dtypes[10]. Look at the other
-devices in this array and pad with "&null_disk," as necessary.
-
-5) Modify the xend python scripts. You need to add your disk name to
-the list of disks that xend recognizes.
-
-edit:
- tools/python/xen/xend/server/BlktapController.py
-
-And add your disk to the "blktap_disk_types" array near the top of
-your file. Use the same name you specified in the third field of step
-(3). The order of this list is not important.
-
-
-Now your driver is ready to be written. Create a block-mynewdisk.c in
-tools/blktap2/drivers and add it to the Makefile.
-
-
-Development:
-
-Copying block-aio.c and block-ram.c would be a good place to start.
-Read those files as you go through this, I will be assisting by
-commenting on a few useful functions and structures.
-
-struct tap_disk:
-
-Remember the forward declaration in step (1) of the setup phase above?
-Now is the time to make that structure a reality. This structure
-contains a list of function pointers for all the routines that will be
-asked of your driver. Currently the required functions are open,
-close, read, write, get_parent_id, validate_parent, and debug.
-
-e.g. -
- struct tap_disk tapdisk_mynewdisk = {
- .disk_type = "tapdisk_mynewdisk",
- .flags = 0,
- .private_data_size = sizeof(struct tdmynewdisk_state),
- .td_open = tdmynewdisk_open,
- ....
-
-The private_data_size field is used to provide a structure to store
-the state of your device. It is very likely that you will want
-something here, but you are free to design whatever structure you
-want. Blktap will allocate this space for you, you just need to tell
-it how much space you want.
-
-
-tdmynewdisk_open:
-
-This is the open routine. The first argument is a structure
-representing your driver. Two fields in this array are
-interesting.
-
-driver->data will contain a block of memory of the size your requested
-in in the .private_data_size field of your struct tap_disk (above).
-
-driver->info contains a structure that details information about your
-disk. You need to fill this out. By convention this is done with a
-_get_image_info() function. Assign a size (the total number of
-sectors), sector_size (the size of each sector in bytes, and set
-driver->info->info to 0.
-
-The second parameter contains the name that was specified in the
-creation of your device, either through xend, or on the command line
-with tapdisk2. Usually this specifies a file that you will open in
-this routine. The final parameter, flags, contains one of a number of
-flags specified in tapdisk.h that may change the way you treat the
-disk.
-
-
-_queue_read/write:
-
-These are your read and write operations. What you do here will
-depend on your disk, but you should do exactly one of-
-
-1) call td_complete_request with either error or success code.
-
-2) Call td_forward_request, which will forward the request to the next
-driver in the stack.
-
-3) Queue the request for asynchronous processing with
-td_prep_read/write. In doing so, you will also register a callback
-for request completion. When the request completes you must do one of
-options (1) or (2) above. Finally, call td_queue_tiocb to submit the
-request to a wait queue.
-
-The above functions are defined in tapdisk-interface.c. If you don't
-use them as specified you will run into problems as your driver will
-fail to inform blktap of the state of requests that have been
-submitted. Blktap keeps track of all requests and does not like losing track.
-
-
-_close, _get_parent_id, _validate_parent:
-
-These last few tend to be very routine. _close is called when the
-device is closed, and also when it is paused (in this case, open will
-also be called later). The other functions are used in stacking
-drivers. Most often drivers will return TD_NO_PARENT and -EINVAL,
-respectively.
-
-
-
-
-
-
diff --git a/tools/blktap2/control/Makefile b/tools/blktap2/control/Makefile
deleted file mode 100644
index 767f52a..0000000
--- a/tools/blktap2/control/Makefile
+++ /dev/null
@@ -1,80 +0,0 @@
-XEN_ROOT := $(CURDIR)/../../../
-include $(XEN_ROOT)/tools/Rules.mk
-
-MAJOR = 1.0
-MINOR = 0
-LIBNAME = libblktapctl
-LIBSONAME = $(LIBNAME).so.$(MAJOR)
-
-IBIN = tap-ctl
-
-CFLAGS += -Werror
-CFLAGS += -Wno-unused
-CFLAGS += -I../include -I../drivers
-CFLAGS += $(CFLAGS_xeninclude)
-CFLAGS += $(CFLAGS_libxenctrl)
-CFLAGS += -D_GNU_SOURCE
-CFLAGS += -DTAPCTL
-
-CTL_OBJS := tap-ctl-ipc.o
-CTL_OBJS += tap-ctl-list.o
-CTL_OBJS += tap-ctl-allocate.o
-CTL_OBJS += tap-ctl-free.o
-CTL_OBJS += tap-ctl-create.o
-CTL_OBJS += tap-ctl-destroy.o
-CTL_OBJS += tap-ctl-spawn.o
-CTL_OBJS += tap-ctl-attach.o
-CTL_OBJS += tap-ctl-detach.o
-CTL_OBJS += tap-ctl-open.o
-CTL_OBJS += tap-ctl-close.o
-CTL_OBJS += tap-ctl-pause.o
-CTL_OBJS += tap-ctl-unpause.o
-CTL_OBJS += tap-ctl-major.o
-CTL_OBJS += tap-ctl-check.o
-
-CTL_PICS = $(patsubst %.o,%.opic,$(CTL_OBJS))
-
-OBJS = $(CTL_OBJS) tap-ctl.o
-PICS = $(CTL_PICS)
-
-LIB_STATIC = $(LIBNAME).a
-LIB_SHARED = $(LIBSONAME).$(MINOR)
-IBIN = tap-ctl
-
-all: build
-
-build: $(IBIN) $(LIB_STATIC) $(LIB_SHARED)
-
-$(LIBNAME).so: $(LIBSONAME)
- ln -sf $< $@
-
-$(LIBSONAME): $(LIB_SHARED)
- ln -sf $< $@
-
-tap-ctl: tap-ctl.o $(LIBNAME).so
- $(CC) $(LDFLAGS) -o $@ $^ $(APPEND_LDFLAGS)
-
-$(LIB_STATIC): $(CTL_OBJS)
- $(AR) r $@ $^
-
-$(LIB_SHARED): $(CTL_PICS)
- $(CC) $(LDFLAGS) -fPIC -Wl,$(SONAME_LDFLAG) -Wl,$(LIBSONAME)
$(SHLIB_LDFLAGS) -rdynamic $^ -o $@ $(APPEND_LDFLAGS)
-
-install: $(IBIN) $(LIB_STATIC) $(LIB_SHARED)
- $(INSTALL_DIR) -p $(DESTDIR)$(sbindir)
- $(INSTALL_PROG) $(IBIN) $(DESTDIR)$(sbindir)
- $(INSTALL_DATA) $(LIB_STATIC) $(DESTDIR)$(libdir)
- $(INSTALL_PROG) $(LIB_SHARED) $(DESTDIR)$(libdir)
- ln -sf $(LIBSONAME) $(DESTDIR)$(libdir)/$(LIBNAME).so
- ln -sf $(LIB_SHARED) $(DESTDIR)$(libdir)/$(LIBSONAME)
-
-clean:
- rm -f $(OBJS) $(PICS) $(DEPS) $(IBIN) $(LIB_STATIC) $(LIB_SHARED)
- rm -f $(LIBNAME).so $(LIBSONAME)
- rm -f *~
-
-distclean: clean
-
-.PHONY: all build clean distclean install
-
--include $(DEPS)
diff --git a/tools/blktap2/control/tap-ctl-allocate.c
b/tools/blktap2/control/tap-ctl-allocate.c
deleted file mode 100644
index 8a6471e..0000000
--- a/tools/blktap2/control/tap-ctl-allocate.c
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * 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.
- */
-#include <stdio.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <getopt.h>
-#include <libgen.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <linux/major.h>
-
-#include "tap-ctl.h"
-#include "blktap2.h"
-
-static int
-tap_ctl_prepare_directory(const char *dir)
-{
- int err;
- char *ptr, *name, *start;
-
- err = access(dir, W_OK | R_OK);
- if (!err)
- return 0;
-
- name = strdup(dir);
- if (!name)
- return ENOMEM;
-
- start = name;
-
- for (;;) {
- ptr = strchr(start + 1, '/');
- if (ptr)
- *ptr = '\0';
-
- err = mkdir(name, 0755);
- if (err && errno != EEXIST) {
- PERROR("mkdir %s", name);
- err = errno;
- break;
- }
-
- if (!ptr)
- break;
- else {
- *ptr = '/';
- start = ptr + 1;
- }
- }
-
- free(name);
- return err;
-}
-
-static int
-tap_ctl_make_device(const char *devname, const int major,
- const int minor, const int perm)
-{
- int err;
- char *copy, *dir;
-
- copy = strdup(devname);
- if (!copy)
- return ENOMEM;
-
- dir = dirname(copy);
-
- err = tap_ctl_prepare_directory(dir);
- free(copy);
-
- if (err)
- return err;
-
- if (!access(devname, F_OK))
- if (unlink(devname)) {
- PERROR("unlink %s", devname);
- return errno;
- }
-
- err = mknod(devname, perm, makedev(major, minor));
- if (err) {
- PERROR("mknod %s", devname);
- return errno;
- }
-
- return 0;
-}
-
-static int
-tap_ctl_check_environment(void)
-{
- FILE *f;
- int err, minor;
- char name[256];
-
- err = tap_ctl_prepare_directory(BLKTAP2_CONTROL_DIR);
- if (err)
- return err;
-
- if (!access(BLKTAP2_CONTROL_DEVICE, R_OK | W_OK))
- return 0;
-
- memset(name, 0, sizeof(name));
-
- f = fopen("/proc/misc", "r");
- if (!f) {
- EPRINTF("failed to open /proc/misc: %d\n", errno);
- return errno;
- }
-
- while (fscanf(f, "%d %256s", &minor, name) == 2)
- if (!strcmp(name, BLKTAP2_CONTROL_NAME)) {
- err = tap_ctl_make_device(BLKTAP2_CONTROL_DEVICE,
- MISC_MAJOR,
- minor, S_IFCHR | 0600);
- goto out;
- }
-
- err = ENOSYS;
- EPRINTF("didn't find %s in /proc/misc\n", BLKTAP2_CONTROL_NAME);
-
-out:
- fclose(f);
- return err;
-}
-
-static int
-tap_ctl_allocate_device(int *minor, char **devname)
-{
- char *name;
- int fd, err;
- struct blktap2_handle handle;
-
- *minor = -1;
- if (!devname)
- return EINVAL;
-
- fd = open(BLKTAP2_CONTROL_DEVICE, O_RDONLY);
- if (fd == -1) {
- EPRINTF("failed to open control device: %d\n", errno);
- return errno;
- }
-
- err = ioctl(fd, BLKTAP2_IOCTL_ALLOC_TAP, &handle);
- close(fd);
- if (err == -1) {
- EPRINTF("failed to allocate new device: %d\n", errno);
- return errno;
- }
-
- err = asprintf(&name, "%s%d", BLKTAP2_RING_DEVICE, handle.minor);
- if (err == -1) {
- err = ENOMEM;
- goto fail;
- }
-
- err = tap_ctl_make_device(name, handle.ring,
- handle.minor, S_IFCHR | 0600);
- free(name);
- if (err) {
- EPRINTF("creating ring device for %d failed: %d\n",
- handle.minor, err);
- goto fail;
- }
-
- if (*devname)
- name = *devname;
- else {
- err = asprintf(&name, "%s%d",
- BLKTAP2_IO_DEVICE, handle.minor);
- if (err == -1) {
- err = ENOMEM;
- goto fail;
- }
- *devname = name;
- }
-
- err = tap_ctl_make_device(name, handle.device,
- handle.minor, S_IFBLK | 0600);
- if (err) {
- EPRINTF("creating IO device for %d failed: %d\n",
- handle.minor, err);
- goto fail;
- }
-
- DBG("new interface: ring: %u, device: %u, minor: %u\n",
- handle.ring, handle.device, handle.minor);
-
- *minor = handle.minor;
- return 0;
-
-fail:
- tap_ctl_free(handle.minor);
- return err;
-}
-
-int
-tap_ctl_allocate(int *minor, char **devname)
-{
- int err;
-
- *minor = -1;
-
- err = tap_ctl_check_environment();
- if (err)
- return err;
-
- err = tap_ctl_allocate_device(minor, devname);
- if (err)
- return err;
-
- return 0;
-}
diff --git a/tools/blktap2/control/tap-ctl-attach.c
b/tools/blktap2/control/tap-ctl-attach.c
deleted file mode 100644
index 3cb933c..0000000
--- a/tools/blktap2/control/tap-ctl-attach.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * 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.
- */
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#include <getopt.h>
-
-#include "tap-ctl.h"
-
-int
-tap_ctl_attach(const int id, const int minor)
-{
- int err;
- tapdisk_message_t message;
-
- memset(&message, 0, sizeof(message));
- message.type = TAPDISK_MESSAGE_ATTACH;
- message.cookie = minor;
-
- err = tap_ctl_connect_send_and_receive(id, &message, 5);
- if (err)
- return err;
-
- if (message.type == TAPDISK_MESSAGE_ATTACH_RSP) {
- err = message.u.response.error;
- if (err)
- EPRINTF("attach failed: %d\n", err);
- } else {
- EPRINTF("got unexpected result '%s' from %d\n",
- tapdisk_message_name(message.type), id);
- err = EINVAL;
- }
-
- return err;
-}
diff --git a/tools/blktap2/control/tap-ctl-check.c
b/tools/blktap2/control/tap-ctl-check.c
deleted file mode 100644
index e98583a..0000000
--- a/tools/blktap2/control/tap-ctl-check.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * 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.
- */
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include <string.h>
-
-#include "tap-ctl.h"
-#include "blktap2.h"
-
-int
-tap_ctl_check_blktap(const char **msg)
-{
- FILE *f;
- int err = 0, minor;
- char name[32];
-
- memset(name, 0, sizeof(name));
-
- f = fopen("/proc/misc", "r");
- if (!f) {
- *msg = "failed to open /proc/misc";
- return -errno;
- }
-
- while (fscanf(f, "%d %32s", &minor, name) == 2) {
- if (!strcmp(name, BLKTAP2_CONTROL_NAME))
- goto out;
- }
-
- err = -ENOSYS;
- *msg = "blktap kernel module not installed";
-
-out:
- fclose(f);
- return err;
-}
-
-int
-tap_ctl_check(const char **msg)
-{
- int err;
- uid_t uid;
-
- err = tap_ctl_check_blktap(msg);
- if (err)
- goto out;
-
- err = 0;
- *msg = "ok";
-
-out:
- return err;
-}
diff --git a/tools/blktap2/control/tap-ctl-close.c
b/tools/blktap2/control/tap-ctl-close.c
deleted file mode 100644
index 2e5f80b..0000000
--- a/tools/blktap2/control/tap-ctl-close.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * 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.
- */
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <getopt.h>
-
-#include "tap-ctl.h"
-
-static int
-__tap_ctl_close(const int id, const int minor, const int force)
-{
- int err;
- tapdisk_message_t message;
-
- memset(&message, 0, sizeof(message));
- message.type = TAPDISK_MESSAGE_CLOSE;
- if (force)
- message.type = TAPDISK_MESSAGE_FORCE_SHUTDOWN;
- message.cookie = minor;
-
- err = tap_ctl_connect_send_and_receive(id, &message, 5);
- if (err)
- return err;
-
- if (message.type == TAPDISK_MESSAGE_CLOSE_RSP) {
- err = message.u.response.error;
- if (err)
- EPRINTF("close failed: %d\n", err);
- } else {
- EPRINTF("got unexpected result '%s' from %d\n",
- tapdisk_message_name(message.type), id);
- err = EINVAL;
- }
-
- return err;
-}
-
-int
-tap_ctl_close(const int id, const int minor, const int force)
-{
- int i, err;
-
- for (i = 0; i < 20; i++) {
- err = __tap_ctl_close(id, minor, force);
- if (!err)
- return 0;
-
- err = (err < 0 ? -err : err);
- if (err != EAGAIN) {
- EPRINTF("close failed: %d\n", err);
- return err;
- }
-
- usleep(1000);
- }
-
- EPRINTF("close timed out\n");
- return EIO;
-}
diff --git a/tools/blktap2/control/tap-ctl-create.c
b/tools/blktap2/control/tap-ctl-create.c
deleted file mode 100644
index f4c47f1..0000000
--- a/tools/blktap2/control/tap-ctl-create.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * 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.
- */
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <getopt.h>
-
-#include "tap-ctl.h"
-#include "blktap2.h"
-
-int
-tap_ctl_create(const char *params, char **devname)
-{
- int err, id, minor;
-
- err = tap_ctl_allocate(&minor, devname);
- if (err)
- return err;
-
- id = tap_ctl_spawn();
- if (id < 0) {
- err = id;
- goto destroy;
- }
-
- err = tap_ctl_attach(id, minor);
- if (err)
- goto destroy;
-
- err = tap_ctl_open(id, minor, params);
- if (err)
- goto detach;
-
- return 0;
-
-detach:
- tap_ctl_detach(id, minor);
-destroy:
- tap_ctl_free(minor);
- return err;
-}
diff --git a/tools/blktap2/control/tap-ctl-destroy.c
b/tools/blktap2/control/tap-ctl-destroy.c
deleted file mode 100644
index dc5dbaa..0000000
--- a/tools/blktap2/control/tap-ctl-destroy.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.
- */
-#include <stdio.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <getopt.h>
-
-#include "tap-ctl.h"
-#include "blktap2.h"
-
-int
-tap_ctl_destroy(const int id, const int minor)
-{
- int err;
-
- err = tap_ctl_close(id, minor, 0);
- if (err)
- return err;
-
- err = tap_ctl_detach(id, minor);
- if (err)
- return err;
-
- err = tap_ctl_free(minor);
- if (err)
- return err;
-
- return 0;
-}
diff --git a/tools/blktap2/control/tap-ctl-detach.c
b/tools/blktap2/control/tap-ctl-detach.c
deleted file mode 100644
index 7d7bbf3..0000000
--- a/tools/blktap2/control/tap-ctl-detach.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * 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.
- */
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <string.h>
-#include <getopt.h>
-
-#include "tap-ctl.h"
-
-int
-tap_ctl_detach(const int id, const int minor)
-{
- int err;
- tapdisk_message_t message;
-
- memset(&message, 0, sizeof(message));
- message.type = TAPDISK_MESSAGE_DETACH;
- message.cookie = minor;
-
- err = tap_ctl_connect_send_and_receive(id, &message, 5);
- if (err)
- return err;
-
- if (message.type == TAPDISK_MESSAGE_DETACH_RSP) {
- err = message.u.response.error;
- if (err < 0)
- printf("detach failed: %d\n", err);
- } else {
- printf("got unexpected result '%s' from %d\n",
- tapdisk_message_name(message.type), id);
- err = EINVAL;
- }
-
- return err;
-}
diff --git a/tools/blktap2/control/tap-ctl-free.c
b/tools/blktap2/control/tap-ctl-free.c
deleted file mode 100644
index 9ae7295..0000000
--- a/tools/blktap2/control/tap-ctl-free.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.
- */
-#include <stdio.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <getopt.h>
-#include <sys/ioctl.h>
-
-#include "tap-ctl.h"
-#include "blktap2.h"
-
-int
-tap_ctl_free(const int minor)
-{
- int fd, err;
-
- fd = open(BLKTAP2_CONTROL_DEVICE, O_RDONLY);
- if (fd == -1) {
- EPRINTF("failed to open control device: %d\n", errno);
- return errno;
- }
-
- err = ioctl(fd, BLKTAP2_IOCTL_FREE_TAP, minor);
- close(fd);
-
- return err;
-}
diff --git a/tools/blktap2/control/tap-ctl-ipc.c
b/tools/blktap2/control/tap-ctl-ipc.c
deleted file mode 100644
index c7e42d9..0000000
--- a/tools/blktap2/control/tap-ctl-ipc.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * 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.
- */
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/un.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include "tap-ctl.h"
-#include "blktap2.h"
-
-int tap_ctl_debug = 0;
-
-int
-tap_ctl_read_message(int fd, tapdisk_message_t *message, int timeout)
-{
- fd_set readfds;
- int ret, len, offset;
- struct timeval tv, *t;
-
- t = NULL;
- offset = 0;
- len = sizeof(tapdisk_message_t);
-
- if (timeout) {
- tv.tv_sec = timeout;
- tv.tv_usec = 0;
- t = &tv;
- }
-
- memset(message, 0, sizeof(tapdisk_message_t));
-
- while (offset < len) {
- FD_ZERO(&readfds);
- FD_SET(fd, &readfds);
-
- ret = select(fd + 1, &readfds, NULL, NULL, t);
- if (ret == -1) {
- if (errno == EINTR)
- continue;
- break;
- }
- else if (FD_ISSET(fd, &readfds)) {
- ret = read(fd, message + offset, len - offset);
- if (ret <= 0) {
- if (errno == EINTR)
- continue;
- break;
- }
- offset += ret;
- } else
- break;
- }
-
- if (offset != len) {
- EPRINTF("failure reading message\n");
- return -EIO;
- }
-
- DBG("received '%s' message (uuid = %u)\n",
- tapdisk_message_name(message->type), message->cookie);
-
- return 0;
-}
-
-int
-tap_ctl_write_message(int fd, tapdisk_message_t *message, int timeout)
-{
- fd_set writefds;
- int ret, len, offset;
- struct timeval tv, *t;
-
- t = NULL;
- offset = 0;
- len = sizeof(tapdisk_message_t);
-
- if (timeout) {
- tv.tv_sec = timeout;
- tv.tv_usec = 0;
- t = &tv;
- }
-
- DBG("sending '%s' message (uuid = %u)\n",
- tapdisk_message_name(message->type), message->cookie);
-
- while (offset < len) {
- FD_ZERO(&writefds);
- FD_SET(fd, &writefds);
-
- /* we don't bother reinitializing tv. at worst, it will wait a
- * bit more time than expected. */
-
- ret = select(fd + 1, NULL, &writefds, NULL, t);
- if (ret == -1) {
- if (errno == EINTR)
- continue;
- break;
- }
- else if (FD_ISSET(fd, &writefds)) {
- ret = write(fd, message + offset, len - offset);
- if (ret <= 0) {
- if (errno == EINTR)
- continue;
- break;
- }
- offset += ret;
- } else
- break;
- }
-
- if (offset != len) {
- EPRINTF("failure writing message\n");
- return -EIO;
- }
-
- return 0;
-}
-
-int
-tap_ctl_send_and_receive(int sfd, tapdisk_message_t *message, int timeout)
-{
- int err;
-
- err = tap_ctl_write_message(sfd, message, timeout);
- if (err) {
- EPRINTF("failed to send '%s' message\n",
- tapdisk_message_name(message->type));
- return err;
- }
-
- err = tap_ctl_read_message(sfd, message, timeout);
- if (err) {
- EPRINTF("failed to receive '%s' message\n",
- tapdisk_message_name(message->type));
- return err;
- }
-
- return 0;
-}
-
-char *
-tap_ctl_socket_name(int id)
-{
- char *name;
-
- if (asprintf(&name, "%s/%s%d",
- BLKTAP2_CONTROL_DIR, BLKTAP2_CONTROL_SOCKET, id) == -1)
- return NULL;
-
- return name;
-}
-
-int
-tap_ctl_connect(const char *name, int *sfd)
-{
- int fd, err;
- struct sockaddr_un saddr;
-
- *sfd = -1;
-
- fd = socket(AF_UNIX, SOCK_STREAM, 0);
- if (fd == -1) {
- EPRINTF("couldn't create socket for %s: %d\n", name, errno);
- return -errno;
- }
-
- memset(&saddr, 0, sizeof(saddr));
- saddr.sun_family = AF_UNIX;
- strcpy(saddr.sun_path, name);
-
- err = connect(fd, (const struct sockaddr *)&saddr, sizeof(saddr));
- if (err) {
- EPRINTF("couldn't connect to %s: %d\n", name, errno);
- close(fd);
- return -errno;
- }
-
- *sfd = fd;
- return 0;
-}
-
-int
-tap_ctl_connect_id(int id, int *sfd)
-{
- int err;
- char *name;
-
- *sfd = -1;
-
- if (id < 0) {
- EPRINTF("invalid id %d\n", id);
- return -EINVAL;
- }
-
- name = tap_ctl_socket_name(id);
- if (!name) {
- EPRINTF("couldn't name socket for %d\n", id);
- return -ENOMEM;
- }
-
- err = tap_ctl_connect(name, sfd);
- free(name);
-
- return err;
-}
-
-int
-tap_ctl_connect_send_and_receive(int id, tapdisk_message_t *message, int
timeout)
-{
- int err, sfd;
-
- err = tap_ctl_connect_id(id, &sfd);
- if (err)
- return err;
-
- err = tap_ctl_send_and_receive(sfd, message, timeout);
-
- close(sfd);
- return err;
-}
diff --git a/tools/blktap2/control/tap-ctl-list.c
b/tools/blktap2/control/tap-ctl-list.c
deleted file mode 100644
index f8d49c3..0000000
--- a/tools/blktap2/control/tap-ctl-list.c
+++ /dev/null
@@ -1,536 +0,0 @@
-/*
- * 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.
- */
-
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <glob.h>
-
-#include "tap-ctl.h"
-#include "blktap2.h"
-#include "list.h"
-
-static void
-free_list(tap_list_t *entry)
-{
- if (entry->type) {
- free(entry->type);
- entry->type = NULL;
- }
-
- if (entry->path) {
- free(entry->path);
- entry->path = NULL;
- }
-
- free(entry);
-}
-
-int
-_parse_params(const char *params, char **type, char **path)
-{
- char *ptr;
- size_t len;
-
- ptr = strchr(params, ':');
- if (!ptr)
- return -EINVAL;
-
- len = ptr - params;
-
- *type = strndup(params, len);
- *path = strdup(params + len + 1);
-
- if (!*type || !*path) {
- free(*type);
- *type = NULL;
-
- free(*path);
- *path = NULL;
-
- return -errno;
- }
-
- return 0;
-}
-
-static int
-init_list(tap_list_t *entry,
- int tap_id, pid_t tap_pid, int vbd_minor, int vbd_state,
- const char *params)
-{
- int err = 0;
-
- entry->id = tap_id;
- entry->pid = tap_pid;
- entry->minor = vbd_minor;
- entry->state = vbd_state;
-
- if (params)
- err = _parse_params(params, &entry->type, &entry->path);
-
- return err;
-}
-
-void
-tap_ctl_free_list(tap_list_t **list)
-{
- tap_list_t **_entry;
-
- for (_entry = list; *_entry != NULL; ++_entry)
- free_list(*_entry);
-
- free(list);
-}
-
-static tap_list_t**
-tap_ctl_alloc_list(int n)
-{
- tap_list_t **list, *entry;
- size_t size;
- int i;
-
- size = sizeof(tap_list_t*) * (n+1);
- list = malloc(size);
- if (!list)
- goto fail;
-
- memset(list, 0, size);
-
- for (i = 0; i < n; ++i) {
- tap_list_t *entry;
-
- entry = malloc(sizeof(tap_list_t));
- if (!entry)
- goto fail;
-
- memset(entry, 0, sizeof(tap_list_t));
-
- list[i] = entry;
- }
-
- return list;
-
-fail:
- if (list)
- tap_ctl_free_list(list);
-
- return NULL;
-}
-
-static int
-tap_ctl_list_length(const tap_list_t **list)
-{
- const tap_list_t **_entry;
- int n;
-
- n = 0;
- for (_entry = list; *_entry != NULL; ++_entry)
- n++;
-
- return n;
-}
-
-static int
-_tap_minor_cmp(const void *a, const void *b)
-{
- return *(int*)a - *(int*)b;
-}
-
-int
-_tap_ctl_find_minors(int **_minorv)
-{
- glob_t glbuf = { 0 };
- const char *pattern, *format;
- int *minorv = NULL, n_minors = 0;
- int err, i;
-
- pattern = BLKTAP2_SYSFS_DIR"/blktap*";
- format = BLKTAP2_SYSFS_DIR"/blktap%d";
-
- n_minors = 0;
- minorv = NULL;
-
- err = glob(pattern, 0, NULL, &glbuf);
- switch (err) {
- case GLOB_NOMATCH:
- goto done;
-
- case GLOB_ABORTED:
- case GLOB_NOSPACE:
- err = -errno;
- EPRINTF("%s: glob failed, err %d", pattern, err);
- goto fail;
- }
-
- minorv = malloc(sizeof(int) * glbuf.gl_pathc);
- if (!minorv) {
- err = -errno;
- goto fail;
- }
-
- for (i = 0; i < glbuf.gl_pathc; ++i) {
- int n;
-
- n = sscanf(glbuf.gl_pathv[i], format, &minorv[n_minors]);
- if (n != 1)
- continue;
-
- n_minors++;
- }
-
- qsort(minorv, n_minors, sizeof(int), _tap_minor_cmp);
-
-done:
- *_minorv = minorv;
- err = 0;
-
-out:
- if (glbuf.gl_pathv)
- globfree(&glbuf);
-
- return err ? : n_minors;
-
-fail:
- if (minorv)
- free(minorv);
-
- goto out;
-}
-
-struct tapdisk {
- int id;
- pid_t pid;
- struct list_head list;
-};
-
-static int
-_tap_tapdisk_cmp(const void *a, const void *b)
-{
- return ((struct tapdisk*)a)->id - ((struct tapdisk*)b)->id;
-}
-
-int
-_tap_ctl_find_tapdisks(struct tapdisk **_tapv)
-{
- glob_t glbuf = { 0 };
- const char *pattern, *format;
- struct tapdisk *tapv = NULL;
- int err, i, n_taps = 0;
-
- pattern = BLKTAP2_CONTROL_DIR"/"BLKTAP2_CONTROL_SOCKET"*";
- format = BLKTAP2_CONTROL_DIR"/"BLKTAP2_CONTROL_SOCKET"%d";
-
- n_taps = 0;
- tapv = NULL;
-
- err = glob(pattern, 0, NULL, &glbuf);
- switch (err) {
- case GLOB_NOMATCH:
- goto done;
-
- case GLOB_ABORTED:
- case GLOB_NOSPACE:
- err = -errno;
- EPRINTF("%s: glob failed, err %d", pattern, err);
- goto fail;
- }
-
- tapv = malloc(sizeof(struct tapdisk) * glbuf.gl_pathc);
- if (!tapv) {
- err = -errno;
- goto fail;
- }
-
- for (i = 0; i < glbuf.gl_pathc; ++i) {
- struct tapdisk *tap;
- int n;
-
- tap = &tapv[n_taps];
-
- err = sscanf(glbuf.gl_pathv[i], format, &tap->id);
- if (err != 1)
- continue;
-
- tap->pid = tap_ctl_get_pid(tap->id);
- if (tap->pid < 0)
- continue;
-
- n_taps++;
- }
-
- qsort(tapv, n_taps, sizeof(struct tapdisk), _tap_tapdisk_cmp);
-
- for (i = 0; i < n_taps; ++i)
- INIT_LIST_HEAD(&tapv[i].list);
-
-done:
- *_tapv = tapv;
- err = 0;
-
-out:
- if (glbuf.gl_pathv)
- globfree(&glbuf);
-
- return err ? : n_taps;
-
-fail:
- if (tapv)
- free(tapv);
-
- goto out;
-}
-
-struct tapdisk_list {
- int minor;
- int state;
- char *params;
- struct list_head entry;
-};
-
-int
-_tap_ctl_list_tapdisk(int id, struct list_head *_list)
-{
- tapdisk_message_t message;
- struct list_head list;
- struct tapdisk_list *tl, *next;
- int err, sfd;
-
- err = tap_ctl_connect_id(id, &sfd);
- if (err)
- return err;
-
- memset(&message, 0, sizeof(message));
- message.type = TAPDISK_MESSAGE_LIST;
- message.cookie = -1;
-
- err = tap_ctl_write_message(sfd, &message, 2);
- if (err)
- return err;
-
- INIT_LIST_HEAD(&list);
- do {
- err = tap_ctl_read_message(sfd, &message, 2);
- if (err) {
- err = -EPROTO;
- break;
- }
-
- if (message.u.list.count == 0)
- break;
-
- tl = malloc(sizeof(struct tapdisk_list));
- if (!tl) {
- err = -ENOMEM;
- break;
- }
-
- tl->minor = message.u.list.minor;
- tl->state = message.u.list.state;
- if (message.u.list.path[0] != 0) {
- tl->params = strndup(message.u.list.path,
- sizeof(message.u.list.path));
- if (!tl->params) {
- err = -errno;
- break;
- }
- } else
- tl->params = NULL;
-
- list_add(&tl->entry, &list);
- } while (1);
-
- if (err)
- list_for_each_entry_safe(tl, next, &list, entry) {
- list_del(&tl->entry);
- free(tl->params);
- free(tl);
- }
-
- close(sfd);
- list_splice(&list, _list);
- return err;
-}
-
-void
-_tap_ctl_free_tapdisks(struct tapdisk *tapv, int n_taps)
-{
- struct tapdisk *tap;
-
- for (tap = tapv; tap < &tapv[n_taps]; ++tap) {
- struct tapdisk_list *tl, *next;
-
- list_for_each_entry_safe(tl, next, &tap->list, entry) {
- free(tl->params);
- free(tl);
- }
- }
-
- free(tapv);
-}
-
-int
-_tap_list_join3(int n_minors, int *minorv, int n_taps, struct tapdisk *tapv,
- tap_list_t ***_list)
-{
- tap_list_t **list, **_entry;
- int i, _m, err;
-
- list = tap_ctl_alloc_list(n_minors + n_taps);
- if (!list) {
- err = -ENOMEM;
- goto fail;
- }
-
- _entry = list;
-
- for (i = 0; i < n_taps; ++i) {
- struct tapdisk *tap = &tapv[i];
- struct tapdisk_list *tl;
-
- /* orphaned tapdisk */
- if (list_empty(&tap->list)) {
- err = init_list(*_entry++, tap->id, tap->pid, -1, -1,
NULL);
- if (err)
- goto fail;
- continue;
- }
-
- list_for_each_entry(tl, &tap->list, entry) {
-
- err = init_list(*_entry++,
- tap->id, tap->pid,
- tl->minor, tl->state, tl->params);
- if (err)
- goto fail;
-
- if (tl->minor >= 0) {
- /* clear minor */
- for (_m = 0; _m < n_minors; ++_m) {
- if (minorv[_m] == tl->minor) {
- minorv[_m] = -1;
- break;
- }
- }
- }
- }
- }
-
- /* orphaned minors */
- for (_m = 0; _m < n_minors; ++_m) {
- int minor = minorv[_m];
- if (minor >= 0) {
- err = init_list(*_entry++, -1, -1, minor, -1, NULL);
- if (err)
- goto fail;
- }
- }
-
- /* free extraneous list entries */
- for (; *_entry != NULL; ++_entry) {
- free_list(*_entry);
- *_entry = NULL;
- }
-
- *_list = list;
-
- return 0;
-
-fail:
- if (list)
- tap_ctl_free_list(list);
-
- return err;
-}
-
-int
-tap_ctl_list(tap_list_t ***list)
-{
- int n_taps, n_minors, err, *minorv;
- struct tapdisk *tapv, *tap;
-
- n_taps = -1;
- n_minors = -1;
-
- err = n_minors = _tap_ctl_find_minors(&minorv);
- if (err < 0)
- goto out;
-
- err = n_taps = _tap_ctl_find_tapdisks(&tapv);
- if (err < 0)
- goto out;
-
- for (tap = tapv; tap < &tapv[n_taps]; ++tap) {
- err = _tap_ctl_list_tapdisk(tap->id, &tap->list);
- if (err)
- goto out;
- }
-
- err = _tap_list_join3(n_minors, minorv, n_taps, tapv, list);
-
-out:
- if (n_taps > 0)
- _tap_ctl_free_tapdisks(tapv, n_taps);
-
- if (n_minors > 0)
- free(minorv);
-
- return err;
-}
-
-int
-tap_ctl_find(const char *type, const char *path, tap_list_t *tap)
-{
- tap_list_t **list, **_entry;
- int ret = -ENOENT, err;
-
- err = tap_ctl_list(&list);
- if (err)
- return err;
-
- for (_entry = list; *_entry != NULL; ++_entry) {
- tap_list_t *entry = *_entry;
-
- if (type && (!entry->type || strcmp(entry->type, type)))
- continue;
-
- if (path && (!entry->path || strcmp(entry->path, path)))
- continue;
-
- *tap = *entry;
- tap->type = tap->path = NULL;
- ret = 0;
- break;
- }
-
- tap_ctl_free_list(list);
-
- return ret;
-}
diff --git a/tools/blktap2/control/tap-ctl-major.c
b/tools/blktap2/control/tap-ctl-major.c
deleted file mode 100644
index 847af28..0000000
--- a/tools/blktap2/control/tap-ctl-major.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * 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.
- */
-
-#include <stdio.h>
-#include <errno.h>
-
-#include "tap-ctl.h"
-
-int
-tap_ctl_blk_major(void)
-{
- FILE *devices;
- int rv, major;
-
- devices = fopen("/proc/devices", "r");
- if (!devices) {
- rv = -errno;
- goto out;
- }
-
- do {
- char buf[32], *s;
- int n, offset;
-
- s = fgets(buf, sizeof(buf), devices);
- if (!s)
- break;
-
- major = -ENODEV;
- offset = 0;
-
- n = sscanf(buf, "%d tapdev%n", &major, &offset);
- if (n == 1 && offset)
- break;
- } while (1);
-
- rv = major;
-
-out:
- if (devices)
- fclose(devices);
-
- return rv;
-}
diff --git a/tools/blktap2/control/tap-ctl-open.c
b/tools/blktap2/control/tap-ctl-open.c
deleted file mode 100644
index 5961c99..0000000
--- a/tools/blktap2/control/tap-ctl-open.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * 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.
- */
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <getopt.h>
-
-#include "tap-ctl.h"
-#include "blktaplib.h"
-
-int
-tap_ctl_open(const int id, const int minor, const char *params)
-{
- int err;
- tapdisk_message_t message;
-
- memset(&message, 0, sizeof(message));
- message.type = TAPDISK_MESSAGE_OPEN;
- message.cookie = minor;
- message.u.params.storage = TAPDISK_STORAGE_TYPE_DEFAULT;
- message.u.params.devnum = minor;
-
- err = snprintf(message.u.params.path,
- sizeof(message.u.params.path) - 1, "%s", params);
- if (err >= sizeof(message.u.params.path)) {
- EPRINTF("name too long\n");
- return ENAMETOOLONG;
- }
-
- err = tap_ctl_connect_send_and_receive(id, &message, 5);
- if (err)
- return err;
-
- switch (message.type) {
- case TAPDISK_MESSAGE_OPEN_RSP:
- break;
- case TAPDISK_MESSAGE_ERROR:
- err = -message.u.response.error;
- EPRINTF("open failed, err %d\n", err);
- break;
- default:
- EPRINTF("got unexpected result '%s' from %d\n",
- tapdisk_message_name(message.type), id);
- err = EINVAL;
- }
-
- return err;
-}
diff --git a/tools/blktap2/control/tap-ctl-pause.c
b/tools/blktap2/control/tap-ctl-pause.c
deleted file mode 100644
index 5e31a58..0000000
--- a/tools/blktap2/control/tap-ctl-pause.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * 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.
- */
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-
-#include "tap-ctl.h"
-
-int
-tap_ctl_pause(const int id, const int minor)
-{
- int err;
- tapdisk_message_t message;
-
- memset(&message, 0, sizeof(message));
- message.type = TAPDISK_MESSAGE_PAUSE;
- message.cookie = minor;
-
- err = tap_ctl_connect_send_and_receive(id, &message, 5);
- if (err)
- return err;
-
- if (message.type == TAPDISK_MESSAGE_PAUSE_RSP)
- err = message.u.response.error;
- else {
- err = EINVAL;
- EPRINTF("got unexpected result '%s' from %d\n",
- tapdisk_message_name(message.type), id);
- }
-
- return err;
-}
diff --git a/tools/blktap2/control/tap-ctl-spawn.c
b/tools/blktap2/control/tap-ctl-spawn.c
deleted file mode 100644
index 31a651e..0000000
--- a/tools/blktap2/control/tap-ctl-spawn.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * 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.
- */
-
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/wait.h>
-
-#include "tap-ctl.h"
-#include "blktap2.h"
-
-static pid_t
-__tap_ctl_spawn(int *readfd)
-{
- int err, child, channel[2];
- char *tapdisk;
-
- if (pipe(channel)) {
- EPRINTF("pipe failed: %d\n", errno);
- return -errno;
- }
-
- if ((child = fork()) == -1) {
- EPRINTF("fork failed: %d\n", errno);
- return -errno;
- }
-
- if (child) {
- close(channel[1]);
- *readfd = channel[0];
- return child;
- }
-
- if (dup2(channel[1], STDOUT_FILENO) == -1) {
- EPRINTF("dup2 failed: %d\n", errno);
- exit(errno);
- }
-
- if (dup2(channel[1], STDERR_FILENO) == -1) {
- EPRINTF("dup2 failed: %d\n", errno);
- exit(errno);
- }
-
- close(channel[0]);
- close(channel[1]);
-
- tapdisk = getenv("TAPDISK2");
- if (!tapdisk)
- tapdisk = "tapdisk2";
-
- execlp(tapdisk, tapdisk, NULL);
-
- EPRINTF("exec failed\n");
- exit(1);
-}
-
-pid_t
-tap_ctl_get_pid(const int id)
-{
- int err;
- tapdisk_message_t message;
-
- memset(&message, 0, sizeof(message));
- message.type = TAPDISK_MESSAGE_PID;
-
- err = tap_ctl_connect_send_and_receive(id, &message, 2);
- if (err)
- return err;
-
- return message.u.tapdisk_pid;
-}
-
-static int
-tap_ctl_wait(pid_t child)
-{
- pid_t pid;
- int status;
-
- pid = waitpid(child, &status, 0);
- if (pid < 0) {
- EPRINTF("wait(%d) failed, err %d\n", child, errno);
- return -errno;
- }
-
- if (WIFEXITED(status)) {
- int code = WEXITSTATUS(status);
- if (code)
- EPRINTF("tapdisk2[%d] failed, status %d\n", child,
code);
- return -code;
- }
-
- if (WIFSIGNALED(status)) {
- int signo = WTERMSIG(status);
- EPRINTF("tapdisk2[%d] killed by signal %d\n", child, signo);
- return -EINTR;
- }
-
- EPRINTF("tapdisk2[%d]: unexpected status %#x\n", child, status);
- return -EAGAIN;
-}
-
-static int
-tap_ctl_get_child_id(int readfd)
-{
- int id;
- FILE *f;
-
- f = fdopen(readfd, "r");
- if (!f) {
- EPRINTF("fdopen failed: %d\n", errno);
- return -1;
- }
-
- errno = 0;
- if (fscanf(f, BLKTAP2_CONTROL_DIR"/"
- BLKTAP2_CONTROL_SOCKET"%d", &id) != 1) {
- errno = (errno ? : EINVAL);
- EPRINTF("parsing id failed: %d\n", errno);
- id = -1;
- }
-
- fclose(f);
- return id;
-}
-
-int
-tap_ctl_spawn(void)
-{
- pid_t child;
- int err, id, readfd;
-
- readfd = -1;
-
- child = __tap_ctl_spawn(&readfd);
- if (child < 0)
- return child;
-
- err = tap_ctl_wait(child);
- if (err)
- return err;
-
- id = tap_ctl_get_child_id(readfd);
- if (id < 0)
- EPRINTF("get_id failed, child %d err %d\n", child, errno);
-
- return id;
-}
diff --git a/tools/blktap2/control/tap-ctl-unpause.c
b/tools/blktap2/control/tap-ctl-unpause.c
deleted file mode 100644
index dfb7450..0000000
--- a/tools/blktap2/control/tap-ctl-unpause.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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.
- */
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <getopt.h>
-
-#include "tap-ctl.h"
-
-int
-tap_ctl_unpause(const int id, const int minor, const char *params)
-{
- int err;
- tapdisk_message_t message;
-
- memset(&message, 0, sizeof(message));
- message.type = TAPDISK_MESSAGE_RESUME;
- message.cookie = minor;
-
- if (params)
- strncpy(message.u.params.path, params,
- sizeof(message.u.params.path) - 1);
-
- err = tap_ctl_connect_send_and_receive(id, &message, 15);
- if (err)
- return err;
-
- if (message.type == TAPDISK_MESSAGE_RESUME_RSP)
- err = message.u.response.error;
- else {
- err = EINVAL;
- EPRINTF("got unexpected result '%s' from %d\n",
- tapdisk_message_name(message.type), id);
- }
-
- return err;
-}
diff --git a/tools/blktap2/control/tap-ctl.c b/tools/blktap2/control/tap-ctl.c
deleted file mode 100644
index e254f07..0000000
--- a/tools/blktap2/control/tap-ctl.c
+++ /dev/null
@@ -1,815 +0,0 @@
-/*
- * 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.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <getopt.h>
-
-#include "tap-ctl.h"
-
-typedef int (*tap_ctl_func_t) (int, char **);
-
-struct command {
- char *name;
- tap_ctl_func_t func;
-};
-
-static void
-tap_cli_list_usage(FILE *stream)
-{
- fprintf(stream,
- "usage: list [-h] [-p pid] [-m minor] [-t type] [-f file]\n");
-}
-
-static void
-tap_ctl_list_row(tap_list_t *entry)
-{
- char minor_str[10] = "-";
- char state_str[10] = "-";
- char pid_str[10] = "-";
-
- if (entry->pid != -1)
- sprintf(pid_str, "%d", entry->pid);
-
- if (entry->minor != -1)
- sprintf(minor_str, "%d", entry->minor);
-
- if (entry->state != -1)
- sprintf(state_str, "%x", entry->state);
-
- printf("%8s %2s %4s %10s %s\n",
- pid_str, minor_str, state_str,
- entry->type ? : "-", entry->path ? : "-");
-}
-
-static void
-tap_ctl_list_dict(tap_list_t *entry)
-{
- int d = 0;
-
- if (entry->pid != -1) {
- if (d) putc(' ', stdout);
- d = printf("pid=%d", entry->pid);
- }
-
- if (entry->minor != -1) {
- if (d) putc(' ', stdout);
- d = printf("minor=%d", entry->minor);
- }
-
- if (entry->state != -1) {
- if (d) putc(' ', stdout);
- d = printf("state=%d", entry->state);
- }
-
- if (entry->type && entry->path) {
- if (d) putc(' ', stdout);
- d = printf("args=%s:%s", entry->type, entry->path);
- }
-
- putc('\n', stdout);
-}
-
-int
-tap_cli_list(int argc, char **argv)
-{
- tap_list_t **list, **_entry;
- int c, minor, tty, err;
- const char *type, *file;
- pid_t pid;
-
- err = tap_ctl_list(&list);
- if (err)
- return -err;
-
- pid = -1;
- minor = -1;
- type = NULL;
- file = NULL;
-
- while ((c = getopt(argc, argv, "m:p:t:f:h")) != -1) {
- switch (c) {
- case 'm':
- minor = atoi(optarg);
- break;
- case 'p':
- pid = atoi(optarg);
- break;
- case 't':
- type = optarg;
- break;
- case 'f':
- file = optarg;
- break;
- case '?':
- goto usage;
- case 'h':
- tap_cli_list_usage(stdout);
- return 0;
- }
- }
-
- tty = isatty(STDOUT_FILENO);
-
- for (_entry = list; *_entry != NULL; ++_entry) {
- tap_list_t *entry = *_entry;
-
- if (minor >= 0 && entry->minor != minor)
- continue;
-
- if (pid >= 0 && entry->pid != pid)
- continue;
-
- if (type && (!entry->type || strcmp(entry->type, type)))
- continue;
-
- if (file && (!entry->path || strcmp(entry->path, file)))
- continue;
-
- if (tty)
- tap_ctl_list_row(entry);
- else
- tap_ctl_list_dict(entry);
- }
-
- tap_ctl_free_list(list);
-
- return 0;
-
-usage:
- tap_cli_list_usage(stderr);
- return EINVAL;
-}
-
-static void
-tap_cli_allocate_usage(FILE *stream)
-{
- fprintf(stream, "usage: allocate [-d device name]>\n");
-}
-
-static int
-tap_cli_allocate(int argc, char **argv)
-{
- char *devname;
- int c, minor, err;
-
- devname = NULL;
-
- optind = 0;
- while ((c = getopt(argc, argv, "d:h")) != -1) {
- switch (c) {
- case 'd':
- devname = optarg;
- break;
- case '?':
- goto usage;
- case 'h':
- tap_cli_allocate_usage(stdout);
- return 0;
- }
- }
-
- err = tap_ctl_allocate(&minor, &devname);
- if (!err)
- printf("%s\n", devname);
-
- return err;
-
-usage:
- tap_cli_allocate_usage(stderr);
- return EINVAL;
-}
-
-static void
-tap_cli_free_usage(FILE *stream)
-{
- fprintf(stream, "usage: free <-m minor>\n");
-}
-
-static int
-tap_cli_free(int argc, char **argv)
-{
- int c, minor;
-
- minor = -1;
-
- optind = 0;
- while ((c = getopt(argc, argv, "m:h")) != -1) {
- switch (c) {
- case 'm':
- minor = atoi(optarg);
- break;
- case '?':
- goto usage;
- case 'h':
- tap_cli_free_usage(stdout);
- return 0;
- }
- }
-
- if (minor == -1)
- goto usage;
-
- return tap_ctl_free(minor);
-
-usage:
- tap_cli_free_usage(stderr);
- return EINVAL;
-}
-
-static void
-tap_cli_create_usage(FILE *stream)
-{
- fprintf(stream, "usage: create <-a args> [-d device name]\n");
-}
-
-static int
-tap_cli_create(int argc, char **argv)
-{
- int c, err;
- char *args, *devname;
-
- args = NULL;
- devname = NULL;
-
- optind = 0;
- while ((c = getopt(argc, argv, "a:d:h")) != -1) {
- switch (c) {
- case 'a':
- args = optarg;
- break;
- case 'd':
- devname = optarg;
- break;
- case '?':
- goto usage;
- case 'h':
- tap_cli_create_usage(stdout);
- return 0;
- }
- }
-
- if (!args)
- goto usage;
-
- err = tap_ctl_create(args, &devname);
- if (!err)
- printf("%s\n", devname);
-
- return err;
-
-usage:
- tap_cli_create_usage(stderr);
- return EINVAL;
-}
-
-static void
-tap_cli_destroy_usage(FILE *stream)
-{
- fprintf(stream, "usage: destroy <-p pid> <-m minor>\n");
-}
-
-static int
-tap_cli_destroy(int argc, char **argv)
-{
- int c, pid, minor;
-
- pid = -1;
- minor = -1;
-
- optind = 0;
- while ((c = getopt(argc, argv, "p:m:h")) != -1) {
- switch (c) {
- case 'p':
- pid = atoi(optarg);
- break;
- case 'm':
- minor = atoi(optarg);
- break;
- case '?':
- goto usage;
- case 'h':
- tap_cli_destroy_usage(stdout);
- return 0;
- }
- }
-
- if (pid == -1 || minor == -1)
- goto usage;
-
- return tap_ctl_destroy(pid, minor);
-
-usage:
- tap_cli_destroy_usage(stderr);
- return EINVAL;
-}
-
-static void
-tap_cli_spawn_usage(FILE *stream)
-{
- fprintf(stream, "usage: spawn\n");
-}
-
-static int
-tap_cli_spawn(int argc, char **argv)
-{
- int c;
- pid_t task;
-
- optind = 0;
- while ((c = getopt(argc, argv, "h")) != -1) {
- switch (c) {
- case '?':
- goto usage;
- case 'h':
- tap_cli_spawn_usage(stdout);
- return 0;
- }
- }
-
- task = tap_ctl_spawn();
- if (task < 0) {
- printf("spawn failed: %d\n", errno);
- return task;
- }
-
- printf("tapdisk spawned with pid %d\n", task);
- return 0;
-
-usage:
- tap_cli_spawn_usage(stderr);
- return EINVAL;
-}
-
-static void
-tap_cli_attach_usage(FILE *stream)
-{
- fprintf(stream, "usage: attach <-p pid> <-m minor>\n");
-}
-
-static int
-tap_cli_attach(int argc, char **argv)
-{
- int c, pid, minor;
-
- pid = -1;
- minor = -1;
-
- optind = 0;
- while ((c = getopt(argc, argv, "p:m:h")) != -1) {
- switch (c) {
- case 'p':
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |