From 441ac131a24f5fcee50a56d1477b880d92b69ca5 Mon Sep 17 00:00:00 2001
From: acoul <acoul@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Mon, 3 Jan 2011 16:37:07 +0000
Subject: package/wprobe: {enhancement} make printing attributes optional. A
 delay interval (-d option) of 0 (zero) dumps the data once then exit. (closes
 #8107)

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@24892 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 package/wprobe/src/user/wprobe-util.c | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

(limited to 'package')

diff --git a/package/wprobe/src/user/wprobe-util.c b/package/wprobe/src/user/wprobe-util.c
index 6a9868ed0..654442f9c 100644
--- a/package/wprobe/src/user/wprobe-util.c
+++ b/package/wprobe/src/user/wprobe-util.c
@@ -106,7 +106,7 @@ wprobe_dump_data(struct wprobe_iface *dev)
 		list_for_each_entry(attr, &dev->link_attr, list) {
 			if (first) {
 				fprintf(stdout,
-					(simple_mode ? 
+					(simple_mode ?
 					 "[%02x:%02x:%02x:%02x:%02x:%02x]\n%s=%s\n" :
 					 "%02x:%02x:%02x:%02x:%02x:%02x: %s=%s\n"),
 					link->addr[0], link->addr[1], link->addr[2],
@@ -142,22 +142,24 @@ static const char *attr_typestr[] = {
 static int usage(const char *prog)
 {
 	fprintf(stderr,
-#ifndef NO_LOCAL_ACCESS 
+#ifndef NO_LOCAL_ACCESS
 		"Usage: %s <interface>|<host>:<device>|-P [options]\n"
 #else
 		"Usage: %s <host>:<device> [options]\n"
 #endif
 		"\n"
 		"Options:\n"
+		"  -a:            Print attributes\n"
 		"  -c:            Only apply configuration\n"
 		"  -d:            Delay between measurement dumps (in milliseconds, default: 1000)\n"
+		"                 A value of 0 (zero) prints once and exits; useful for scripts\n"
 		"  -f:            Dump contents of layer 2 filter counters during measurement\n"
 		"  -F <file>:     Apply layer 2 filters from <file>\n"
 		"  -h:            This help text\n"
 		"  -i <interval>: Set measurement interval\n"
 		"  -m:            Run measurement loop\n"
 		"  -p:            Set the TCP port for server/client (default: 17990)\n"
-#ifndef NO_LOCAL_ACCESS 
+#ifndef NO_LOCAL_ACCESS
 		"  -P:            Run in proxy mode (listen on network)\n"
 #endif
 		"\n"
@@ -205,13 +207,14 @@ static void show_filter(void *arg, const char *group, struct wprobe_filter_item
 
 static void loop_measurement(struct wprobe_iface *dev, bool print_filters, unsigned long delay)
 {
-	while (1) {
-		usleep(delay * 1000);
+	do {
 		wprobe_update_links(dev);
 		wprobe_dump_data(dev);
 		if (print_filters)
 			wprobe_dump_filters(dev, simple_mode ? show_filter_simple : show_filter, NULL);
+		usleep(delay * 1000);
 	}
+	while (delay);
 }
 
 static void set_filter(struct wprobe_iface *dev, const char *filename)
@@ -342,6 +345,7 @@ int main(int argc, char **argv)
 		CMD_PROXY,
 	} cmd = CMD_NONE;
 	const char *filter = NULL;
+	bool print_attributes = false;
 	bool print_filters = false;
 	unsigned long delay = 1000;
 	int interval = -1;
@@ -350,7 +354,7 @@ int main(int argc, char **argv)
 	if (argc < 2)
 		return usage(prog);
 
-#ifndef NO_LOCAL_ACCESS 
+#ifndef NO_LOCAL_ACCESS
 	if (!strcmp(argv[1], "-P")) {
 		while ((ch = getopt(argc - 1, argv + 1, "p:")) != -1) {
 			switch(ch) {
@@ -373,8 +377,11 @@ int main(int argc, char **argv)
 	argv++;
 	argc--;
 
-	while ((ch = getopt(argc, argv, "cd:fF:hi:msp:")) != -1) {
+	while ((ch = getopt(argc, argv, "acd:fF:hi:msp:")) != -1) {
 		switch(ch) {
+		case 'a':
+			print_attributes = true;
+			break;
 		case 'c':
 			cmd = CMD_CONFIG;
 			break;
@@ -430,8 +437,10 @@ int main(int argc, char **argv)
 		wprobe_apply_config(dev);
 	}
 
-	if (cmd != CMD_CONFIG)
-		show_attributes(dev);
+	if (cmd != CMD_CONFIG) {
+		if (print_attributes)
+			show_attributes(dev);
+	}
 	if (cmd == CMD_MEASURE)
 		loop_measurement(dev, print_filters, delay);
 
-- 
cgit v1.2.3