> On 18 Feb 2021, at 14:30, Leo-Andres Hofmann <hofmann(a)leo-andres.de> wrote: > > Remove custom functions and use network-functions.pl instead to detect > the available zones correctly. This also removes the requirement that > a device must be assigned for a zone to become visible/configurable. > > Fixes: #12568 > > Signed-off-by: Leo-Andres Hofmann <hofmann(a)leo-andres.de> > --- > html/cgi-bin/zoneconf.cgi | 37 ++++++++----------------------------- > 1 file changed, 8 insertions(+), 29 deletions(-) > > diff --git a/html/cgi-bin/zoneconf.cgi b/html/cgi-bin/zoneconf.cgi > index eb6cd0e66..9d01d06ce 100644 > --- a/html/cgi-bin/zoneconf.cgi > +++ b/html/cgi-bin/zoneconf.cgi > @@ -25,6 +25,7 @@ use Scalar::Util qw(looks_like_number); > require '/var/ipfire/general-functions.pl'; > require "${General::swroot}/lang.pl"; > require "${General::swroot}/header.pl"; > +require "${General::swroot}/network-functions.pl"; > > ###--- HTML HEAD ---### > my $extraHead = <<END > @@ -152,8 +153,8 @@ my $restart_notice = ""; > &Header::getcgihash(\%cgiparams); > &Header::showhttpheaders(); > > -# Define all zones we will check for NIC assignment > -my @zones = ("red", "green", "orange", "blue"); > +# Get all network zones that are currently enabled > +my @zones = Network::get_available_network_zones(); > > # Get all physical NICs present > opendir(my $dh, "/sys/class/net/"); > @@ -187,20 +188,6 @@ foreach (@nics) { > } > } > > -### Functions ### > - > -# Check if a zone is in IP mode or in PPP, PPPoE, VDSL, ... mode > -sub is_zonetype_ip { > - my $zone_type = shift; > - return ($zone_type eq "STATIC" || $zone_type eq "DHCP"); > -} > - > -# Check if a zone is activated (device assigned) > -sub is_zone_activated { > - my $zone = uc shift; > - return ($ethsettings{"${zone}_DEV"} ne ""); > -} > - > ### START PAGE ### > &Header::openpage($Lang::tr{"zoneconf title"}, 1, $extraHead); > &Header::openbigbox('100%', 'center'); > @@ -211,7 +198,8 @@ if ($cgiparams{"ACTION"} eq $Lang::tr{"save"}) { > my %VALIDATE_nic_check = (); > my $VALIDATE_error = ""; > > - foreach (@zones) { > + # Loop trough all known zones to ensure a complete configuration file is created > + foreach (@Network::known_network_zones) { Quite a good idea to have a global constant for this :) > my $uc = uc $_; > my $slave_string = ""; > my $zone_mode = $cgiparams{"MODE $uc"}; > @@ -383,14 +371,11 @@ END > foreach (@zones) { > my $uc = uc $_; > > - # If the zone is not activated, don't show it > - next unless is_zone_activated($_); > - > # If the red zone is in PPP mode, don't show a mode dropdown > if ($uc eq "RED") { > my $red_type = $ethsettings{"RED_TYPE"}; > > - unless (is_zonetype_ip($red_type)) { > + unless (Network::is_red_mode_ip()) { Wouldn’t perl complain if this isn’t called with an “&”? > print "\t\t<td class='heading bold $_'>$uc ($red_type)</td>\n"; > > next; # We're done here > @@ -436,12 +421,9 @@ foreach (@nics) { > my $uc = uc $_; > my $highlight = ""; > > - # If the zone is not activated, don't show it > - next unless is_zone_activated($_); > - > if ($uc eq "RED") { > # VLANs/Bridging is not possible if the RED interface is set to PPP, PPPoE, VDSL, ... > - unless (is_zonetype_ip($ethsettings{"RED_TYPE"})) { > + unless (Network::is_red_mode_ip()) { > my $checked = ""; > > if ($mac eq $ethsettings{"${uc}_MACADDR"}) { > @@ -519,12 +501,9 @@ my @stp_html = (); # form fields buffer (two rows) > foreach (@zones) { # load settings and prepare form elements for each zone > my $uc = uc $_; > > - # skip if zone is not activated > - next unless is_zone_activated($_); > - > # STP is not available if the RED interface is set to PPP, PPPoE, VDSL, ... > if ($uc eq "RED") { > - unless (is_zonetype_ip($ethsettings{"RED_TYPE"})) { > + unless (Network::is_red_mode_ip()) { Same as above. > push(@stp_html, ["\t\t<td></td>\n", "\t\t<td></td>\n"]); # print empty cell > next; > } > -- > 2.27.0.windows.1 > -Michael