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