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);
}