FreeBSD Bugzilla – Attachment 207627 Details for
Bug 240689
usr.sbin/ngctl: Generate more compact GraphWiz output
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch for usr.sbin/ngctl/dot.c
file_240689.txt (text/plain), 5.46 KB, created by
Lutz Donnerhacke
on 2019-09-19 15:08:14 UTC
(
hide
)
Description:
Patch for usr.sbin/ngctl/dot.c
Filename:
MIME Type:
Creator:
Lutz Donnerhacke
Created:
2019-09-19 15:08:14 UTC
Size:
5.46 KB
patch
obsolete
>Index: usr.sbin/ngctl/dot.c >=================================================================== >--- usr.sbin/ngctl/dot.c (revision 351934) >+++ usr.sbin/ngctl/dot.c (working copy) >@@ -2,6 +2,7 @@ > /* > * dot.c > * >+ * Copyright (c) 2019 Lutz Donnerhacke > * Copyright (c) 2004 Brian Fundakowski Feldman > * Copyright (c) 1996-1999 Whistle Communications, Inc. > * All rights reserved. >@@ -53,9 +54,11 @@ > > const struct ngcmd dot_cmd = { > DotCmd, >- "dot [outputfile]", >+ "dot [-c] [outputfile]", > "Produce a GraphViz (.dot) of the entire netgraph.", >- "If no outputfile is specified, stdout will be assumed.", >+ "If no outputfile is specified, stdout will be assumed." >+ " The optional -c argument generates a graph without separate" >+ " structures for egde names. Such a graph is more compact.", > { "graphviz", "confdot" } > }; > >@@ -66,12 +69,16 @@ > struct namelist *nlist; > FILE *f = stdout; > int ch; >+ int compact = 0; > u_int i; > > /* Get options */ > optind = 1; >- while ((ch = getopt(ac, av, "")) != -1) { >+ while ((ch = getopt(ac, av, "c")) != -1) { > switch (ch) { >+ case 'c': >+ compact = 1; >+ break; > case '?': > default: > return (CMDRTN_USAGE); >@@ -109,9 +116,14 @@ > } > > nlist = (struct namelist *)nlresp->data; >- fprintf(f, "graph netgraph {\n"); >- /* TODO: implement rank = same or subgraphs at some point */ >- fprintf(f, "\tedge [ weight = 1.0 ];\n"); >+ if(compact) { >+ fprintf(f, "digraph netgraph {\n"); >+ fprintf(f, "\tedge [ dir = \"none\", fontsize = 10 ];\n"); >+ } else { >+ fprintf(f, "graph netgraph {\n"); >+ /* TODO: implement rank = same or subgraphs at some point */ >+ fprintf(f, "\tedge [ weight = 1.0 ];\n"); >+ } > fprintf(f, "\tnode [ shape = record, fontsize = 12 ] {\n"); > for (i = 0; i < nlist->numnames; i++) > fprintf(f, "\t\t\"%jx\" [ label = \"{%s:|{%s|[%jx]:}}\" ];\n", >@@ -159,30 +171,40 @@ > continue; > } > >- fprintf(f, "\tnode [ shape = octagon, fontsize = 10 ] {\n"); >- for (j = 0; j < ninfo->hooks; j++) >- fprintf(f, "\t\t\"%jx.%s\" [ label = \"%s\" ];\n", >- (uintmax_t)nlist->nodeinfo[i].id, >- hlist->link[j].ourhook, hlist->link[j].ourhook); >- fprintf(f, "\t};\n"); >+ if(!compact) { >+ fprintf(f, "\tnode [ shape = octagon, fontsize = 10 ] {\n"); >+ for (j = 0; j < ninfo->hooks; j++) >+ fprintf(f, "\t\t\"%jx.%s\" [ label = \"%s\" ];\n", >+ (uintmax_t)nlist->nodeinfo[i].id, >+ hlist->link[j].ourhook, hlist->link[j].ourhook); >+ fprintf(f, "\t};\n"); >+ >+ fprintf(f, "\t{\n\t\tedge [ weight = 2.0, style = bold ];\n"); >+ for (j = 0; j < ninfo->hooks; j++) >+ fprintf(f, "\t\t\"%jx\" -- \"%jx.%s\";\n", >+ (uintmax_t)nlist->nodeinfo[i].id, >+ (uintmax_t)nlist->nodeinfo[i].id, >+ hlist->link[j].ourhook); >+ fprintf(f, "\t};\n"); >+ } > >- fprintf(f, "\t{\n\t\tedge [ weight = 2.0, style = bold ];\n"); >- for (j = 0; j < ninfo->hooks; j++) >- fprintf(f, "\t\t\"%jx\" -- \"%jx.%s\";\n", >- (uintmax_t)nlist->nodeinfo[i].id, >- (uintmax_t)nlist->nodeinfo[i].id, >- hlist->link[j].ourhook); >- fprintf(f, "\t};\n"); >- > for (j = 0; j < ninfo->hooks; j++) { > /* Only print the edges going in one direction. */ > if (hlist->link[j].nodeinfo.id > nlist->nodeinfo[i].id) > continue; >- fprintf(f, "\t\"%jx.%s\" -- \"%jx.%s\";\n", >- (uintmax_t)nlist->nodeinfo[i].id, >- hlist->link[j].ourhook, >- (uintmax_t)hlist->link[j].nodeinfo.id, >- hlist->link[j].peerhook); >+ if(compact) { >+ fprintf(f, "\t\"%jx\" -> \"%jx\" [ headlabel = \"%s\", taillabel =\"%s\" ] ;\n", >+ (uintmax_t)hlist->link[j].nodeinfo.id, >+ (uintmax_t)nlist->nodeinfo[i].id, >+ hlist->link[j].ourhook, >+ hlist->link[j].peerhook); >+ } else { >+ fprintf(f, "\t\"%jx.%s\" -- \"%jx.%s\";\n", >+ (uintmax_t)nlist->nodeinfo[i].id, >+ hlist->link[j].ourhook, >+ (uintmax_t)hlist->link[j].nodeinfo.id, >+ hlist->link[j].peerhook); >+ } > } > free(hlresp); > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 240689
:
207627