From owner-freebsd-stable@FreeBSD.ORG Sat Apr 19 07:36:29 2003 Return-Path: Delivered-To: freebsd-stable@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 8C35137B401 for ; Sat, 19 Apr 2003 07:36:29 -0700 (PDT) Received: from mx1.evo6.net (mx1.evo6.net [80.76.194.10]) by mx1.FreeBSD.org (Postfix) with ESMTP id 3925843FE0 for ; Sat, 19 Apr 2003 07:36:28 -0700 (PDT) (envelope-from andy@evo6.org) Received: from vx (vx.noc.evo6.net [10.0.0.10]) by mx1.evo6.net (8.12.9/8.12.9) with SMTP id h3JEaQQK026205 for ; Sat, 19 Apr 2003 15:36:26 +0100 (BST) (envelope-from andy@evo6.org) Message-ID: <002101c30681$0d9c97e0$0a00000a@vx> From: "Andy Gilligan" To: References: <000801c3067d$b6379340$0a00000a@vx> Date: Sat, 19 Apr 2003 15:36:24 +0100 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_001E_01C30689.6F1DB550" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2800.1106 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 X-Spam-Status: No, hits=-6.6 required=5.0 tests=REFERENCES version=2.53 X-Spam-Checker-Version: SpamAssassin 2.53 (1.174.2.15-2003-03-30-exp) Subject: Re: MFC for sysctl descriptions X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 19 Apr 2003 14:36:29 -0000 This is a multi-part message in MIME format. ------=_NextPart_000_001E_01C30689.6F1DB550 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit A slight mistake on my part. The patch attached to the previous email did not include the updated sysctl.8 manpage (although the link was correct). The updated patch is attached this time :) - Andy ----- Original Message ----- From: "Andy Gilligan" To: Sent: Saturday, April 19, 2003 3:12 PM Subject: MFC for sysctl descriptions > Hello everyone... :) > > I liked the idea of having descriptions for various > sysctl oid's in -CURRENT, so I have created a patch > to merge these over to -STABLE. > > I am unsure as to how much work has already gone into > bringing this to -STABLE, but as the descriptions > already exist in the source, I am fairly confident that > it was planned at some point. > > All I can really ask is that someone with more knowledge > than myself about the sysctl internals have a brief look > at my patch to see if it is viable. > > On my system (4.8-STABLE), everything seems to work, and > there have been no adverse effects from it. > (That I am aware of at least) > > The patch is attached to this email, and is also available > at: http://evo6.org/sysctl-mfc.patch > > I hope someone may find this useful. :) > > Very best regards, > Andy Gilligan ------=_NextPart_000_001E_01C30689.6F1DB550 Content-Type: application/octet-stream; name="sysctl-mfc.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="sysctl-mfc.patch" Index: sbin/sysctl/sysctl.8=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /data/ncvs/src/sbin/sysctl/sysctl.8,v=0A= retrieving revision 1.23.2.15=0A= diff -u -r1.23.2.15 sysctl.8=0A= --- sbin/sysctl/sysctl.8 23 Feb 2003 22:20:40 -0000 1.23.2.15=0A= +++ sbin/sysctl/sysctl.8 19 Apr 2003 14:25:52 -0000=0A= @@ -71,6 +71,8 @@=0A= Force the value of the variable(s) to be output in raw, binary format.=0A= No names are printed and no terminating newlines are output.=0A= This is mostly useful with a single variable.=0A= +.It Fl d=0A= +Print the description of the variable instead of its value.=0A= .It Fl e=0A= Separate the name and the value of the variable(s) with=0A= .Ql =3D .=0A= Index: sbin/sysctl/sysctl.c=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /data/ncvs/src/sbin/sysctl/sysctl.c,v=0A= retrieving revision 1.25.2.10=0A= diff -u -r1.25.2.10 sysctl.c=0A= --- sbin/sysctl/sysctl.c 22 Jan 2003 00:36:23 -0000 1.25.2.10=0A= +++ sbin/sysctl/sysctl.c 19 Apr 2003 13:29:15 -0000=0A= @@ -63,7 +63,7 @@=0A= #include =0A= #include =0A= =0A= -static int aflag, bflag, eflag, Nflag, nflag, oflag, xflag;=0A= +static int aflag, bflag, dflag, eflag, Nflag, nflag, oflag, xflag;=0A= =0A= static int oidfmt(int *, int, char *, u_int *);=0A= static void parse(char *);=0A= @@ -78,8 +78,8 @@=0A= {=0A= =0A= (void)fprintf(stderr, "%s\n%s\n",=0A= - "usage: sysctl [-beNnox] variable[=3Dvalue] ...",=0A= - " sysctl [-beNnox] -a");=0A= + "usage: sysctl [-bdeNnox] variable[=3Dvalue] ...",=0A= + " sysctl [-bdeNnox] -a");=0A= exit(1);=0A= }=0A= =0A= @@ -90,7 +90,7 @@=0A= setbuf(stdout,0);=0A= setbuf(stderr,0);=0A= =0A= - while ((ch =3D getopt(argc, argv, "AabeNnowxX")) !=3D -1) {=0A= + while ((ch =3D getopt(argc, argv, "AabdeNnowxX")) !=3D -1) {=0A= switch (ch) {=0A= case 'A':=0A= /* compatibility */=0A= @@ -102,6 +102,9 @@=0A= case 'b':=0A= bflag =3D 1;=0A= break;=0A= + case 'd':=0A= + dflag =3D 1;=0A= + break;=0A= case 'e':=0A= eflag =3D 1;=0A= break;=0A= @@ -491,6 +494,15 @@=0A= else=0A= sep =3D ": ";=0A= =0A= + if (dflag) { /* just print description */=0A= + qoid[1] =3D 5;=0A= + j =3D sizeof(buf);=0A= + i =3D sysctl(qoid, nlen + 2, buf, &j, 0, 0);=0A= + if (!nflag)=0A= + printf("%s%s", name, sep);=0A= + printf("%s", buf);=0A= + return(0);=0A= + }=0A= /* find an estimate of how much we need for this var */=0A= j =3D 0;=0A= i =3D sysctl(oid, nlen, 0, &j, 0, 0);=0A= Index: sys/kern/kern_sysctl.c=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /data/ncvs/src/sys/kern/kern_sysctl.c,v=0A= retrieving revision 1.92.2.8=0A= diff -u -r1.92.2.8 kern_sysctl.c=0A= --- sys/kern/kern_sysctl.c 9 Sep 2002 19:27:58 -0000 1.92.2.8=0A= +++ sys/kern/kern_sysctl.c 19 Apr 2003 13:52:00 -0000=0A= @@ -303,6 +303,8 @@=0A= }=0A= sysctl_unregister_oid(oidp);=0A= if (del) {=0A= + if (oidp->descr)=0A= + free((void *)(uintptr_t)(const void *)oidp->descr, M_SYSCTLOID);=0A= free((void *)(uintptr_t)(const void *)oidp->oid_name,=0A= M_SYSCTLOID);=0A= free(oidp, M_SYSCTLOID);=0A= @@ -364,6 +366,12 @@=0A= oidp->oid_arg2 =3D arg2;=0A= }=0A= oidp->oid_fmt =3D fmt;=0A= + if (descr) {=0A= + int len =3D strlen(descr) + 1;=0A= + oidp->descr =3D malloc(len, M_SYSCTLOID, M_WAITOK);=0A= + if (oidp->descr)=0A= + strcpy((char *)(uintptr_t)(const void *)oidp->descr, descr);=0A= + };=0A= /* Update the context, if used */=0A= if (clist !=3D NULL)=0A= sysctl_ctx_entry_add(clist, oidp);=0A= @@ -718,6 +726,24 @@=0A= =0A= =0A= SYSCTL_NODE(_sysctl, 4, oidfmt, CTLFLAG_RD, sysctl_sysctl_oidfmt, "");=0A= +=0A= +static int=0A= +sysctl_sysctl_oiddescr(SYSCTL_HANDLER_ARGS)=0A= +{=0A= + struct sysctl_oid *oid;=0A= + int error;=0A= +=0A= + error =3D sysctl_find_oid(arg1, arg2, &oid, NULL, req);=0A= + if (error)=0A= + return (error);=0A= + =0A= + if (!oid->descr)=0A= + return (ENOENT);=0A= + error =3D SYSCTL_OUT(req, oid->descr, strlen(oid->descr) + 1);=0A= + return (error);=0A= +}=0A= +=0A= +SYSCTL_NODE(_sysctl, 5, oiddescr, CTLFLAG_RD, sysctl_sysctl_oiddescr, = "");=0A= =0A= /*=0A= * Default "handler" functions.=0A= Index: sys/sys/sysctl.h=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /data/ncvs/src/sys/sys/sysctl.h,v=0A= retrieving revision 1.81.2.9=0A= diff -u -r1.81.2.9 sysctl.h=0A= --- sys/sys/sysctl.h 9 Sep 2002 19:27:54 -0000 1.81.2.9=0A= +++ sys/sys/sysctl.h 19 Apr 2003 13:24:38 -0000=0A= @@ -133,6 +133,7 @@=0A= int (*oid_handler)(SYSCTL_HANDLER_ARGS);=0A= const char *oid_fmt;=0A= int oid_refcnt;=0A= + const char *descr;=0A= };=0A= =0A= #define SYSCTL_IN(r, p, l) (r->newfunc)(r, p, l)=0A= @@ -174,7 +175,7 @@=0A= #define SYSCTL_OID(parent, nbr, name, kind, a1, a2, handler, fmt, = descr) \=0A= static struct sysctl_oid sysctl__##parent##_##name =3D { \=0A= &sysctl_##parent##_children, { 0 }, \=0A= - nbr, kind, a1, a2, #name, handler, fmt, 0 }; \=0A= + nbr, kind, a1, a2, #name, handler, fmt, 0, descr }; \=0A= DATA_SET(sysctl_set, sysctl__##parent##_##name);=0A= =0A= #define SYSCTL_ADD_OID(ctx, parent, nbr, name, kind, a1, a2, handler, = fmt, descr) \=0A= ------=_NextPart_000_001E_01C30689.6F1DB550--