Date: Sat, 19 Apr 2003 15:36:24 +0100 From: "Andy Gilligan" <andy@evo6.org> To: <stable@freebsd.org> Subject: Re: MFC for sysctl descriptions Message-ID: <002101c30681$0d9c97e0$0a00000a@vx> References: <000801c3067d$b6379340$0a00000a@vx>
next in thread | previous in thread | raw e-mail | index | archive | help
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" <andy@evo6.org> To: <stable@freebsd.org> 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 <string.h>=0A= #include <unistd.h>=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--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?002101c30681$0d9c97e0$0a00000a>