NetBSD-currentでsysctlのエントリを増やす
ハンドル関数を実装する場合の例:
static int sysctl_val1(SYSCTLFN_PROTO); static int sysctl_val1(SYSCTLFN_ARGS) { struct sysctlnode node; int error; static int t = 10; node = *rnode; node.sysctl_data = &t; error = sysctl_lookup(SYSCTLFN_CALL(&node)); if (error || newp == NULL) return (error); if (t < 0 || t > 20) return (EINVAL); return (0); } SYSCTL_SETUP(sysctl_test_setup, "sysctl test setup") { const struct sysctlnode *node = NULL; sysctl_createv(clog, 0, NULL, NULL, CTLFLAG_PERMANENT, CTLTYPE_NODE, "vendor", NULL, NULL, 0, NULL, 0, CTL_VENDOR, CTL_EOL); sysctl_createv(clog, 0, NULL, &node, CTLFLAG_PERMANENT, CTLTYPE_NODE, "test", SYSCTL_DESCR("test"), NULL, 0, NULL, 0, CTL_VENDOR, CTL_CREATE, CTL_EOL); if (node == NULL) return; sysctl_createv(NULL, 0, &node, NULL, CTLFLAG_PERMANENT|CTLFLAG_READWRITE, CTLTYPE_INT, "val1", SYSCTL_DESCR("val1"), sysctl_val1, 0, NULL, 0, CTL_CREATE, CTL_EOL); }