1*640235e2SEnji Cooper /* $NetBSD: h_dm.c,v 1.2 2016/01/23 21:18:27 christos Exp $ */ 257718be8SEnji Cooper 357718be8SEnji Cooper /* 457718be8SEnji Cooper * Copyright (c) 2010 Antti Kantee. All Rights Reserved. 557718be8SEnji Cooper * 657718be8SEnji Cooper * Redistribution and use in source and binary forms, with or without 757718be8SEnji Cooper * modification, are permitted provided that the following conditions 857718be8SEnji Cooper * are met: 957718be8SEnji Cooper * 1. Redistributions of source code must retain the above copyright 1057718be8SEnji Cooper * notice, this list of conditions and the following disclaimer. 1157718be8SEnji Cooper * 2. Redistributions in binary form must reproduce the above copyright 1257718be8SEnji Cooper * notice, this list of conditions and the following disclaimer in the 1357718be8SEnji Cooper * documentation and/or other materials provided with the distribution. 1457718be8SEnji Cooper * 1557718be8SEnji Cooper * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 1657718be8SEnji Cooper * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 1757718be8SEnji Cooper * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 1857718be8SEnji Cooper * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1957718be8SEnji Cooper * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2057718be8SEnji Cooper * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 2157718be8SEnji Cooper * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2257718be8SEnji Cooper * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2357718be8SEnji Cooper * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2457718be8SEnji Cooper * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2557718be8SEnji Cooper * SUCH DAMAGE. 2657718be8SEnji Cooper */ 2757718be8SEnji Cooper 2857718be8SEnji Cooper #include <sys/types.h> 2957718be8SEnji Cooper 3057718be8SEnji Cooper #include <rump/rump.h> 3157718be8SEnji Cooper #include <rump/rump_syscalls.h> 3257718be8SEnji Cooper 3357718be8SEnji Cooper #include <sys/param.h> 3457718be8SEnji Cooper #include <sys/ioctl.h> 3557718be8SEnji Cooper #include <sys/stat.h> 3657718be8SEnji Cooper #include <sys/disklabel.h> 3757718be8SEnji Cooper 3857718be8SEnji Cooper #include <ctype.h> 3957718be8SEnji Cooper #include <err.h> 4057718be8SEnji Cooper #include <errno.h> 4157718be8SEnji Cooper #include <fcntl.h> 4257718be8SEnji Cooper #include <stdio.h> 4357718be8SEnji Cooper #include <stdlib.h> 4457718be8SEnji Cooper #include <string.h> 4557718be8SEnji Cooper #include <unistd.h> 4657718be8SEnji Cooper #include <util.h> 4757718be8SEnji Cooper 4857718be8SEnji Cooper #include <dev/dm/netbsd-dm.h> 4957718be8SEnji Cooper 5057718be8SEnji Cooper int dm_test_targets(void); 5157718be8SEnji Cooper int dm_test_versions(void); 5257718be8SEnji Cooper 5357718be8SEnji Cooper /* 5457718be8SEnji Cooper * Test simple dm versions command on device-mapper device. 5557718be8SEnji Cooper */ 5657718be8SEnji Cooper int 5757718be8SEnji Cooper dm_test_versions(void) { 5857718be8SEnji Cooper int fd; 5957718be8SEnji Cooper int error; 6057718be8SEnji Cooper prop_dictionary_t dict_in, dict_out; 6157718be8SEnji Cooper struct plistref prefp; 6257718be8SEnji Cooper char *xml; 6357718be8SEnji Cooper 6457718be8SEnji Cooper error = 0; 6557718be8SEnji Cooper 6657718be8SEnji Cooper error = rump_init(); 6757718be8SEnji Cooper if (error != 0) 6857718be8SEnji Cooper err(1, "Rump init failed"); 6957718be8SEnji Cooper 7057718be8SEnji Cooper fd = rump_sys_open("/dev/mapper/control", O_RDWR, 0); 7157718be8SEnji Cooper if (fd == -1) 7257718be8SEnji Cooper err(1, "Open dm device failed"); 7357718be8SEnji Cooper 7457718be8SEnji Cooper dict_in = prop_dictionary_internalize_from_file("dm_version_cmd.plist"); 7557718be8SEnji Cooper dict_out = prop_dictionary_create(); 7657718be8SEnji Cooper 7757718be8SEnji Cooper prop_dictionary_externalize_to_pref(dict_in, &prefp); 7857718be8SEnji Cooper 7957718be8SEnji Cooper error = rump_sys_ioctl(fd, NETBSD_DM_IOCTL, &prefp); 8057718be8SEnji Cooper if (error < 0) 8157718be8SEnji Cooper err(1, "Dm control ioctl failed"); 8257718be8SEnji Cooper 8357718be8SEnji Cooper dict_out = prop_dictionary_internalize(prefp.pref_plist); 8457718be8SEnji Cooper 8557718be8SEnji Cooper xml = prop_dictionary_externalize(dict_out); 86*640235e2SEnji Cooper __USE(xml); 8757718be8SEnji Cooper 8857718be8SEnji Cooper rump_sys_close(fd); 8957718be8SEnji Cooper 9057718be8SEnji Cooper return error; 9157718be8SEnji Cooper } 9257718be8SEnji Cooper 9357718be8SEnji Cooper /* 9457718be8SEnji Cooper * Test simple dm targets command on device-mapper device. 9557718be8SEnji Cooper */ 9657718be8SEnji Cooper int 9757718be8SEnji Cooper dm_test_targets(void) { 9857718be8SEnji Cooper int fd; 9957718be8SEnji Cooper int error; 10057718be8SEnji Cooper prop_dictionary_t dict_in, dict_out; 10157718be8SEnji Cooper struct plistref prefp; 10257718be8SEnji Cooper char *xml; 10357718be8SEnji Cooper 10457718be8SEnji Cooper error = 0; 10557718be8SEnji Cooper 10657718be8SEnji Cooper error = rump_init(); 10757718be8SEnji Cooper if (error != 0) 10857718be8SEnji Cooper err(1, "Rump init failed"); 10957718be8SEnji Cooper 11057718be8SEnji Cooper fd = rump_sys_open("/dev/mapper/control", O_RDWR, 0); 11157718be8SEnji Cooper if (fd == -1) 11257718be8SEnji Cooper err(1, "Open dm device failed"); 11357718be8SEnji Cooper 11457718be8SEnji Cooper dict_in = prop_dictionary_internalize_from_file("dm_targets_cmd.plist"); 11557718be8SEnji Cooper dict_out = prop_dictionary_create(); 11657718be8SEnji Cooper 11757718be8SEnji Cooper prop_dictionary_externalize_to_pref(dict_in, &prefp); 11857718be8SEnji Cooper 11957718be8SEnji Cooper error = rump_sys_ioctl(fd, NETBSD_DM_IOCTL, &prefp); 12057718be8SEnji Cooper if (error < 0) 12157718be8SEnji Cooper err(1, "Dm control ioctl failed"); 12257718be8SEnji Cooper 12357718be8SEnji Cooper dict_out = prop_dictionary_internalize(prefp.pref_plist); 12457718be8SEnji Cooper 12557718be8SEnji Cooper xml = prop_dictionary_externalize(dict_out); 126*640235e2SEnji Cooper __USE(xml); 12757718be8SEnji Cooper 12857718be8SEnji Cooper rump_sys_close(fd); 12957718be8SEnji Cooper 13057718be8SEnji Cooper return error; 13157718be8SEnji Cooper } 13257718be8SEnji Cooper 13357718be8SEnji Cooper int 13457718be8SEnji Cooper main(int argc, char **argv) { 13557718be8SEnji Cooper int error; 13657718be8SEnji Cooper 13757718be8SEnji Cooper error = 0; 13857718be8SEnji Cooper 13957718be8SEnji Cooper error = dm_test_versions(); 14057718be8SEnji Cooper if (error != 0) 14157718be8SEnji Cooper err(1, "dm_test_versions failed"); 14257718be8SEnji Cooper 14357718be8SEnji Cooper error = dm_test_targets(); 14457718be8SEnji Cooper if (error != 0) 14557718be8SEnji Cooper err(1, "dm_test_targets failed"); 14657718be8SEnji Cooper 14757718be8SEnji Cooper return error; 14857718be8SEnji Cooper } 149