h_dm.c revision 1.1
11.1Shaad/*	$NetBSD: h_dm.c,v 1.1 2010/10/06 11:24:55 haad Exp $	*/
21.1Shaad
31.1Shaad/*
41.1Shaad * Copyright (c) 2010 Antti Kantee.  All Rights Reserved.
51.1Shaad *
61.1Shaad * Redistribution and use in source and binary forms, with or without
71.1Shaad * modification, are permitted provided that the following conditions
81.1Shaad * are met:
91.1Shaad * 1. Redistributions of source code must retain the above copyright
101.1Shaad *    notice, this list of conditions and the following disclaimer.
111.1Shaad * 2. Redistributions in binary form must reproduce the above copyright
121.1Shaad *    notice, this list of conditions and the following disclaimer in the
131.1Shaad *    documentation and/or other materials provided with the distribution.
141.1Shaad *
151.1Shaad * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
161.1Shaad * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
171.1Shaad * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
181.1Shaad * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
191.1Shaad * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
201.1Shaad * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
211.1Shaad * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
221.1Shaad * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
231.1Shaad * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
241.1Shaad * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
251.1Shaad * SUCH DAMAGE.
261.1Shaad */
271.1Shaad
281.1Shaad#include <sys/types.h>
291.1Shaad
301.1Shaad#include <rump/rump.h>
311.1Shaad#include <rump/rump_syscalls.h>
321.1Shaad
331.1Shaad#include <sys/param.h>
341.1Shaad#include <sys/ioctl.h>
351.1Shaad#include <sys/stat.h>
361.1Shaad#include <sys/disklabel.h>
371.1Shaad
381.1Shaad#include <ctype.h>
391.1Shaad#include <err.h>
401.1Shaad#include <errno.h>
411.1Shaad#include <fcntl.h>
421.1Shaad#include <stdio.h>
431.1Shaad#include <stdlib.h>
441.1Shaad#include <string.h>
451.1Shaad#include <unistd.h>
461.1Shaad#include <util.h>
471.1Shaad
481.1Shaad#include <dev/dm/netbsd-dm.h>
491.1Shaad
501.1Shaadint dm_test_targets(void);
511.1Shaadint dm_test_versions(void);
521.1Shaad
531.1Shaad/*
541.1Shaad * Test simple dm versions command on device-mapper device.
551.1Shaad */
561.1Shaadint
571.1Shaaddm_test_versions(void) {
581.1Shaad	int fd;
591.1Shaad	int error;
601.1Shaad	prop_dictionary_t dict_in, dict_out;
611.1Shaad	struct plistref prefp;
621.1Shaad	char *xml;
631.1Shaad
641.1Shaad	error = 0;
651.1Shaad
661.1Shaad	error = rump_init();
671.1Shaad	if (error != 0)
681.1Shaad		err(1, "Rump init failed");
691.1Shaad
701.1Shaad	fd = rump_sys_open("/dev/mapper/control", O_RDWR, 0);
711.1Shaad	if (fd == -1)
721.1Shaad		err(1, "Open dm device failed");
731.1Shaad
741.1Shaad	dict_in  = prop_dictionary_internalize_from_file("dm_version_cmd.plist");
751.1Shaad	dict_out = prop_dictionary_create();
761.1Shaad
771.1Shaad	prop_dictionary_externalize_to_pref(dict_in, &prefp);
781.1Shaad
791.1Shaad	error = rump_sys_ioctl(fd, NETBSD_DM_IOCTL, &prefp);
801.1Shaad	if (error < 0)
811.1Shaad		err(1, "Dm control ioctl failed");
821.1Shaad
831.1Shaad	dict_out = prop_dictionary_internalize(prefp.pref_plist);
841.1Shaad
851.1Shaad	xml = prop_dictionary_externalize(dict_out);
861.1Shaad
871.1Shaad	rump_sys_close(fd);
881.1Shaad
891.1Shaad	return error;
901.1Shaad}
911.1Shaad
921.1Shaad/*
931.1Shaad * Test simple dm targets command on device-mapper device.
941.1Shaad */
951.1Shaadint
961.1Shaaddm_test_targets(void) {
971.1Shaad	int fd;
981.1Shaad	int error;
991.1Shaad	prop_dictionary_t dict_in, dict_out;
1001.1Shaad	struct plistref prefp;
1011.1Shaad	char *xml;
1021.1Shaad
1031.1Shaad	error = 0;
1041.1Shaad
1051.1Shaad	error = rump_init();
1061.1Shaad	if (error != 0)
1071.1Shaad		err(1, "Rump init failed");
1081.1Shaad
1091.1Shaad	fd = rump_sys_open("/dev/mapper/control", O_RDWR, 0);
1101.1Shaad	if (fd == -1)
1111.1Shaad		err(1, "Open dm device failed");
1121.1Shaad
1131.1Shaad	dict_in  = prop_dictionary_internalize_from_file("dm_targets_cmd.plist");
1141.1Shaad	dict_out = prop_dictionary_create();
1151.1Shaad
1161.1Shaad	prop_dictionary_externalize_to_pref(dict_in, &prefp);
1171.1Shaad
1181.1Shaad	error = rump_sys_ioctl(fd, NETBSD_DM_IOCTL, &prefp);
1191.1Shaad	if (error < 0)
1201.1Shaad		err(1, "Dm control ioctl failed");
1211.1Shaad
1221.1Shaad	dict_out = prop_dictionary_internalize(prefp.pref_plist);
1231.1Shaad
1241.1Shaad	xml = prop_dictionary_externalize(dict_out);
1251.1Shaad
1261.1Shaad	rump_sys_close(fd);
1271.1Shaad
1281.1Shaad	return error;
1291.1Shaad}
1301.1Shaad
1311.1Shaadint
1321.1Shaadmain(int argc, char **argv) {
1331.1Shaad	int error;
1341.1Shaad
1351.1Shaad	error = 0;
1361.1Shaad
1371.1Shaad	error = dm_test_versions();
1381.1Shaad	if (error != 0)
1391.1Shaad		err(1, "dm_test_versions failed");
1401.1Shaad
1411.1Shaad	error = dm_test_targets();
1421.1Shaad	if (error != 0)
1431.1Shaad		err(1, "dm_test_targets failed");
1441.1Shaad
1451.1Shaad	return error;
1461.1Shaad}
147