source: genesis/tools/wleiden.pl@ 4003

Last change on this file since 4003 was 3981, checked in by rick, 20 years ago

Even vergeten dat de proxy ook aan de master geplakt zat. Alias 1tje
opgehoogd

  • Property svn:executable set to *
File size: 23.7 KB
Line 
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";
78 }
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}");}
176
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);
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 <================
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;
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
817hostname="$hostname.wLeiden.NET"
818location="$location"
819
820ifconfig_lo0_alias0="inet 172.31.255.1/32"
821$master_ip_on_alias
822EORC1
823
824#$freebsd.=sprintf <<EOFB1;
825# Wireless Leiden startup script om wireless kaarten te initialiseren
826#
827# Generated by $source
828# on $now
829#
830# $author
831# home=/etc/wl/freebsd.sh
832#
833#$svn_version
834#EOFB1
835
836$resolv.=sprintf <<EOR1;
837search wleiden.net .
838
839# Local machine / own nameserver.
840nameserver 127.0.0.1
841EOR1
842
843#foreach $ns (split(/\s+/,$NS_resolv)) {
844# $resolv.="nameserver $ns\n";
845#}
846
847foreach $if (sort keys %config) {
848 foreach $ns (split(/[\s$separator]+/,$OSPF_NEIGHBORS{$if})) {
849 next unless $ns =~ m/\d+/;
850 $resolv.="# Nameserver on adjacent node - $DESC{$if} over $if\nnameserver $ns\n\n";
851 };
852};
853
854
855
856$named.=sprintf <<EON1;
857# named.conf
858#
859# Generated by $source
860# on $now
861#
862# $author
863# home=/etc/namedb/named.conf
864#
865$svn_version
866
867options {
868 directory "/var/db/namedb";
869 forward only;
870 forwarders {
871 172.17.143.4;
872 172.17.8.68;
873 172.20.128.98;
874// 172.18.8.66; // Internet GW Jasper
875// 172.17.32.66; // Internet GW Dirkx
876EON1
877
878%x=();
879foreach $ns (split(/\s+/,$NS_forward)) {
880 next if $ns eq $master_ip;
881 $named.=" ${ns};\n";
882 $x{ $ns } = 1;
883 }
884
885foreach $if (sort keys %config) {
886 foreach $ns (split(/[\s$separator]+/,$OSPF_NEIGHBORS{$if})) {
887 next unless $ns =~ m/\d+/;
888 $x{ $ns } = 0;
889 };
890};
891
892#foreach(sort keys(%x)) {
893# next if $x{$_};
894# $named.="// $_; // Next door Neighbour..\n";
895# }
896
897$named.=sprintf <<EON2;
898 };
899};
900
901zone "." {
902 type hint;
903 file "/etc/namedb/named.root";
904};
905
906zone "0.0.127.IN-ADDR.ARPA" {
907 type master;
908 file "/etc/namedb/localhost.rev";
909};
910
911zone "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" {
912 type master;
913 file "/etc/namedb/localhost-v6.rev";
914};
915
916EON2
917
918push (@ZONES,"wLeiden.NET");
919for ($i=16;$i<32;$i++) {push(@ZONES,"$i.172.in-addr.arpa");}
920foreach $zone (@ZONES)
921{
922 $named.=sprintf<<EON3;
923zone "$zone" {
924 type slave;
925 file "slave-$zone";
926 masters { 172.18.8.66; 212.61.66.38;};
927};
928
929EON3
930}
931
932
933$snmpd=<<EOM;
934# /usr/local/share/snmp/snmpd.local.conf
935# overwrites/augments the data in snmpd.conf
936# which is identical on each node with data
937# specific to this node.
938#
939mibs +LIGHT80211-MIB
940EOM
941
942$snmpd .= qq|
943# Location of the physical node.
944#
945syslocation "$location"
946
947| if defined $location;
948
949$snmpd .= qq|
950# Location of the physical node.
951#
952syscontact "$contact"
953
954| if defined $contact;
955
956$snmpd .=
957 "# Verify that disk is RO\n".
958 "sh diskro /usr/local/sbin/diskro.sh\n\n"
959 if ($DISK eq 'FLASH');
960
961$snmpd.=<<EOM;
962
963# Also listen to tcp
964agentaddress 161,tcp:161
965
966
967# end of file
968EOM
969}
970
971
972
973sub init_ospfd
974{
975
976 local($init)=sprintf <<EOO;
977! -*- ospfd -*-
978!
979! osfpd configuration for $hostname
980!
981! Configuration generated by $source
982! on $now
983!
984! DO NOT CHANGE!
985!
986! $author
987! home=/usr/local/etc/zebra/ospfd.conf
988!
989$svn_version
990
991hostname $hostname
992password getronics
993enable password getronics
994
995interface lo0
996EOO
997 return($init);
998}
999
1000
1001sub mrtg1
1002{
1003$mrtg.=sprintf <<EOM2;
1004Target[${if}_traf]: `/usr/local/sbin/ipchains_traf.pl ${if}`
1005MaxBytes[${if}_traf]: $SPEED{$if}
1006Title[${if}_traf]: Traffic Analysis ${if} $SDESC{$if}
1007PageTop[${if}_traf]: <H1>Traffic on $if $DESC{$if}</H1>
1008Options[${if}_traf]: transparent
1009WithPeak[${if}_traf]: wmy
1010
1011EOM2
1012
1013if ($functions_only<1)
1014{
1015 ipchains("-N ${if}-i");
1016 ipchains("-N ${if}-o");
1017 ipchains("-I input -i ${if} -j ${if}-i");
1018 ipchains("-I output -i ${if} -j ${if}-o");
1019
1020}
1021 if ($TYPE{$if}=~/wireless/i)
1022 {
1023 $mrtg.=sprintf <<EOM3;
1024Target[${if}_quality]: `/usr/local/sbin/wlan_quality.pl ${if}`
1025MaxBytes1[${if}_quality]: 100
1026MaxBytes2[${if}_quality]: 100
1027Title[${if}_quality]: Quality $if $SDESC{$if}
1028PageTop[${if}_quality]: <H1>Quality $if $DESC{$if}</H1>
1029Options[${if}_quality]: transparent, gauge, nopercent
1030Legendi[${if}_quality]: Quality
1031Legendo[${if}_quality]: Noise
1032ShortLegend[${if}_quality]: /100
1033YLegend[${if}_quality]: /100
1034WithPeak[${if}_quality]: wmy
1035
1036Target[${if}_rate]: `/usr/local/sbin/wlan_bitrate.pl ${if}`
1037MaxBytes1[${if}_rate]: 11
1038MaxBytes2[${if}_rate]: 11
1039Title[${if}_rate]: Bitrate $if $SDESC{$if}
1040PageTop[${if}_rate]: <H1>Bitrate $if $DESC{$if}</H1>
1041Options[${if}_rate]: transparent, gauge, nopercent
1042Legendi[${if}_rate]: Bitrate
1043ShortLegend[${if}_rate]: Mb/s
1044YLegend[${if}_rate]: Mb/s
1045WithPeak[${if}_rate]: wmy
1046
1047EOM3
1048 if ($MODE{$if}=~/master/i)
1049 {
1050 $mrtg.=sprintf <<EOM4;
1051Target[${if}_users]: `/usr/local/sbin/wlan_users.pl ${if}`
1052MaxBytes[${if}_users]: 100
1053Title[${if}_users]: Users on $if $SDESC{$if}
1054PageTop[${if}_users]: <H1>Users on $if $DESC{$if}</H1>
1055Options[${if}_users]: transparent, gauge, nopercent
1056Legendi[${if}_users]: Users
1057ShortLegend[${if}_users]: users
1058YLegend[${if}_users]: users
1059WithPeak[${if}_users]: wmy
1060
1061EOM4
1062 }
1063 } # wireless
1064
1065
1066}
1067
1068sub mrtg2
1069{
1070$mrtg.=sprintf <<EOM5;
1071Target[${if}_lat]: `/usr/local/sbin/latency.pl $p`
1072MaxBytes1[${if}_lat]: 100
1073MaxBytes2[${if}_lat]: 200
1074Title[${if}_lat]: Latency/PktLoss Analysis to $p on $if $SDESC{$if}
1075PageTop[${if}_lat]: <H1>Latency/PktLoss to $p on $if $DESC{$if}</H1>
1076Options[${if}_lat]: transparent, gauge, nopercent
1077Legendi[${if}_lat]: PacketLoss%
1078Legendo[${if}_lat]: Max Latency (ms)
1079ShortLegend[${if}_lat]: %/ms
1080YLegend[${if}_lat]: %/ms
1081WithPeak[${if}_lat]: wmy
1082
1083EOM5
1084
1085}
1086
1087sub ahum
1088{
1089 print "AHUM!\n";
1090}
1091
1092#return(1);
1093
Note: See TracBrowser for help on using the repository browser.