description of how we made figures for mbone paper.

We explain here how we used our network drawing tool set and supporting utilities to create the figures (both images and 3D data files) for the paper
Visualizing the Global Topology of the MBone, https://graphics.stanford.edu/papers/mbone/.

The NDT (network drawing tools) set include both C and perl utilities. We generally use NDT utilities in pipelines. The tools are still under serious development, but we have received enough requests to release an early alpha version, that we threw one together, hoping that those who download it would add functionality that could be folded back into the library. NDT developers are Eric Hoffman of Ipsilon Networks and Tamara Munzner of Stanford University, under the umbrella of NLANR and CAIDA. http://oceana.nlanr.net/PlanetMulticast has more details.

We made most of the figures for the paper with finely subdivided arcs (arcstep=20) and the high resolution globe (~2MB). We made the VRML files with more coarsely subdivided arcs (arcstep=6), and a lower resolution globe (~150KB).

Tamara Munzner Sat Aug 17 23:50:35 1996 Stanford University

The tunnel2edge utility converts from the machine-readable mrinfo format from the Cambridge MBone mapping site (now defunct, formerly at http://www.cl.cam.ac.uk/mbone/#Mrouted) into the NDP format. This flexible format is simple set of name=value pairs wrapped in quotes, separated by commas, with parentheses enclosing each line. It's a graph-drawing oriented format, where each line corresponds to an edge or node.

Hostresolve then adds latitude and longitude information based on the hostnames in the NDP file, using two input database files: name2place and place2latlong. (We distribute these files as part of the toolkit, but they could use about a ton more entries. We will release new versions periodically, and even hope to have a mechanism for more automatic update of this information. One possibility is to maintain a `lat-long' channel on the Mbone, to which people could multicast lat long information for their particular parts of the infrastructure.

trim_bidirect does many things, one of which is to resolve latlong info directly from the IP address without needing a hostname.

The command line below combines the special data from Fenner (some MCI, all Dartnet) with the Cambridge map file from June, runs the latlong resolver for both hostnames and for IP addresses, and puts the result in a file to be used below.


% cat ../map.special ../map.960615 | tunnel2edge.perl | \
hostresolve.perl | trim_bidirect > filter.res


figure 1


% cat filter.res | edge2gv.perl arcstep=6 \
htmldoc= \  
"http://www-graphics.stanford.edu/papers/mbone/wrl/default.html" \
outstyle=oogl > default.oogl
% cp default.html ~/web/papers/mbone/wrl/default.html
% oogl2vrml < default.oogl | \
wrladdglobe.perl > ~/web/papers/mbone/wrl/default.wrl

We used the htmldoc argument so that that VRML browsers that can't handle relative links can find the associated data file. We then copy the default.html output file to the URL specified in the previous command. Oogl2vrml then lets us convert the OOGL file to VRML, and finally add a line of VRML that points to the globe data file.


figure 2

% grouper.perl "geom=pim" 'info=~pim' "geom=nonnative" \
'info=\!pim' < filter.res | grouper.perl "color=0 0 1" \
'geom=~pim' "color=1 0 0" 'geom=\!pim' | edge2gv.perl \
outstyle=oogl arcstep=6  htmldoc= \
"http://www-graphics.stanford.edu/papers/mbone/wrl/default.html"  \
> pim.oogl
% oogl2vrml < pim.oogl > pim.wrl
% wrladdglobe.perl < pim.wrl > pim2.wrl
Grouper assigns geom tags based on fields in the edge file. This example uses a particularly simple filter: whether or not the info line contains the word pim. Edge2gv looks for this geom tag, and creates separate OOGL objects that we can move around and color independently in Geomview. Here's the lines I used to make the VRML files, where the color is encoded in the geometry using another pass through the grouper.

figure 3

Figure 3 is the exact same geometry as Figure 1, just shot from different camera positions.

figure 4

% cat filter.res | edge2gv.perl arcstep=6  htmldoc= \
"http://www-graphics.stanford.edu/papers/mbone/wrl/default.html" \
outstyle=oogl srcreach=.02 dstreach=.02 > thresh.oogl \
Edge2gv supports an option to specify how much of the arc draw. Long arcs often hide interesting details, so being able to clip them is often useful. The numbers control the radius of a sphere around the endpoint, drawing everything within that sphere. The default value of 1.6 is large enough not to clip any arcs (1.6 + 1.6 > 3.14, which is half the diameter of the earth according to the spherical geodesic measurement we use.)

figure 5

% cat ../map.special ../map.960212 | tunnel2edge.perl \
| hostresolve.perl | ~/ndttools/trim_bidirect > feb.res
The first part of Figure 5 is the only one that uses a different base data set than the others. We use data from February instead of June to demonstrate the utility of geographic visualization. I first make a feb.res in the same way that I made filter.res above. Then i used the following to separate the Feburary file into Sprint and non-Sprint tunnels.
% cat feb.res | grouper.perl "geom=sprint"  \
'srchost=~sprintlink\.net' |  \
'dsthost=~sprintlink\.net' | edge2gv.perl > feb.sprint.gv

Making the VRML file required running through grouper again to get the colors in the file.
% cat feb.res | grouper.perl "geom=sprint" \
'srchost=~sprintlink\.net' 'dsthost=~sprintlink\.net' \
| grouper.perl "color=1 0 0" "geom=~sprint" "color=0 0 1" \
"geom=~arcs" | edge2gv.perl outstyle=oogl arcstep=6 htmldoc= \
"http://www-graphics.stanford.edu/papers/mbone/wrl/feb-texas.html" \
> feb-texas.oogl

% cp default.html \
/n/aperture/usr/local/httpd/htdocs/papers/mbone/wrl/feb-texas.html
% oogl2vrml < feb-texas.oogl > foo.wrl
% wrladdglobe < foo.wrl > \
/n/aperture/usr/local/httpd/htdocs/papers/mbone/wrl/feb-texas.wrl

We made the June VRML file the same way, only using filter.res instead of feb.res. And we just use the same default.html file as most of the other figures.

figure 6

MBone tunnels of the major backbone networks, colored by provider: MCI in red, Sprintlink in cyan, NASA in blue, ESnet in green, Dartnet in magenta, BBNPlanet in yellow, and ANS in white. All other tunnels are drawn in thin black lines. We determined the color assignments manually with geomview, after considerable tweaking to see what would print well on the color printer. (The JPEG in the paper is much brighter than the final hardcopy.) Below is the command to get these colors into the VRML file. We get rid of the black (nonbackbone) tunnels, which are not really the point of this figure. Since we were not including the nonbackbone tunnels, we need to point to our own HTML info file, not just use the same one as most of the others.

% cat filter.res | grouper.perl "geom=mci" \
'srchost=~mci\.net' "geom=mci" 'dsthost=~mci\.net' \
"geom=sprintlink" 'srchost=~sprintlink\.net' \
"geom=sprintlink" 'dst=~sprintlink\.net'  \
"geom=es" 'srchost=~es\.net' "geom=es"  \
'dsthost=~es\.net' "geom=bbnplanet" \
'srchost=~(bbnplanet|sura)\.net' " \
geom=bbnplanet" 'dsthost=~(bbnplanet|sura)\.net'  \
"geom=ans" 'srchost=~ans\.net' "geom=ans" \
'dsthost=~ans\.net' "geom=dart" 'srchost=~dart\.net' 
"geom=dart" 'dsthost=~dart\.net' "geom=nasa"  \
'srchost=~nasa\.gov' "geom=nasa" \ 
'dsthost=~nasa\.gov' "geom=uu" \ 
'srchost=~uu\.net' "geom=uu" \ 
'dsthost=~uu\.net' | edge2gv.perl > fig6.edges

% grep 'geom=' fig6.edges | grouper.perl \ "color=1 1 1" 'geom=~ans' "color=0 0 0" \ 'geom=~arcs' "color=1 1 0" 'geom=~bbnplanet' \ "color=1 0 1" 'geom=~dart' "color=0 1 0" \ 'geom=~es' "color=1 0 0" 'geom=~mci' "color=.15 .2 1" \ 'geom=~nasa' "color=.25 1 1" 'geom=~sprintlink' | edge2gv.perl arcstep=6 outstyle=oogl htmldoc= \ "http://www-graphics.stanford.edu/mbone/papers/wrl/diffnets.html" \ > diffnets.oogl

Conversion/copying details, as mentioned above:
% cp default.html ~/web/papers/mbone/wrl/diffnets.html
% oogl2vrml diffnets.oogl | wrladdglobe.perl |
> ~/web/papers/mbone/wrl/diffnets.wrl \

figure 7

Finally, for the truly venturesome, the command line for figure 7 in the paper. So I admit this is pretty verbose, but the tools did work and are general... We wanted to distinguish three groups:
  1. links that belong to `major mbone backbones' (i.e., as determined by both endpoints of the tunnel belong to ISP)
  2. links with only one tunnel endpoint within an ISP
  3. links with no tunnel endpoint within an ISP
Unfortunately we can not use grouper, since our constraints include more than one field (source and destination) We use linegrouper, which has the same matching syntax for the individual pairs but works across multiple fields. The regular expression below indicates who we deemed `major', obviously a judgement call. The command line also shows a somewhat different regexp than above: we include nysernet and all military sites as backbones, although these were not separately colored above.

% cat ~/ndtools/j.out | linegrouper.perl "geom=bigguy" 'srchost= \
~((es|mci|sprintlink|dren|uu|ans|vbns|dart|bbnplanet|sura|nyser) \
\.net|nasa.gov|\.mil)' \
'dsthost=~((es|mci|sprintlink|dren|uu|ans|vbns|dart|bbnplanet \
| sura|nyser)\.net|nasa.gov|\.mil)'  \
| linegrouper.perl "geom=oneguy" 'srchost= \
~((es|mci|sprintlink|dren|uu|ans|vbns|dart \
|bbnplanet|sura|nyser)\.net|nasa.gov|\.mil)' \
'dsthost= \
!((es|mci|sprintlink|dren|uu|ans|vbns|dart|bbnplanet \
|sura|nyser)\.net|nasa.gov|\.mil)' \
| linegrouper.perl "geom=oneguy" \
'srchost= \
!((es|mci|sprintlink|dren|uu|ans|vbns|dart|bbnplanet \
|sura|nyser)\.net|nasa.gov|\.mil)' \
'dsthost= \
~((nasa|es|mci|sprintlink|dren|uu|ans|vbns|dart|bbnplanet \
|sura|nyser)\.net|nasa.gov|\.mil)' \
| linegrouper.perl "geom=noguy"  \
'srchost= \
!((es|mci|sprintlink|dren|uu|ans|vbns|dart|bbnplanet \
|sura|nyser)\.net|nasa.gov|\.mil)' \
'dsthost= \
!((es|mci|sprintlink|dren|uu|ans|vbns|dart|bbnplanet \
|sura|nyser)\.net|nasa.gov|\.mil)' \ 
> 960615.netany.filter

And of course the copy/convert steps Only the last one has its own html data file:

% cat 960615.netany.filter | grep 'geom=bigguy' | \
grouper.perl \
"color=0 0 0" | edge2gv.perl arcstep=6 outstyle=oogl htmldoc= \
"http://www-graphics.stanford.edu/papers/mbone/wrl/netnet.html" \
> netnet.oogl

% cat 960615.netany.filter | grep 'geom=bigguy' | \
grouper.perl  \
"color=0 0 0" 'geom=~bigguy' | edge2gv.perl arcstep=6 \
outstyle=oogl htmldoc= \
"http://www-graphics.stanford.edu/papers/mbone/wrl/netnet.html" > \
netnet.oogl

% cat 960615.netany.filter | grep 'geom=oneguy' | \
grouper.perl \
"color=0 0 1" 'geom=~oneguy' | edge2gv.perl arcstep=6 outstyle=oogl \
htmldoc= \
"http://www-graphics.stanford.edu/papers/mbone/wrl/netany.html" \
> netany.oogl

% cat 960615.netany.filter | grep 'geom=noguy' | \
grouper.perl \
"color=1 0 0" 'geom=~noguy' | edge2gv.perl arcstep=6 outstyle=oogl  \
htmldoc= \
"http://www-graphics.stanford.edu/papers/mbone/wrl/anyany.html" \
> anyany.oogl

% cat 960615.netany.filter | grouper.perl "color=1 0 0" \
'geom=~noguy' "color=0 0 1" 'geom=~oneguy' "color=0 0 0" \
'geom=~bigguy' | edge2gv.perl arcstep=6 outstyle=oogl htmldoc= \
"http://www-graphics.stanford.edu/papers/mbone/wrl/default.html" \
> allnet.oogl


The beginning of the Planet Multicast video shows the tunnels growing up from the endpoints to meet in the middle. It was made using Geomview's animator module, which is a flipbook for geometry. The little perl script that calls edge2gv many times, with a different threshold value each time:
 perl -e 'for ($n = 0; $n <= 1.6; $n+=.01) \
{ $str = sprintf("edge2gv.perl drawstyle=oogl srcreach=%f \
dstreach=%f < 960615.res > grow.%0.2f.oogl", $n, $n, $n); \
system($str);}'



aug 1996, questions or comments: info@caida.org