aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_sysctl.c
diff options
context:
space:
mode:
authorDag-Erling Smørgrav <des@FreeBSD.org>2004-02-27 17:13:23 +0000
committerDag-Erling Smørgrav <des@FreeBSD.org>2004-02-27 17:13:23 +0000
commit21885af505b396ec8136e19022143ea2c9b2dff5 (patch)
treeb34b3f1667fc72cfd515f56ff650e807463b5109 /sys/kern/kern_sysctl.c
parentb7db4d072384a5321803b28742f50bc43c9e6836 (diff)
downloadsrc-21885af505b396ec8136e19022143ea2c9b2dff5.tar.gz
src-21885af505b396ec8136e19022143ea2c9b2dff5.zip
Add sysctl_move_oid() which reparents an existing OID.
Notes
Notes: svn path=/head/; revision=126319
Diffstat (limited to 'sys/kern/kern_sysctl.c')
-rw-r--r--sys/kern/kern_sysctl.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c
index 62f87e769b98..e608b64e7917 100644
--- a/sys/kern/kern_sysctl.c
+++ b/sys/kern/kern_sysctl.c
@@ -416,6 +416,26 @@ sysctl_add_oid(struct sysctl_ctx_list *clist, struct sysctl_oid_list *parent,
}
/*
+ * Reparent an existing oid.
+ */
+int
+sysctl_move_oid(struct sysctl_oid *oid, struct sysctl_oid_list *parent)
+{
+ struct sysctl_oid *oidp;
+
+ if (oid->oid_parent == parent)
+ return (0);
+ oidp = sysctl_find_oidname(oid->oid_name, parent);
+ if (oidp != NULL)
+ return (EEXIST);
+ sysctl_unregister_oid(oid);
+ oid->oid_parent = parent;
+ oid->oid_number = OID_AUTO;
+ sysctl_register_oid(oid);
+ return (0);
+}
+
+/*
* Register the kernel's oids on startup.
*/
SET_DECLARE(sysctl_set, struct sysctl_oid);