Where if not in examples we should follow style(9)?
This commit is contained in:
parent
bf64a6b6b4
commit
195ebc7e9e
@ -42,7 +42,7 @@ static struct sysctl_oid *a_root, *a_root1, *b_root;
|
|||||||
static struct sysctl_ctx_list clist, clist1, clist2;
|
static struct sysctl_ctx_list clist, clist1, clist2;
|
||||||
|
|
||||||
static int
|
static int
|
||||||
sysctl_dyn_sysctl_test (SYSCTL_HANDLER_ARGS)
|
sysctl_dyn_sysctl_test(SYSCTL_HANDLER_ARGS)
|
||||||
{
|
{
|
||||||
char *buf = "let's produce some text...";
|
char *buf = "let's produce some text...";
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ sysctl_dyn_sysctl_test (SYSCTL_HANDLER_ARGS)
|
|||||||
* The function called at load/unload.
|
* The function called at load/unload.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
load (module_t mod, int cmd, void *arg)
|
load(module_t mod, int cmd, void *arg)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
@ -78,37 +78,37 @@ load (module_t mod, int cmd, void *arg)
|
|||||||
SYSCTL_STATIC_CHILDREN(/* top of sysctl tree */),
|
SYSCTL_STATIC_CHILDREN(/* top of sysctl tree */),
|
||||||
OID_AUTO, "dyn_sysctl", CTLFLAG_RW, 0,
|
OID_AUTO, "dyn_sysctl", CTLFLAG_RW, 0,
|
||||||
"dyn_sysctl root node");
|
"dyn_sysctl root node");
|
||||||
if(a_root == NULL) {
|
if (a_root == NULL) {
|
||||||
printf("SYSCTL_ADD_NODE failed!\n");
|
printf("SYSCTL_ADD_NODE failed!\n");
|
||||||
return (EINVAL);
|
return (EINVAL);
|
||||||
}
|
}
|
||||||
SYSCTL_ADD_LONG(&clist, SYSCTL_CHILDREN(a_root),
|
SYSCTL_ADD_LONG(&clist, SYSCTL_CHILDREN(a_root),
|
||||||
OID_AUTO, "long_a", CTLFLAG_RW, &a, "just to try");
|
OID_AUTO, "long_a", CTLFLAG_RW, &a, "just to try");
|
||||||
SYSCTL_ADD_INT(&clist, SYSCTL_CHILDREN(a_root),
|
SYSCTL_ADD_INT(&clist, SYSCTL_CHILDREN(a_root),
|
||||||
OID_AUTO, "int_b", CTLFLAG_RW, &b, 0, "just to try 1");
|
OID_AUTO, "int_b", CTLFLAG_RW, &b, 0, "just to try 1");
|
||||||
a_root1=SYSCTL_ADD_NODE(&clist, SYSCTL_CHILDREN(a_root),
|
a_root1 = SYSCTL_ADD_NODE(&clist, SYSCTL_CHILDREN(a_root),
|
||||||
OID_AUTO, "nextlevel", CTLFLAG_RD, 0, "one level down");
|
OID_AUTO, "nextlevel", CTLFLAG_RD, 0, "one level down");
|
||||||
SYSCTL_ADD_STRING(&clist, SYSCTL_CHILDREN(a_root1),
|
SYSCTL_ADD_STRING(&clist, SYSCTL_CHILDREN(a_root1),
|
||||||
OID_AUTO, "string_c", CTLFLAG_RD, c, 0, "just to try 2");
|
OID_AUTO, "string_c", CTLFLAG_RD, c, 0, "just to try 2");
|
||||||
printf("1. (%p) / dyn_sysctl\n", &clist);
|
printf("1. (%p) / dyn_sysctl\n", &clist);
|
||||||
|
|
||||||
/* Add a subtree under already existing category */
|
/* Add a subtree under already existing category */
|
||||||
a_root1 = SYSCTL_ADD_NODE(&clist, SYSCTL_STATIC_CHILDREN(_kern),
|
a_root1 = SYSCTL_ADD_NODE(&clist, SYSCTL_STATIC_CHILDREN(_kern),
|
||||||
OID_AUTO, "dyn_sysctl", CTLFLAG_RW, 0, "dyn_sysctl root node");
|
OID_AUTO, "dyn_sysctl", CTLFLAG_RW, 0, "dyn_sysctl root node");
|
||||||
if(a_root1 == NULL) {
|
if (a_root1 == NULL) {
|
||||||
printf("SYSCTL_ADD_NODE failed!\n");
|
printf("SYSCTL_ADD_NODE failed!\n");
|
||||||
return (EINVAL);
|
return (EINVAL);
|
||||||
}
|
}
|
||||||
SYSCTL_ADD_PROC(&clist, SYSCTL_CHILDREN(a_root1),
|
SYSCTL_ADD_PROC(&clist, SYSCTL_CHILDREN(a_root1),
|
||||||
OID_AUTO, "procedure", CTLFLAG_RD, 0, 0,
|
OID_AUTO, "procedure", CTLFLAG_RD, 0, 0,
|
||||||
sysctl_dyn_sysctl_test, "A", "I can be here, too");
|
sysctl_dyn_sysctl_test, "A", "I can be here, too");
|
||||||
printf(" (%p) /kern dyn_sysctl\n", &clist);
|
printf(" (%p) /kern dyn_sysctl\n", &clist);
|
||||||
|
|
||||||
/* Overlap second tree with the first. */
|
/* Overlap second tree with the first. */
|
||||||
b_root = SYSCTL_ADD_NODE(&clist1, SYSCTL_CHILDREN(a_root),
|
b_root = SYSCTL_ADD_NODE(&clist1, SYSCTL_CHILDREN(a_root),
|
||||||
OID_AUTO, "nextlevel", CTLFLAG_RD, 0, "one level down");
|
OID_AUTO, "nextlevel", CTLFLAG_RD, 0, "one level down");
|
||||||
SYSCTL_ADD_STRING(&clist1, SYSCTL_CHILDREN(b_root),
|
SYSCTL_ADD_STRING(&clist1, SYSCTL_CHILDREN(b_root),
|
||||||
OID_AUTO, "string_c1", CTLFLAG_RD, c, 0, "just to try 2");
|
OID_AUTO, "string_c1", CTLFLAG_RD, c, 0, "just to try 2");
|
||||||
printf("2. (%p) / dyn_sysctl (overlapping #1)\n", &clist1);
|
printf("2. (%p) / dyn_sysctl (overlapping #1)\n", &clist1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -117,19 +117,19 @@ load (module_t mod, int cmd, void *arg)
|
|||||||
* WARNING: this is an example of WRONG use of dynamic sysctls.
|
* WARNING: this is an example of WRONG use of dynamic sysctls.
|
||||||
*/
|
*/
|
||||||
b_root=SYSCTL_ADD_NODE(&clist2, SYSCTL_CHILDREN(a_root1),
|
b_root=SYSCTL_ADD_NODE(&clist2, SYSCTL_CHILDREN(a_root1),
|
||||||
OID_AUTO, "bad", CTLFLAG_RW, 0, "dependent node");
|
OID_AUTO, "bad", CTLFLAG_RW, 0, "dependent node");
|
||||||
SYSCTL_ADD_STRING(&clist2, SYSCTL_CHILDREN(b_root),
|
SYSCTL_ADD_STRING(&clist2, SYSCTL_CHILDREN(b_root),
|
||||||
OID_AUTO, "string_c", CTLFLAG_RD, c, 0, "shouldn't panic");
|
OID_AUTO, "string_c", CTLFLAG_RD, c, 0, "shouldn't panic");
|
||||||
printf("3. (%p) /kern/dyn_sysctl bad (WRONG!)\n", &clist2);
|
printf("3. (%p) /kern/dyn_sysctl bad (WRONG!)\n", &clist2);
|
||||||
break;
|
break;
|
||||||
case MOD_UNLOAD :
|
case MOD_UNLOAD :
|
||||||
printf("1. Try to free ctx1 (%p): ", &clist);
|
printf("1. Try to free ctx1 (%p): ", &clist);
|
||||||
if(sysctl_ctx_free(&clist))
|
if (sysctl_ctx_free(&clist) != 0)
|
||||||
printf("failed: expected. Need to remove ctx3 first.\n");
|
printf("failed: expected. Need to remove ctx3 first.\n");
|
||||||
else
|
else
|
||||||
printf("HELP! sysctl_ctx_free(%p) succeeded. EXPECT PANIC!!!\n", &clist);
|
printf("HELP! sysctl_ctx_free(%p) succeeded. EXPECT PANIC!!!\n", &clist);
|
||||||
printf("2. Try to free ctx3 (%p): ", &clist2);
|
printf("2. Try to free ctx3 (%p): ", &clist2);
|
||||||
if(sysctl_ctx_free(&clist2)) {
|
if (sysctl_ctx_free(&clist2) != 0) {
|
||||||
printf("sysctl_ctx_free(%p) failed!\n", &clist2);
|
printf("sysctl_ctx_free(%p) failed!\n", &clist2);
|
||||||
/* Remove subtree forcefully... */
|
/* Remove subtree forcefully... */
|
||||||
sysctl_remove_oid(b_root, 1, 1);
|
sysctl_remove_oid(b_root, 1, 1);
|
||||||
@ -137,7 +137,7 @@ load (module_t mod, int cmd, void *arg)
|
|||||||
} else
|
} else
|
||||||
printf("Ok\n");
|
printf("Ok\n");
|
||||||
printf("3. Try to free ctx1 (%p) again: ", &clist);
|
printf("3. Try to free ctx1 (%p) again: ", &clist);
|
||||||
if(sysctl_ctx_free(&clist)) {
|
if (sysctl_ctx_free(&clist) != 0) {
|
||||||
printf("sysctl_ctx_free(%p) failed!\n", &clist);
|
printf("sysctl_ctx_free(%p) failed!\n", &clist);
|
||||||
/* Remove subtree forcefully... */
|
/* Remove subtree forcefully... */
|
||||||
sysctl_remove_oid(a_root1, 1, 1);
|
sysctl_remove_oid(a_root1, 1, 1);
|
||||||
@ -145,7 +145,7 @@ load (module_t mod, int cmd, void *arg)
|
|||||||
} else
|
} else
|
||||||
printf("Ok\n");
|
printf("Ok\n");
|
||||||
printf("4. Try to free ctx2 (%p): ", &clist1);
|
printf("4. Try to free ctx2 (%p): ", &clist1);
|
||||||
if(sysctl_ctx_free(&clist1)) {
|
if (sysctl_ctx_free(&clist1) != 0) {
|
||||||
printf("sysctl_ctx_free(%p) failed!\n", &clist1);
|
printf("sysctl_ctx_free(%p) failed!\n", &clist1);
|
||||||
/* Remove subtree forcefully... */
|
/* Remove subtree forcefully... */
|
||||||
sysctl_remove_oid(a_root, 1, 1);
|
sysctl_remove_oid(a_root, 1, 1);
|
||||||
@ -156,10 +156,10 @@ load (module_t mod, int cmd, void *arg)
|
|||||||
error = EOPNOTSUPP;
|
error = EOPNOTSUPP;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return error;
|
return (error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static moduledata_t mod_data= {
|
static moduledata_t mod_data = {
|
||||||
"dyn_sysctl",
|
"dyn_sysctl",
|
||||||
load,
|
load,
|
||||||
0
|
0
|
||||||
|
@ -26,7 +26,6 @@
|
|||||||
* $FreeBSD$
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/proc.h>
|
#include <sys/proc.h>
|
||||||
#include <sys/module.h>
|
#include <sys/module.h>
|
||||||
@ -38,18 +37,17 @@
|
|||||||
/*
|
/*
|
||||||
* The function for implementing the syscall.
|
* The function for implementing the syscall.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int
|
static int
|
||||||
hello (struct thread *td, void *arg)
|
hello(struct thread *td, void *arg)
|
||||||
{
|
{
|
||||||
printf ("hello kernel\n");
|
|
||||||
return 0;
|
printf("hello kernel\n");
|
||||||
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The `sysent' for the new syscall
|
* The `sysent' for the new syscall
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static struct sysent hello_sysent = {
|
static struct sysent hello_sysent = {
|
||||||
0, /* sy_narg */
|
0, /* sy_narg */
|
||||||
hello /* sy_call */
|
hello /* sy_call */
|
||||||
@ -58,30 +56,28 @@ static struct sysent hello_sysent = {
|
|||||||
/*
|
/*
|
||||||
* The offset in sysent where the syscall is allocated.
|
* The offset in sysent where the syscall is allocated.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int offset = NO_SYSCALL;
|
static int offset = NO_SYSCALL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The function called at load/unload.
|
* The function called at load/unload.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int
|
static int
|
||||||
load (struct module *module, int cmd, void *arg)
|
load(struct module *module, int cmd, void *arg)
|
||||||
{
|
{
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case MOD_LOAD :
|
case MOD_LOAD :
|
||||||
printf ("syscall loaded at %d\n", offset);
|
printf("syscall loaded at %d\n", offset);
|
||||||
break;
|
break;
|
||||||
case MOD_UNLOAD :
|
case MOD_UNLOAD :
|
||||||
printf ("syscall unloaded from %d\n", offset);
|
printf("syscall unloaded from %d\n", offset);
|
||||||
break;
|
break;
|
||||||
default :
|
default :
|
||||||
error = EOPNOTSUPP;
|
error = EOPNOTSUPP;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return error;
|
return (error);
|
||||||
}
|
}
|
||||||
|
|
||||||
SYSCALL_MODULE(syscall, &offset, &hello_sysent, load, NULL);
|
SYSCALL_MODULE(syscall, &offset, &hello_sysent, load, NULL);
|
||||||
|
Loading…
Reference in New Issue
Block a user