Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 25 Jun 2012 17:13:23 -0700
From:      Garrett Cooper <yanegomi@gmail.com>
To:        Arnaud Lacombe <lacombar@gmail.com>
Cc:        FreeBSD Hackers <freebsd-hackers@freebsd.org>, FreeBSD Current <freebsd-current@freebsd.org>, kby@freebsd.org, bp@freebsd.org
Subject:   Re: sysctl filesystem ?
Message-ID:  <CAGH67wS=Hht%2BPrO4_ncZ5vdamigftpLJ-ewARdm47BJ8iox-bw@mail.gmail.com>
In-Reply-To: <CACqU3MXaa0R7fG6Q-EqS3h8PJh__tzNeugBxVyqKHxsCR-wTuQ@mail.gmail.com>
References:  <CACqU3MXaa0R7fG6Q-EqS3h8PJh__tzNeugBxVyqKHxsCR-wTuQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Jun 25, 2012 at 5:03 PM, Arnaud Lacombe <lacombar@gmail.com> wrote:
> Hi folks,
>
> I find myself in a situation where I need to directly explore the
> sysctl(8) tree from my program. The tricky part is this:
>
> from `src/sbin/sysctl.c':
> /*
> =A0* These functions uses a presently undocumented interface to the kerne=
l
> =A0* to walk the tree and get the type so it can print the value.
> =A0* This interface is under work and consideration, and should probably
> =A0* be killed with a big axe by the first person who can find the time.
> =A0* (be aware though, that the proper interface isn't as obvious as it
> =A0* may seem, there are various conflicting requirements.
> =A0*/
>
> AFAIT, the whole interface used by sysctl(8) to explore the sysctl
> tree (ie. list, name, get description) is undocumented. This comment
> has been there for about, well... 17 years. No matter to say that it
> is highly unlikely anyone is ever gonna design that perfect interface.
> Right now, I am left with no choice but to figure out how that stuff
> work, which I foresee will be a real PITA. No choice ? Well, not so
> much. About 12 years ago a filesystem interface was written for
> sysctl, namely scfs(4). It was authored by Kelly Yancey and (?) Boris
> Popov. Unfortunately, time passed and no code is any longer publicly
> available. URLs are either no longer valid or password-protected.
>
> This interface would just be perfect for my use-case. No need to spend
> time decoding a prehistoric interface, no need to craft custom
> accessors. I would just have to use standard POSIX file interface...
> if the code was available.
>
> I was hoping some of the people on this list would either, have the
> scfs(4) code on their drives/tapes, or have a way to contact the
> original author(s) and thus have a chance to get that code ?
>
> Thanks in advance,
> =A0- Arnaud
>
> ps: I know the code will certainly have to be fixed, but that is still
> the best option I've got so far.

Alternatively, the interface could just be documented (from
sys/kern/kern_sysctl.c):

/*
 * "Staff-functions"
 *
 * These functions implement a presently undocumented interface
 * used by the sysctl program to walk the tree, and get the type
 * so it can print the value.
 * This interface is under work and consideration, and should probably
 * be killed with a big axe by the first person who can find the time.
 * (be aware though, that the proper interface isn't as obvious as it
 * may seem, there are various conflicting requirements.
 *
 * {0,0}        printf the entire MIB-tree.
 * {0,1,...}    return the name of the "..." OID.
 * {0,2,...}    return the next OID.
 * {0,3}        return the OID of the name in "new"
 * {0,4,...}    return the kind & format info for the "..." OID.
 * {0,5,...}    return the description the "..." OID.
 */

I know 2 closed-source versions that have wholesale stolen/"borrowed"
the code from sysctl(3), and I adapted the sysctl(8) code for my own
uses for the cython derivative I made here [1].

Thanks,
-Garrett

1. http://sourceforge.net/projects/sysctl/



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGH67wS=Hht%2BPrO4_ncZ5vdamigftpLJ-ewARdm47BJ8iox-bw>