mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-11-28 09:02:44 +00:00
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 \
|
fsplit fstat ftp gcore gprof head hexdump id indent \
|
||||||
join jot kdump ktrace lam last lastcomm leave locate \
|
join jot kdump ktrace lam last lastcomm leave locate \
|
||||||
lock logger login logname lorder m4 mail make mesg mkdep \
|
lock logger login logname lorder m4 mail make mesg mkdep \
|
||||||
mkfifo mklocale mkstr more msgs mt netstat nfsstat nice nm nohup \
|
mkfifo mklocale mkstr modstat more msgs mt netstat nfsstat nice \
|
||||||
pagesize passwd paste pr printenv printf quota \
|
nm nohup pagesize passwd paste pr printenv printf quota \
|
||||||
ranlib rdist renice rev rlogin rs rsh ruptime rwho \
|
ranlib rdist renice rev rlogin rs rsh ruptime rwho \
|
||||||
script sed shar showmount size soelim split \
|
script sed shar showmount size soelim split \
|
||||||
strings strip su talk tcopy tee telnet tftp time tip \
|
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