Add convenience function kernel_sysctlbyname() for kernel consumers,

so they don't have to roll their own sysctlbyname function.
This commit is contained in:
Jonathan Lemon 2001-05-19 05:45:55 +00:00
parent bc0f2245d1
commit 1890520a77
2 changed files with 27 additions and 1 deletions

@ -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.
*/

@ -582,6 +582,9 @@ void sysctl_unregister_set(struct linker_set *lsp);
int kernel_sysctl(struct proc *p, int *name, u_int namelen, void *old,
size_t *oldlenp, void *new, size_t newlen,
size_t *retval);
int kernel_sysctlbyname(struct proc *p, char *name,
void *old, size_t *oldlenp, void *new, size_t newlen,
size_t *retval);
int userland_sysctl(struct proc *p, int *name, u_int namelen, void *old,
size_t *oldlenp, int inkernel, void *new, size_t newlen,
size_t *retval);