aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_sysctl.c
diff options
context:
space:
mode:
authorJonathan Lemon <jlemon@FreeBSD.org>2001-05-19 05:45:55 +0000
committerJonathan Lemon <jlemon@FreeBSD.org>2001-05-19 05:45:55 +0000
commit1890520a771cd2a02d14d84e05301feafb6928ad (patch)
tree58f8a1adfa68ff3cd1f13864801a0742b2ed576b /sys/kern/kern_sysctl.c
parentbc0f2245d1761f101fe7102be45cfd48c1c81d6f (diff)
downloadsrc-1890520a771cd2a02d14d84e05301feafb6928ad.tar.gz
src-1890520a771cd2a02d14d84e05301feafb6928ad.zip
Add convenience function kernel_sysctlbyname() for kernel consumers,
so they don't have to roll their own sysctlbyname function.
Notes
Notes: svn path=/head/; revision=76834
Diffstat (limited to 'sys/kern/kern_sysctl.c')
-rw-r--r--sys/kern/kern_sysctl.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c
index 206322c14111..99f2d695c56f 100644
--- a/sys/kern/kern_sysctl.c
+++ b/sys/kern/kern_sysctl.c
@@ -844,7 +844,8 @@ sysctl_new_kernel(struct sysctl_req *req, void *p, size_t l)
}
int
-kernel_sysctl(struct proc *p, int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen, size_t *retval)
+kernel_sysctl(struct proc *p, int *name, u_int namelen, void *old,
+ size_t *oldlenp, void *new, size_t newlen, size_t *retval)
{
int error = 0;
struct sysctl_req req;
@@ -902,6 +903,28 @@ kernel_sysctl(struct proc *p, int *name, u_int namelen, void *old, size_t *oldle
return (error);
}
+int
+kernel_sysctlbyname(struct proc *p, char *name, void *old, size_t *oldlenp,
+ void *new, size_t newlen, size_t *retval)
+{
+ int oid[CTL_MAXNAME];
+ size_t oidlen;
+ int error, plen;
+
+ oid[0] = 0; /* sysctl internal magic */
+ oid[1] = 3; /* name2oid */
+ oidlen = sizeof(oid);
+
+ error = kernel_sysctl(p, oid, 2, oid, &oidlen,
+ (void *)name, strlen(name), &plen);
+ if (error)
+ return (error);
+
+ error = kernel_sysctl(p, oid, plen / sizeof(int), old, oldlenp,
+ new, newlen, retval);
+ return (error);
+}
+
/*
* Transfer function to/from user space.
*/