[RFC,15/15] network startup: Only work with configured zones

Message ID 20230523172314.7826-16-jonatan.schlag@ipfire.org
State Changes Requested
Headers
Series [RFC,01/15] Remove ipsec interface creation from network startup |

Commit Message

Jonatan Schlag May 23, 2023, 5:23 p.m. UTC
  Otherwise the called script fails with an failure message.
This does not hurt but is ugly.
I also changed my mind about the wording here. Because we only have four
possible zones we could talk about valid zones. But I think it is easier
and more future proof to talk about what is configured on the system.

Should make further changes easier.

Signed-off-by: Jonatan Schlag <jonatan.schlag@ipfire.org>
---
 src/initscripts/system/network | 37 +++++++++++++++++++---------------
 1 file changed, 21 insertions(+), 16 deletions(-)
  

Comments

Michael Tremer May 24, 2023, 9 a.m. UTC | #1
See my former email about how to fix this.

I believe this is the third patch in this series that touches the same code by adding/removing arrays and keeping status.

Just use the functions that you have created as it will make this all a lot easier to read and extend whenever necessary.

-Michael

> On 23 May 2023, at 18:23, Jonatan Schlag <jonatan.schlag@ipfire.org> wrote:
> 
> Otherwise the called script fails with an failure message.
> This does not hurt but is ugly.
> I also changed my mind about the wording here. Because we only have four
> possible zones we could talk about valid zones. But I think it is easier
> and more future proof to talk about what is configured on the system.
> 
> Should make further changes easier.
> 
> Signed-off-by: Jonatan Schlag <jonatan.schlag@ipfire.org>
> ---
> src/initscripts/system/network | 37 +++++++++++++++++++---------------
> 1 file changed, 21 insertions(+), 16 deletions(-)
> 
> diff --git a/src/initscripts/system/network b/src/initscripts/system/network
> index ff305e472..abbd5bd88 100644
> --- a/src/initscripts/system/network
> +++ b/src/initscripts/system/network
> @@ -21,6 +21,8 @@
> 
> . /etc/sysconfig/rc
> . ${rc_functions}
> +. /etc/init.d/networking/functions.network
> +
> eval $(/usr/local/bin/readhash /var/ipfire/ethernet/settings)
> 
> DO="${1}"
> @@ -31,34 +33,37 @@ if ! [[ "${DO}" == "start" ||  "${DO}" == "restart" || "${DO}" == "stop" ]]; the
> exit 1
> fi
> 
> -declare -a VALID_ZONES
> +declare -a CONFIGURED_ZONES
> 
> -VALID_ZONES+=("blue")
> -VALID_ZONES+=("green")
> -VALID_ZONES+=("orange")
> +for zone in blue green orange; do
> + if is_${zone}_used; then
> + CONFIGURED_ZONES+=("${zone}")
> + fi
> +done
> 
> -# If we are called as /etc/init.d/network also red is a valid zone.
> -# Otherwise we are called as /etc/init.d/network-local where red
> -# is invalid.
> +# If we are called as /etc/init.d/network also red is a configured zone.
> +# Otherwise we are called as /etc/init.d/network-local where we do
> +# not need to take care of red
> if [[ "$(basename $0)" == "network" ]]; then
> - VALID_ZONES+=("red")
> + CONFIGURED_ZONES+=("red")
> fi
> 
> declare -A ZONE_ACTION
> 
> -for i in "${VALID_ZONES[@]}"; do
> +for i in "${CONFIGURED_ZONES[@]}"; do
> ZONE_ACTION[${i}]=false
> done
> 
> if [ $# -eq 0 ]; then
> - for i in "${VALID_ZONES[@]}"; do
> - ZONE_ACTION[${i}]=true
> + for zone in "${CONFIGURED_ZONES[@]}"; do
> + ZONE_ACTION[${zone}]=true
> done
> fi
> 
> +
> while [ $# -ne 0 ]; do
> ZONE_VALID=false
> - for i in "${VALID_ZONES[@]}"; do
> + for i in "${CONFIGURED_ZONES[@]}"; do
> if [ "${i}" == "${1}" ]; then
> ZONE_ACTION[${i}]=true
> ZONE_VALID=true
> @@ -68,7 +73,7 @@ while [ $# -ne 0 ]; do
> done
> 
> if ! ${ZONE_VALID}; then
> - echo "'${1}' is not a valid zone. Cannot go on."
> + echo "'${1}' is not configured on this system. Cannot go on."
> exit 1
> fi
> done
> @@ -76,14 +81,14 @@ done
> case "${DO}" in
> start)
> # Starting interfaces...
> - for i in "${VALID_ZONES[@]}"; do
> + for i in "${CONFIGURED_ZONES[@]}"; do
> ${ZONE_ACTION[${i}]} && /etc/rc.d/init.d/networking/${i} start
> done
> ;;
> 
> stop)
> # Stopping interfaces...
> - for i in "${VALID_ZONES[@]}"; do
> + for i in "${CONFIGURED_ZONES[@]}"; do
> ${ZONE_ACTION[${i}]} && /etc/rc.d/init.d/networking/${i} stop
> done
> 
> @@ -91,7 +96,7 @@ case "${DO}" in
> ;;
> 
> restart)
> - for i in "${VALID_ZONES[@]}"; do
> + for i in "${CONFIGURED_ZONES[@]}"; do
> if ${ZONE_ACTION[${i}]}; then
> ARGS+=" ${i}"
> fi
> -- 
> 2.30.2
>
  

Patch

diff --git a/src/initscripts/system/network b/src/initscripts/system/network
index ff305e472..abbd5bd88 100644
--- a/src/initscripts/system/network
+++ b/src/initscripts/system/network
@@ -21,6 +21,8 @@ 
 
 . /etc/sysconfig/rc
 . ${rc_functions}
+. /etc/init.d/networking/functions.network
+
 eval $(/usr/local/bin/readhash /var/ipfire/ethernet/settings)
 
 DO="${1}"
@@ -31,34 +33,37 @@  if ! [[ "${DO}" == "start" ||  "${DO}" == "restart" || "${DO}" == "stop" ]]; the
 		exit 1
 fi
 
-declare -a VALID_ZONES
+declare -a CONFIGURED_ZONES
 
-VALID_ZONES+=("blue")
-VALID_ZONES+=("green")
-VALID_ZONES+=("orange")
+for zone in blue green orange; do
+	if is_${zone}_used; then
+		CONFIGURED_ZONES+=("${zone}")
+	fi
+done
 
-# If we are called as /etc/init.d/network also red is a valid zone.
-# Otherwise we are called as /etc/init.d/network-local where red
-# is invalid.
+# If we are called as /etc/init.d/network also red is a configured zone.
+# Otherwise we are called as /etc/init.d/network-local where we do
+# not need to take care of red
 if [[ "$(basename $0)" == "network" ]]; then
-	VALID_ZONES+=("red")
+	CONFIGURED_ZONES+=("red")
 fi
 
 declare -A ZONE_ACTION
 
-for i in "${VALID_ZONES[@]}"; do
+for i in "${CONFIGURED_ZONES[@]}"; do
 	ZONE_ACTION[${i}]=false
 done
 
 if [ $# -eq 0 ]; then
-	for i in "${VALID_ZONES[@]}"; do
-		ZONE_ACTION[${i}]=true
+	for zone in "${CONFIGURED_ZONES[@]}"; do
+		ZONE_ACTION[${zone}]=true
 	done
 fi
 
+
 while [ $# -ne 0 ]; do
 	ZONE_VALID=false
-	for i in "${VALID_ZONES[@]}"; do
+	for i in "${CONFIGURED_ZONES[@]}"; do
 		if [ "${i}" == "${1}" ]; then
 			ZONE_ACTION[${i}]=true
 			ZONE_VALID=true
@@ -68,7 +73,7 @@  while [ $# -ne 0 ]; do
 	done
 
 	if ! ${ZONE_VALID}; then
-		echo "'${1}' is not a valid zone. Cannot go on."
+		echo "'${1}' is not configured on this system. Cannot go on."
 		exit 1
 	fi
 done
@@ -76,14 +81,14 @@  done
 case "${DO}" in
 	start)
 		# Starting interfaces...
-		for i in "${VALID_ZONES[@]}"; do
+		for i in "${CONFIGURED_ZONES[@]}"; do
 			${ZONE_ACTION[${i}]} && /etc/rc.d/init.d/networking/${i} start
 		done
 		;;
 
 	stop)
 		# Stopping interfaces...
-		for i in "${VALID_ZONES[@]}"; do
+		for i in "${CONFIGURED_ZONES[@]}"; do
 			${ZONE_ACTION[${i}]} && /etc/rc.d/init.d/networking/${i} stop
 		done
 
@@ -91,7 +96,7 @@  case "${DO}" in
 		;;
 
 	restart)
-		for i in "${VALID_ZONES[@]}"; do
+		for i in "${CONFIGURED_ZONES[@]}"; do
 			if ${ZONE_ACTION[${i}]}; then
 				ARGS+=" ${i}"
 			fi