11.2Schristos/*	$NetBSD: h_dm.c,v 1.2 2016/01/23 21:18:27 christos 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.2Schristos	__USE(xml);
871.1Shaad
881.1Shaad	rump_sys_close(fd);
891.1Shaad
901.1Shaad	return error;
911.1Shaad}
921.1Shaad
931.1Shaad/*
941.1Shaad * Test simple dm targets command on device-mapper device.
951.1Shaad */
961.1Shaadint
971.1Shaaddm_test_targets(void) {
981.1Shaad	int fd;
991.1Shaad	int error;
1001.1Shaad	prop_dictionary_t dict_in, dict_out;
1011.1Shaad	struct plistref prefp;
1021.1Shaad	char *xml;
1031.1Shaad
1041.1Shaad	error = 0;
1051.1Shaad
1061.1Shaad	error = rump_init();
1071.1Shaad	if (error != 0)
1081.1Shaad		err(1, "Rump init failed");
1091.1Shaad
1101.1Shaad	fd = rump_sys_open("/dev/mapper/control", O_RDWR, 0);
1111.1Shaad	if (fd == -1)
1121.1Shaad		err(1, "Open dm device failed");
1131.1Shaad
1141.1Shaad	dict_in  = prop_dictionary_internalize_from_file("dm_targets_cmd.plist");
1151.1Shaad	dict_out = prop_dictionary_create();
1161.1Shaad
1171.1Shaad	prop_dictionary_externalize_to_pref(dict_in, &prefp);
1181.1Shaad
1191.1Shaad	error = rump_sys_ioctl(fd, NETBSD_DM_IOCTL, &prefp);
1201.1Shaad	if (error < 0)
1211.1Shaad		err(1, "Dm control ioctl failed");
1221.1Shaad
1231.1Shaad	dict_out = prop_dictionary_internalize(prefp.pref_plist);
1241.1Shaad
1251.1Shaad	xml = prop_dictionary_externalize(dict_out);
1261.2Schristos	__USE(xml);
1271.1Shaad
1281.1Shaad	rump_sys_close(fd);
1291.1Shaad
1301.1Shaad	return error;
1311.1Shaad}
1321.1Shaad
1331.1Shaadint
1341.1Shaadmain(int argc, char **argv) {
1351.1Shaad	int error;
1361.1Shaad
1371.1Shaad	error = 0;
1381.1Shaad
1391.1Shaad	error = dm_test_versions();
1401.1Shaad	if (error != 0)
1411.1Shaad		err(1, "dm_test_versions failed");
1421.1Shaad
1431.1Shaad	error = dm_test_targets();
1441.1Shaad	if (error != 0)
1451.1Shaad		err(1, "dm_test_targets failed");
1461.1Shaad
1471.1Shaad	return error;
1481.1Shaad}
149