diff options
author | cvs2svn <cvs2svn@FreeBSD.org> | 2000-09-25 21:57:54 +0000 |
---|---|---|
committer | cvs2svn <cvs2svn@FreeBSD.org> | 2000-09-25 21:57:54 +0000 |
commit | 2641b0c407077fa8c3032d87d15ac6a103b0ed1b (patch) | |
tree | 97e7da54e454c6cb23ca18813708e5c453e8de9f /share/examples/kld | |
parent | 57293fdc2cfdd01d9d5e32d0e5243669d7e006e9 (diff) |
Notes
Diffstat (limited to 'share/examples/kld')
-rw-r--r-- | share/examples/kld/dyn_sysctl/Makefile | 18 | ||||
-rw-r--r-- | share/examples/kld/dyn_sysctl/README | 8 | ||||
-rw-r--r-- | share/examples/kld/dyn_sysctl/dyn_sysctl.c | 168 |
3 files changed, 0 insertions, 194 deletions
diff --git a/share/examples/kld/dyn_sysctl/Makefile b/share/examples/kld/dyn_sysctl/Makefile deleted file mode 100644 index 3c63a8a5f6adf..0000000000000 --- a/share/examples/kld/dyn_sysctl/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -# $FreeBSD$ - -SRCS = dyn_sysctl.c -CFLAGS = -I/sys -KMOD = dyn_sysctl -KO = ${KMOD}.ko -KLDMOD = t - -KLDLOAD = /sbin/kldload -KLDUNLOAD = /sbin/kldunload - -load: ${KO} - ${KLDLOAD} -v ./${KO} - -unload: ${KO} - ${KLDUNLOAD} -v -n ${KO} - -.include <bsd.kmod.mk> diff --git a/share/examples/kld/dyn_sysctl/README b/share/examples/kld/dyn_sysctl/README deleted file mode 100644 index 4dfa3c6bdfbdd..0000000000000 --- a/share/examples/kld/dyn_sysctl/README +++ /dev/null @@ -1,8 +0,0 @@ -This example module creates partially overlapping subtrees to demonstrate -reference counting. It also contains example of attaching a subtree to the -wrong place, i.e. to a dynamic oid that could belong to someone else. -The framework should deal with this case gracefully. - -Andrzej Bialecki <abial@freebsd.org> - -$FreeBSD$ diff --git a/share/examples/kld/dyn_sysctl/dyn_sysctl.c b/share/examples/kld/dyn_sysctl/dyn_sysctl.c deleted file mode 100644 index e066b56be3165..0000000000000 --- a/share/examples/kld/dyn_sysctl/dyn_sysctl.c +++ /dev/null @@ -1,168 +0,0 @@ -/*- - * Copyright (c) 2000 Andrzej Bialecki <abial@freebsd.org> - * 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 AUTHOR 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 AUTHOR 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. - * - * $FreeBSD$ - */ - -#include <sys/types.h> -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/module.h> -#include <sys/sysctl.h> -#include <sys/kernel.h> - - -/* Some example data */ -static long a = 100; -static int b = 200; -static char *c = "hi there from dyn_sysctl"; -static struct sysctl_oid *a_root, *a_root1, *b_root; -static struct sysctl_ctx_list clist, clist1, clist2; - -static int -sysctl_dyn_sysctl_test (SYSCTL_HANDLER_ARGS) -{ - char *buf = "let's produce some text..."; - - return (sysctl_handle_string(oidp, buf, strlen(buf), req)); -} - -/* - * The function called at load/unload. - */ -static int -load (module_t mod, int cmd, void *arg) -{ - int error; - - error = 0; - switch (cmd) { - case MOD_LOAD : - /* Initialize the contexts */ - printf("Initializing contexts and creating subtrees.\n\n"); - sysctl_ctx_init(&clist); - sysctl_ctx_init(&clist1); - sysctl_ctx_init(&clist2); - /* - * Create two partially overlapping subtrees, belonging - * to different contexts. - */ - printf("TREE ROOT NAME\n"); - a_root = SYSCTL_ADD_NODE(&clist, - SYSCTL_STATIC_CHILDREN(/* top of sysctl tree */), - OID_AUTO, dyn_sysctl, CTLFLAG_RW, 0, - "dyn_sysctl root node"); - a_root = SYSCTL_ADD_NODE(&clist1, - SYSCTL_STATIC_CHILDREN(/* top of sysctl tree */), - OID_AUTO, dyn_sysctl, CTLFLAG_RW, 0, - "dyn_sysctl root node"); - if(a_root == NULL) { - printf("SYSCTL_ADD_NODE failed!\n"); - return (EINVAL); - } - SYSCTL_ADD_LONG(&clist, SYSCTL_CHILDREN(a_root), - OID_AUTO, long_a, CTLFLAG_RW, &a, "just to try"); - SYSCTL_ADD_INT(&clist, SYSCTL_CHILDREN(a_root), - OID_AUTO, int_b, CTLFLAG_RW, &b, 0, "just to try 1"); - a_root1=SYSCTL_ADD_NODE(&clist, SYSCTL_CHILDREN(a_root), - OID_AUTO, nextlevel, CTLFLAG_RD, 0, "one level down"); - SYSCTL_ADD_STRING(&clist, SYSCTL_CHILDREN(a_root1), - OID_AUTO, string_c, CTLFLAG_RD, c, 0, "just to try 2"); - printf("1. (%p) / dyn_sysctl\n", &clist); - - /* Add a subtree under already existing category */ - a_root1 = SYSCTL_ADD_NODE(&clist, SYSCTL_STATIC_CHILDREN(_kern), - OID_AUTO, dyn_sysctl, CTLFLAG_RW, 0, "dyn_sysctl root node"); - if(a_root1 == NULL) { - printf("SYSCTL_ADD_NODE failed!\n"); - return (EINVAL); - } - SYSCTL_ADD_PROC(&clist, SYSCTL_CHILDREN(a_root1), - OID_AUTO, procedure, CTLFLAG_RD, 0, 0, - sysctl_dyn_sysctl_test, "A", "I can be here, too"); - printf(" (%p) /kern dyn_sysctl\n", &clist); - - /* Overlap second tree with the first. */ - b_root = SYSCTL_ADD_NODE(&clist1, SYSCTL_CHILDREN(a_root), - OID_AUTO, nextlevel, CTLFLAG_RD, 0, "one level down"); - SYSCTL_ADD_STRING(&clist1, SYSCTL_CHILDREN(b_root), - OID_AUTO, string_c1, CTLFLAG_RD, c, 0, "just to try 2"); - printf("2. (%p) / dyn_sysctl (overlapping #1)\n", &clist1); - - /* - * And now do something stupid. Connect another subtree to - * dynamic oid. - * WARNING: this is an example of WRONG use of dynamic sysctls. - */ - b_root=SYSCTL_ADD_NODE(&clist2, SYSCTL_CHILDREN(a_root1), - OID_AUTO, bad, CTLFLAG_RW, 0, "dependent node"); - SYSCTL_ADD_STRING(&clist2, SYSCTL_CHILDREN(b_root), - OID_AUTO, string_c, CTLFLAG_RD, c, 0, "shouldn't panic"); - printf("3. (%p) /kern/dyn_sysctl bad (WRONG!)\n", &clist2); - break; - case MOD_UNLOAD : - printf("1. Try to free ctx1 (%p): ", &clist); - if(sysctl_ctx_free(&clist)) - printf("failed: expected. Need to remove ctx3 first.\n"); - else - printf("HELP! sysctl_ctx_free(%p) succeeded. EXPECT PANIC!!!\n", &clist); - printf("2. Try to free ctx3 (%p): ", &clist2); - if(sysctl_ctx_free(&clist2)) { - printf("sysctl_ctx_free(%p) failed!\n", &clist2); - /* Remove subtree forcefully... */ - sysctl_remove_oid(b_root, 1, 1); - printf("sysctl_remove_oid(%p) succeeded\n", b_root); - } else - printf("Ok\n"); - printf("3. Try to free ctx1 (%p) again: ", &clist); - if(sysctl_ctx_free(&clist)) { - printf("sysctl_ctx_free(%p) failed!\n", &clist); - /* Remove subtree forcefully... */ - sysctl_remove_oid(a_root1, 1, 1); - printf("sysctl_remove_oid(%p) succeeded\n", a_root1); - } else - printf("Ok\n"); - printf("4. Try to free ctx2 (%p): ", &clist1); - if(sysctl_ctx_free(&clist1)) { - printf("sysctl_ctx_free(%p) failed!\n", &clist1); - /* Remove subtree forcefully... */ - sysctl_remove_oid(a_root, 1, 1); - } else - printf("Ok\n"); - break; - default : - error = EINVAL; - break; - } - return error; -} - -static moduledata_t mod_data= { - "dyn_sysctl", - load, - 0 -}; - -DECLARE_MODULE(dyn_sysctl, mod_data, SI_SUB_EXEC, SI_ORDER_ANY); |