Changeset 4075 in genesis for tools/wleiden.pl


Ignore:
Timestamp:
Mar 16, 2005, 4:00:14 PM (20 years ago)
Author:
rick
Message:

Rewriten wleiden.pl

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/wleiden.pl

    r4056 r4075  
    1 
    21#
    32#
    4 aug 2002, jasper\@WirelessLeiden.NL
     3maart 2004 rick@wirelessleiden.nl
    54#
    6 
    7 
    8 $now=localtime($unow=time());
    9 
    10 $config='/etc/wl/wleiden.conf';
    11 $domain='wLeiden.NET';
    12 
    13 $ifconfig='/sbin/ifconfig';
    14 $iwconfig='/sbin/iwconfig';
    15 $ipchains='/sbin/ipchains';
    16 $indexmaker='/usr/bin/indexmaker';
    17 $sroute='/sbin/route';
    18 $OSPFPWD='huppel';
    19 $separator=';';
    20 $author='feb 2003 jasper@WirelessLeiden.NL';
    21 $wicontrol='/usr/sbin/wicontrol';
    22 
    23 if ($functions_only) {goto functions;}
    24 $source='/etc/wl/wleiden.pl';
    25 
    26 do($config) || die;
    27 parse_config();
    28 
    29 
    30 $hostname=`/bin/hostname |cut -d . -f 1`;chomp($hostname);
    31 $maxmask= pack("CCCC", 255, 255, 255, 255);
    32 
    33 
    34 if (! $ARGV[0]) {die "use start/stop/startall";}
    35 
    36 if ($ARGV[1]=~/debug/i) {$DEBUG=1;}
    37 if ($ARGV[0]=~/start/i)
    38 {
    39 
    40 ######################################################################
    41 do_it();
    42 
    43 open_files();
    44 $nwcfg.="$indexmaker /etc/mrtg/mrtg.cfg> /var/www/html/mrtg/index.html 2> /dev/null\n";
    45 
    46 print_files();close_files();
    47 
    48 system("chmod 755 /etc/wl/nwcfg.sh;/etc/wl/nwcfg.sh");
    49 
    50 if ($DEBUG) {die "DEBUGGING!";}
    51 
    52 if ($DEBUG) {print "\nDEBUG: making mrtg index.\n";}
    53 
    54 changeline("/etc/sysconfig/dhcpd","DHCPDARGS","DHCPDARGS=\"$dhcpints\"");
    55 
    56 #if ($DEBUG) {print "\nDEBUG: reloading firewall.\n";}
    57 #$nwcfg.="/usr/local/sbin/firewall\n";
    58 
    59 if ($DEBUG) {print "\nDEBUG: restarting daemons.\n";}
    60 
    61 if ($ARGV[0]=~/startall/) {$restart='restart';}
    62 else  {$restart='condrestart';}
    63 $nwcfg.="/etc/init.d/dhcpd $restart\n";
    64 $nwcfg.="/etc/init.d/zebra $restart\n";
    65 $nwcfg.="/etc/init.d/ospfd $restart\n";
    66 $nwcfg.="/etc/init.d/httpd $restart\n";
    67 $nwcfg.="/etc/init.d/named $restart\n";
    68 
    69 
    70 ########################################################################
    71 } else  # geen start -> stop
    72 {
    73   $nwcfg.="$ifconfig lo:1 down\n";
    74 
    75   foreach $if (keys %config)
    76   {
    77      $nwcfg.="$ifconfig $if down\n";
     5use IP;
     6#slurp dns info
     7do ("dnsheader.conf") || die ("Cann't open dnsheader.conf");
     8
     9my $debug=0;
     10my $author="feb 2003 jasper\@WirelessLeiden.NL \| maart 2005 rick\@WirelessLeiden.NL";
     11my $wicontrol='/usr/sbin/wicontrol';
     12
     13
     14#variablen
     15my $workingfile = "";
     16my $time=gmtime();
     17my $source=`/bin/hostname -s`;
     18chomp($source);
     19
     20
     21
     22#zoek uit of het master_ip addr voorkomt in de configs
     23#belangrijk van aliassen
     24sub master_ipNotUsed {
     25  if( $debug ) {
     26    print "running master_ipNotUsed...\n";
    7827  }
     28  foreach my $if (keys %config) {
     29    if( $IP{$if} =~ /([0-9\.]+).*/ ) {
     30      if( $1 eq $master_ip ) {
     31        return(0);
     32        break;
     33      };
     34    };
     35  };
     36  return(1);
     37};
     38
     39
     40
     41sub genHeader {
     42  my $comment = $_[0];
     43  my $output =
     44  "$comment This file specific to wireless\n" .
     45  "$comment leiden. Please make all changes in Genesis.\n" .
     46  "$comment\n" .
     47  "$comment Generated by $source\n" .
     48  "$comment on $time\n" .
     49  "$comment\n" .
     50  "$comment  $author\n" .
     51  "$comment\n\n\n";
     52  return ($output);
     53};
     54
     55
     56
     57sub txtconfig {
     58  my $output = `cat $workingfile`;
     59  return($output);
     60};
     61
     62
     63
     64sub dhcpd_conf {
     65  my $output = genHeader("#");
     66  $output .=
     67  "option domain-name \"wLeiden.NET\"\n" .
     68  " \n" .
     69  "default-lease-time 7200;\n" .
     70  "max-lease-time 2592000;\n" .
     71  "\n" .
     72  "ddns-update-style none;\n" .
     73  "\n" .
     74  "# Hack for the WET11\n" .
     75  "#\n" .
     76  "always-broadcast on;\n" .
     77  "\n" .
     78  "option domain-name-servers ${master_ip};\n" .
     79  "\n";
     80
     81  foreach my $interface (sort keys %config) {
     82    if( $interface =~ /^[a-z]+[0-9]+$/i ) {
     83      (my $ip, my $netmask) = split('/', $IP{$interface});
     84      my $subnet = IP::toSubnet($netmask);
     85      my $broadcast = IP::getBroadcastAddr($ip, $subnet);
     86      my $network = IP::getNetworkAddr($ip, $subnet);
     87     
     88      $output .=
     89      "# $interface $DESC{$interface}\n";
     90     
     91      if ( $DHCP{$interface} =~ /[0-9]+\-[0-9]+/i ) {
     92        my $dhcp_part = $ip;
     93        $dhcp_part =~ s/[0-9]+$//;
     94        (my $dhcp_start, my $dhcp_stop) = $DHCP{$interface} =~ /([0-9]+)\-([0-9]+)/i;
     95        $dhcp_start = $dhcp_part . $dhcp_start;
     96        $dhcp_stop = $dhcp_part . $dhcp_stop;
     97        $output .=
     98        "subnet $network netmask $subnet {\n" .
     99        "  range $dhcp_start $dhcp_stop;\n" .
     100        "  option broadcast-address $broadcast;\n" .
     101        "  option subnet-mask $subnet;\n" .
     102        "  option routers $ip;\n" .
     103        "}\n" .
     104        "\n";
     105      }
     106      else {
     107       $output .=
     108       "subnet $network netmask $subnet {not authoritative; }\n" .
     109       "\n";
     110      };
     111    };
     112  };
     113 
     114  return($output);
     115};
     116
     117sub named_conf {
     118  my $output = genHeader("#");
     119  $output .=
     120  "options {\n" .
     121  "  directory \"/var/db/namedb\"\;\n" .
     122  "  forwarders {\n" .
     123  "  172.17.8.68;   // proxy1\n" .
     124  "  172.17.143.4;  // proxy2\n" .
     125  "  172.20.128.98; // proxy3\n" .
     126  "\n" .
     127  "\n" .
     128  "zone \"\.\" {\n" .
     129  "  type hint;\n" .
     130  "  file \"/etc/namedb/named.root\"\;\n" .
     131  "}\;\n" .
     132  "\n" .
     133  "zone \"0\.0\.127\.IN-ADDR.ARPA\" {\n" .
     134  "  type master\;\n" .
     135  "  file \"/etc/namedb/localhost.rev\"\;\n" .
     136  "}\;\n" .
     137  "\n" .
     138  "zone \"1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.INT\" {\n" .
     139  "  type master\;\n" .
     140  "  file \"/etc/namedb/localhost-v6.rev\"\;\n" .
     141  "};\n" .
     142  "\n";
     143
     144
     145  foreach my $tmpZone (sort keys %zone) {
     146    my $dnsZone = $zone{$tmpZone};
     147    $output .=
     148    "zone \"$tmpZone\" {\n" .
     149    "  type slave\;\n" .
     150    "  file \"slave/slave-$tmpZone\"\;\n" .
     151    "  masters {\n";
     152    foreach my $tmpIP (sort @$dnsZone) {
     153      $output .= "    $tmpIP\;\n";
     154    };
     155    $output .=
     156    "  };\n" .
     157    "};\n" .
     158    "\n";
     159  };
     160 
     161  return($output);
     162};
     163
     164
     165
     166sub rc_conf {
     167  my $output = genHeader("#");
     168  my $masterNotUsed = master_ipNotUsed();
     169  print $masterNotUsed;
     170  $output.=
     171  "hostname=\"$nodetype$nodename.wLeiden.NET\"\n" .
     172  "location=\"$location\"\n" .
     173  "\n";
     174
     175  if( $tproxy ) {
     176    if( $tproxy =~ m/\d+\.\d+\.\d+\.\d+\/\d+/ ) {
     177      $output .=
     178      "# Tproxy is ran on this system\n".
     179      "tproxy_enable='YES'\n".
     180      "tproxy_range='$tproxy'\n".
     181      "\n";
     182    }
     183    elsif( $tproxy !~ m/no/i ) {
     184      $output .= "# WARNING - specification propably wrong - check " .
     185      "genesis. It should be a pure CIDR\n";
     186    };
     187  };
     188 
     189  $output .= "ifconfig_lo0_alias0=\"inet 172.31.255.1/32\"\n";
     190  if( $masterNotUsed ) {
     191    $output .= "ifconfig_lo0_alias1=\"inet $master_ip/32\"\n\n";
     192  }
     193  else {
     194    $output .= "#ifconfig_lo0_alias1=\"inet $master_ip/32\"\n\n";
     195  };
     196
     197  foreach my $interface (sort keys %config) {
     198    (my $if, my $number) = split(/:/, $interface);
     199      if( defined $number ) {
     200        $output .= "ifconfig_$if\_alias$number=\"$IP{$interface}\"\n";
     201      }
     202      else {
     203        $output .= "ifconfig_$if=\"$IP{$interface}\"\n";
     204      };
     205  };
     206  return($output);
     207};
     208
     209sub rc_node_local {
     210  my $output = genHeader("#");
     211  foreach my $if (sort keys %config) {
     212    if( ($if =~ /^wi[0-9]$/i) and ($TYPE{$if} =~ /wireless/i) ) {
     213      $output .=
     214      "$wicontrol -i $if -s $SDESC{$if}    # Nickname\n" .
     215      "#$wicontrol -i $if -t 7             # TXrate\n" .
     216      "$wicontrol -i $if -P 0              # PowerSave\n" .
     217      "$wicontrol -i $if -Z                # Zero SNR cache\n";
     218      if( $MODE{$if}=~/master/i ) {
     219        $output .=
     220        "$wicontrol -i $if -p 6            # hostap mode\n" .
     221        "$wicontrol -i $if -c 1            # broadcasting essid on\n" .
     222        "$wicontrol -i $if -n $ESSID{$if}  # network name\n" .
     223        "$wicontrol -i $if -q $ESSID{$if}  # ESSID\n" .
     224        "$wicontrol -i $if -f $CHANNEL{$if}# Channel\n";
     225      }
     226      else {
     227        $output .=
     228        "$wicontrol -i $if -p 1            # Client mode (managed)\n" .
     229        "$wicontrol -i $if -n $ESSID{$if}  # ESSID\n" .
     230        "# No channel - client follows\n" .
     231        "# $wicontrol -i $if -f 0          # Channel\n";
     232      };
     233    $output .= "\n";
     234    };
     235  };
     236  return($output);
     237};
     238
     239
     240
     241sub resolv_conf {
     242  my $output = genHeader"#";
     243
     244  $output .=
     245  "search wleiden.net.\n" .
     246  "nameserver 127.0.0.1\n" .
     247  "\n";
     248
     249  foreach my $if (sort keys %config) {
     250    if( exists $POINT_TO_POINT{$if} ) {
     251      foreach my $ip ($POINT_TO_POINT{$if}) {
     252        $output .= "nameserver $ip # $DESC{$if}\n";
     253      };
     254    };
     255  };
     256  return($output);
     257};
     258
     259
     260
     261sub snmpd_local_conf {
     262  my $output = genHeader("#");
     263  my $masterNotUsed = master_ipNotUsed();
     264  $output .=
     265  "# Location of the physical node.\n" .
     266  "#\n" .
     267  "syslocation \"$location\"\n" .
     268  "#\n" .
     269  "# Maintained by\n" .
     270  "syscontact \"$contact\"\n" .
     271  "\n";
     272
     273  if( $DISK =~ /flash/i ) {
     274    $output .= "# Verify that disk is RO\n";
     275    $output .= "sh diskro /usr/local/sbin/diskro.sh\n\n";
     276  };
     277
     278  $output .= "agentaddress 161,tcp:161\n";
     279
     280  if( $masterNotUsed ) {
     281    $output .= "agentaddress $master_ip\n";
     282  };
     283 
     284  foreach my $if (keys %config) {
     285    if( $IP{$if} =~ /([0-9\.]+).*/ ) {
     286      $output .= "agentaddress $1\n";
     287    };
     288  };
     289  return($output);
     290};
     291
     292
     293
     294sub parse_config {
     295  $workingfile = $_[0];
     296  do($workingfile) || die("Cann't open/parse $workingfile");
     297  foreach $if (keys %config) {
     298    $cfg=$config{$if};
     299    while ($cfg) {
     300      $cfg=~s/^([^\n\r]+)[\r\n]*//m;
     301      $line=$1;
     302      $line=~s/\s*#.*//;
     303      if ((($name,$value)=split(/=/,$line)) eq 2) {
     304        $doit="if (exists(\$$name\{\"$if\"\})) {\$$name\{\"$if\"\}.=\"$separator$value\";} else {\$$name\{\"$if\"\}.=\"$value\";}";
     305        eval($doit);
     306      };
     307      $cfg=~s/[\r\n]*$//m;
     308    };
     309  };
     310};
     311
     312sub do_it {
     313  my $file = $_[0];
     314  my $body = "";
     315 
     316  $file =~ s/\./_/g;
     317  $body=&$file;
     318  return($body);
     319};
     320
     321if( exists $ARGV[1] ) {
     322  parse_config($ARGV[0]);
     323  print do_it($ARGV[1]);
    79324}
    80 
    81 
    82 exit;
    83 
    84 ########################################################################
    85 
    86 functions:
    87 
    88 $ahum=1;
    89 
    90 sub do_it
    91 {
    92   if ($OS=~/FreeBSD/i) {$FreeBSD=1;}
    93   elsif ($OS=~/Linux/i) {$Linux=1;}
    94 
    95 init_files();
    96 
    97 #system("/sbin/modprobe ipv6");
    98 #system("/sbin/modprobe ipchains");
    99 
    100 $nwcfg.="$ifconfig lo:1 down\n";
    101 #print "ifconfig lo:1 $master_ip\n";
    102 #$nwcfg.="$ifconfig lo:1 $master_ip netmask 255.255.255.255\n"; # altijd up!
    103 
    104 $last='';
    105 foreach $if (sort {$b <=> $a} keys %config)
    106 {
    107   if ($TYPE{$if}=~/wireless/) {$last=$if}
    108 } if ($last) {iwconfig("$last &> /dev/null");} # Laatste het eerste...
    109 
    110 $keys=1;
    111 foreach $if (sort keys %config)
    112 {
    113    if ($if=~/^([^:]+):(\d+)/) {$mymain=$1;$mysub=$2;} else {$mymain='';}
    114 
    115    if ($functions_only<1) {print "Doing interface: $if IP: $IP{$if}\n";}
    116 
    117    if ($if!~/:\d+/) {$main=1;} else {$main=0;}
    118 
    119                                         ##################### DOWN
    120    if ($DOWN{$if}=~/yes/)
    121    {   print "$if configured DOWN.\n";
    122        $nwcfg.="$ifconfig $if 127.0.0.1 down\n";
    123 
    124        if ($main)
    125        {       
    126        $zebra1.=sprintf <<EOZ3;
    127 
    128 interface $if
    129  description $DESC{$if}
    130  ip address 127.0.0.1/0
    131  shutdown
    132 
    133 EOZ3
    134        $ospfd2{$if}.=" interface $if\n\n";
    135        }
    136        next;   # Interface down.
    137    }
    138                                         ##################### DOWN
    139    if ($main)
    140    {
    141     $if=~/(\d+)/;$ifnum=$1;
    142     $nick="${nodename}$ifnum.$domain";
    143 
    144     if ($TYPE{$if}=~/wireless/)
    145     {
    146 
    147      if ($SDESC{$if}) {$nick="$SDESC{$if}.$nick";}
    148 #print "$nick\n";
    149      if (iwconfig("$if mode $MODE{$if}"))
    150      {
    151       if ($DEBUG) {print "\nDEBUG: iwconfig $if mode $MODE{$if} essid $ESSID{$if} nick $nick ap $AP{$if} channel $CHANNEL{$if} sens $SENS{$if} txpower $TXPOWER{$if} rate $RATE{$if}\n";}
    152       iwconfig("$if essid $ESSID{$if}");
    153       iwconfig("$if nick $nick");
    154 
    155      $freebsd.=sprintf<<EOFB33;
    156 $wicontrol -i $if -s $nick       # Nickname
    157 #$wicontrol -i $if -t 7          # TXrate
    158 $wicontrol -i $if -P 0           # PowerSave
    159 $wicontrol -i $if -Z             # Zero SNR cache
    160 EOFB33
    161       if ($MODE{$if}=~/master/i)
    162       {
    163      $freebsd.=sprintf<<EOFB3;
    164 $wicontrol -i $if -p 6           # hostap mode
    165 $wicontrol -i $if -n $ESSID{$if} # network name
    166 $wicontrol -i $if -q $ESSID{$if} # ESSID
    167 $wicontrol -i $if -c 1           # broadcasting essid on
    168 EOFB3
    169       } else {
    170      $freebsd.=sprintf<<EOFB4;
    171 $wicontrol -i $if -p 1           # Client mode (managed)
    172 $wicontrol -i $if -n $ESSID{$if} # ESSID
    173 EOFB4
    174       }
    175       if ($AP{$if})             {iwconfig("$if ap $AP{$if}");}
    176      
    177 if ($MODE{$if}=~/master/) {
    178         if ($CHANNEL{$if})  {
    179                 $freebsd.="$wicontrol -i $if -f $CHANNEL{$if}           # Channel\n";
    180         } else {
    181                 $freebsd .= "# WARNING  - master but no channel defined.\n";
    182         };
    183 } else {
    184         $freebsd.="# No channel - client follows\n# $wicontrol -i $if -f 0              # Channel\n";
    185 }
    186                                
    187       if ($SENS{$if})           {iwconfig("$if sens $SENS{$if}");}
    188       if ($TXPOWER{$if})        {iwconfig("$if txpower $TXPOWER{$if}");}
    189       if ($RATE{$if})           {iwconfig("$if rate $RATE{$if}");}
    190      } #else { print "ERROR: Could not configure interface $if\n";next;}
    191 
    192      $rcconf.="\nifconfig_$if=\"inet $IP{$if} -promisc\"\n";
    193      #$rcconf.="ifconfig_$if=\"inet $IP{$if} -promisc \"\n  ssid $ESSID{$if} \\"\n";
    194      #if ($CHANNEL{$if})        {$rcconf.="  channel $CHANNEL{$if}";}
    195      #$rcconf.="\\\n  stationname $nick\"\n";
    196      #if ($MODE{$if}=~/master/)                 {$rcconf.="#mediaopt hostap\n";}
    197      #$rcconf.="\n";
    198 
    199      $freebsd.="\n";
    200     } # if wireless
    201     mrtg1();
    202     if ($OS=~/FreeBSD/)
    203 {
    204        $ospfd2{$if}.=sprintf <<EOO2;
    205 
    206 interface $if
    207  ip ospf message-digest-key 1 md5 $OSPFPWD
    208  ip ospf authentication message-digest
    209  ip ospf dead-interval 180
    210 EOO2
    211 
    212    $keys++; 
    213 
    214       $zebra.=sprintf  <<EOZ2;
    215 
    216 interface $if
    217  description $DESC{$if}
    218  no shutdown
    219 EOZ2
    220 }
    221 
    222     }                     ######################   MAIN
    223 
    224     if ($OS=~/Linux/)
    225 {
    226        $ospfd2{$if}.=sprintf <<EOO21;
    227 
    228 interface $if
    229  ip ospf message-digest-key 1 md5 $OSPFPWD
    230  ip ospf authentication message-digest
    231 EOO21
    232    $keys++; 
    233 
    234       $zebra.=sprintf  <<EOZ21;
    235 
    236 interface $if
    237  description $DESC{$if}
    238  no shutdown
    239 EOZ21
    240 }
    241 
    242    if ($IP{$if})
    243    {
    244     $zebra.=sprintf " ip address $IP{$if}\n";
    245     ($ip,$netmask,$broadcast,$network,$width)=calc_ip($IP{$if});
    246     if ($netmask == '0.0.0.0')
    247 {print "Forgot netmask in config $hostname $if: $IP{$if}!\n";
    248 die "Forgot netmask in config $hostname $if: $IP{$if}!\n";
    249 }
    250 
    251 #    if ($DEBUG) {print("\nDEBUG: $ifconfig $if $ip netmask $netmask broadcast $broadcast up\n");}
    252     if ($DEBUG) {print("\nDEBUG: $if $ip $netmask $network $broadcast\n");}
    253 
    254     if (! $main) {$nwcfg.="$ifconfig $mymain up\n";}
    255     $nwcfg.="$ifconfig $if $ip down\n";
    256     $nwcfg.="$ifconfig $if $ip netmask $netmask broadcast $broadcast up\n";
    257     if ($main)
    258     {
    259         if ($TYPE{$if}!~/wireless/) {$rcconf.="\nifconfig_$if=\"inet $IP{$if}\"\n";}
    260     } else {$rcconf.="ifconfig_${mymain}_alias${mysub}=\"inet $IP{$if}\"\n";}
    261    }
    262    if (($OS=~/Linux/) || ($main)) {$zebra.= "\n";}
    263 
    264    if ($ROUTE{$if})
    265    {
    266         if ($DEBUG) {print "\nDEBUG: ROUTE: $ROUTE{$if}\n";}
    267 
    268         foreach $r (split(/$separator/,$ROUTE{$if}))
    269         {
    270            if ($DEBUG) {print "\nDEBUG: ROUTE2: $r\n";}
    271            
    272            $r=~/([^\/ ]+)\/?(\S+)\s+(\S+)/;
    273            $R="$1/$2";$gw=$3;$nm=$2;
    274            ($route,$r_netmask,$r_broadcast,$r_network,$r_width)=calc_ip($R);
    275            if ($R eq '0.0.0.0/0')
    276            {   $doit="$sroute add default gw $gw dev $mymain";
    277                $rcconf.="\ndefaultrouter=\"$gw\"\n\n";
    278            }
    279            elsif ($nm eq 32)      {$doit="$sroute add $route gw $gw dev $mymain";}
    280            else {$doit="$sroute add -net $route netmask $r_netmask gw $gw dev $mymain";}
    281 
    282            if ($DEBUG) {print "\nROUTE3: $doit\n";}
    283            $nwcfg.="$doit\n";
    284            if ($R eq '0.0.0.0/0') {$ospfd3.=" default-information originate\n"}
    285            else
    286            {
    287                 $area=get_area($R);
    288                 $ospfd4.="! static route $R\nnetwork $R area $area\n\n";
    289                 $NW{$area}.="$network/$width ";
    290            }
    291            $zebra.="ip route $r\n";
    292         }       
    293    }
    294 
    295    ($ip,$netmask,$broadcast,$network,$width)=calc_ip($IP{$if});
    296    if (($DHCP{$if}) && ($DHCP{$if}!~/off|no/i)) 
    297    {
    298        ($from,$upto)=split(/-/,$DHCP{$if});
    299        $ip=~/(^\d+\.\d+\.\d+)\.\d+$/;
    300        $dip=$1;
    301        $dhcp.=sprintf <<EOD2;
    302 
    303         #
    304         #  $if $DESC{$if}
    305         #
    306         subnet $network netmask $netmask {
    307                 range  $dip.$from $dip.$upto;
    308                 option broadcast-address $broadcast;
    309                 option subnet-mask $netmask;
    310                 option routers $ip;
    311                 $DHCP_STATIC{$if}
    312         }   
    313 
    314 EOD2
    315         if ($dhcpints!~/$mymain/) {$dhcpints.=" $mymain";}
    316      }  # DHCP
    317      else
    318      {
    319         if ( ($main) ) #|| ($DHCP{$mymain}=~/off|no/i))
    320         {  # niet als main wel dhcp heeft.
    321           $dhcp.="subnet $network netmask $netmask {not authoritative; } # $if\n\n";
    322         }
    323      }
    324      if ($OSPF_NEIGHBORS{$if}=~/no/i)
    325      {
    326         if ($main) {$OSPF_PASSIVE{$if}=1;}
    327      }
    328 
    329      if ($OSPF_AREA{$if}!~/no/i)
    330      {
    331         ($ip,$netmask,$broadcast,$network,$width)=calc_ip($IP{$if});
    332 
    333           if ($IP{$if})
    334             {
    335 #               if (($OSPF_NEIGHBORS{$if}!~/no/) ||
    336                 if ($OSPF_AREA{$if} eq '') {$area=get_area($network);}
    337                 else {$area=int($OSPF_AREA{$if});}
    338                  
    339                 $ospfd4.="! $if ($DESC{$if})\nnetwork $network/$width area $area\n\n";
    340                 $NW{$area}.="$network/$width ";
    341             }
    342 
    343          if ($OSPF_BROADCAST{$if}=~/no/i)
    344          {
    345            if ($main)
    346            {
    347 #if ($DEBUG) {print "DEBUG: OSPF_NEIGHBORS{$if}: ($OSPF1_NEIGHBORS{$if})\n";}
    348            $OSPFD_NONBROADCAST{$if}=1;
    349            }
    350            if ($OSPF_NEIGHBORS{$if}!~/no/i)
    351            {
    352              foreach $n (split(/[\s$separator]+/,$OSPF_NEIGHBORS{$if}))
    353              {
    354                 if ($DEBUG) {print "DEBUG: OSPF2_NEIGHBOR{$if}: [$n]\n";}
    355                 $ospfd5.="! $if link: $SDESC{$if}\n neighbor $n\n\n";
    356              }
    357              if ($main) {$OSPF_PASSIVE{$if}=0;}
    358              else {$OSPF_PASSIVE{$mymain}=0;}
    359            } #ospf_neighbors
    360          }
    361        
    362      } # ospf_area
    363 
    364      if ($POINT_TO_POINT{$if})
    365      {
    366            foreach $p (split(/$separator/,$POINT_TO_POINT{$if}))
    367            {
    368                 mrtg2();
    369            } #foreach $pointtopoint     
    370      } # pointopoint
    371 } # foreach if
    372 
    373 foreach $if (sort keys %config)
    374 {
    375    if ($if!~/:\d+/) {$main=1;} else {$main=0;}
    376    if ($main)
    377    {
    378         $ospfd2.=$ospfd2{$if};
    379         if ($OSPF_PASSIVE{$if})
    380         {
    381           $ospfd22.=" passive-interface $if\n";
    382         }
    383         if ($OSPFD_NONBROADCAST{$if})
    384         {
    385            $ospfd2.= " ip ospf network non-broadcast\n";
    386         }
    387         if ($OSPF_COST{$if})
    388         {
    389           $ospfd2.=" ip ospf cost $OSPF_COST{$if}\n";
    390         }
    391 
    392    }
    393 }
    394 
    395  $zebra.= "\n\nlog file /var/log/zebra.log\n\n";
    396 
    397 foreach $area (keys %NW)
    398 {
    399   if ($area eq 0) {next;}
    400   $nwa=0xffffffff;
    401   foreach $nw (split(/\s+/,$NW{$area}))
    402   {
    403      ($ip,$width)=split(/\//,$nw);
    404      ($a,$b,$c,$d)=split(/\./,$ip);
    405      ($II)=($a<<24)+($b<<16)+($c<<8)+$d;
    406      if ($width eq 32) {$nm=0xffffffff;}
    407      else {$nm=0xffffffff-1<<(31-$width);}
    408 
    409      $II=$II & $nm;
    410      $nwa=$nwa & $II;
    411 #     $ospfd.=sprintf ("NW-$area: $nw ==> %08x enne %08x\n",$II,$nwa);
    412   }
    413   $nwa=itoadr($nwa);
    414 
    415   if ($AGGREGATE) {$agg=$AGGREGATE;}
    416   else {$agg=21;}
    417 
    418   if (($nwa!~/^172\.16\./) && ($area > 0))
    419   { $ospfarea.="area $area range $nwa/$agg substitute $nwa/$agg\n"; }
    420 
    421   $ospf21.="! area $area authentication message-digest\n";
    422 }
    423 
    424 
    425 $ospfd.=sprintf <<EOOL;
    426 
    427 !  ================>   interfaces  <================
    428 
    429 $ospfd2
    430 
    431 !  ================>   OSPF router  <================
    432 router ospf
    433  ospf router-id $master_ip
    434  $ospfd21
    435 
    436  passive-interface lo0
    437 $ospfd22
    438 
    439 !default
    440 $ospfd3
    441 
    442 $ospfarea
    443 
    444 !  ================>   networks  <================
    445 $ospfd4
    446 
    447 !  ================>  neighbors  <================
    448 $ospfd5
    449 
    450 log file /var/log/ospf.log
    451 
    452 EOOL
    453 # $rcconf.="\n\n" . $freebsd;
    454 }
    455 
    456 sub get_area
    457 {
    458   local($IP)=@_;
    459   local($range);
    460   local($ip,$netmask,$broadcast,$network,$width);
    461   local($a,$b,$c,$d)=split(/\./,$IP);
    462   local($II)=($a<<24)+($b<<16)+($c<<8)+$d;
    463   local($ii,$ip,$nm,$I2);
    464 
    465 #  for ($i=0;$i<=$maxareas;$i++)
    466 #  {
    467 #    $ii=$II[$i];
    468 #    $nm=$NM[$i];
    469 #    $I2=$II & $nm;   
    470 ##$ospfd.=sprintf "i=$i\t $RANGE[$i]\t ii=$ii\t nm=$nm\t I2=$I2 $II $IP $a,$b,$c,$d\n";
    471 #    if ($I2 == $ii) {return($AREA[$i]);}   
    472 #  }
    473 #  return(12345);
    474 
    475    $area=1;
    476    if ($b eq 16) {$area=0;}
    477    elsif ($c < 128) {$area=($b * 10)}
    478    else {$area=(1+($b*10));}
    479    if ($area > 255) {$area/=10;}
    480    return($area);
    481 }
    482 
    483 
    484 sub read_areas
    485 {
    486    $maxareas=0;
    487    open(AC,"$home/areas.conf") || die;
    488    while (<AC>)
    489    {
    490         chomp();
    491         s/#.*$//;
    492         if (! $_) {next;}
    493         ($area,$range,$desc,$counter,$junk)=split(/\s+/);
    494         $AREA[$maxareas]=$area;
    495         $RANGE[$maxareas]=$range;
    496         $DESC[$maxareas]=$desc;
    497 
    498         ($ip,$width)=split(/\//,$range);
    499         ($a,$b,$c,$d)=split(/\./,$ip);
    500         $ii=($a<<24)+($b<<16)+($c<<8)+$d;
    501    
    502         if ($width eq 32) {$nm=0xffffffff;}
    503         else {$nm=0xffffffff-1<<(31-$width);}
    504         $II[$maxareas]=$ii;
    505         $NM[$maxareas]=$nm;
    506 
    507         $maxareas++;
    508    }
    509    close(AC);
    510 }
    511 
    512 sub parse_config
    513 {
    514   foreach $if (keys %config)
    515   {
    516      $cfg=$config{$if};
    517 if (! $html) {print "Parsing interface: $if\n";}
    518      while ($cfg)
    519      {
    520         $cfg=~s/^([^\n\r]+)[\r\n]*//m;
    521         $line=$1;
    522         $line=~s/\s*#.*//;
    523         if ((($name,$value)=split(/=/,$line)) eq 2)
    524         {
    525            if ($name eq 'ESSID') {$value=lc($value);}
    526 #print "VAL($name)=$value\n";
    527            $doit="if (exists(\$$name\{\"$if\"\})) {\$$name\{\"$if\"\}.=\"$separator$value\";} else {\$$name\{\"$if\"\}.=\"$value\";}";
    528 #print "DOIT: [$doit]\n";
    529            eval($doit);
    530         }
    531 #print "CFG:[$cfg]\n";
    532         $cfg=~s/[\r\n]*$//m;
    533      }
    534   }
    535 if ($functions_only<1) {print "Done parsing config.\n";}
    536 }
    537 
    538 sub iwconfig
    539 {
    540   local($line)=@_;
    541   $nwcfg.="$iwconfig $line\n";
    542 
    543 }
    544 
    545 sub ipchains
    546 {
    547   local($line)=@_;
    548   return(system("$ipchains $line"));
    549 }
    550 
    551 #($a,$b,$c,$d) = unpack('C4',$addr[0]);
    552 
    553 #$IP = pack("CCCC", 152, 2, 128, 184);  # create IP address
    554 #($var1, $var2, $var3, $var4) = unpack("CCCC", $IP);  #inverse of the above
    555 
    556 
    557 
    558 sub calc_ip
    559 {  local($i)=@_;
    560   local($a,$b,$c,$d);
    561   local($ip,$width)=split(/\//,$i);
    562   local($a,$b,$c,$d)=split(/\./,$ip);
    563   local($ii)=($a<<24)+($b<<16)+($c<<8)+$d;
    564 
    565   if ($width eq 32) {$nm=0xffffffff;}
    566   else {$nm=0xffffffff-1<<(31-$width);}
    567   $nw=($ii & $nm);
    568   $br=$nw | (0xffffffff & ~$nm);
    569   $netmask=itoadr($nm);;
    570   $broadcast=itoadr($br);;
    571   $network=itoadr($nw); # $i=itoadr($ii);
    572 
    573 #  printf "ip=$ip|width=$width|nm=%0x|$netmask|br=%0x|$broadcast|$i|\n",$nm,$br;
    574 
    575   return($ip,$netmask,$broadcast,$network,$width);
    576 }
    577 
    578 sub itoadr
    579 {
    580   local($ip)=@_;
    581   local($a,$b,$c,$d);
    582   $a=($ip & 0xff000000) >> 24;
    583   $b=($ip & 0x00ff0000) >> 16;
    584   $c=($ip & 0x0000ff00) >> 8;
    585   $d=($ip & 0x000000ff);
    586   return("$a.$b.$c.$d");
    587 }
    588 
    589 sub changeline
    590 {
    591    local($file,$old,$new)=@_;
    592    open(OLD,$file) || die "Could not open old file: $file\n";
    593    open(NEW,">$file.genesis.$$") || die "Could not create new file: $file.genesis.$$";
    594    while(<OLD>)
    595    {
    596         if (/$old/) {print NEW "$new\n";}
    597         else {print NEW $_;}
    598    }
    599    close(NEW);
    600    close(OLD);
    601    rename("$file.genesis.$$",$file) || die "Could not overwrite old file: $file";
    602 }
    603  
    604                                                                                
    605 sub open_files
    606 {
    607  open (SH,">/etc/wireless.conf.sh"); # Voor firewall script.
    608  open (NWCFG,">/etc/wl/nwcfg.sh"); # Voor network config
    609  open (DHCP,">/etc/dhcpd.conf") || die "Could not create dhcpd.conf";
    610  open (ZEBRA,">/etc/zebra/zebra.conf") || die "Could not create zebra.conf";
    611  open (OSPFD,">/etc/zebra/ospfd.conf") || die "Could not create ospfd.conf";
    612  open (MRTG,">/etc/mrtg/mrtg.cfg") || die "Could not create mrtg.cfg";
    613  open (RCCONF,">/etc/rc.conf") || die "Could not create rc.conf";
    614  open (FREEBSD,">/etc/rc.node.conf") || die "Could not create rc.node.conf";
    615  open (RESOLV,">/etc/resolv.conf") || die "Could not create resolv.conf";
    616  open (NAMED,">/etc/named.conf") || die "Could not create named.conf";
    617 }
    618 
    619 
    620 sub close_files
    621 {
    622  close (SH);
    623  close (NWCFG);
    624  close (DHCP);
    625  close (ZEBRA);
    626  close (OSPFD);
    627  close (MRTG);
    628  close(RCCONF);
    629  close(FREEBSD);
    630  close(RESOLV);
    631  close(NAMED);
    632 }
    633 
    634 sub print_files
    635 {
    636  print SH $sh;
    637  print NWCFG $nwcfg;
    638  print DHCP $dhcp;
    639  print ZEBRA $zebra;
    640  print OSPFD $ospfd;
    641  print MRTG $mrtg;
    642  print RCFONG $rcconf;
    643  print FREEBSD $freebsd;
    644  print RESOLV $resolv;
    645  print NAMED $named;
    646 }
    647 
    648 
    649 sub init_files
    650 {
    651 $sh=sprintf  <<EOSH;
    652 #! /bin/bash
    653 #
    654 # Generated by $source
    655 # on $now
    656 #
    657 $svn_version
    658 
    659 
    660 gw_open=$gw_open
    661 EOSH
    662 
    663 $nwcfg=sprintf <<EONW;
    664 #! /bin/bash
    665 #
    666 # Generated by $source
    667 # on $now
    668 #
    669 #  DO NOT CHANGE!
    670 #
    671 # $author
    672 # home: /etc/wl/nwcfg
    673 #
    674 $svn_version
    675 
    676 EONW
    677 
    678 
    679 $dhcp=sprintf <<EOD;
    680 # dhcpd.conf
    681 #
    682 # Generated by $source
    683 # on $now
    684 #
    685 #  $author
    686 # home: /usr/local/etc/dhcpd.conf
    687 #
    688 $svn_version
    689 
    690 option domain-name "$domain";
    691 
    692 default-lease-time 7200;
    693 max-lease-time 2592000;
    694 
    695 ddns-update-style none;
    696 
    697 # Hack for the WET11
    698 #
    699 always-broadcast on;
    700 
    701 EOD
    702 #foreach $ns (split(/\s+/,$NS_forward))
    703 #       {$dhcp.="option domain-name-servers ${ns};\n";}
    704         {$dhcp.="option domain-name-servers ${master_ip};\n";}
    705 
    706 $dhcp.="\n\n";
    707 
    708 $zebra= sprintf <<EOZ;
    709 ! -*- zebra -*-
    710 !
    711 ! Zebra configuration for $hostname
    712 !
    713 ! Generated by $source
    714 ! on $now
    715 !
    716 !  DO NOT CHANGE!
    717 !
    718 !   $author
    719 !   home=/usr/local/etc/zebra/zebra.conf
    720 !
    721 $svn_version
    722 
    723 hostname $hostname
    724 password getronics
    725 enable password getronics
    726 
    727 ! Interfaces
    728 
    729 interface lo0
    730  description loopback                                                           
    731  ip address 127.0.0.1/8
    732 
    733 
    734 EOZ
    735 
    736 $ospfd=init_ospfd();
    737 
    738 $mrtg=sprintf <<EOM;
    739 
    740 #
    741 # mrtg configuration for $hostname
    742 #
    743 # Generated by $source
    744 # on $now
    745 #
    746 #  DO NOT CHANGE!
    747 #
    748 #   $author
    749 #   home=/etc/mrtg
    750 #
    751 $svn_version
    752 
    753 Workdir: /var/www/html/mrtg
    754 
    755 
    756 #
    757 #
    758 #
    759 
    760 Target[${hostname}_load]: `/usr/local/sbin/cpuload.pl`
    761 MaxBytes[${hostname}_load]: 1000
    762 Title[${hostname}_load]: CPU load on $hostname
    763 PageTop[${hostname}_load]: <H1>CPU load on ${hostname}</H1>
    764 Options[${hostname}_load]: transparent, gauge, nopercent
    765 Legendi[${hostname}_load]: 5min
    766 Legendo[${hostname}_load]: 15min
    767 ShortLegend[${hostname}_load]: %
    768 YLegend[${hostname}_load]: %
    769 WithPeak[${hostname}_load]: wmy
    770 
    771 Target[${hostname}_mem]: `/usr/local/sbin/memusage.pl`
    772 MaxBytes[${hostname}_mem]: 256000000
    773 Title[${hostname}_mem]: Memory usage on ${hostname}
    774 PageTop[${hostname}_mem]: <H1>Memory usage on ${hostname}</H1>
    775 Options[${hostname}_mem]: transparent, gauge, nopercent
    776 Legendi[${hostname}_mem]: free
    777 Legendo[${hostname}_mem]: swap
    778 ShortLegend[${hostname}_mem]: Bytes
    779 YLegend[${hostname}_mem]: Bytes
    780 WithPeak[${hostname}_mem]: wmy
    781 
    782 Target[${hostname}_up]: `/usr/local/sbin/uptime.pl`
    783 MaxBytes[${hostname}_up]: 10000
    784 Title[${hostname}_up]: ${hostname} Uptime
    785 PageTop[${hostname}_up]: <H1>${hostname} Uptime</H1>
    786 Options[${hostname}_up]: transparent, gauge, nopercent
    787 Legendi[${hostname}_up]: uptime
    788 Legendo[${hostname}_up]:
    789 ShortLegend[${hostname}_up]: Days
    790 YLegend[${hostname}_up]: Days
    791 WithPeak[${hostname}_up]: wmy
    792 
    793 EOM
    794 
    795 $master_ip_on_alias="ifconfig_lo0_alias1=\"inet $master_ip/32\"";
    796 foreach my $if (keys %config) {
    797   if( $IP{$if} =~ /([0-9\.]+).*/ ) {
    798     if( $1 eq $master_ip ) {
    799       $master_ip_on_alias="#ifconfig_lo0_alias1=\"inet $master_ip/32\"";
    800       break;
    801     };
    802   };
    803 };
    804 
    805 
    806 $rcconf.=sprintf <<EORC1;
    807 # This file is read by /etc/rc.conf - and specific to wireless
    808 # leiden. Please make all changes in Genesis.
    809 #
    810 # Generated by $source
    811 # on $now
    812 #
    813 #  $author
    814 #
    815 $svn_version
    816 
    817 hostname="$hostname.wLeiden.NET"
    818 location="$location"
    819 
    820 ifconfig_lo0_alias0="inet 172.31.255.1/32"
    821 $master_ip_on_alias
    822 EORC1
    823 
    824 if ($tproxy !~ m/no/i) {
    825         $rcconf .= "# WARNING - specification propably wrong - check genesis. It should be a pure CIDR\n"
    826                 unless $tproxy =~ m/\d+\.\d+\.\d+\.\d+\/\d+/;
    827         $rcconf .= "# Tproxy is ran on this system\n".
    828                 "tproxy_enable='YES'\n".
    829                 "tproxy_range='$tproxy'\n".
    830                 "\n";
    831 };
    832 
    833 #$freebsd.=sprintf <<EOFB1;
    834 # Wireless Leiden startup script om wireless kaarten te initialiseren
    835 #
    836 # Generated by $source
    837 # on $now
    838 #
    839 #  $author
    840 # home=/etc/wl/freebsd.sh
    841 #
    842 #$svn_version
    843 #EOFB1
    844 
    845 $resolv.=sprintf <<EOR1;
    846 search wleiden.net .
    847 
    848 # Local machine / own nameserver.
    849 nameserver 127.0.0.1
    850 EOR1
    851 
    852 #foreach $ns (split(/\s+/,$NS_resolv)) {
    853 #       $resolv.="nameserver $ns\n";
    854 #}
    855 
    856 foreach $if (sort keys %config) {
    857         foreach $ns (split(/[\s$separator]+/,$OSPF_NEIGHBORS{$if})) {
    858                 next unless $ns =~  m/\d+/;
    859                 $resolv.="# Nameserver on adjacent node - $DESC{$if} over $if\nnameserver $ns\n\n";
    860         };
    861 };
    862 
    863 
    864 
    865 $named.=sprintf <<EON1;
    866 # named.conf
    867 #
    868 # Generated by $source
    869 # on $now
    870 #
    871 #  $author
    872 #  home=/etc/namedb/named.conf
    873 #
    874 $svn_version
    875 
    876 options {
    877         directory "/var/db/namedb";
    878         forward only;
    879         forwarders {
    880           172.17.8.68;   // proxy1
    881           172.17.143.4;  // proxy2
    882           172.20.128.98; // proxy3
    883 //        172.18.8.66;   // Internet GW Jasper
    884 //        172.17.32.66;  // Internet GW Dirkx
    885 EON1
    886 
    887 %x=();
    888 foreach $ns (split(/\s+/,$NS_forward)) {
    889         next if $ns eq $master_ip;
    890         $named.="                   ${ns};\n";
    891         $x{ $ns } = 1;
    892         }
    893 
    894 foreach $if (sort keys %config) {
    895         foreach $ns (split(/[\s$separator]+/,$OSPF_NEIGHBORS{$if})) {
    896                 next unless $ns =~  m/\d+/;
    897                 $x{ $ns } = 0;
    898         };
    899 };
    900 
    901 #foreach(sort keys(%x)) {
    902 #       next if $x{$_};
    903 #       $named.="//                 $_; // Next door Neighbour..\n";
    904 #       }
    905 
    906 $named.=sprintf <<EON2;
    907          };
    908 };
    909 
    910 zone "." {
    911         type hint;
    912         file "/etc/namedb/named.root";
    913 };
    914 
    915 zone "0.0.127.IN-ADDR.ARPA" {
    916         type master;
    917         file "/etc/namedb/localhost.rev";
    918 };
    919 
    920 zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.INT" {
    921         type master;
    922         file "/etc/namedb/localhost-v6.rev";
    923 };
    924 
    925 EON2
    926 
    927 push (@ZONES,"wLeiden.NET");
    928 push (@ZONES,"wZoeterwoude.NET");
    929 for ($i=16;$i<32;$i++) {push(@ZONES,"$i.172.in-addr.arpa");}
    930 foreach $zone (@ZONES)
    931 {
    932  $named.=sprintf<<EON3;
    933 zone "$zone" {
    934         type slave;
    935         file "slave-$zone";
    936         masters {
    937           172.21.16.99;  // rambo
    938           172.17.8.68;   // proxy1
    939           172.17.143.4;  // proxy2
    940           172.20.128.98; // proxy3
    941           172.27.129.66; // Rick
    942           172.18.8.66;   // Jasper
    943         };
    944 };
    945 
    946 EON3
    947 }
    948 
    949 
    950 $snmpd=<<EOM;
    951 # /usr/local/share/snmp/snmpd.local.conf
    952 # overwrites/augments the data in snmpd.conf
    953 # which is identical on each node with data
    954 # specific to this node.
    955 #
    956 #
    957 #MIBS is not availible, commented by Rick van der Zwet
    958 #mibs +LIGHT80211-MIB
    959 EOM
    960 
    961 $snmpd .= qq|
    962 # Location of the physical node.
    963 #
    964 syslocation "$location"
    965 
    966 |       if defined $location;
    967 
    968 $snmpd .= qq|
    969 # Location of the physical node.
    970 #
    971 syscontact "$contact"
    972 
    973 |       if defined $contact;
    974 
    975 $snmpd .=
    976         "# Verify that disk is RO\n".
    977         "sh diskro /usr/local/sbin/diskro.sh\n\n"
    978         if ($DISK eq 'FLASH');
    979 
    980 $snmpd.=<<EOM;
    981 
    982 # Also listen to tcp
    983 agentaddress 161,tcp:161
    984 EOM
    985 
    986 my $master_ip_in_snmpd = "agentaddress $master_ip";
    987 foreach my $if (keys %config) {
    988   if( $IP{$if} =~ /([0-9\.]+).*/ ) {
    989     if($master_ip eq $1) {$master_ip_in_snmpd=""};
    990 $snmpd.=<<EOM;
    991 agentaddress $1
    992 EOM
    993   };
    994 };
    995 
    996 $snmpd.=<<EOM;
    997 $master_ip_in_snmpd
    998 
    999 # end of file
    1000 EOM
    1001 }
    1002 
    1003 
    1004 
    1005 sub init_ospfd
    1006 {
    1007  
    1008    local($init)=sprintf <<EOO;
    1009 ! -*- ospfd -*-
    1010 !
    1011 ! osfpd configuration for $hostname
    1012 !
    1013 ! Configuration generated by $source
    1014 ! on $now
    1015 !
    1016 !  DO NOT CHANGE!
    1017 !
    1018 !   $author
    1019 !   home=/usr/local/etc/zebra/ospfd.conf
    1020 !
    1021 $svn_version
    1022 
    1023 hostname $hostname
    1024 password getronics
    1025 enable password getronics
    1026 
    1027 interface lo0
    1028 EOO
    1029   return($init);
    1030 }
    1031 
    1032 
    1033 sub mrtg1
    1034 {
    1035 $mrtg.=sprintf <<EOM2;
    1036 Target[${if}_traf]: `/usr/local/sbin/ipchains_traf.pl ${if}`
    1037 MaxBytes[${if}_traf]: $SPEED{$if}
    1038 Title[${if}_traf]: Traffic Analysis ${if} $SDESC{$if}
    1039 PageTop[${if}_traf]: <H1>Traffic on $if $DESC{$if}</H1>
    1040 Options[${if}_traf]: transparent
    1041 WithPeak[${if}_traf]: wmy                                                       
    1042 
    1043 EOM2
    1044 
    1045 if ($functions_only<1)
    1046 {
    1047         ipchains("-N ${if}-i");
    1048         ipchains("-N ${if}-o");
    1049         ipchains("-I input -i ${if} -j ${if}-i");
    1050         ipchains("-I output -i ${if} -j ${if}-o");
    1051 
    1052 }
    1053         if ($TYPE{$if}=~/wireless/i)
    1054         {
    1055           $mrtg.=sprintf  <<EOM3;
    1056 Target[${if}_quality]: `/usr/local/sbin/wlan_quality.pl ${if}`
    1057 MaxBytes1[${if}_quality]: 100
    1058 MaxBytes2[${if}_quality]: 100
    1059 Title[${if}_quality]:  Quality $if $SDESC{$if}
    1060 PageTop[${if}_quality]: <H1>Quality $if $DESC{$if}</H1>
    1061 Options[${if}_quality]: transparent, gauge, nopercent
    1062 Legendi[${if}_quality]: Quality
    1063 Legendo[${if}_quality]: Noise
    1064 ShortLegend[${if}_quality]: /100
    1065 YLegend[${if}_quality]: /100
    1066 WithPeak[${if}_quality]: wmy                                                   
    1067 
    1068 Target[${if}_rate]: `/usr/local/sbin/wlan_bitrate.pl ${if}`
    1069 MaxBytes1[${if}_rate]: 11
    1070 MaxBytes2[${if}_rate]: 11
    1071 Title[${if}_rate]: Bitrate $if $SDESC{$if}
    1072 PageTop[${if}_rate]: <H1>Bitrate $if $DESC{$if}</H1>
    1073 Options[${if}_rate]: transparent, gauge, nopercent
    1074 Legendi[${if}_rate]: Bitrate
    1075 ShortLegend[${if}_rate]: Mb/s
    1076 YLegend[${if}_rate]: Mb/s
    1077 WithPeak[${if}_rate]: wmy                                                     
    1078 
    1079 EOM3
    1080           if ($MODE{$if}=~/master/i)
    1081           {
    1082           $mrtg.=sprintf  <<EOM4;
    1083 Target[${if}_users]: `/usr/local/sbin/wlan_users.pl ${if}`
    1084 MaxBytes[${if}_users]: 100
    1085 Title[${if}_users]: Users on $if $SDESC{$if}
    1086 PageTop[${if}_users]: <H1>Users on $if $DESC{$if}</H1>
    1087 Options[${if}_users]: transparent, gauge, nopercent
    1088 Legendi[${if}_users]: Users
    1089 ShortLegend[${if}_users]: users
    1090 YLegend[${if}_users]: users
    1091 WithPeak[${if}_users]: wmy                                                     
    1092 
    1093 EOM4
    1094           }
    1095         }  # wireless
    1096 
    1097 
    1098 }
    1099 
    1100 sub mrtg2
    1101 {
    1102 $mrtg.=sprintf <<EOM5;
    1103 Target[${if}_lat]: `/usr/local/sbin/latency.pl $p`
    1104 MaxBytes1[${if}_lat]: 100
    1105 MaxBytes2[${if}_lat]: 200
    1106 Title[${if}_lat]: Latency/PktLoss Analysis to $p on $if $SDESC{$if}
    1107 PageTop[${if}_lat]: <H1>Latency/PktLoss to $p on $if $DESC{$if}</H1>
    1108 Options[${if}_lat]: transparent, gauge, nopercent
    1109 Legendi[${if}_lat]: PacketLoss%
    1110 Legendo[${if}_lat]: Max Latency (ms)
    1111 ShortLegend[${if}_lat]: %/ms
    1112 YLegend[${if}_lat]: %/ms
    1113 WithPeak[${if}_lat]: wmy
    1114  
    1115 EOM5
    1116 
    1117 }
    1118 
    1119 sub ahum
    1120 {
    1121   print "AHUM!\n";
    1122 }
    1123 
    1124 #return(1);
    1125 
     325else {
     326  print "Usage `perl wleiden.pl 'inputfile' 'outputfile'`\n";
     327  print "While calling from perl script use:\n";
     328  print "parse_config('inputfile')\n";
     329  print "do_it('outputfile')\n";
     330};
     331
     332exit 0;
Note: See TracChangeset for help on using the changeset viewer.