Changeset 4302 in genesis for tools/wleiden.pl


Ignore:
Timestamp:
Apr 18, 2005, 11:21:16 AM (20 years ago)
Author:
jasper
Message:

wleiden.pl teruggezet naar r4056. Anders breekt www.wleiden.net/cgi-bin/g_list.pl

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/wleiden.pl

    r4203 r4302  
    1 #!/usr/bin/perl -w
    2 #
    3 # Copyright 2005 Stichting Wireless Leiden
    4 # maart 2004 rick@wirelessleiden.nl
    5 #
    6 
    7 # Config located at other file
    8 my $conf_file="/home/genesis/tools/genesis.conf";
    9 do($conf_file) || die("Cann't open $conf_file");
    10 ################ END OF CONFIG ##########################
    11 
    12 #variablen
    13 my $time=gmtime();
    14 my $source=`/bin/hostname`;
    15 chomp($source);
    16 
    17 
    18 #slurp IP berekeningen info
    19 do ("$IP_pmPath") || die ("Cann't open $IP_pmPath");
    20 #slurp dns info
    21 do ("$dnsheader_confPath") || die ("Cann't open $dnsheader_confPath");
    22 
    23 
    24 #zoek uit of het master_ip addr voorkomt in de configs
    25 #belangrijk van aliassen
    26 sub master_ipNotUsed {
    27   if( $debug ) {
    28     print "running master_ipNotUsed...\n";
     1
     2#
     3#
     4#  aug 2002, jasper\@WirelessLeiden.NL
     5#
     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
     23if ($functions_only) {goto functions;}
     24$source='/etc/wl/wleiden.pl';
     25
     26do($config) || die;
     27parse_config();
     28
     29
     30$hostname=`/bin/hostname |cut -d . -f 1`;chomp($hostname);
     31$maxmask= pack("CCCC", 255, 255, 255, 255);
     32
     33
     34if (! $ARGV[0]) {die "use start/stop/startall";}
     35
     36if ($ARGV[1]=~/debug/i) {$DEBUG=1;}
     37if ($ARGV[0]=~/start/i)
     38{
     39
     40######################################################################
     41do_it();
     42
     43open_files();
     44$nwcfg.="$indexmaker /etc/mrtg/mrtg.cfg> /var/www/html/mrtg/index.html 2> /dev/null\n";
     45
     46print_files();close_files();
     47
     48system("chmod 755 /etc/wl/nwcfg.sh;/etc/wl/nwcfg.sh");
     49
     50if ($DEBUG) {die "DEBUGGING!";}
     51
     52if ($DEBUG) {print "\nDEBUG: making mrtg index.\n";}
     53
     54changeline("/etc/sysconfig/dhcpd","DHCPDARGS","DHCPDARGS=\"$dhcpints\"");
     55
     56#if ($DEBUG) {print "\nDEBUG: reloading firewall.\n";}
     57#$nwcfg.="/usr/local/sbin/firewall\n";
     58
     59if ($DEBUG) {print "\nDEBUG: restarting daemons.\n";}
     60
     61if ($ARGV[0]=~/startall/) {$restart='restart';}
     62else  {$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";
    2978  }
    30   foreach my $if (keys %config) {
    31     if( $IP{$if} =~ /([0-9\.]+).*/ ) {
    32       if( $1 eq $master_ip ) {
    33         return(0);
    34       };
    35     };
    36   };
    37   return(1);
    38 };
    39 
    40 
    41 
    42 sub genHeader {
    43   my $comment = $_[0];
    44   my $output =
    45   "$comment This file specific to wireless\n" .
    46   "$comment leiden. Please make all changes in Genesis.\n" .
    47   "$comment\n" .
    48   "$comment Generated by $source\n" .
    49   "$comment on $time\n" .
    50   "$comment\n" .
    51   "$comment  $author\n" .
    52   "$comment\n\n\n";
    53   return ($output);
    54 };
    55 
    56 
    57 sub txtconfig {
    58   my $output = "";
    59   foreach $interface (keys %config) {
    60     $output .= $config{$interface};
    61   };
    62   return($output);
    63 };
    64 
    65 
    66 sub dhcpd_conf {
    67   my $output = genHeader("#");
    68   $output .=
    69   "option domain-name \"$domain\";\n" .
    70   " \n" .
    71   "default-lease-time 7200;\n" .
    72   "max-lease-time 2592000;\n" .
    73   "\n" .
    74   "ddns-update-style none;\n" .
    75   "\n" .
    76   "# Hack for the WET11\n" .
    77   "#\n" .
    78   "always-broadcast on;\n" .
    79   "\n" .
    80   "option domain-name-servers ${master_ip};\n" .
    81   "\n";
    82 
    83   foreach my $interface (sort keys %config) {
    84     if( $interface =~ /^[a-z]+[0-9]+$/i ) {
    85       (my $ip, my $netmask) = split('/', $IP{$interface});
    86       my $subnet = IP::toSubnet($netmask);
    87       my $broadcast = IP::getBroadcastAddr($ip, $subnet);
    88       my $network = IP::getNetworkAddr($ip, $subnet);
     79}
     80
     81
     82exit;
     83
     84########################################################################
     85
     86functions:
     87
     88$ahum=1;
     89
     90sub do_it
     91{
     92  if ($OS=~/FreeBSD/i) {$FreeBSD=1;}
     93  elsif ($OS=~/Linux/i) {$Linux=1;}
     94
     95init_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='';
     105foreach $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;
     111foreach $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
     128interface $if
     129 description $DESC{$if}
     130 ip address 127.0.0.1/0
     131 shutdown
     132
     133EOZ3
     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
     160EOFB33
     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
     168EOFB3
     169      } else {
     170     $freebsd.=sprintf<<EOFB4;
     171$wicontrol -i $if -p 1           # Client mode (managed)
     172$wicontrol -i $if -n $ESSID{$if} # ESSID
     173EOFB4
     174      }
     175      if ($AP{$if})             {iwconfig("$if ap $AP{$if}");}
    89176     
    90       $output .=
    91       "# $interface $DESC{$interface}\n";
    92      
    93       if ( $DHCP{$interface} =~ /[0-9]+\-[0-9]+/i ) {
    94         my $dhcp_part = $ip;
    95         $dhcp_part =~ s/[0-9]+$//;
    96         (my $dhcp_start, my $dhcp_stop) = $DHCP{$interface} =~ /([0-9]+)\-([0-9]+)/i;
    97         $dhcp_start = $dhcp_part . $dhcp_start;
    98         $dhcp_stop = $dhcp_part . $dhcp_stop;
    99         $output .=
    100         "subnet $network netmask $subnet {\n" .
    101         "  range $dhcp_start $dhcp_stop;\n" .
    102         "  option broadcast-address $broadcast;\n" .
    103         "  option subnet-mask $subnet;\n" .
    104         "  option routers $ip;\n" .
    105         "}\n" .
    106         "\n";
    107       }
    108       else {
    109        $output .=
    110        "subnet $network netmask $subnet {not authoritative; }\n" .
    111        "\n";
    112       };
    113     };
    114   };
    115  
    116   return($output);
    117 };
    118 
    119 sub named_conf {
    120   my $output = genHeader("#");
    121   $output .=
    122   "options {\n" .
    123   "  directory \"/var/db/namedb\"\;\n" .
    124   "  forwarders {\n";
    125   foreach my $forward (@forwarder) {
    126     $output .= "$forward;\n";
    127   };
    128   $output .=
    129   "  };\n" .
    130   "};\n" .
    131   "\n" .
    132   "\n" .
    133   "zone \"\.\" {\n" .
    134   "  type hint;\n" .
    135   "  file \"/etc/namedb/named.root\"\;\n" .
    136   "}\;\n" .
    137   "\n" .
    138   "zone \"0\.0\.127\.IN-ADDR.ARPA\" {\n" .
    139   "  type master\;\n" .
    140   "  file \"/etc/namedb/localhost.rev\"\;\n" .
    141   "}\;\n" .
    142   "\n" .
    143   "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" .
    144   "  type master\;\n" .
    145   "  file \"/etc/namedb/localhost-v6.rev\"\;\n" .
    146   "};\n" .
    147   "\n";
    148 
    149 
    150   foreach my $tmpZone (sort keys %zone) {
    151     my $dnsZone = $zone{$tmpZone};
    152     $output .=
    153     "zone \"$tmpZone\" {\n" .
    154     "  type slave\;\n" .
    155     "  file \"slave-$tmpZone\"\;\n" .
    156     "  masters {\n";
    157     foreach my $tmpIP (sort @$dnsZone) {
    158       $output .= "    $tmpIP\;\n";
    159     };
    160     $output .=
    161     "  };\n" .
    162     "};\n" .
    163     "\n";
    164   };
    165  
    166   return($output);
    167 };
    168 
    169 
    170 
    171 sub rc_node_local {
    172   my $output = genHeader("#");
    173   my $masterNotUsed = master_ipNotUsed();
    174   $output.=
    175   "hostname=\"$nodetype$nodename.$domain\"\n" .
    176   "location=\"$location\"\n" .
    177   "\n";
    178 
    179   if( $tproxy ) {
    180     if( $tproxy =~ m/\d+\.\d+\.\d+\.\d+\/\d+/ ) {
    181       $output .=
    182       "# Tproxy is ran on this system\n".
    183       "tproxy_enable='YES'\n".
    184       "tproxy_range='$tproxy'\n".
    185       "\n";
    186     }
    187     elsif( $tproxy !~ m/no/i ) {
    188       $output .= "# WARNING - specification propably wrong - check " .
    189       "genesis. It should be a pure CIDR\n";
    190     };
    191   };
    192  
    193   $output .= "ifconfig_lo0_alias0=\"inet 172.31.255.1/32\"\n";
    194   if( $masterNotUsed ) {
    195     $output .= "ifconfig_lo0_alias1=\"inet $master_ip/32\"\n\n";
     177if ($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
     206interface $if
     207 ip ospf message-digest-key 1 md5 $OSPFPWD
     208 ip ospf authentication message-digest
     209 ip ospf dead-interval 180
     210EOO2
     211
     212   $keys++; 
     213
     214      $zebra.=sprintf  <<EOZ2;
     215
     216interface $if
     217 description $DESC{$if}
     218 no shutdown
     219EOZ2
     220}
     221
     222    }                     ######################   MAIN
     223
     224    if ($OS=~/Linux/)
     225{
     226       $ospfd2{$if}.=sprintf <<EOO21;
     227
     228interface $if
     229 ip ospf message-digest-key 1 md5 $OSPFPWD
     230 ip ospf authentication message-digest
     231EOO21
     232   $keys++; 
     233
     234      $zebra.=sprintf  <<EOZ21;
     235
     236interface $if
     237 description $DESC{$if}
     238 no shutdown
     239EOZ21
     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";
     248die "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
     314EOD2
     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
     373foreach $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
     397foreach $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);
    196412  }
    197   else {
    198     $output .= "#ifconfig_lo0_alias1=\"inet $master_ip/32\"\n\n";
    199   };
    200 
    201   foreach my $interface (sort keys %config) {
    202     (my $if, my $number) = split(/:/, $interface);
    203     if( defined $number ) {
    204       $output .= "ifconfig_$if\_alias$number=\"inet $IP{$interface}\"";
    205     }
    206     else {
    207       $output .= "ifconfig_$if=\"inet $IP{$interface}\"\t";
    208     };
    209     ## add some extra link information
    210     $output .= "\t# $DESC{$interface}\n";
    211   };
    212   return($output);
    213 };
    214 
    215 sub rc_local {
    216   my $output = genHeader("#");
    217   foreach my $if (sort keys %config) {
    218     if( ($if =~ /^wi[0-9]$/i) and ($TYPE{$if} =~ /wireless/i) ) {
    219       $output .=
    220       "$wicontrol -i $if -s $SDESC{$if}    # Nickname\n" .
    221       "#$wicontrol -i $if -t 7             # TXrate\n" .
    222       "$wicontrol -i $if -P 0              # PowerSave\n" .
    223       "$wicontrol -i $if -Z                # Zero SNR cache\n";
    224       if( $MODE{$if}=~/master/i ) {
    225         $output .=
    226         "$wicontrol -i $if -p 6            # hostap mode\n" .
    227         "$wicontrol -i $if -c 1            # broadcasting essid on\n" .
    228         "$wicontrol -i $if -n $ESSID{$if}  # network name\n" .
    229         "$wicontrol -i $if -q $ESSID{$if}  # ESSID\n" .
    230         "$wicontrol -i $if -f $CHANNEL{$if}# Channel\n";
    231       }
    232       else {
    233         $output .=
    234         "$wicontrol -i $if -p 1            # Client mode (managed)\n" .
    235         "$wicontrol -i $if -n $ESSID{$if}  # ESSID\n" .
    236         "# No channel - client follows\n" .
    237         "# $wicontrol -i $if -f 0          # Channel\n";
    238       };
    239     $output .= "\n";
    240     };
    241   };
    242   return($output);
    243 };
    244 
    245 
    246 
    247 sub resolv_conf {
    248   my $output = genHeader"#";
    249 
    250   $output .=
    251   "search wleiden.net.\n" .
    252   "nameserver 127.0.0.1\n" .
    253   "\n";
    254 
    255   foreach my $if (sort keys %config) {
    256     if( exists $POINT_TO_POINT{$if} ) {
    257       foreach my $ip ($POINT_TO_POINT{$if}) {
    258         $output .= "nameserver $ip # $DESC{$if}\n";
    259       };
    260     };
    261   };
    262   return($output);
    263 };
    264 
    265 
    266 
    267 sub snmpd_local_conf {
    268   my $output = genHeader("#");
    269   my $masterNotUsed = master_ipNotUsed();
    270   $output .=
    271   "# Location of the physical node.\n" .
    272   "#\n" .
    273   "syslocation \"$location\"\n" .
    274   "#\n" .
    275   "# Maintained by\n" .
    276   "syscontact \"$contact\"\n" .
    277   "\n";
    278 
    279   if( $DISK =~ /flash/i ) {
    280     $output .= "# Verify that disk is RO\n";
    281     $output .= "sh diskro /usr/local/sbin/diskro.sh\n\n";
    282   };
    283 
    284   $output .= "agentaddress 161,tcp:161\n";
    285 
    286   if( $masterNotUsed ) {
    287     $output .= "agentaddress $master_ip\n";
    288   };
    289  
    290   foreach my $if (keys %config) {
    291     if( $IP{$if} =~ /([0-9\.]+).*/ ) {
    292       $output .= "agentaddress $1\n";
    293     };
    294   };
    295   return($output);
    296 };
    297 
    298 
    299 
    300 sub parse_config {
    301   my $workingfile = $_[0];
    302   do($workingfile) || die("Cann't open/parse $workingfile");
    303   foreach my $if (keys %config) {
    304     my $cfg=$config{$if};
    305     while ($cfg) {
    306       $cfg=~s/^([^\n\r]+)[\r\n]*//m;
    307       my $line=$1;
    308       $line=~s/\s*#.*//;
    309       if (((my $name, my $value)=split(/=/,$line)) eq 2) {
    310         my $doit="if (exists(\$$name\{\"$if\"\})) {\$$name\{\"$if\"\}.=\";$value\";} else {\$$name\{\"$if\"\}.=\"$value\";}";
    311         eval($doit);
    312       };
    313       $cfg=~s/[\r\n]*$//m;
     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  <================
     432router 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
     450log file /var/log/ospf.log
     451
     452EOOL
     453# $rcconf.="\n\n" . $freebsd;
     454}
     455
     456sub 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
     484sub 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
     512sub parse_config
     513{
     514  foreach $if (keys %config)
     515  {
     516     $cfg=$config{$if};
     517if (! $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  }
     535if ($functions_only<1) {print "Done parsing config.\n";}
     536}
     537
     538sub iwconfig
     539{
     540  local($line)=@_;
     541  $nwcfg.="$iwconfig $line\n";
     542
     543}
     544
     545sub 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
     558sub 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
     578sub 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
     589sub 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                                                                               
     605sub 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
     620sub 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
     634sub 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
     649sub init_files
     650{
     651$sh=sprintf  <<EOSH;
     652#! /bin/bash
     653#
     654# Generated by $source
     655# on $now
     656#
     657$svn_version
     658
     659
     660gw_open=$gw_open
     661EOSH
     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
     676EONW
     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
     690option domain-name "$domain";
     691
     692default-lease-time 7200;
     693max-lease-time 2592000;
     694
     695ddns-update-style none;
     696
     697# Hack for the WET11
     698#
     699always-broadcast on;
     700
     701EOD
     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
     723hostname $hostname
     724password getronics
     725enable password getronics
     726
     727! Interfaces
     728
     729interface lo0
     730 description loopback                                                           
     731 ip address 127.0.0.1/8
     732
     733
     734EOZ
     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
     753Workdir: /var/www/html/mrtg
     754
     755
     756#
     757#
     758#
     759
     760Target[${hostname}_load]: `/usr/local/sbin/cpuload.pl`
     761MaxBytes[${hostname}_load]: 1000
     762Title[${hostname}_load]: CPU load on $hostname
     763PageTop[${hostname}_load]: <H1>CPU load on ${hostname}</H1>
     764Options[${hostname}_load]: transparent, gauge, nopercent
     765Legendi[${hostname}_load]: 5min
     766Legendo[${hostname}_load]: 15min
     767ShortLegend[${hostname}_load]: %
     768YLegend[${hostname}_load]: %
     769WithPeak[${hostname}_load]: wmy
     770
     771Target[${hostname}_mem]: `/usr/local/sbin/memusage.pl`
     772MaxBytes[${hostname}_mem]: 256000000
     773Title[${hostname}_mem]: Memory usage on ${hostname}
     774PageTop[${hostname}_mem]: <H1>Memory usage on ${hostname}</H1>
     775Options[${hostname}_mem]: transparent, gauge, nopercent
     776Legendi[${hostname}_mem]: free
     777Legendo[${hostname}_mem]: swap
     778ShortLegend[${hostname}_mem]: Bytes
     779YLegend[${hostname}_mem]: Bytes
     780WithPeak[${hostname}_mem]: wmy
     781
     782Target[${hostname}_up]: `/usr/local/sbin/uptime.pl`
     783MaxBytes[${hostname}_up]: 10000
     784Title[${hostname}_up]: ${hostname} Uptime
     785PageTop[${hostname}_up]: <H1>${hostname} Uptime</H1>
     786Options[${hostname}_up]: transparent, gauge, nopercent
     787Legendi[${hostname}_up]: uptime
     788Legendo[${hostname}_up]:
     789ShortLegend[${hostname}_up]: Days
     790YLegend[${hostname}_up]: Days
     791WithPeak[${hostname}_up]: wmy
     792
     793EOM
     794
     795$master_ip_on_alias="ifconfig_lo0_alias1=\"inet $master_ip/32\"";
     796foreach 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;
    314801    };
    315802  };
    316803};
    317804
    318 sub authorized_keys {
    319   my $output = genHeader("#");
    320   if( -e "$global_keyPath" ) {
    321     open( GLOBAL, "$global_keyPath" ) || die ("Cann't open $global_keyPath");
    322       $output .= join("", <GLOBAL>);
    323     close( GLOBAL );
    324   }
    325   else {
    326     $output .= "# No $global_keyPath\n";
    327   };
    328  
    329   if( -e "$ndir/$nodetype$nodename/$ssh_file" ) {
    330     open( NODE, "$ndir/$nodetype$nodename/$ssh_file" ) || die ("Cann't open $home/$nodename/$ssh_file");
    331       $output .= join("", <NODE>);
    332     close( NODE );
    333   }
    334   else {
    335     $output .= "# No $ndir/$nodetype$nodename/$ssh_file\n";
    336   };
    337  
    338   return($output);
     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
     817hostname="$hostname.wLeiden.NET"
     818location="$location"
     819
     820ifconfig_lo0_alias0="inet 172.31.255.1/32"
     821$master_ip_on_alias
     822EORC1
     823
     824if ($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";
    339831};
    340832
    341 sub do_it {
    342   my $file = $_[0];
    343   my $body = "";
    344  
    345   $file =~ s/\./_/g;
    346   $body=&$file;
    347   return($body);
     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;
     846search wleiden.net .
     847
     848# Local machine / own nameserver.
     849nameserver 127.0.0.1
     850EOR1
     851
     852#foreach $ns (split(/\s+/,$NS_resolv)) {
     853#       $resolv.="nameserver $ns\n";
     854#}
     855
     856foreach $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        };
    348861};
    349862
    350 if( exists $ARGV[0] ) {
    351   if( exists $ARGV[1] ) {
    352     parse_config($ARGV[0]);
    353     print do_it($ARGV[1]);
    354   }
    355   else {
    356     print "Usage `perl wleiden.pl 'inputfile' 'outputfile'`\n";
     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
     876options {
     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
     885EON1
     886
     887%x=();
     888foreach $ns (split(/\s+/,$NS_forward)) {
     889        next if $ns eq $master_ip;
     890        $named.="                   ${ns};\n";
     891        $x{ $ns } = 1;
     892        }
     893
     894foreach $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
     910zone "." {
     911        type hint;
     912        file "/etc/namedb/named.root";
     913};
     914
     915zone "0.0.127.IN-ADDR.ARPA" {
     916        type master;
     917        file "/etc/namedb/localhost.rev";
     918};
     919
     920zone "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
     925EON2
     926
     927push (@ZONES,"wLeiden.NET");
     928push (@ZONES,"wZoeterwoude.NET");
     929for ($i=16;$i<32;$i++) {push(@ZONES,"$i.172.in-addr.arpa");}
     930foreach $zone (@ZONES)
     931{
     932 $named.=sprintf<<EON3;
     933zone "$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
     946EON3
     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
     959EOM
     960
     961$snmpd .= qq|
     962# Location of the physical node.
     963#
     964syslocation "$location"
     965
     966|       if defined $location;
     967
     968$snmpd .= qq|
     969# Location of the physical node.
     970#
     971syscontact "$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
     983agentaddress 161,tcp:161
     984EOM
     985
     986my $master_ip_in_snmpd = "agentaddress $master_ip";
     987foreach my $if (keys %config) {
     988  if( $IP{$if} =~ /([0-9\.]+).*/ ) {
     989    if($master_ip eq $1) {$master_ip_in_snmpd=""};
     990$snmpd.=<<EOM;
     991agentaddress $1
     992EOM
    357993  };
    358994};
    359995
    360 1;
     996$snmpd.=<<EOM;
     997$master_ip_in_snmpd
     998
     999# end of file
     1000EOM
     1001}
     1002
     1003
     1004
     1005sub 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
     1023hostname $hostname
     1024password getronics
     1025enable password getronics
     1026
     1027interface lo0
     1028EOO
     1029  return($init);
     1030}
     1031
     1032
     1033sub mrtg1
     1034{
     1035$mrtg.=sprintf <<EOM2;
     1036Target[${if}_traf]: `/usr/local/sbin/ipchains_traf.pl ${if}`
     1037MaxBytes[${if}_traf]: $SPEED{$if}
     1038Title[${if}_traf]: Traffic Analysis ${if} $SDESC{$if}
     1039PageTop[${if}_traf]: <H1>Traffic on $if $DESC{$if}</H1>
     1040Options[${if}_traf]: transparent
     1041WithPeak[${if}_traf]: wmy                                                       
     1042
     1043EOM2
     1044
     1045if ($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;
     1056Target[${if}_quality]: `/usr/local/sbin/wlan_quality.pl ${if}`
     1057MaxBytes1[${if}_quality]: 100
     1058MaxBytes2[${if}_quality]: 100
     1059Title[${if}_quality]:  Quality $if $SDESC{$if}
     1060PageTop[${if}_quality]: <H1>Quality $if $DESC{$if}</H1>
     1061Options[${if}_quality]: transparent, gauge, nopercent
     1062Legendi[${if}_quality]: Quality
     1063Legendo[${if}_quality]: Noise
     1064ShortLegend[${if}_quality]: /100
     1065YLegend[${if}_quality]: /100
     1066WithPeak[${if}_quality]: wmy                                                   
     1067
     1068Target[${if}_rate]: `/usr/local/sbin/wlan_bitrate.pl ${if}`
     1069MaxBytes1[${if}_rate]: 11
     1070MaxBytes2[${if}_rate]: 11
     1071Title[${if}_rate]: Bitrate $if $SDESC{$if}
     1072PageTop[${if}_rate]: <H1>Bitrate $if $DESC{$if}</H1>
     1073Options[${if}_rate]: transparent, gauge, nopercent
     1074Legendi[${if}_rate]: Bitrate
     1075ShortLegend[${if}_rate]: Mb/s
     1076YLegend[${if}_rate]: Mb/s
     1077WithPeak[${if}_rate]: wmy                                                     
     1078
     1079EOM3
     1080          if ($MODE{$if}=~/master/i)
     1081          {
     1082          $mrtg.=sprintf  <<EOM4;
     1083Target[${if}_users]: `/usr/local/sbin/wlan_users.pl ${if}`
     1084MaxBytes[${if}_users]: 100
     1085Title[${if}_users]: Users on $if $SDESC{$if}
     1086PageTop[${if}_users]: <H1>Users on $if $DESC{$if}</H1>
     1087Options[${if}_users]: transparent, gauge, nopercent
     1088Legendi[${if}_users]: Users
     1089ShortLegend[${if}_users]: users
     1090YLegend[${if}_users]: users
     1091WithPeak[${if}_users]: wmy                                                     
     1092
     1093EOM4
     1094          }
     1095        }  # wireless
     1096
     1097
     1098}
     1099
     1100sub mrtg2
     1101{
     1102$mrtg.=sprintf <<EOM5;
     1103Target[${if}_lat]: `/usr/local/sbin/latency.pl $p`
     1104MaxBytes1[${if}_lat]: 100
     1105MaxBytes2[${if}_lat]: 200
     1106Title[${if}_lat]: Latency/PktLoss Analysis to $p on $if $SDESC{$if}
     1107PageTop[${if}_lat]: <H1>Latency/PktLoss to $p on $if $DESC{$if}</H1>
     1108Options[${if}_lat]: transparent, gauge, nopercent
     1109Legendi[${if}_lat]: PacketLoss%
     1110Legendo[${if}_lat]: Max Latency (ms)
     1111ShortLegend[${if}_lat]: %/ms
     1112YLegend[${if}_lat]: %/ms
     1113WithPeak[${if}_lat]: wmy
     1114 
     1115EOM5
     1116
     1117}
     1118
     1119sub ahum
     1120{
     1121  print "AHUM!\n";
     1122}
     1123
     1124#return(1);
     1125
Note: See TracChangeset for help on using the changeset viewer.