Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 16 Sep 2000 01:37:02 +0100
From:      Brian Somers <brian@Awfulhak.org>
To:        Robert Watson <rwatson@FreeBSD.org>
Cc:        freebsd-arch@FreeBSD.org, brian@Awfulhak.org
Subject:   Re: sysctl MIB and kernel internals 
Message-ID:  <200009160037.e8G0b2n00679@hak.lan.Awfulhak.org>
In-Reply-To: Message from Robert Watson <rwatson@FreeBSD.org>  of "Fri, 15 Sep 2000 12:26:56 EDT." <Pine.NEB.3.96L.1000915120346.45037J-100000@fledge.watson.org> 

next in thread | previous in thread | raw e-mail | index | archive | help
> I'd like to see us consider moving to an alternative model, divorcing the
> implementation internals of various kernel objects (processes, et al) from
> the MIB interface retrieving management data about them.  I.e., struct
> proc would continue to be used in kernel, but relevant fields would be
> copied to struct export_proc for export via sysctl.  In addition, it would
> be worth prefixing these exported structures with a version number
> allowing the caller to determine if they support an appropriate version of
> the interface, allowing a more comprehensible error.  Only fields
> desirable to export would be in export_proc, so if an extra pointer is
> added to struct ucred (recent resource control changes, capabilities), an
> extra pointer to struct proc (jail), etc won't needless break userland
> tools.
> 
> This would also have the effect of allowing us to document the MIB, rather
> than just say, ``err. go see the kernel source''.

One other thing worth adding - a length if it's not there:

  struct something_exported {
    int version;
    size_t len;
    field1;
    field2;
    ...
  };

This way, extra user-land fields can be added to the end with len 
increased but version not increased.


FWIW Solaris has taken this one step further with their kstat stuff.  
A driver can add and remove statistics of different types to the kstat 
tree on-the-fly.  The types can be lists of named variables, for example

  module.instance.name.variable = value

that can be read (or written) generically, or ``raw data'' (still having 
a module, instance and name) with a size and repetition count - treated 
as a known structure by the kernel & app.  There are other types, but I 
can't remember what they are....  The nice thing about the structured 
data is that it's easy to add more stuff without breaking user-land.

I don't think it's *that* useful though (not useful enough to suggest 
we add anything to our MIB interface), but worth knowing.

> Just a thought.
> 
>   Robert N M Watson 
> 
> robert@fledge.watson.org              http://www.watson.org/~robert/
> PGP key fingerprint: AF B5 5F FF A6 4A 79 37  ED 5F 55 E9 58 04 6A B1
> TIS Labs at Network Associates, Safeport Network Services

-- 
Brian <brian@Awfulhak.org>                        <brian@[uk.]FreeBSD.org>
      <http://www.Awfulhak.org>;                   <brian@[uk.]OpenBSD.org>
Don't _EVER_ lose your sense of humour !






To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200009160037.e8G0b2n00679>