Module Name:    src
Committed By:   nia
Date:           Sun Apr  4 13:37:17 UTC 2021

Modified Files:
        src/sbin/rndctl: rndctl.c

Log Message:
rndctl(8): to -l, add a "samples" column separate to "bits"

rename the "bits" column to "estimated bits".

this provides a clear indication when a source is being used, but
not increasing the entropy counter.

this commit fixes an unrelated bug where verbose output functioned
incorrectly when a class of device was specified with -t.

while here, reduce code duplication.

"gofer it" riastradh@


To generate a diff of this commit:
cvs rdiff -u -r1.39 -r1.40 src/sbin/rndctl/rndctl.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sbin/rndctl/rndctl.c
diff -u src/sbin/rndctl/rndctl.c:1.39 src/sbin/rndctl/rndctl.c:1.40
--- src/sbin/rndctl/rndctl.c:1.39	Sun Apr  4 12:50:31 2021
+++ src/sbin/rndctl/rndctl.c	Sun Apr  4 13:37:17 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: rndctl.c,v 1.39 2021/04/04 12:50:31 nia Exp $	*/
+/*	$NetBSD: rndctl.c,v 1.40 2021/04/04 13:37:17 nia Exp $	*/
 
 /*-
  * Copyright (c) 1997 Michael Graff.
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: rndctl.c,v 1.39 2021/04/04 12:50:31 nia Exp $");
+__RCSID("$NetBSD: rndctl.c,v 1.40 2021/04/04 13:37:17 nia Exp $");
 #endif
 
 #include <sys/param.h>
@@ -77,6 +77,8 @@ static const char *find_name(u_int32_t);
 static void do_ioctl(rndctl_t *);
 static char * strflags(uint32_t, u_int32_t);
 static void do_list(int, u_int32_t, char *);
+static void do_print_source(rndsource_est_t *);
+static void do_print_source_verbose(rndsource_est_t *);
 static void do_stats(void);
 
 static int iflag;
@@ -466,7 +468,26 @@ strflags(uint32_t totalbits, u_int32_t f
 	return (str);
 }
 
-#define HEADER "Source                 Bits Type      Flags\n"
+#define HEADER "Source       Estimated bits    Samples Type   Flags\n"
+
+static void
+do_print_source(rndsource_est_t *source)
+{
+	printf("%-16s ", source->rt.name);
+	printf("%10" PRIu32 " ", source->rt.total);
+	printf("%10" PRIu32 " ", source->dt_samples + source->dv_samples);
+	printf("%-6s ", find_name(source->rt.type));
+	printf("%s\n", strflags(source->rt.total, source->rt.flags));
+}
+
+static void
+do_print_source_verbose(rndsource_est_t *source)
+{
+	printf("\tDt samples = %d\n", source->dt_samples);
+	printf("\tDt bits = %d\n", source->dt_total);
+	printf("\tDv samples = %d\n", source->dv_samples);
+	printf("\tDv bits = %d\n", source->dv_total);
+}
 
 static void
 do_list(int all, u_int32_t type, char *name)
@@ -482,28 +503,15 @@ do_list(int all, u_int32_t type, char *n
 	if (fd < 0)
 		err(1, "open");
 
-	if (all == 0 && type == 0xff) {
+	if (!all && type == 0xff) {
 		strncpy(rstat_name.name, name, sizeof(rstat_name.name));
 		res = ioctl(fd, RNDGETESTNAME, &rstat_name);
 		if (res < 0)
 			err(1, "ioctl(RNDGETESTNAME)");
 		printf(HEADER);
-		printf("%-16s %10u %-4s %s\n",
-		    rstat_name.source.rt.name,
-		    rstat_name.source.rt.total,
-		    find_name(rstat_name.source.rt.type),
-		    strflags(rstat_name.source.rt.total,
-			rstat_name.source.rt.flags));
-		if (vflag) {
-			printf("\tDt samples = %d\n",
-			       rstat_name.source.dt_samples);
-			printf("\tDt bits = %d\n",
-			       rstat_name.source.dt_total);
-			printf("\tDv samples = %d\n",
-				rstat_name.source.dv_samples);
-			printf("\tDv bits = %d\n",
-			       rstat_name.source.dv_total);
-		}
+		do_print_source(&rstat_name.source);
+		if (vflag)
+			do_print_source_verbose(&rstat_name.source);
 		close(fd);
 		return;
 	}
@@ -525,23 +533,10 @@ do_list(int all, u_int32_t type, char *n
 			break;
 
 		for (i = 0; i < rstat.count; i++) {
-			if (all != 0 ||
-			    type == rstat.source[i].rt.type)
-				printf("%-16s %10u %-4s %s\n",
-				    rstat.source[i].rt.name,
-				    rstat.source[i].rt.total,
-				    find_name(rstat.source[i].rt.type),
-				    strflags(rstat.source[i].rt.total,
-					rstat.source[i].rt.flags));
-			if (vflag) {
-				printf("\tDt samples = %d\n",
-				       rstat.source[i].dt_samples);
-				printf("\tDt bits = %d\n",
-				       rstat.source[i].dt_total);
-				printf("\tDv samples = %d\n",
-				       rstat.source[i].dv_samples);
-				printf("\tDv bits = %d\n",
-				       rstat.source[i].dv_total);
+			if (all || type == rstat.source[i].rt.type) {
+				do_print_source(&rstat.source[i]);
+				if (vflag)
+					do_print_source_verbose(&rstat.source[i]);
 			}
                 }
 		start += rstat.count;

Reply via email to