Module Name: src Committed By: jnemeth Date: Tue Oct 20 04:41:28 UTC 2009
Modified Files: src/lib/libc/sys: Makefile.inc Added Files: src/lib/libc/sys: modctl.2 Log Message: First pass at a manpage for modctl(2) (hi ad!). To generate a diff of this commit: cvs rdiff -u -r1.201 -r1.202 src/lib/libc/sys/Makefile.inc cvs rdiff -u -r0 -r1.1 src/lib/libc/sys/modctl.2 Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libc/sys/Makefile.inc diff -u src/lib/libc/sys/Makefile.inc:1.201 src/lib/libc/sys/Makefile.inc:1.202 --- src/lib/libc/sys/Makefile.inc:1.201 Fri Apr 10 23:14:58 2009 +++ src/lib/libc/sys/Makefile.inc Tue Oct 20 04:41:28 2009 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.inc,v 1.201 2009/04/10 23:14:58 christos Exp $ +# $NetBSD: Makefile.inc,v 1.202 2009/10/20 04:41:28 jnemeth Exp $ # @(#)Makefile.inc 8.3 (Berkeley) 10/24/94 # sys sources @@ -219,7 +219,8 @@ _lwp_getname.2 _lwp_getprivate.2 \ _lwp_park.2 _lwp_unpark.2 _lwp_unpark_all.2 \ mkdir.2 mkfifo.2 mknod.2 \ - madvise.2 mincore.2 minherit.2 mlock.2 mlockall.2 mmap.2 mount.2 \ + madvise.2 mincore.2 minherit.2 mlock.2 mlockall.2 mmap.2 modctl.2 \ + mount.2 \ mprotect.2 mremap.2 msgctl.2 msgget.2 msgrcv.2 msgsnd.2 msync.2 \ munmap.2 nanosleep.2 nfssvc.2 ntp_adjtime.2 open.2 pathconf.2 pipe.2 \ pmc_control.2 poll.2 posix_fadvise.2 profil.2 ptrace.2 quotactl.2 \ Added files: Index: src/lib/libc/sys/modctl.2 diff -u /dev/null src/lib/libc/sys/modctl.2:1.1 --- /dev/null Tue Oct 20 04:41:28 2009 +++ src/lib/libc/sys/modctl.2 Tue Oct 20 04:41:28 2009 @@ -0,0 +1,235 @@ +.\" $NetBSD: modctl.2,v 1.1 2009/10/20 04:41:28 jnemeth Exp $ +.\" +.\" Copyright (c) 2009 The NetBSD Foundation, Inc. +.\" 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. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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. +.\" +.Dd October 19, 2009 +.Dt MODCTL 2 +.Os +.Sh NAME +.Nm modctl +.Nd module control +.Sh LIBRARY +.Lb libc +.Sh SYNOPSIS +.In sys/module.h +.Ft int +.Fn modctl "int operation" "void * argp" +.Sh DESCRIPTION +.Fn modctl +provides for control over modules. +The argument +.Fa operation +is one of +.Dv MODCTL_LOAD , +.Dv MODCTL_UNLOAD , +or +.Dv MODCTL_STAT . +The argument +.Fa argp +depends on the +.Fa operation +to be performed. +.Pp +Operations are: +.Bl -tag -width MODCTL_UNLOAD +.It Dv MODCTL_LOAD +Load a module. +The +.Fa argp +should be: +.Bd -literal +typedef struct modctl_load { + const char *ml_filename; /* the name/path of the module to load */ + +#define MODCTL_NO_PROP 0x2 /* don't load \*[Lt]module\*[Gt].prop */ +#define MODCTL_LOAD_FORCE 0x1 /* ignore kernel version mismatch */ + int ml_flags; + + const char *ml_props; /* externalised dictionary to pass to module */ + size_t ml_propslen; /* length of dictionary */ +} modctl_load_t; +.Ed +.Pp +.Dq ml_props +may be +.Dv NULL +in which case +.Dq ml_propslen +must be +.Dv 0 . +.It Dv MODCTL_UNLOAD +Unload a module. +In this case, the +.Fa argp +should be a +.Dq char * +containing the name of the module to be unloaded. +.It Dv MODCTL_STAT +Return a list of loaded modules. +In this case, the +.Fa argp +should be a +.Dq struct iovec . +The kernel will adjust the +.Dq iov_len +paramater to reflect the space required. +The +.Dq iov_base +will be a pointer to an array of +.Dq modstat_t +truncated to the passed in +.Dq iov_len . +.Dq modstat_t +looks like: +.Bd -literal +typedef struct modstat { + char ms_name[MAXMODNAME]; + char ms_required[MAXMODNAME * MAXMODDEPS]; + uint64_t ms_addr; + modsrc_t ms_source; + modclass_t ms_class; + u_int ms_size; + u_int ms_refcnt; + u_int ms_reserved[4]; +} modstat_t; +.Ed +.Pp +.Dq modsrc_t +looks like: +.Bd -literal +typedef enum modsrc { + MODULE_SOURCE_KERNEL, + MODULE_SOURCE_BOOT, + MODULE_SOURCE_FILESYS +} modsrc_t; +.Ed +.Pp +and +.Dq modclass_t +looks like: +.Bd -literal +typedef enum modclass { + MODULE_CLASS_ANY, + MODULE_CLASS_MISC, + MODULE_CLASS_VFS, + MODULE_CLASS_DRIVER, + MODULE_CLASS_EXEC +} modclass_t; +.Ed +.El +.Sh RETURN VALUES +Upon successful completion, the value returned is 0. +.Pp +Otherwise, a value of \-1 is returned and +.Va errno +is set to indicate the error. +.Sh ERRORS +.Fn modctl +will fail if: +.Bl -tag -width Er +.It Bq Er EBUSY +The argument +.Fa operation +is +.Dv MODCTL_UNLOAD +and the module is in use or the module is compiled into the kernel. +.It Bq Er EDEADLK +The argument +.Fa operation +is +.Dv MODCTL_LOAD +and there is a circular dependency in the module's dependency chain. +.It Bq Er EEXIST +The argument +.Fa operation +is +.Dv MODCTL_LOAD +and the module is already loaded. +.It Bq Er EFAULT +A bad address was given for +.Fa argp . +.It Bq Er EINVAL +The argument +.Fa operation +is invalid. +.Pp +The argument +.Fa operation +is +.Dv MODCTL_LOAD +and ml_props is not +.Dv NULL +and +.Dq ml_propslen +is +.Dv 0 , +or +ml_props is +.Dv NULL +and +.Dq ml_propslen +is not +.Dv 0 . +The kernel is unable to internalize the plist. +Or, there is a problem with the module or \*[Lt]module\*[Gt].prop. +.It Bq Er EMLINK +The argument +.Fa operation +is +.Dv MODCTL_LOAD +and the module has too many dependencies. +.It Bq Er ENAMETOOLONG +A module name/path is too long. +.It Bq Er ENOENT +The argument +.Fa operation +is +.Dv MODCTL_LOAD +and the module or a dependency can't be found. +The argument +.Fa operation +is +.Dv MODCTL_UNLOAD +and no module by the name of +.Fa argp +is loaded. +.It Bq Er ENOEXEC +The argument +.Fa operation +is +.Dv MODCTL_LOAD +and the module is not a valid object for the system. +.It Bq Er ENOMEM +There was not enough memory to perform the +.Fa operation . +.It Bq Er EPERM +Not allowed to perform the +.Fa operation . +.El +.Sh HISTORY +The +.Fn modctl +function call first appeared in +.Nx 5.0 .