Zone based code rewritten in header.pl:
$swroot = '/razwall/config';
$zone_settings = "${swroot}/zones/settings";
# replace manual definition with dynamic zone data - RazWall:
#@zones = qw 'LAN DMZ LAN2 WAN';
%zonecolors;
%strings_zone;
%zone_ifaces;
@zones; # FETCH DYNAMIC ZONES - RAZWALL
@zones = &get_zones();
foreach $zone (@zones) {
open(ZF, "< $swroot/zones/$zone") or print "Unable to open zone file: $!\n";
@data = <ZF>;
close(ZF);
# @data sample:
# ZIFACE=eth0|eth1|eth2
# ZSTRING=LAN|PRETTY NAME|DUMB NAME
# ZCOLOR=green|red|blue|orange|yellow|... endless opportunitures
# ZTYPE=LAN|WAN|LOCAL
# ZDESC=Description of zone
# ZADDRESS=
# ZNETMASK=
# ZADDITIONAL=
# ZDHCP=off
foreach $kv (@data) {
($k,$v) = split(/=/, $kv);
${$k} = $v;
}
%zonecolors = ($zone => "$ZCOLOR");
%strings_zone = ($zone => "$ZSTRING");
%zone_ifaces = ($zone => "$ZIFACE");
%zone_type = ($zone => "$ZTYPE");
%zone_desc = ($zone => "$ZDESC");
%zone_address = ($zone => "$ZADDRESS");
%zone_netmask = ($zone => "$ZNETMASK");
%zone_additional = ($zone => "$ZADDITIONAL");
%zone_dhcp = ($zone => "$ZDHCP");
}
sub get_zones() { # ADDED FOR RAZWALL DYNAMIC ZONES
my $file = $zone_settings;
return read_config_file($file,'default');
}
sub read_config_file($$) {
my $filename = shift;
my $filename_default = shift;
my @lines;
if (! -e $filename) {
$filename = $filename_default;
}
open (FILE, "$filename");
foreach my $line (<FILE>) {
chomp($line);
$line =~ s/[\r\n]//g;
push(@lines, $line);
}
close (FILE);
return @lines;
}
sub validzones() {
my @ret = ();
my @zones = get_zones;
# USE NEW ZONE CONFIG PARAMS:
# %zonecolors = ($zone => "$ZCOLOR");
# %strings_zone = ($zone => "$ZSTRING");
# %zone_ifaces = ($zone => "$ZIFACE");
# %zone_type = ($zone => "$ZTYPE");
foreach $zone (@zones) {
if($zone_type{$zone} eq 'LAN') {
push(@ret, $zone);
next;
}
if( (!$zone_type{$zone} eq 'WAN') && (!$zone_type{$zone} eq 'LOCAL')) {
push(@ret, $zone);
next;
}
}
return \@ret;
}