aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxl/libxl_blktap2.c
diff options
context:
space:
mode:
authorChristoph Egger <Christoph.Egger@amd.com>2010-08-16 17:04:31 +0100
committerChristoph Egger <Christoph.Egger@amd.com>2010-08-16 17:04:31 +0100
commit6b9f18cdce05d81336a3dac2b66e090b029170c8 (patch)
treeef91ca9be5acd1093abc8f0def579557ceff11d2 /tools/libxl/libxl_blktap2.c
parent8eb8ac72924e430b89497995be61ccb2a2402919 (diff)
downloadxen-6b9f18cdce05d81336a3dac2b66e090b029170c8.tar.gz
xen-6b9f18cdce05d81336a3dac2b66e090b029170c8.tar.bz2
xen-6b9f18cdce05d81336a3dac2b66e090b029170c8.zip
Make blktap support optional.
Enable it by default on Linux, disable it on non-Linux. Signed-off-by: Christoph Egger <Christoph.Egger@amd.com> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> committer: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Diffstat (limited to 'tools/libxl/libxl_blktap2.c')
-rw-r--r--tools/libxl/libxl_blktap2.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/tools/libxl/libxl_blktap2.c b/tools/libxl/libxl_blktap2.c
new file mode 100644
index 0000000000..17c18fbfdf
--- /dev/null
+++ b/tools/libxl/libxl_blktap2.c
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2010 Advanced Micro Devices
+ * Author Christoph Egger <Christoph.Egger@amd.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 only.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ */
+
+#include "libxl.h"
+#include "libxl_osdeps.h"
+#include "libxl_internal.h"
+
+#include "tap-ctl.h"
+
+int libxl_blktap_enabled(libxl_gc *gc)
+{
+ const char *msg;
+ return !tap_ctl_check(&msg);
+}
+
+const char *libxl_blktap_devpath(libxl_gc *gc,
+ const char *disk,
+ libxl_disk_phystype phystype)
+{
+ const char *type;
+ char *params, *devname;
+ int minor, err;
+
+ type = device_disk_string_of_phystype(phystype);
+ minor = tap_ctl_find_minor(type, disk);
+ if (minor >= 0) {
+ devname = libxl_sprintf(gc, "/dev/xen/blktap-2/tapdev%d", minor);
+ if (devname)
+ return devname;
+ }
+
+ params = libxl_sprintf(gc, "%s:%s", type, disk);
+ err = tap_ctl_create(params, &devname);
+ if (!err) {
+ libxl_ptr_add(gc, devname);
+ return devname;
+ }
+
+ return NULL;
+}