diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 1995-10-18 08:53:40 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 1995-10-18 08:53:40 +0000 |
commit | d6583bb2a13f329cf0332ef2570eb8bb8fc0e39c (patch) | |
tree | ece253b876159b39c620e62b6c9b1174642e070e /usr.sbin/vnconfig |
initial import of NetBSD tree
Diffstat (limited to 'usr.sbin/vnconfig')
-rw-r--r-- | usr.sbin/vnconfig/Makefile | 6 | ||||
-rw-r--r-- | usr.sbin/vnconfig/vnconfig.8 | 105 | ||||
-rw-r--r-- | usr.sbin/vnconfig/vnconfig.c | 174 |
3 files changed, 285 insertions, 0 deletions
diff --git a/usr.sbin/vnconfig/Makefile b/usr.sbin/vnconfig/Makefile new file mode 100644 index 00000000000..fb32170254d --- /dev/null +++ b/usr.sbin/vnconfig/Makefile @@ -0,0 +1,6 @@ +# $Id: Makefile,v 1.1 1995/10/18 08:48:31 deraadt Exp $ + +PROG= vnconfig +MAN= vnconfig.8 + +.include <bsd.prog.mk> diff --git a/usr.sbin/vnconfig/vnconfig.8 b/usr.sbin/vnconfig/vnconfig.8 new file mode 100644 index 00000000000..b01df7685a3 --- /dev/null +++ b/usr.sbin/vnconfig/vnconfig.8 @@ -0,0 +1,105 @@ +.\" Copyright (c) 1993 University of Utah. +.\" Copyright (c) 1980, 1989, 1991, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" This code is derived from software contributed to Berkeley by +.\" the Systems Programming Group of the University of Utah Computer +.\" Science Department. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)vnconfig.8 8.1 (Berkeley) 6/5/93 +.\" +.Dd July 8, 1993 +.Dt VNCONFIG 8 +.Os BSD 4 +.Sh NAME +.Nm vnconfig +.Nd configure vnode disks +.Sh SYNOPSIS +.Nm vnconfig Fl c +.Op Fl v +.Ar special_file +.Ar regular_file +.Nm vnconfig Fl u +.Op Fl v +.Ar special_file +.Sh DESCRIPTION +The +.Nm vnconfig +command configures vnode pseudo disk devices. +It will associate the special file +.Ar special_file +with the regular file +.Ar regular_file +allowing the latter to be accessed as though it were a disk. +Hence a regular file within the filesystem can be used for swapping +or can contain a filesystem that is mounted in the name space. +.Pp +Options indicate an action to be performed: +.Bl -tag -width indent +.It Fl c +Configures the device. +If successful, references to +.Ar special_file +will access the contents of +.Ar regular_file . +.It Fl u +Unconfigures the device. +.It Fl v +Print messages to stdout describing actions taken. +.El +.Pp +If no action option is given, +.Fl c +is assumed. +.Sh FILES +.Bl -tag -width /etc/rvnd?? -compact +.It Pa /dev/rvnd?? +.It Pa /dev/vnd?? +.El +.Sh EXAMPLES +.Pp +.Dl vnconfig /dev/vnd0c /tmp/diskimage +.Pp +Configures the vnode disk +.Pa vnd0c . +.Pp +.Dl vnconfig -u /dev/vnd0c +.Pp +Unconfigures the +.Pa vnd0c +device. +.Sh BUGS +This command should really be named +.Nm vndconfig . +.Sh SEE ALSO +.Xr swapon 8 , +.Xr mount 8 , +.Xr umount 8 . diff --git a/usr.sbin/vnconfig/vnconfig.c b/usr.sbin/vnconfig/vnconfig.c new file mode 100644 index 00000000000..3bfac4273b5 --- /dev/null +++ b/usr.sbin/vnconfig/vnconfig.c @@ -0,0 +1,174 @@ +/* + * Copyright (c) 1993 University of Utah. + * Copyright (c) 1990, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * the Systems Programming Group of the University of Utah Computer + * Science Department. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * from: Utah $Hdr: vnconfig.c 1.1 93/12/15$ + * + * @(#)vnconfig.c 8.1 (Berkeley) 12/15/93 + */ + +#include <sys/param.h> +#include <sys/ioctl.h> +#include <sys/mount.h> +#include <sys/stat.h> + +#include <dev/vndioctl.h> + +#include <err.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#define VND_CONFIG 1 +#define VND_UNCONFIG 2 + +int verbose = 0; + +char *rawdevice __P((char *)); +void usage __P((void)); + +main(argc, argv) + int argc; + char **argv; +{ + int ch, rv, action = VND_CONFIG; + + while ((ch = getopt(argc, argv, "cuv")) != -1) { + switch (ch) { + case 'c': + action = VND_CONFIG; + break; + case 'u': + action = VND_UNCONFIG; + break; + case 'v': + verbose = 1; + break; + default: + case '?': + usage(); + /* NOTREACHED */ + } + } + argc -= optind; + argv += optind; + + if (action == VND_CONFIG && argc == 2) + rv = config(argv[0], argv[1], action); + else if (action == VND_UNCONFIG && argc == 1) + rv = config(argv[0], NULL, action); + else + usage(); + exit(rv); +} + +config(dev, file, action) + char *dev; + char *file; + int action; +{ + struct vnd_ioctl vndio; + FILE *f; + char *rdev; + int rv; + + rdev = rawdevice(dev); + f = fopen(rdev, "rw"); + if (f == NULL) { + warn(rdev); + return (1); + } + vndio.vnd_file = file; + + /* + * Clear (un-configure) the device + */ + if (action == VND_UNCONFIG) { + rv = ioctl(fileno(f), VNDIOCCLR, &vndio); + if (rv) + warn("VNDIOCCLR"); + else if (verbose) + printf("%s: cleared\n", dev); + } + /* + * Configure the device + */ + if (action == VND_CONFIG) { + rv = ioctl(fileno(f), VNDIOCSET, &vndio); + if (rv) + warn("VNDIOCSET"); + else if (verbose) + printf("%s: %d bytes on %s\n", dev, vndio.vnd_size, + file); + } +done: + fclose(f); + fflush(stdout); + return (rv < 0); +} + +char * +rawdevice(dev) + char *dev; +{ + register char *rawbuf, *dp, *ep; + struct stat sb; + int len; + + len = strlen(dev); + rawbuf = malloc(len + 2); + strcpy(rawbuf, dev); + if (stat(rawbuf, &sb) != 0 || !S_ISCHR(sb.st_mode)) { + dp = rindex(rawbuf, '/'); + if (dp) { + for (ep = &rawbuf[len]; ep > dp; --ep) + *(ep+1) = *ep; + *++ep = 'r'; + } + } + return (rawbuf); +} + +void +usage() +{ + + (void)fprintf(stderr, "%s%s", + "usage: vnconfig -c [-v] special-file regular-file\n", + " vnconfig -u [-v] special-file\n"); + exit(1); +} |