From 362d8a6358019cb97456c8133832f18798cea41f Mon Sep 17 00:00:00 2001
From: Guus Sliepen <guus@tinc-vpn.org>
Date: Sun, 15 May 2011 11:59:13 +0200
Subject: [PATCH] Dump traffic statistics over control sockets.

---
 src/control.c        |  3 +++
 src/control_common.h |  1 +
 src/node.c           | 13 +++++++++++++
 3 files changed, 17 insertions(+)

diff --git a/src/control.c b/src/control.c
index b8e5204b..ade012ac 100644
--- a/src/control.c
+++ b/src/control.c
@@ -113,6 +113,9 @@ bool control_h(connection_t *c, char *request) {
 			return control_return(c, REQ_DISCONNECT, found ? 0 : -2);
 		}
 
+		case REQ_DUMP_TRAFFIC:
+			return dump_traffic(c);
+
 		default:
 			return send_request(c, "%d %d", CONTROL, REQ_INVALID);
 	}
diff --git a/src/control_common.h b/src/control_common.h
index 99cf8aff..56b2bde9 100644
--- a/src/control_common.h
+++ b/src/control_common.h
@@ -37,6 +37,7 @@ enum request_type {
 	REQ_RETRY,
 	REQ_CONNECT,
 	REQ_DISCONNECT,
+	REQ_DUMP_TRAFFIC,
 };
 
 #define TINC_CTL_VERSION_CURRENT 0
diff --git a/src/node.c b/src/node.c
index 9281178b..1f1f94d9 100644
--- a/src/node.c
+++ b/src/node.c
@@ -179,3 +179,16 @@ bool dump_nodes(connection_t *c) {
 
 	return send_request(c, "%d %d", CONTROL, REQ_DUMP_NODES);
 }
+
+bool dump_traffic(connection_t *c) {
+	splay_node_t *node;
+	node_t *n;
+
+	for(node = node_tree->head; node; node = node->next) {
+		n = node->data;
+		send_request(c, "%d %d %s %"PRIu64" %"PRIu64" %"PRIu64" %"PRIu64, CONTROL, REQ_DUMP_TRAFFIC,
+			   n->name, n->in_packets, n->in_bytes, n->out_packets, n->out_bytes);
+	}
+
+	return send_request(c, "%d %d", CONTROL, REQ_DUMP_TRAFFIC);
+}
-- 
2.39.5