public inbox for development@lists.ipfire.org
 help / color / mirror / Atom feed
From: Leo-Andres Hofmann <hofmann@leo-andres.de>
To: development@lists.ipfire.org
Subject: [PATCH v2 5/6] zoneconf.cgi: Import network-functions.pl
Date: Thu, 18 Feb 2021 15:30:15 +0100	[thread overview]
Message-ID: <20210218143016.972-5-hofmann@leo-andres.de> (raw)
In-Reply-To: <20210218143016.972-1-hofmann@leo-andres.de>

[-- Attachment #1: Type: text/plain, Size: 3719 bytes --]

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) {
 		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()) {
 			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()) {
 			push(@stp_html, ["\t\t<td></td>\n", "\t\t<td></td>\n"]); # print empty cell
 			next;
 		}
-- 
2.27.0.windows.1


  parent reply	other threads:[~2021-02-18 14:30 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-18 14:30 [PATCH v2 1/6] zoneconf.cgi: Change NIC display order, improve code Leo-Andres Hofmann
2021-02-18 14:30 ` [PATCH v2 2/6] zoneconf.cgi: Modify CSS to allow additional rows Leo-Andres Hofmann
2021-02-18 14:30 ` [PATCH v2 3/6] zoneconf.cgi: Add STP options to GUI Leo-Andres Hofmann
2021-02-18 14:30 ` [PATCH v2 4/6] zoneconf.cgi: Add Javascript for new GUI elements Leo-Andres Hofmann
2021-02-18 14:30 ` Leo-Andres Hofmann [this message]
2021-02-19 19:24   ` [PATCH v2 5/6] zoneconf.cgi: Import network-functions.pl Michael Tremer
2021-02-20 11:07     ` Aw: " Bernhard Bitsch
2021-02-21 10:35       ` Leo Hofmann
2021-02-18 14:30 ` [PATCH v2 6/6] zoneconf.cgi: Improve VLAN & STP inputs Leo-Andres Hofmann
2021-02-19 19:22   ` Michael Tremer
2021-02-21 10:38     ` Leo Hofmann
2021-02-21 19:06       ` Jonatan Schlag
2021-02-22 23:46         ` Leo Hofmann
2021-02-22 19:02       ` Michael Tremer
2021-02-22 22:27         ` Adolf Belka (ipfire)
2021-02-22 23:22         ` Leo Hofmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210218143016.972-5-hofmann@leo-andres.de \
    --to=hofmann@leo-andres.de \
    --cc=development@lists.ipfire.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox