Skip site navigation (1)Skip section navigation (2)
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>