- if(!do_graph) {
- char node[4096];
- char from[4096];
- char to[4096];
- char subnet[4096];
- char host[4096];
- char port[4096];
- char via[4096];
- char nexthop[4096];
- int cipher, digest, maclength, compression, distance, socket, weight;
- short int pmtu, minmtu, maxmtu;
- unsigned int options, status;
- long int last_state_change;
-
- switch(req) {
- case REQ_DUMP_NODES: {
- int n = sscanf(line, "%*d %*d %s %s port %s %d %d %d %d %x %x %s %s %d %hd %hd %hd %ld", node, host, port, &cipher, &digest, &maclength, &compression, &options, &status, nexthop, via, &distance, &pmtu, &minmtu, &maxmtu, &last_state_change);
- if(n != 16) {
- fprintf(stderr, "Unable to parse node dump from tincd: %s\n", line);
- return 1;
- }
+ char node[4096];
+ char from[4096];
+ char to[4096];
+ char subnet[4096];
+ char host[4096];
+ char port[4096];
+ char via[4096];
+ char nexthop[4096];
+ int cipher, digest, maclength, compression, distance, socket, weight;
+ short int pmtu, minmtu, maxmtu;
+ unsigned int options, status_int;
+ node_status_t status;
+ long int last_state_change;
+
+ switch(req) {
+ case REQ_DUMP_NODES: {
+ int n = sscanf(line, "%*d %*d %s %s port %s %d %d %d %d %x %x %s %s %d %hd %hd %hd %ld", node, host, port, &cipher, &digest, &maclength, &compression, &options, &status_int, nexthop, via, &distance, &pmtu, &minmtu, &maxmtu, &last_state_change);
+ if(n != 16) {
+ fprintf(stderr, "Unable to parse node dump from tincd: %s\n", line);
+ return 1;
+ }
+ if(do_graph) {
+ memcpy(&status, &status_int, sizeof status);
+ const char *color = "black";
+ if(!strcmp(host, "MYSELF"))
+ color = "green";
+ else if(!status.reachable)
+ color = "red";
+ else if(strcmp(via, node))
+ color = "orange";
+ else if(!status.validkey)
+ color = "black";
+ else if(minmtu > 0)
+ color = "green";
+ printf(" %s [label = \"%s\", color = \"%s\"%s];\n", node, node, color, strcmp(host, "MYSELF") ? "" : ", style = \"filled\"");
+ } else {