Terry Lambert's loadable kernel module support - modstat utility with
improvements from the NetBSD group.
This commit is contained in:
parent
eeabb58ec9
commit
52e40974dd
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=2126
@ -14,8 +14,8 @@ SUBDIR= apply ar banner basename biff cal calendar \
|
||||
fsplit fstat ftp gcore gprof head hexdump id indent \
|
||||
join jot kdump ktrace lam last lastcomm leave locate \
|
||||
lock logger login logname lorder m4 mail make mesg mkdep \
|
||||
mkfifo mklocale mkstr more msgs mt netstat nfsstat nice nm nohup \
|
||||
pagesize passwd paste pr printenv printf quota \
|
||||
mkfifo mklocale mkstr modstat more msgs mt netstat nfsstat nice \
|
||||
nm nohup pagesize passwd paste pr printenv printf quota \
|
||||
ranlib rdist renice rev rlogin rs rsh ruptime rwho \
|
||||
script sed shar showmount size soelim split \
|
||||
strings strip su talk tcopy tee telnet tftp time tip \
|
||||
|
44
usr.bin/modstat/Makefile
Normal file
44
usr.bin/modstat/Makefile
Normal file
@ -0,0 +1,44 @@
|
||||
#
|
||||
# Makefile for modstat
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# $Id: Makefile,v 1.4 1994/02/09 15:02:19 deraadt Exp $
|
||||
#
|
||||
|
||||
PROG= modstat
|
||||
MAN8= modstat.8
|
||||
BINGRP= kmem
|
||||
BINMODE=2555
|
||||
|
||||
.include <bsd.prog.mk>
|
69
usr.bin/modstat/modstat.8
Normal file
69
usr.bin/modstat/modstat.8
Normal file
@ -0,0 +1,69 @@
|
||||
.\" 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.
|
||||
.\"
|
||||
.\" $Id: modstat.8,v 1.2 1994/01/29 01:43:33 jtc Exp $
|
||||
.\"
|
||||
.Dd June 7, 1993
|
||||
.Dt MODSTAT 8
|
||||
.Os NetBSD 0.8a
|
||||
.Sh NAME
|
||||
.Nm modstat
|
||||
.Nd display status of loaded kernel modules
|
||||
.Sh SYNOPSIS
|
||||
.Nm modstat
|
||||
.Op Fl i Ar id
|
||||
.Op Fl n Ar name
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
utility displays the status of any loadable kernel modules
|
||||
present in the kernel.
|
||||
.Pp
|
||||
The options are as follows:
|
||||
.Bl -tag -width indent
|
||||
.It Fl i Ar id
|
||||
Display the status of only the module with this ID.
|
||||
.It Fl n Ar name
|
||||
Display the status of only the module with this 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
|
178
usr.bin/modstat/modstat.c
Normal file
178
usr.bin/modstat/modstat.c
Normal file
@ -0,0 +1,178 @@
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
* $Id: modstat.c,v 1.5 1994/05/23 05:44:08 cgd Exp $
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <err.h>
|
||||
#include <string.h>
|
||||
#include <a.out.h>
|
||||
#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 <sys/errno.h>
|
||||
#include "pathnames.h"
|
||||
|
||||
void
|
||||
usage()
|
||||
{
|
||||
|
||||
fprintf(stderr, "usage:\n");
|
||||
fprintf(stderr, "modstat [-i <module id>] [-n <module name>]\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
static char *type_names[] = {
|
||||
"SYSCALL",
|
||||
"VFS",
|
||||
"DEV",
|
||||
"STRMOD",
|
||||
"EXEC",
|
||||
"MISC"
|
||||
};
|
||||
|
||||
int
|
||||
dostat(devfd, modnum, modname)
|
||||
int devfd;
|
||||
int modnum;
|
||||
char *modname;
|
||||
{
|
||||
struct lmc_stat sbuf;
|
||||
|
||||
if (modname != NULL)
|
||||
strcpy(sbuf.name, modname);
|
||||
|
||||
sbuf.id = modnum;
|
||||
|
||||
if (ioctl(devfd, LMSTAT, &sbuf) == -1) {
|
||||
switch (errno) {
|
||||
case EINVAL: /* out of range */
|
||||
return 2;
|
||||
case ENOENT: /* no such entry */
|
||||
return 1;
|
||||
default: /* other error (EFAULT, etc) */
|
||||
warn("LMSTAT");
|
||||
return 4;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Decode this stat buffer...
|
||||
*/
|
||||
printf("%-7s %3d %3d %08x %04x %8x %3d %s\n",
|
||||
type_names[sbuf.type],
|
||||
sbuf.id, /* module id */
|
||||
sbuf.offset, /* offset into modtype struct */
|
||||
sbuf.area, /* address module loaded at */
|
||||
sbuf.size, /* size in pages(K) */
|
||||
sbuf.private, /* kernel address of private area */
|
||||
sbuf.ver, /* Version; always 1 for now */
|
||||
sbuf.name /* name from private area */
|
||||
);
|
||||
|
||||
/*
|
||||
* Done (success).
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
int devfd;
|
||||
|
||||
void
|
||||
cleanup()
|
||||
{
|
||||
|
||||
close(devfd);
|
||||
}
|
||||
|
||||
int
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
{
|
||||
int c;
|
||||
int modnum = -1;
|
||||
char *modname = NULL;
|
||||
|
||||
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)
|
||||
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_RDONLY, 0)) == -1)
|
||||
err(2, _PATH_LKM);
|
||||
|
||||
atexit(cleanup);
|
||||
|
||||
printf("Type Id Off Loadaddr Size Info Rev Module Name\n");
|
||||
|
||||
/*
|
||||
* Oneshot?
|
||||
*/
|
||||
if (modnum != -1 || modname != NULL) {
|
||||
if (dostat(devfd, modnum, modname))
|
||||
exit(3);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Start at 0 and work up until "EINVAL".
|
||||
*/
|
||||
for (modnum = 0; dostat(devfd, modnum, NULL) < 2; modnum++)
|
||||
;
|
||||
|
||||
exit(0);
|
||||
}
|
3
usr.bin/modstat/pathnames.h
Normal file
3
usr.bin/modstat/pathnames.h
Normal file
@ -0,0 +1,3 @@
|
||||
#include <paths.h>
|
||||
|
||||
#define _PATH_LKM "/dev/lkm"
|
Loading…
Reference in New Issue
Block a user