Subject: Re: dynamic sysctl
To: Pavel Cahyna <pcah8322@artax.karlin.mff.cuni.cz>
From: Andrew Brown <atatat@atatdot.net>
List: tech-kern
Date: 11/14/2003 12:48:23
>> sysctlnametomib() will use sysctl() to ask the kernel for the
>> name<->number mapping at a given level (eg kern.* or net.inet.*). i
>
>What does this sysctl() call look like? There is no option of sysctl to
>tell the name<->number mapping currently. Will there also be a way to
>enumerate all subnodes of a given node?
like so:
int name[CTL_MAXNAME], namelen, nchildren;
struct sysctlnode children[128];
size_t sz;
name[0] = CTL_NET;
name[1] = CTL_QUERY;
namelen = 2;
sz = sizeof(children);
sysctl(name, namelen, &children, &sz, NULL, 0);
nchildren = sz / sizeof(children[0]);
and then you have all the mappings for name<->number under net. for
the children of those nodes, you simply iterate.
if the buffer supplied is not large enough, sysctl(3) returns -1,
errno is set to ENOMEM, and sz is adjusted to indicate the size you
need.
--
|-----< "CODE WARRIOR" >-----|
codewarrior@daemon.org * "ah! i see you have the internet
twofsonet@graffiti.com (Andrew Brown) that goes *ping*!"
werdna@squooshy.com * "information is power -- share the wealth."