xref: /freebsd/contrib/netbsd-tests/dev/dm/h_dm.c (revision c22165b4f1f5d38b681921797a44b3ba8c13b7e0)
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
dm_test_versions(void)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
dm_test_targets(void)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
main(int argc,char ** argv)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