summaryrefslogtreecommitdiff
path: root/usr/src/cmd/availdevs
diff options
context:
space:
mode:
authorahrens <none@none>2005-10-31 11:33:35 -0800
committerahrens <none@none>2005-10-31 11:33:35 -0800
commitfa9e4066f08beec538e775443c5be79dd423fcab (patch)
tree576d99665e57bb7cb70584431adb08c14d47e3ce /usr/src/cmd/availdevs
parentf1b64740276f67fc6914c1d855f2af601efe99ac (diff)
downloadillumos-joyent-fa9e4066f08beec538e775443c5be79dd423fcab.tar.gz
PSARC 2002/240 ZFS
6338653 Integrate ZFS PSARC 2004/652 - DKIOCFLUSH 5096886 Write caching disks need mechanism to flush cache to physical media
Diffstat (limited to 'usr/src/cmd/availdevs')
-rw-r--r--usr/src/cmd/availdevs/Makefile65
-rw-r--r--usr/src/cmd/availdevs/availdevs.c158
-rw-r--r--usr/src/cmd/availdevs/availdevs.h62
3 files changed, 285 insertions, 0 deletions
diff --git a/usr/src/cmd/availdevs/Makefile b/usr/src/cmd/availdevs/Makefile
new file mode 100644
index 0000000000..99015803ba
--- /dev/null
+++ b/usr/src/cmd/availdevs/Makefile
@@ -0,0 +1,65 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License, Version 1.0 only
+# (the "License"). You may not use this file except in compliance
+# with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+
+PROG= availdevs
+OBJS_COMMON= availdevs.o
+OBJS= $(OBJS_COMMON)
+SRCS= $(OBJS_COMMON:%.o=%.c)
+
+include ../Makefile.cmd
+
+ROOTCMDDIR= $(ROOTLIB)/zfs
+
+INCS += -I../../lib/libzfs_jni/common \
+ -I/usr/include/libxml2
+
+LDLIBS += -lzfs_jni -lxml2
+CPPFLAGS += $(INCS) -D_LARGEFILE64_SOURCE=1 -D_REENTRANT
+
+.KEEP_STATE:
+
+.PARALLEL:
+
+all: $(PROG)
+
+$(PROG): $(OBJS)
+ $(LINK.c) -o $@ $(OBJS) $(LDLIBS)
+ $(POST_PROCESS)
+
+%.o: %.c
+ $(COMPILE.c) -o $@ $<
+ $(POST_PROCESS_O)
+
+install: all $(ROOTCMD)
+
+clean:
+ $(RM) $(OBJS)
+
+FRC:
+
+include ../Makefile.targ
diff --git a/usr/src/cmd/availdevs/availdevs.c b/usr/src/cmd/availdevs/availdevs.c
new file mode 100644
index 0000000000..703897f394
--- /dev/null
+++ b/usr/src/cmd/availdevs/availdevs.c
@@ -0,0 +1,158 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#include "availdevs.h"
+#include <libzfs_jni_diskmgt.h>
+#include <libxml/parser.h>
+
+/*
+ * Function prototypes
+ */
+
+static void handle_error(const char *, va_list);
+static int add_disk_to_xml(dmgt_disk_t *, void *);
+static xmlDocPtr create_doc();
+int main();
+
+/*
+ * Static functions
+ */
+
+static void
+handle_error(const char *fmt, va_list ap)
+{
+ (void) vfprintf(stderr, fmt, ap);
+ (void) fprintf(stderr, "\n");
+}
+
+static int
+add_disk_to_xml(dmgt_disk_t *dp, void *data)
+{
+ int i, n;
+ char tmp[64];
+ xmlNodePtr available = *((xmlNodePtr *)data);
+
+ xmlNodePtr disk = xmlNewChild(
+ available, NULL, (xmlChar *)ELEMENT_DISK, NULL);
+ xmlSetProp(disk,
+ (xmlChar *)ATTR_DISK_NAME, (xmlChar *)dp->name);
+ n = snprintf(tmp, sizeof (tmp) - 1, "%llu", dp->size);
+ tmp[n] = '\0';
+ xmlSetProp(disk, (xmlChar *)ATTR_DISK_SIZE, (xmlChar *)tmp);
+
+ if (dp->aliases != NULL) {
+ for (i = 0; dp->aliases[i] != NULL; i++) {
+ xmlNodePtr alias = xmlNewChild(
+ disk, NULL, (xmlChar *)ELEMENT_ALIAS, NULL);
+ xmlSetProp(alias,
+ (xmlChar *)ATTR_ALIAS_NAME,
+ (xmlChar *)dp->aliases[i]);
+ }
+ }
+
+ if (dp->slices != NULL) {
+ for (i = 0; dp->slices[i] != NULL; i++) {
+ dmgt_slice_t *sp = dp->slices[i];
+ xmlNodePtr slice = xmlNewChild(
+ disk, NULL, (xmlChar *)ELEMENT_SLICE, NULL);
+ xmlSetProp(slice,
+ (xmlChar *)ATTR_SLICE_NAME, (xmlChar *)sp->name);
+
+ n = snprintf(tmp, sizeof (tmp) - 1, "%llu", sp->size);
+ tmp[n] = '\0';
+ xmlSetProp(slice, (xmlChar *)ATTR_SLICE_SIZE,
+ (xmlChar *)tmp);
+
+ n = snprintf(tmp, sizeof (tmp) - 1, "%llu", sp->start);
+ tmp[n] = '\0';
+ xmlSetProp(slice, (xmlChar *)ATTR_SLICE_START,
+ (xmlChar *)tmp);
+
+ if (sp->used_name != NULL) {
+ xmlSetProp(slice,
+ (xmlChar *)ATTR_SLICE_USED_NAME,
+ (xmlChar *)sp->used_name);
+ }
+
+ if (sp->used_by != NULL) {
+ xmlSetProp(slice, (xmlChar *)ATTR_SLICE_USED_BY,
+ (xmlChar *)sp->used_by);
+ }
+ }
+ }
+
+ return (0);
+}
+
+static xmlDocPtr
+create_doc(void)
+{
+ /* Create the XML document */
+ xmlDocPtr doc = xmlNewDoc((xmlChar *)"1.0");
+
+ /* Create the root node */
+ xmlNodePtr root = xmlNewDocNode(
+ doc, NULL, (xmlChar *)ELEMENT_ROOT, NULL);
+ xmlAddChild((xmlNodePtr) doc, (xmlNodePtr)root);
+
+ /* Create the available node */
+ xmlNewChild(root, NULL, (xmlChar *)ELEMENT_AVAILABLE, NULL);
+
+ return (doc);
+}
+
+/*
+ * Main entry to availdisks.
+ *
+ * @return 0 on successful exit, non-zero otherwise
+ */
+int
+main(void)
+{
+ int error;
+ xmlDocPtr doc;
+ xmlNodePtr root;
+ xmlNodePtr available;
+
+ /* diskmgt.o error handler */
+ dmgt_set_error_handler(handle_error);
+
+ doc = create_doc();
+ root = xmlDocGetRootElement(doc);
+ available = xmlGetLastChild(root);
+
+ error = dmgt_avail_disk_iter(add_disk_to_xml, &available);
+ if (!error) {
+ /* Print out XML */
+ xmlDocFormatDump(stdout, doc, 1);
+ }
+
+ xmlFreeDoc(doc);
+
+ return (error != 0);
+}
diff --git a/usr/src/cmd/availdevs/availdevs.h b/usr/src/cmd/availdevs/availdevs.h
new file mode 100644
index 0000000000..3868b237aa
--- /dev/null
+++ b/usr/src/cmd/availdevs/availdevs.h
@@ -0,0 +1,62 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#ifndef _AVAILDEVS_H
+#define _AVAILDEVS_H
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Constants
+ */
+
+/* Must match the values in XMLDataModel.java */
+#define ELEMENT_ROOT "zfsconfig"
+#define ELEMENT_AVAILABLE "available"
+#define ELEMENT_DISK "disk"
+#define ELEMENT_ALIAS "alias"
+#define ELEMENT_SLICE "slice"
+#define ATTR_DISK_NAME "name"
+#define ATTR_DISK_SIZE "size"
+#define ATTR_DISK_INUSE "inuse"
+#define ATTR_ALIAS_NAME "name"
+#define ATTR_SLICE_NAME "name"
+#define ATTR_SLICE_SIZE "size"
+#define ATTR_SLICE_START "start"
+#define ATTR_SLICE_USED_NAME "used-name"
+#define ATTR_SLICE_USED_BY "used-by"
+#define VAL_ATTR_TRUE "true"
+#define VAL_ATTR_FALSE "false"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _AVAILDEVS_H */