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
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.
% 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.wrlGrouper 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.
% 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.)
% cat ../map.special ../map.960212 | tunnel2edge.perl \ | hostresolve.perl | ~/ndttools/trim_bidirect > feb.resThe 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.gvMaking 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
% 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.edgesConversion/copying details, as mentioned above:% 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
% cp default.html ~/web/papers/mbone/wrl/diffnets.html % oogl2vrml diffnets.oogl | wrladdglobe.perl | > ~/web/papers/mbone/wrl/diffnets.wrl \
% 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.filterAnd 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
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);}'