h_dm.c revision 1.2
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