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 /sbin/modunload |
initial import of NetBSD tree
Diffstat (limited to 'sbin/modunload')
-rw-r--r-- | sbin/modunload/Makefile | 40 | ||||
-rw-r--r-- | sbin/modunload/modunload.8 | 76 | ||||
-rw-r--r-- | sbin/modunload/modunload.c | 127 | ||||
-rw-r--r-- | sbin/modunload/pathnames.h | 5 |
4 files changed, 248 insertions, 0 deletions
diff --git a/sbin/modunload/Makefile b/sbin/modunload/Makefile new file mode 100644 index 00000000000..7b71c20cf64 --- /dev/null +++ b/sbin/modunload/Makefile @@ -0,0 +1,40 @@ +# $NetBSD: Makefile,v 1.6 1995/03/18 14:56:48 cgd Exp $ +# +# Makefile for modunload +# +# 25 May 93 Terry Lambert Original +# +# Copyright (c) 1993 Terrence R. Lambert. +# All rights reserved. +# +# 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 Terrence R. Lambert. +# 4. The name Terrence R. Lambert may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY TERRENCE R. LAMBERT ``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 TERRENCE R. LAMBERT 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. + +PROG= modunload +MAN= modunload.8 + +.include <bsd.prog.mk> diff --git a/sbin/modunload/modunload.8 b/sbin/modunload/modunload.8 new file mode 100644 index 00000000000..28cae0c1f98 --- /dev/null +++ b/sbin/modunload/modunload.8 @@ -0,0 +1,76 @@ +.\" $NetBSD: modunload.8,v 1.3 1995/03/18 14:56:49 cgd Exp $ +.\" +.\" Copyright (c) 1993 Christopher G. Demetriou +.\" All rights reserved. +.\" +.\" 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. The name of the author may not be used to endorse or promote products +.\" derived from this software without specific prior written permission +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. +.\" +.Dd June 7, 1993 +.Dt MODUNLOAD 8 +.Os NetBSD 0.8a +.Sh NAME +.Nm modunload +.Nd unload a kernel module +.Sh SYNOPSIS +.Nm modunload +.Op Fl i Ar id +.Op Fl n Ar name +.Sh DESCRIPTION +The +.Nm +utility unloads a loadable kernel module from a running system. +The +.Ar id +or +.Ar name +is the ID or name of the module as shown by +.Xr modstat 8 . +.Pp +One of the following options must be specified: +.Bl -tag -width indent +.It Fl i Ar id +Unload the module with the ID +.Ar id . +.It Fl n Ar name +Unload the module with the name +.Ar name . +.El +.Sh DIAGNOSTICS +The +.Nm +utility exits with a status of 0 on success +and with a nonzero status if an error occurs. +.Sh SEE ALSO +.Xr lkm 4 , +.Xr modunload 8 , +.Xr modstat 8 +.Sh HISTORY +The +.Nm +command was designed to be similar in functionality +to the corresponding command in +.Tn "SunOS 4.1.3" . +.Sh AUTHOR +.Bl -tag +Terrence R. Lambert, terry@cs.weber.edu +.El diff --git a/sbin/modunload/modunload.c b/sbin/modunload/modunload.c new file mode 100644 index 00000000000..087dec8f2f7 --- /dev/null +++ b/sbin/modunload/modunload.c @@ -0,0 +1,127 @@ +/* $NetBSD: modunload.c,v 1.9 1995/05/28 05:23:05 jtc Exp $ */ + +/* + * Copyright (c) 1993 Terrence R. Lambert. + * All rights reserved. + * + * 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 Terrence R. Lambert. + * 4. The name Terrence R. Lambert may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY TERRENCE R. LAMBERT ``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 TERRENCE R. LAMBERT 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. + */ + +#include <sys/param.h> +#include <sys/ioctl.h> +#include <sys/conf.h> +#include <sys/mount.h> +#include <sys/lkm.h> +#include <sys/file.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <err.h> +#include <string.h> +#include <a.out.h> +#include <unistd.h> +#include "pathnames.h" + +void +usage() +{ + + fprintf(stderr, "usage:\n"); + fprintf(stderr, "modunload [-i <module id>] [-n <module name>]\n"); + exit(1); +} + +int devfd; + +void +cleanup() +{ + + close(devfd); +} + +int +main(argc, argv) + int argc; + char *argv[]; +{ + int c; + int modnum = -1; + char *modname = NULL; + struct lmc_unload ulbuf; + + while ((c = getopt(argc, argv, "i:n:")) != EOF) { + switch (c) { + case 'i': + modnum = atoi(optarg); + break; /* number */ + case 'n': + modname = optarg; + break; /* name */ + case '?': + usage(); + default: + printf("default!\n"); + break; + } + } + argc -= optind; + argv += optind; + + if (argc != 0 || (modnum == -1 && modname == NULL)) + usage(); + + + /* + * Open the virtual device device driver for exclusive use (needed + * to ioctl() to retrive the loaded module(s) status). + */ + if ((devfd = open(_PATH_LKM, O_RDWR, 0)) == -1) + err(2, _PATH_LKM); + + atexit(cleanup); + + /* + * Unload the requested module. + */ + ulbuf.name = modname; + ulbuf.id = modnum; + + if (ioctl(devfd, LMUNLOAD, &ulbuf) == -1) { + switch (errno) { + case EINVAL: /* out of range */ + errx(3, "id out of range"); + case ENOENT: /* no such entry */ + errx(3, "no such module"); + default: /* other error (EFAULT, etc) */ + err(5, "LMUNLOAD"); + } + } + + return 0; +} diff --git a/sbin/modunload/pathnames.h b/sbin/modunload/pathnames.h new file mode 100644 index 00000000000..96b86f1343d --- /dev/null +++ b/sbin/modunload/pathnames.h @@ -0,0 +1,5 @@ +/* $NetBSD: pathnames.h,v 1.2 1995/03/18 14:56:51 cgd Exp $ */ + +#include <paths.h> + +#define _PATH_LKM "/dev/lkm" |