emulate
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:2k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #!/usr/bin/perl
  2. use strict subs, vars;
  3. use FileHandle;
  4. use English;
  5. #my $dir = "/usr/local/sbin";
  6. my $dir = "/root";   # easier to use if files go into /root
  7. my $nodes = 0;
  8. my $addrmap = "addrmap";
  9. my @NODES;
  10. my $user = "root";
  11. sub ReadAddrMap {
  12.     my ($fname) = @ARG;
  13.     open(F,$fname) or die "Can't open address map file '$fname'";
  14.     while (<F>) {
  15. if (/[^#]*(d+)s+([w.]+)s+([0-9a-fA-F.:]+)/) {
  16.     $NODES[$1]->{ip} = $2;
  17.     $NODES[$1]->{mac} = $3;
  18.     print "$1 $2 $3n"
  19.     }
  20.     close F;
  21. }
  22. while ($#ARGV >= 0) {
  23.     if ($ARGV[0] eq '-d') {
  24. $dir = $ARGV[1];
  25. shift; shift;
  26.     } elsif ($ARGV[0] eq '-n') {
  27. $nodes = $ARGV[1];
  28. shift; shift;
  29.     }  elsif ($ARGV[0] eq '-am') {
  30. $addrmap = $ARGV[1];
  31. shift; shift;
  32.     } elsif ($ARGV[0] eq '-u') {
  33. $user = $ARGV[1];
  34. shift; shift;
  35.     } else {
  36. last;
  37.     }
  38. }
  39. if ($#ARGV != 0){
  40.     print "usage: emulate [-d <dir>] [-n nodes] [-am <addr map>] [-u <user>] <scenario>n";
  41.     exit -1;
  42. }
  43. my $scen = $ARGV[0];
  44. my $SCEN = new FileHandle;
  45. open $SCEN,$scen or die "Can't open scenario file $scen";
  46.     
  47. if (0 == $nodes) {
  48.     while (<$SCEN>) {
  49. if (/# nodes: (d+),/) {
  50.     $nodes = $1;
  51.     last;
  52. }
  53.     }
  54. }
  55. if (0 == $nodes) { 
  56.     die "Number of nodes not set and not found in scenario";
  57. }
  58. ReadAddrMap($addrmap);
  59. unlink("tmpdests");
  60. 0 == system("calcdest -i $scen -o tmpdests") or die "calcdest on $scen failed";
  61. my $i;
  62. for ($i = 1; $i <= $nodes ; $i++) {
  63.     unlink("tmpdest$i");
  64.     print "n Making tracefile for node $in";
  65.     0 == system("gentracefiles tmpdests $addrmap $i > tmpdest$i") 
  66. or die "gentracefiles for node $i failed!";
  67.     my $host = $NODES[$i]->{ip};
  68.     if ($host eq "") {die "no ip address for node $i in $addrmap";}
  69.     print ("moving trace for $i to $hostn");
  70.     system("scp tmpdest$i $user@$host:$dir/$scen");
  71. }