====== Virtual Network Visualization ======
OpenSolaris supports virtual networks using virtual interfaces connected with virtual switches.
This feature was introduced with [[http://www.opensolaris.org/os/project/crossbow/|Project Crossbow]] in OpenSolaris 2009.06.
To visualize the internal network(s), I created a perl script which takes the output of ''dladm show-link'' and ''dladm show-linkprop -o link,value -p zone'' and generates a dot-File, which then can be rendered using [[http://www.graphviz.org/|Graphviz]].
**Update**: You might also be interested in the [[http://blogs.sun.com/observatory/en_US/entry/crossbow_virtual_wire_demo_tool|Crossbow Virtual Wire Demo Tool]].
===== dladm2dot.pl =====
#! /usr/bin/perl
$STYLE{'etherstub'} = "shape=box";
$STYLE{'phys'} = "color=black";
$STYLE{'vnic'} = "color=blue";
#$STYLE{'unknown'} = "fontcolor=red";
$STYLE{'up'} = "fontcolor=green";
print "digraph vnet {\n";
open INPUT, "dladm show-link|";
# skip first line
;
while (defined($line=)) {
if ($line =~ /^([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)$/) {
$s = $STYLE{$2};
$s .= ",".$STYLE{$4} if defined($STYLE{$4});
print " // $line $1 [$s];\n";
if ($5 ne '--') {
print " $1 -> $5;\n";
}
}
}
close INPUT;
open INPUT, "dladm show-linkprop -o link,value -p zone|";
# skip first line
;
while (defined($line=)) {
if (($line =~ /^([^\s]+)\s+([^\s]+)$/) && ($2 ne '--')) {
print " subgraph \"cluster_$2\" { $1; label = \"$2\"; }\n";
}
}
close INPUT;
print "}\n";
===== Example =====
{{ dladm2dot.png|Example's Result}}
=== Input ===
== dladm show-link ==
LINK CLASS MTU STATE OVER
e1000g0 phys 1500 up --
e1000g1 phys 1500 unknown --
isc_net0 etherstub 9000 unknown --
isc0 vnic 9000 up isc_net0
isc1 vnic 9000 up isc_net0
isc2 vnic 9000 up isc_net0
== dladm show-linkprop -o link,value -p zone ==
LINK VALUE
e1000g0 --
e1000g1 --
isc_net0 --
isc0 --
isc1 isc1
isc2 isc2
=== Output ===
digraph vnet {
// e1000g0 phys 1500 up --
e1000g0 [color=black,fontcolor=green];
// e1000g1 phys 1500 unknown --
e1000g1 [color=black];
// isc_net0 etherstub 9000 unknown --
isc_net0 [shape=box];
// isc0 vnic 9000 up isc_net0
isc0 [color=blue,fontcolor=green];
isc0 -> isc_net0;
// isc1 vnic 9000 up isc_net0
isc1 [color=blue,fontcolor=green];
isc1 -> isc_net0;
// isc2 vnic 9000 up isc_net0
isc2 [color=blue,fontcolor=green];
isc2 -> isc_net0;
subgraph "cluster_isc1" { isc1; label = "isc1"; }
subgraph "cluster_isc2" { isc2; label = "isc2"; }
}
{{tag>solaris opensolaris visualization virtualization network dladm crossbow perl graphviz}}