Subject: Re: Replacing the sysctl() interface.
To: Darren Reed <darrenr@reed.wattle.id.au>
From: Simon Burge <simonb@netbsd.org>
List: tech-kern
Date: 06/05/2000 22:47:54
Darren Reed wrote:
> I'm musing over working on replacing the current sysctl with something
> that's much more flexible and supports (at the very least) it being
> dynamic in nature.
Luke and I were musing over this earlier this year but didn't get around
to doing anything serious.
In a nutshell, there were something like sysctl_enter() and
sysctl_remove() in the kernel to add and remove entries into a global
mib-type table where each element had a name that could be used
for lookups. MIB numbers were reserved, with some allocation for
user-defined lkms.
At the user-level, there was sysctl_bymib() (the equivalent of the
current sysctl() call) and sysctl_byname(). There was also another
function like sysctl_next() which would walk down the current mib level.
You could descend levels when you got to a node and did a sysctl_next()
with a NULL current mib.
That's a rough summary, I'll see if I can dig up some of our notes
on it.
> Some of changes I think are worthwhile making:
>
> - do lookups on name, not integer (except for backward compat.)
As above.
> - support min/default/max/modulus(?) parameters for each sysctl entry.
> This would let you enforce 0/1 on "boolean" sysctl entries such as
> ip_forwarding, etc. I'm thinking about modulus so that you can
> enforce things like u-sec timers to be in lots of 1000, etc. For
> string types that are rw, this would be limited to default. Some
> other properties for nodes I'm thinking of are "ownership" (based
> on user/group) and permissions (rwxrwxrwx) so you can setup read
> only, read-write and write only sysctl nodes.
We had basic types, and an "opaque" type where a given function
pointer performed the work. Didn't have owners/modes, but neat
idea.
> - where possible, remove up foo_sysctl() routines which just
> deal with basic types and handle basic types in a more centralised
> fasion.
We dealt with this at some level with basic types, but nothing too
fancy.
> - support run-time additions and removals from entries on the sysctl
> tree.
As above.
> - the base sysctl "tree" would be somewhat bare (kern only?), with
> various subsystem init functions being responsible for populating it.
Same idea here. Maintain the list of init functions could be not
pretty. We need kernel .init sections!
> - given it would be dynamic in nature, providing a compatible interface
> with sysctl as it is now would require walking the entire tree.
sysctl_next() as above.
> - what needs to be done, if anything, to make it into a "MIB" that is
> more suited to SNMP means ?
As I understand SNMP we voilate that concept by having complex types.
Take my recent kern_proc2 sysctl - in a pure SNMP world, wouldn't each
structure element be a separete MIB entry?
> ...any other ideas ?
>
> If I can get some useful feedback (I may have picked a bad time for
> this O:) I'll post back in a week or so about what I'd like to do
> (proposal) for further comment before embarking on making it happen.
> I would engvisage it easily being done before 1.6 :)
I'd like to see this happen, and help make it so!
Simon.