14 die "Usage: ./generate_g5k_platform.pl g5k_username g5k_password\n";
17 print "<?xml version='1.0'?>\n";
18 print "<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid.dtd\">\n";
19 print "<platform version=\"$toversion\">\n";
20 print "\t<AS id=\"AS_grid5000\" routing=\"Floyd\" >\n";
22 print "\t\t<AS id=\"AS_interne\" routing=\"Floyd\">\n";
23 printf "\t\t\t<router id=\"lille\"/>\n";
24 printf "\t\t\t<router id=\"paris\"/>\n";
25 printf "\t\t\t<router id=\"nancy\"/>\n";
26 printf "\t\t\t<router id=\"rennes\"/>\n";
27 printf "\t\t\t<router id=\"lyon\"/>\n";
28 printf "\t\t\t<router id=\"bordeaux\"/>\n";
29 printf "\t\t\t<router id=\"grenoble\"/>\n";
30 printf "\t\t\t<router id=\"marseille\"/>\n";
31 printf "\t\t\t<router id=\"toulouse\"/>\n";
32 printf "\t\t\t<router id=\"sophia\"/>\n";
33 #printf "\t\t\t<router id=\"luxembourg\">\n";
35 printf "\t\t\t<link id=\"Lille_Paris\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
36 printf "\t\t\t<link id=\"Paris_Nancy\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
37 printf "\t\t\t<link id=\"Paris_Rennes\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
38 printf "\t\t\t<link id=\"Paris_Lyon\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
39 printf "\t\t\t<link id=\"Bordeaux_Lyon\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
40 printf "\t\t\t<link id=\"Lyon_Grenoble\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
41 printf "\t\t\t<link id=\"Lyon_Marseille\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
42 printf "\t\t\t<link id=\"Marseille_Sophia\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
43 printf "\t\t\t<link id=\"Marseille_Toulouse\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
44 #printf "\t\t<link id=\"Luxemburg_Nancy\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
47 print "\t\t<route src=\"lille\" dst=\"paris\" ><link_ctn id=\"Lille_Paris\"/></route>\n";
48 print "\t\t<route src=\"paris\" dst=\"nancy\" ><link_ctn id=\"Paris_Nancy\"/></route>\n";
49 print "\t\t<route src=\"paris\" dst=\"rennes\" ><link_ctn id=\"Paris_Rennes\"/></route>\n";
50 print "\t\t<route src=\"paris\" dst=\"lyon\" ><link_ctn id=\"Paris_Lyon\"/></route>\n";
51 print "\t\t<route src=\"bordeaux\" dst=\"lyon\" ><link_ctn id=\"Bordeaux_Lyon\"/></route>\n";
52 print "\t\t<route src=\"lyon\" dst=\"grenoble\" ><link_ctn id=\"Lyon_Grenoble\"/></route>\n";
53 print "\t\t<route src=\"lyon\" dst=\"marseille\" ><link_ctn id=\"Lyon_Marseille\"/></route>\n";
54 print "\t\t<route src=\"marseille\" dst=\"sophia\" ><link_ctn id=\"Marseille_Sophia\"/></route>\n";
55 print "\t\t<route src=\"marseille\" dst=\"toulouse\" ><link_ctn id=\"Marseille_Toulouse\"/></route>\n";
56 #print "\t\t<route src=\"Luxemburg\" dst=\"Nancy\" ><link_ctn id=\"Luxemburg_Nancy\"/></route>\n";
59 `wget https://api.grid5000.fr/2.0/grid5000/sites --http-user="$ARGV[0]" --http-password="$ARGV[1]" --no-check-certificate --quiet`;
60 open SITES_LIGNE, 'sites' or die "Unable to open sites $!\n";
61 while(defined($line=<SITES_LIGNE>))
63 if($line =~ /"uid": "(.*)",/){
65 print "\t\t<AS id=\"AS_$site\" routing=\"RuleBased\" >\n";
67 `wget https://api.grid5000.fr/2.0/grid5000/sites/$site/clusters --http-user="$ARGV[0]" --http-password="$ARGV[1]" --no-check-certificate --quiet`;
68 open CLUSTERS_LIGNE, 'clusters' or die "Unable to open clusters $!\n";
69 while(defined($line=<CLUSTERS_LIGNE>))
71 if($line =~ /"uid": "(.*)",/){
73 &get_switch($site, $cluster);
80 print "\t\t\t<AS id=\"gw_AS_$site\" routing=\"Full\">\n";
81 print "\t\t\t\t<router id=\"gw_$site\"/>\n";
82 print "\t\t\t</AS>\n";
83 print "\t\t\t<link id=\"link_gw_$site\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
86 print "\t\t\t<ASroute src=\"^AS_(.*)\$\" dst=\"^AS_(.*)\$\"\n";
87 print "\t\t\t\tgw_src=\"\$1src-AS_\$1src_router.$site.grid5000.fr\"\n";
88 print "\t\t\t\tgw_dst=\"\$1dst-AS_\$1dst_router.$site.grid5000.fr\"\n";
89 print "\t\t\t\tsymmetrical=\"YES\">\n";
90 print "\t\t\t\t\t<link_ctn id=\"link_\$1src\"/>\n";
91 print "\t\t\t\t\t<link_ctn id=\"link_\$1dst\"/>\n";
92 print "\t\t\t</ASroute>\n\n";
94 print "\t\t\t<ASroute src=\"^AS_(.*)\$\" dst=\"^gw_AS_(.*)\$\"\n";
95 print "\t\t\t\tgw_src=\"\$1src-AS_\$1src_router.$site.grid5000.fr\"\n";
96 print "\t\t\t\tgw_dst=\"gw_\$1dst\"\n";
97 print "\t\t\t\tsymmetrical=\"NO\">\n";
98 print "\t\t\t\t\t<link_ctn id=\"link_\$1src\"/>\n";
99 print "\t\t\t</ASroute>\n\n";
101 print "\t\t\t<ASroute src=\"^gw_AS_(.*)\$\" dst=\"^AS_(.*)\$\"\n";
102 print "\t\t\t\tgw_src=\"gw_\$1src\"\n";
103 print "\t\t\t\tgw_dst=\"\$1dst-AS_\$1dst_router.$site.grid5000.fr\"\n";
104 print "\t\t\t\tsymmetrical=\"NO\">\n";
105 print "\t\t\t\t\t<link_ctn id=\"link_\$1dst\"/>\n";
106 print "\t\t\t</ASroute>\n\n";
110 push @AS_route, $site;
120 $site = pop @AS_route;
121 print "\t\t<ASroute src=\"AS_$site\" dst=\"AS_interne\" gw_src=\"gw_$site\"";
122 if( $site =~ /^orsay$/ )
124 print " gw_dst=\"paris\"";
128 print " gw_dst=\"$site\"";
130 print " symmetrical=\"YES\">\n";
131 print "\t\t\t<link_ctn id=\"link_gw_$site\"/>\n";
132 print "\t\t</ASroute>\n";
136 print "</platform>\n";
147 `wget https://api.grid5000.fr/2.0/grid5000/sites/$site/clusters/$cluster/nodes --http-user="$ARGV[0]" --http-password="$ARGV[1]" --no-check-certificate --quiet`;
148 open NODES_LIGNE, 'nodes' or die "Unable to open nodes $!\n";
149 while(defined($line=<NODES_LIGNE>))
151 if($line =~ /"uid": "(.*)",/)
156 if($line =~ /"total": (.*),/){
159 if($line =~ /"switch": "(.*)",/ && !$switch)
162 push(@host_switch, $1);
164 if( $uid && $switch )
166 push(@switch_list, $switch);
175 my @uniq_array = grep { ++$count{$_} < 2 } @switch_list;
176 @uniq_array = sort (@uniq_array);
177 if(@switch_list && @uniq_array != 1){
179 if(@switch_list != @host){
180 printf "Take care \@host != of \@switch_list\n";
183 print "\t\t\t<AS id=\"AS_$cluster\" routing=\"RuleBased\" >\n";
187 foreach(@uniq_array){
191 foreach(@host_switch){
193 if($host[$i] =~ /$cluster-(.*)/){
202 @num=sort {$a <=> $b} (@num);
212 if($num[$i] == ($num[$i-1]+1) )
218 if(!($radical =~ /^$/))
220 $radical = $radical.";";
222 $radical = $radical.$deb."-".$fin;
228 $radical=$radical.";".$num[$i];
236 if(!($radical =~ /^$/))
238 $radical = $radical.",";
240 $radical = $radical.$deb."-".$fin;
246 $radical=$radical.",".$num[$i];
253 print "\t\t\t\t<cluster id=\"AS_$switch\" prefix=\"$cluster-\" suffix=\".$site.grid5000.fr\"\n";
254 print "\t\t\t\t\tradical=\"$radical\" power=\"";
255 &get_gflops($cluster);
256 print "\" bw=\"1.25E8\" lat=\"1.0E-4\""."\n";
257 print "\t\t\t\t\tbb_bw=\"1.25E9\" bb_lat=\"1.0E-4\"></cluster>\n";
260 print "\n\t\t\t\t<AS id=\"gw_AS_$cluster\" routing=\"Full\">\n";
261 print "\t\t\t\t\t<router id=\"".$cluster."-AS_".$cluster."_router.".$site.".grid5000.fr\"/>\n";
262 print "\t\t\t\t</AS>\n";
264 print "\t\t\t\t<link id=\"switch-$cluster\" bandwidth=\"1250000000\" latency=\"5E-4\"/>\n\n";
266 print "\t\t\t\t<ASroute src=\"^AS_(.*)\$\" dst=\"^AS_(.*)\$\"\n";
267 print "\t\t\t\t gw_src=\"$cluster-AS_\$1src_router.$site.grid5000.fr\"\n";
268 print "\t\t\t\t gw_dst=\"$cluster-AS_\$1dst_router.$site.grid5000.fr\">\n";
269 print "\t\t\t\t\t<link_ctn id=\"switch-$cluster\"/>\n";
270 print "\t\t\t\t</ASroute>\n";
272 print "\t\t\t\t<ASroute src=\"^AS_(.*)\$\" dst=\"^gw_AS_(.*)\$\"\n";
273 print "\t\t\t\t gw_src=\"$cluster-AS_\$1src_router.$site.grid5000.fr\"\n";
274 print "\t\t\t\t gw_dst=\"".$cluster."-AS_".$cluster."_router.".$site.".grid5000.fr\">\n";
275 print "\t\t\t\t\t<link_ctn id=\"switch-$cluster\"/>\n";
276 print "\t\t\t\t</ASroute>\n";
278 print "\t\t\t\t<ASroute src=\"^gw_AS_(.*)\$\" dst=\"^AS_(.*)\$\"\n";
279 print "\t\t\t\t gw_src=\"".$cluster."-AS_".$cluster."_router.".$site.".grid5000.fr\"\n";
280 print "\t\t\t\t gw_dst=\"$cluster-AS_\$1dst_router.$site.grid5000.fr\">\n";
281 print "\t\t\t\t\t<link_ctn id=\"switch-$cluster\"/>\n";
282 print "\t\t\t\t</ASroute>\n";
285 print "\t\t\t</AS>\n";
290 print "\t\t\t<cluster id=\"AS_$cluster\" prefix=\"$cluster-\" suffix=\".$site.grid5000.fr\"\n";
291 print "\t\t\t\tradical=\"1-$total\" power=\"";
292 &get_gflops($cluster);
293 print "\" bw=\"1.25E8\" lat=\"1.0E-4\""."\n";
294 print "\t\t\t\tbb_bw=\"1.25E9\" bb_lat=\"1.0E-4\"></cluster>\n";
296 print "\t\t\t<link id=\"link_$cluster\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n\n";
303 case "bordeplage" { print "5.2297E9" }
304 case "bordereau" { print "8.8925E9" }
305 case "borderline" { print "13.357E9" }
307 case "chicon" { print "8.9618E9" }
308 case "chimint" { print "23.531E9" }
309 case "chinqchint" { print "22.270E9" }
310 case "chirloute" { print "24.473E9" }
312 case "adonis" { print "23.681E9" }
313 case "edel" { print "23.492E9" }
314 case "genepi" { print "21.175E9" }
316 case "capricorne" { print "4.7233E9" }
317 case "sagittaire" { print "5.6693E9" }
319 case "graphene" { print "16.673E9" }
320 case "griffon" { print "20.678E9" }
322 case "gdx" { print "4.7153E9" }
323 case "netgdx" { print "4.7144E9" }
325 case "paradent" { print "21.496E9" }
326 case "paramount" { print "12.910E9" }
327 case "parapide" { print "30.130E9" }
328 case "parapluie" { print "27.391E9" }
330 case "helios" { print "7.7318E9" }
331 case "sol" { print "8.9388E9" }
332 case "suno" { print "23.530E9" }
334 case "pastel" { print "9.5674E9" }
335 case "violette" { print "5.1143E9" }
337 case "stremi" { print "TODO" }
339 case "granduc" { print "TODO" }
341 default: { print "TODO" }