3 # Copyright (c) 2011, 2014. The SimGrid Team.
6 # This program is free software; you can redistribute it and/or modify it
7 # under the terms of the license (GNU LGPL) which comes with this package.
22 die "Usage: ./generate_g5k_platform.pl g5k_username g5k_password\n";
25 print "<?xml version='1.0'?>\n";
26 print "<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid.dtd\">\n";
27 print "<platform version=\"$toversion\">\n";
28 print "\t<AS id=\"AS_grid5000\" routing=\"Floyd\" >\n";
30 print "\t\t<AS id=\"AS_interne\" routing=\"Floyd\">\n";
31 printf "\t\t\t<router id=\"lille\"/>\n";
32 printf "\t\t\t<router id=\"paris\"/>\n";
33 printf "\t\t\t<router id=\"nancy\"/>\n";
34 printf "\t\t\t<router id=\"rennes\"/>\n";
35 printf "\t\t\t<router id=\"lyon\"/>\n";
36 printf "\t\t\t<router id=\"bordeaux\"/>\n";
37 printf "\t\t\t<router id=\"grenoble\"/>\n";
38 printf "\t\t\t<router id=\"marseille\"/>\n";
39 printf "\t\t\t<router id=\"toulouse\"/>\n";
40 printf "\t\t\t<router id=\"sophia\"/>\n";
41 #printf "\t\t\t<router id=\"luxembourg\">\n";
43 printf "\t\t\t<link id=\"Lille_Paris\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
44 printf "\t\t\t<link id=\"Paris_Nancy\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
45 printf "\t\t\t<link id=\"Paris_Rennes\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
46 printf "\t\t\t<link id=\"Paris_Lyon\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
47 printf "\t\t\t<link id=\"Bordeaux_Lyon\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
48 printf "\t\t\t<link id=\"Lyon_Grenoble\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
49 printf "\t\t\t<link id=\"Lyon_Marseille\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
50 printf "\t\t\t<link id=\"Marseille_Sophia\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
51 printf "\t\t\t<link id=\"Marseille_Toulouse\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
52 #printf "\t\t<link id=\"Luxemburg_Nancy\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
55 print "\t\t<route src=\"lille\" dst=\"paris\" ><link_ctn id=\"Lille_Paris\"/></route>\n";
56 print "\t\t<route src=\"paris\" dst=\"nancy\" ><link_ctn id=\"Paris_Nancy\"/></route>\n";
57 print "\t\t<route src=\"paris\" dst=\"rennes\" ><link_ctn id=\"Paris_Rennes\"/></route>\n";
58 print "\t\t<route src=\"paris\" dst=\"lyon\" ><link_ctn id=\"Paris_Lyon\"/></route>\n";
59 print "\t\t<route src=\"bordeaux\" dst=\"lyon\" ><link_ctn id=\"Bordeaux_Lyon\"/></route>\n";
60 print "\t\t<route src=\"lyon\" dst=\"grenoble\" ><link_ctn id=\"Lyon_Grenoble\"/></route>\n";
61 print "\t\t<route src=\"lyon\" dst=\"marseille\" ><link_ctn id=\"Lyon_Marseille\"/></route>\n";
62 print "\t\t<route src=\"marseille\" dst=\"sophia\" ><link_ctn id=\"Marseille_Sophia\"/></route>\n";
63 print "\t\t<route src=\"marseille\" dst=\"toulouse\" ><link_ctn id=\"Marseille_Toulouse\"/></route>\n";
64 #print "\t\t<route src=\"Luxemburg\" dst=\"Nancy\" ><link_ctn id=\"Luxemburg_Nancy\"/></route>\n";
67 `wget https://api.grid5000.fr/2.0/grid5000/sites --http-user="$ARGV[0]" --http-password="$ARGV[1]" --no-check-certificate --quiet`;
68 open SITES_LIGNE, 'sites' or die "Unable to open sites $!\n";
69 while(defined($line=<SITES_LIGNE>))
71 if($line =~ /"uid": "(.*)",/){
73 print "\t\t<AS id=\"AS_$site\" routing=\"RuleBased\" >\n";
75 `wget https://api.grid5000.fr/2.0/grid5000/sites/$site/clusters --http-user="$ARGV[0]" --http-password="$ARGV[1]" --no-check-certificate --quiet`;
76 open CLUSTERS_LIGNE, 'clusters' or die "Unable to open clusters $!\n";
77 while(defined($line=<CLUSTERS_LIGNE>))
79 if($line =~ /"uid": "(.*)",/){
81 &get_switch($site, $cluster);
88 print "\t\t\t<AS id=\"gw_AS_$site\" routing=\"Full\">\n";
89 print "\t\t\t\t<router id=\"gw_$site\"/>\n";
90 print "\t\t\t</AS>\n";
91 print "\t\t\t<link id=\"link_gw_$site\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
94 print "\t\t\t<ASroute src=\"^AS_(.*)\$\" dst=\"^AS_(.*)\$\"\n";
95 print "\t\t\t\tgw_src=\"\$1src-AS_\$1src_router.$site.grid5000.fr\"\n";
96 print "\t\t\t\tgw_dst=\"\$1dst-AS_\$1dst_router.$site.grid5000.fr\"\n";
97 print "\t\t\t\tsymmetrical=\"YES\">\n";
98 print "\t\t\t\t\t<link_ctn id=\"link_\$1src\"/>\n";
99 print "\t\t\t\t\t<link_ctn id=\"link_\$1dst\"/>\n";
100 print "\t\t\t</ASroute>\n\n";
102 print "\t\t\t<ASroute src=\"^AS_(.*)\$\" dst=\"^gw_AS_(.*)\$\"\n";
103 print "\t\t\t\tgw_src=\"\$1src-AS_\$1src_router.$site.grid5000.fr\"\n";
104 print "\t\t\t\tgw_dst=\"gw_\$1dst\"\n";
105 print "\t\t\t\tsymmetrical=\"NO\">\n";
106 print "\t\t\t\t\t<link_ctn id=\"link_\$1src\"/>\n";
107 print "\t\t\t</ASroute>\n\n";
109 print "\t\t\t<ASroute src=\"^gw_AS_(.*)\$\" dst=\"^AS_(.*)\$\"\n";
110 print "\t\t\t\tgw_src=\"gw_\$1src\"\n";
111 print "\t\t\t\tgw_dst=\"\$1dst-AS_\$1dst_router.$site.grid5000.fr\"\n";
112 print "\t\t\t\tsymmetrical=\"NO\">\n";
113 print "\t\t\t\t\t<link_ctn id=\"link_\$1dst\"/>\n";
114 print "\t\t\t</ASroute>\n\n";
118 push @AS_route, $site;
128 $site = pop @AS_route;
129 print "\t\t<ASroute src=\"AS_$site\" dst=\"AS_interne\" gw_src=\"gw_$site\"";
130 if( $site =~ /^orsay$/ )
132 print " gw_dst=\"paris\"";
136 print " gw_dst=\"$site\"";
138 print " symmetrical=\"YES\">\n";
139 print "\t\t\t<link_ctn id=\"link_gw_$site\"/>\n";
140 print "\t\t</ASroute>\n";
144 print "</platform>\n";
155 `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`;
156 open NODES_LIGNE, 'nodes' or die "Unable to open nodes $!\n";
157 while(defined($line=<NODES_LIGNE>))
159 if($line =~ /"uid": "(.*)",/)
164 if($line =~ /"total": (.*),/){
167 if($line =~ /"switch": "(.*)",/ && !$switch)
170 push(@host_switch, $1);
172 if( $uid && $switch )
174 push(@switch_list, $switch);
183 my @uniq_array = grep { ++$count{$_} < 2 } @switch_list;
184 @uniq_array = sort (@uniq_array);
185 if(@switch_list && @uniq_array != 1){
187 if(@switch_list != @host){
188 printf "Take care \@host != of \@switch_list\n";
191 print "\t\t\t<AS id=\"AS_$cluster\" routing=\"RuleBased\" >\n";
195 foreach(@uniq_array){
199 foreach(@host_switch){
201 if($host[$i] =~ /$cluster-(.*)/){
210 @num=sort {$a <=> $b} (@num);
220 if($num[$i] == ($num[$i-1]+1) )
226 if(!($radical =~ /^$/))
228 $radical = $radical.";";
230 $radical = $radical.$deb."-".$fin;
236 $radical=$radical.";".$num[$i];
244 if(!($radical =~ /^$/))
246 $radical = $radical.",";
248 $radical = $radical.$deb."-".$fin;
254 $radical=$radical.",".$num[$i];
261 print "\t\t\t\t<cluster id=\"AS_$switch\" prefix=\"$cluster-\" suffix=\".$site.grid5000.fr\"\n";
262 print "\t\t\t\t\tradical=\"$radical\" power=\"";
263 &get_gflops($cluster);
264 print "\" bw=\"1.25E8\" lat=\"1.0E-4\""."\n";
265 print "\t\t\t\t\tbb_bw=\"1.25E9\" bb_lat=\"1.0E-4\"></cluster>\n";
268 print "\n\t\t\t\t<AS id=\"gw_AS_$cluster\" routing=\"Full\">\n";
269 print "\t\t\t\t\t<router id=\"".$cluster."-AS_".$cluster."_router.".$site.".grid5000.fr\"/>\n";
270 print "\t\t\t\t</AS>\n";
272 print "\t\t\t\t<link id=\"switch-$cluster\" bandwidth=\"1250000000\" latency=\"5E-4\"/>\n\n";
274 print "\t\t\t\t<ASroute src=\"^AS_(.*)\$\" dst=\"^AS_(.*)\$\"\n";
275 print "\t\t\t\t gw_src=\"$cluster-AS_\$1src_router.$site.grid5000.fr\"\n";
276 print "\t\t\t\t gw_dst=\"$cluster-AS_\$1dst_router.$site.grid5000.fr\">\n";
277 print "\t\t\t\t\t<link_ctn id=\"switch-$cluster\"/>\n";
278 print "\t\t\t\t</ASroute>\n";
280 print "\t\t\t\t<ASroute src=\"^AS_(.*)\$\" dst=\"^gw_AS_(.*)\$\"\n";
281 print "\t\t\t\t gw_src=\"$cluster-AS_\$1src_router.$site.grid5000.fr\"\n";
282 print "\t\t\t\t gw_dst=\"".$cluster."-AS_".$cluster."_router.".$site.".grid5000.fr\">\n";
283 print "\t\t\t\t\t<link_ctn id=\"switch-$cluster\"/>\n";
284 print "\t\t\t\t</ASroute>\n";
286 print "\t\t\t\t<ASroute src=\"^gw_AS_(.*)\$\" dst=\"^AS_(.*)\$\"\n";
287 print "\t\t\t\t gw_src=\"".$cluster."-AS_".$cluster."_router.".$site.".grid5000.fr\"\n";
288 print "\t\t\t\t gw_dst=\"$cluster-AS_\$1dst_router.$site.grid5000.fr\">\n";
289 print "\t\t\t\t\t<link_ctn id=\"switch-$cluster\"/>\n";
290 print "\t\t\t\t</ASroute>\n";
293 print "\t\t\t</AS>\n";
298 print "\t\t\t<cluster id=\"AS_$cluster\" prefix=\"$cluster-\" suffix=\".$site.grid5000.fr\"\n";
299 print "\t\t\t\tradical=\"1-$total\" power=\"";
300 &get_gflops($cluster);
301 print "\" bw=\"1.25E8\" lat=\"1.0E-4\""."\n";
302 print "\t\t\t\tbb_bw=\"1.25E9\" bb_lat=\"1.0E-4\"></cluster>\n";
304 print "\t\t\t<link id=\"link_$cluster\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n\n";
311 case "bordeplage" { print "5.2297E9" }
312 case "bordereau" { print "8.8925E9" }
313 case "borderline" { print "13.357E9" }
315 case "chicon" { print "8.9618E9" }
316 case "chimint" { print "23.531E9" }
317 case "chinqchint" { print "22.270E9" }
318 case "chirloute" { print "24.473E9" }
320 case "adonis" { print "23.681E9" }
321 case "edel" { print "23.492E9" }
322 case "genepi" { print "21.175E9" }
324 case "capricorne" { print "4.7233E9" }
325 case "sagittaire" { print "5.6693E9" }
327 case "graphene" { print "16.673E9" }
328 case "griffon" { print "20.678E9" }
330 case "gdx" { print "4.7153E9" }
331 case "netgdx" { print "4.7144E9" }
333 case "paradent" { print "21.496E9" }
334 case "paramount" { print "12.910E9" }
335 case "parapide" { print "30.130E9" }
336 case "parapluie" { print "27.391E9" }
338 case "helios" { print "7.7318E9" }
339 case "sol" { print "8.9388E9" }
340 case "suno" { print "23.530E9" }
342 case "pastel" { print "9.5674E9" }
343 case "violette" { print "5.1143E9" }
345 case "stremi" { print "TODO" }
347 case "granduc" { print "TODO" }
349 default: { print "TODO" }