+++ /dev/null
-#!/usr/bin/perl -w
-use strict;
-
-#################################
-### GRAPH VISUALISATION ###
-#################################
-
-sub graph2viz{
- my($nodes,$edges,$filename) = @_;
-
- open VIZ, "> $filename.dot";
- print VIZ "graph essai { \n";
- print VIZ " graph [overlap=scale]\n";
- #print VIZ " graph [overlap=false spline=true]\n";
- print VIZ " node [shape=box, style=filled]\n";
- print VIZ " node [width=.3, height=.3, style=filled, color=skyblue]\n";
-
- my($u,$e);
- foreach $u (sort (keys %$nodes)){
- print VIZ " \"$u\" [label=\"$u\"";
-# if((defined($$nodes{$u}{max_interf}))&&($$nodes{$u}{max_interf}==1)) {print VIZ ",color=green";}
- if(defined($$nodes{$u}{host}) && ($$nodes{$u}{host}==1)) {print VIZ ",color=red";}
- print VIZ "];\n";
- }
-
- foreach $e (sort (keys %$edges)){
- my($src)=$$edges{$e}{src};
- my($dst)=$$edges{$e}{dst};
-# my($len)=log(10000/$$edges{$e}{bw});
- print VIZ " \"$src\" -- \"$dst\" [";
-# print VIZ "len=$len";
-# print VIZ "label=$e";
- if($#{$$edges{$e}{using_path}}>=0) {
- print VIZ "color=red";
- } else {
- print VIZ "color=gray";
- }
- print VIZ "];\n";
- }
-
- print VIZ "}\n";
- close VIZ;
-
- system("neato -Tps $filename.dot > $filename.ps");
-# system("gv $filename.ps");
- system("pstoedit -f fig $filename.ps $filename.fig 2>/dev/null");
-# system("xfig -startg 0 $filename.fig ");
-}
-
-sub digraph2viz{
- my($nodes,$edges,$filename) = @_;
-
- open VIZ, "> $filename.dot";
- print VIZ "digraph essai { \n";
- print VIZ " graph [overlap=scale]\n";
- #print VIZ " graph [overlap=false spline=true]\n";
- print VIZ " node [shape=box, style=filled]\n";
- print VIZ " node [width=.3, height=.3, style=filled, color=skyblue]\n";
-
- my($u,$e);
- foreach $u (sort (keys %$nodes)){
- print VIZ " $u [label=$u";
- if((defined($$nodes{$u}{host}))&&($$nodes{$u}{host}==1)) {print VIZ ",color=red";}
- print VIZ "];\n";
- }
-
- foreach $e (sort (keys %$edges)){
- my($src)=$$edges{$e}{src};
- my($dst)=$$edges{$e}{dst};
-# my($len)=log(10000/$$edges{$e}{bw});
- print VIZ " $src -> $dst\n";
-# print VIZ "len=$len";
-# print VIZ "label=$e";
- }
-
- print VIZ "}\n";
- close VIZ;
-
- system("dot -Tps $filename.dot > $filename.ps");
-# system("gv $filename.ps");
- system("pstoedit -f fig $filename.ps $filename.fig 2>/dev/null");
- system("xfig -startg 0 $filename.fig ");
-}
-
-sub graph2fig_basic{
- my($nodes,$edges,$filename) = @_;
-
- open VIZ, "> $filename.fig";
-
- print VIZ "#FIG 3.2\n";
- print VIZ "Landscape\n";
- print VIZ "Center\n";
- print VIZ "Metric\n";
- print VIZ "A4\n";
- print VIZ "100.00\n";
- print VIZ "Single\n";
- print VIZ "-2\n";
- print VIZ "1200 2\n";
-
- my($scale)=5;
-
- my($u,$e);
- foreach $u (sort (keys %$nodes)){
- my($x) = $scale * $$nodes{$u}{X};
- my($y) = $scale * $$nodes{$u}{Y};
- print VIZ "4 1 0 50 -1 0 12 0.0000 0 135 270 $x $y $u\\001\n";
- }
-
- foreach $e (sort (keys %$edges)){
- my($src)=$$edges{$e}{src};
- my($dst)=$$edges{$e}{dst};
- my($x1) = $scale * $$nodes{$src}{X};
- my($y1) = $scale * $$nodes{$src}{Y};
- my($x2) = $scale * $$nodes{$dst}{X};
- my($y2) = $scale * $$nodes{$dst}{Y};
- print VIZ "2 1 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 2\n";
- print VIZ "\t $x1 $y1 $x2 $y2\n";
- }
- close VIZ;
-
- system("xfig -startg 0 $filename.fig ");
-}
-
-sub interfgraph2viz{
- my($nodes,$edges,$count_interferences,$value_interferences,$figbase,$filename) = @_;
-
- system("cp $figbase.fig $filename.fig");
- open FIG, ">> $filename.fig";
- my($e);
- foreach $e (@{$$count_interferences{$value_interferences}}){
- my($src)=$$e[0];
- my($dst)=$$e[1];
- my(@tab);
- print STDERR "($src - $dst)\n";
- $src = `grep ' $src\\\\001' $filename.fig`;
- $dst = `grep ' $dst\\\\001' $filename.fig`;
- @tab = split(/\s+/,$src);
- my($x1) = $tab[11];
- my($y1) = $tab[12];
- @tab = split(/\s+/,$dst);
- my($x2) = $tab[11];
- my($y2) = $tab[12];
- print FIG "2 1 0 3 14 7 999 -1 -1 0.000 0 0 -1 0 0 2\n";
- print FIG "\t $x1 $y1 $x2 $y2\n";
-# print VIZ " $src -- $dst [color=green];\n";
- }
- close(FIG);
-# system("xfig -startg 0 $filename.fig ");
- system("fig2dev -L png $filename.fig $filename.png");
- unlink("$filename.fig");
-}
-
-
-sub graph_get_layout{
- my($nodes,$edges,$filename) = @_;
-
- graph2viz($nodes,$edges,$filename);
-
- my($u);
- foreach $u (sort (keys %$nodes)){
- my($val_u) = `grep ' $u\\\\001' $filename.fig`;
- my(@tab) = split(/\s+/,$val_u);
- my($x1) = $tab[11];
- my($y1) = $tab[12];
- $$nodes{$u}{X}=$x1;
- $$nodes{$u}{Y}=$y1;
- }
-}
-
-sub graph2viz_withlayout{
- my($nodes,$edges,$filename) = @_;
-
- open FIG, ">> $filename.fig";
- my($e,$u);
- foreach $u (sort (keys %$nodes)){
- my($x1) = int ($$nodes{$u}{X});
- my($y1) = int ($$nodes{$u}{Y});
- print FIG "1 3 0 1 0 31 50 -1 20 0.000 1 0.0000 $x1 $y1 75 75 $x1 $y1 ".($x1+75)." $y1\n";
- }
- foreach $e (sort (keys %$edges)){
- my($src)=$$edges{$e}{src};
- my($dst)=$$edges{$e}{dst};
- my($x1) = int ($$nodes{$src}{X});
- my($y1) = int ($$nodes{$src}{Y});
- my($x2) = int ($$nodes{$dst}{X});
- my($y2) = int ($$nodes{$dst}{Y});
- print FIG "2 1 0 3 14 7 60 -1 -1 0.000 0 0 -1 0 0 2\n";
- print FIG "\t $x1 $y1 $x2 $y2\n";
- }
- close(FIG);
-# system("xfig -startg 0 $filename.fig ");
-# system("fig2dev -L png $filename.fig $filename.png");
-}
-
-sub print_matrix{
- my($M) = shift;
-
- if(!defined($M)) {return;}
- my($u,$v);
-
- my(@node_list) = sort (keys %$M);
- my($n) = scalar(@node_list);
-
- foreach $u (0..$n-1){
- print "==";
- }
- print "\n";
-
- foreach $u (@node_list){
- if(defined($$M{$u})) {
- foreach $v (@node_list){
- if(defined($$M{$u}{$v})){
- print "$$M{$u}{$v} ";
- } else {
- print " ";
- }
- }
- }
- print "\n";
- }
- foreach $u (0..$n-1){
- print "==";
- }
- print "\n\n";
-}
-
-sub matrix2viz{
- my($M) = shift;
- my($filename) = "foo";
- open VIZ, "> $filename.dot";
-
- print VIZ "# Brite topology translated by Alvin\n";
- print VIZ "graph essai { \n";
- print VIZ " graph [overlap=scale]\n";
-
- #print VIZ " graph [overlap=false spline=true]\n";
- print VIZ " node [shape=box, style=filled]\n";
- print VIZ " node [width=.3, height=.3, style=filled, color=skyblue]\n";
- my(@node_list) = sort (keys %$M);
- my($n) = scalar(@node_list);
-
- my($u,$v);
- foreach $u (@node_list){
- print VIZ " $u [label=$u, color = red];\n";
- }
-
- foreach $u (@node_list){
- foreach $v (@node_list){
- if($$M{$u}{$v}!=0){
- print VIZ " $u -- $v ;\n";
- }
- }
- }
- print VIZ "}\n";
- close VIZ;
-
- system("neato -Tps $filename.dot > $filename.ps");
- system("gv $filename.ps");
-}
-
-
-sub print_object {
- my($M) = @_;
- my($key);
- if(!defined($M)) {
- } elsif (!ref($M)) {
- print "\"$M\"";
- return;
- } elsif (ref($M) eq "SCALAR") {
- print "\"$$M\"";
- return;
- } elsif (ref($M) eq "HASH") {
- print "{";
- foreach $key (sort (keys %{$M})) {
- if($key eq "number_hops") {next;}
- if($key eq "shortest_route") {next;}
- if($key eq "using_path") {next;}
- print "\"$key\" => ";
- print_object($$M{$key});
- print ","
- }
- print "}";
- } elsif (ref($M) eq "ARRAY") {
- print "[";
- foreach $key (0..$#$M) {
- print_object($$M[$key]);
- print ","
- }
- print "]";
- } else {
- }
-}
-
-# sub print_object{
-# my($indent,$M) = @_;
-# my($key);
-# if (!ref($M)) {
-# print "$M";
-# return;
-# } elsif (ref($M) eq "SCALAR") {
-# print "$$M";
-# return;
-# } elsif (ref($M) eq "HASH") {
-# print "\n";
-# foreach $key (sort (keys %{$M})) {
-# print "$indent $key => { ";
-# print_object($indent." ", $$M{$key});
-# print "$indent }\n"
-# }
-# } elsif (ref($M) eq "ARRAY") {
-# print "\n";
-# foreach $key (0..$#$M) {
-# print "$indent $key : [";
-# print_object($indent." ", $$M[$key]);
-# print "$indent ]\n"
-# }
-# } else {
-# }
-# }
-
-1;