]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
update ifconfig.sh
authorMark Andrews <marka@isc.org>
Thu, 9 Jun 2022 08:13:35 +0000 (18:13 +1000)
committerMark Andrews <marka@isc.org>
Thu, 7 Jul 2022 00:15:35 +0000 (10:15 +1000)
* make it harder to get the interface numbers wrong by using 'max'
to specify the upper bound of the sequence of interfaces and use 'max'
when calculating the interface number
* extract the platform specific instruction into 'up' and 'down'
and call them from the inner loop so that the interface number is
calculated in one place.
* calculate the A and AAAA address in a single place rather than
in each command
* use /sbin/ipadm on Solaris 2.11 and greater

(cherry picked from commit abfb5b11739d64bf798516f305390cb369a69241)

bin/tests/system/ifconfig.sh

index 7accc0056f4f027a37db694f1304e51b8191340d..8824c258bc62a67cae8301730853408abdd20968 100755 (executable)
@@ -46,10 +46,204 @@ case "$sys" in
                 ;;
 esac
 
-case "$1" in
+up() {
+       case "$sys" in
+           *-pc-solaris2.5.1)
+               [ "$a" ] && ifconfig lo0:$int $a netmask 0xffffffff up
+               ;;
+           *-sun-solaris2.[6-7])
+               [ "$a" ] && ifconfig lo0:$int $a netmask 0xffffffff up
+               ;;
+           *-*-solaris2.[8-9]|*-*-solaris2.10)
+               [ "$a" ] && {
+                       /sbin/ifconfig lo0:$int plumb
+                       /sbin/ifconfig lo0:$int $a up
+                       /sbin/ifconfig lo0:$int mtu 1500
+               }
+               [ "$aaaa" ] && {
+                       /sbin/ifconfig lo0:$int inet6 plumb
+                       /sbin/ifconfig lo0:$int inet6 $aaaa up
+               }
+               ;;
+           *-*-solaris2.1[1-9])
+               [ "$a" ] && {
+                       /sbin/ipadm create-addr -t -T static \
+                                   -a $a lo0/bind9v4$int ||
+                       echo failed lo0/bind9v4$int
+               }
+               [ "$aaaa" ] && {
+                       /sbin/ipadm create-addr -t -T static \
+                                   -a $aaaa lo0/bind9v6$int ||
+                       echo failed lo0/bind9v6$int
+               }
+              ;;
+           *-*-linux*)
+               if [ "$use_ip" ]; then
+                       ip address add $a/24 dev lo:$int
+                       ip link set dev lo:$int mtu 1500
+                       [ "$aaaa" ] && ip address add $aaaa/64 dev lo
+               else
+                       ifconfig lo:$int $a up netmask 255.255.255.0 mtu 1500
+                       [ "$aaaa" ] && ifconfig lo inet6 add $aaaa/64
+               fi
+               ;;
+           *-unknown-freebsd*)
+               [ "$a" ] && ifconfig lo0 $a alias netmask 0xffffffff mtu 1500
+               [ "$aaaa" ] && ifconfig lo0 inet6 $aaaa alias
+               ;;
+           *-unknown-dragonfly*|*-unknown-netbsd*|*-unknown-openbsd*)
+               [ "$a" ] && ifconfig lo0 $a alias netmask 255.255.255.0 mtu 1500
+               [ "$aaaa" ] && ifconfig lo0 inet6 $aaaa alias
+               ;;
+           *-*-bsdi[3-5].*)
+               [ "$a" ] && ifconfig lo0 add $a netmask 255.255.255.0
+               ;;
+           *-dec-osf[4-5].*)
+               [ "$a" ] && ifconfig lo0 alias $a
+               ;;
+           *-sgi-irix6.*)
+               [ "$a" ] && ifconfig lo0 alias $a
+               ;;
+           *-*-sysv5uw7*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
+               [ "$a" ] && ifconfig lo0 $a alias netmask 0xffffffff
+               ;;
+           *-ibm-aix4.*|*-ibm-aix5.*)
+               [ "$a" ] && ifconfig lo0 alias $a
+               [ "$aaaa" ] && ifconfig lo0 inet6 alias -dad $aaaa/64
+               ;;
+           hpux)
+               [ "$a" ] && ifconfig lo0:$int $a netmask 255.255.255.0 up
+               [ "$aaaa" ] && ifconfig lo0:$int inet6 $aaaa up
+               ;;
+           *-sco3.2v*)
+               [ "$a" ] && ifconfig lo0 alias $a
+               ;;
+           *-darwin*)
+               [ "$a" ] && ifconfig lo0 alias $a
+               [ "$aaaa" ] && ifconfig lo0 inet6 $aaaa alias
+               ;;
+           *-cygwin*)
+               echo "Please run ifconfig.bat as Administrator."
+               exit 1
+               ;;
+           *)
+               echo "Don't know how to set up interface.  Giving up."
+               exit 1
+               ;;
+       esac
+}
+
+down() {
+       case "$sys" in
+           *-pc-solaris2.5.1)
+               [ "$a" ] && ifconfig lo0:$int 0.0.0.0 down
+               ;;
+           *-sun-solaris2.[6-7])
+               [ "$a" ] && ifconfig lo0:$int $a down
+               ;;
+           *-*-solaris2.[8-9]|*-*-solaris2.10)
+               [ "$a" ] && {
+                       ifconfig lo0:$int $a down
+                       ifconfig lo0:$int $a unplumb
+               }
+               [ "$aaaa" ] && {
+                       ifconfig lo0:$int inet6 down
+                       ifconfig lo0:$int inet6 unplumb
+               }
+               ;;
+           *-*-solaris2.1[1-9])
+               [ "$a" ] && {
+                       ipadm delete-addr lo0/bind9v4$int ||
+                       echo failed lo0/bind9v4$int
+               }
+               [ "$aaaa" ] && {
+                       ipadm delete-addr lo0/bind9v6$int ||
+                       echo failed lo0/bind9v6$int
+               }
+               ;;
+
+           *-*-linux*)
+               if [ "$use_ip" ]; then
+                       [ "$a" ] && ip address del $a/24 dev lo:$int
+                       [ "$aaaa" ] && ip address del $aaaa/64 dev lo
+               else
+                       [ "$a" ] && ifconfig lo:$int $a down
+                       [ "$aaaa" ] && ifconfig lo inet6 del $aaaa/64
+               fi
+               ;;
+           *-unknown-freebsd*)
+               [ "$a" ] && ifconfig lo0 $a delete
+               [ "$aaaa" ] && ifconfig lo0 inet6 $aaaa delete
+               ;;
+           *-unknown-netbsd*)
+               [ "$a" ] && ifconfig lo0 $a delete
+               [ "$aaaa" ] && ifconfig lo0 inet6 $aaaa delete
+               ;;
+           *-unknown-openbsd*)
+               [ "$a" ] && ifconfig lo0 $a delete
+               [ "$aaaa" ] && ifconfig lo0 inet6 $aaaa delete
+               ;;
+           *-*-bsdi[3-5].*)
+               [ "$a" ] && ifconfig lo0 remove $a
+               ;;
+           *-dec-osf[4-5].*)
+               [ "$a" ] && ifconfig lo0 -alias $a
+               ;;
+           *-sgi-irix6.*)
+               [ "$a" ] && ifconfig lo0 -alias $a
+               ;;
+           *-*-sysv5uw7*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
+               [ "$a" ] && ifconfig lo0 -alias $a
+               ;;
+           *-ibm-aix4.*|*-ibm-aix5.*)
+               [ "$a" ] && ifconfig lo0 delete $a
+               [ "$aaaa" ] && ifconfig lo0 delete inet6 $aaaa/64
+               ;;
+           hpux)
+               [ "$a" ] && ifconfig lo0:$int 0.0.0.0
+               [ "$aaaa" ] && ifconfig lo0:$int inet6 ::
+               ;;
+           *-sco3.2v*)
+               [ "$a" ] && ifconfig lo0 -alias $a
+               ;;
+           *darwin*)
+               [ "$a" ] && ifconfig lo0 -alias $a
+               [ "$aaaa" ] && ifconfig lo0 inet6 $aaaa delete
+               ;;
+           *-cygwin*)
+               echo "Please run ifconfig.bat as Administrator."
+               exit 1
+               ;;
+           *)
+               echo "Don't know how to destroy interface.  Giving up."
+               exit 1
+               ;;
+       esac
+}
+
+sequence() (
+       awk -v s=$1 -v e=$2 '
+               BEGIN {
+                       for (i = s ; i <= e; i++) { print i; }
+                       exit;
+               }'
+)
 
-    start|up)
-       for i in 0 1 2
+#
+# 'max', 'i' and 'ns' are used to compute the interface identifier for
+# systems that need it and must be unique for each interface (e.g. lo:$int).
+#
+#      int=$((i * max + ns))
+#
+# 'max' is the number of nameservers configured in the inner loop.
+# 'i' is the outer loop counter.
+# 'ns' in the namserver being configured.
+# 'int' interface identifier.
+#
+max=11
+case $1 in
+    start|up|stop|down)
+       for i in $(sequence 0 2)
        do
                case $i in
                  0) ipv6="ff" ;;
@@ -57,198 +251,21 @@ case "$1" in
                  2) ipv6="00" ;;
                  *) ipv6="" ;;
                esac
-               for ns in 1 2 3 4 5 6 7 8 9 10 11
+               for ns in $(sequence 1 $max)
                do
                        [ $i -gt 0 -a $ns -gt 2 ] && break
-                       int=`expr $i \* 10 + $ns`
-                       case "$sys" in
-                           *-pc-solaris2.5.1)
-                               ifconfig lo0:$int 10.53.$i.$ns \
-                                       netmask 0xffffffff up
-                               ;;
-                           *-sun-solaris2.[6-7])
-                               ifconfig lo0:$int 10.53.$i.$ns \
-                                       netmask 0xffffffff up
-                               ;;
-                           *-*-solaris2.[8-9]|*-*-solaris2.1[0-9])
-                               /sbin/ifconfig lo0:$int plumb
-                               /sbin/ifconfig lo0:$int 10.53.$i.$ns up
-                               /sbin/ifconfig lo0:$int mtu 1500
-                               /sbin/ifconfig lo0:$int inet6 plumb
-                               [ "$ipv6" ] && /sbin/ifconfig lo0:$int \
-                                       inet6 fd92:7065:b8e:${ipv6}ff::$ns up
-                               ;;
-                           *-*-linux*)
-                                if [ $use_ip ]; then
-                                        ip address add 10.53.$i.$ns/24 \
-                                            dev lo:$int
-                                        ip link set dev lo:$int mtu 1500
-                                        [ "$ipv6" ] && ip address add \
-                                            fd92:7065:b8e:${ipv6}ff::$ns/64 \
-                                            dev lo
-                                else
-                                        ifconfig lo:$int 10.53.$i.$ns up \
-                                                netmask 255.255.255.0 \
-                                                mtu 1500
-                                        [ "$ipv6" ] && ifconfig lo inet6 add \
-                                                fd92:7065:b8e:${ipv6}ff::$ns/64
-                                fi
-                               ;;
-                           *-unknown-freebsd*)
-                               ifconfig lo0 10.53.$i.$ns alias \
-                                       netmask 0xffffffff \
-                                       mtu 1500
-                               [ "$ipv6" ] && ifconfig lo0 inet6 \
-                                       fd92:7065:b8e:${ipv6}ff::$ns alias
-                               ;;
-                           *-unknown-dragonfly*|*-unknown-netbsd*|*-unknown-openbsd*)
-                               ifconfig lo0 10.53.$i.$ns alias \
-                                       netmask 255.255.255.0 \
-                                       mtu 1500
-                               [ "$ipv6" ] && ifconfig lo0 inet6 \
-                                       fd92:7065:b8e:${ipv6}ff::$ns alias
-                               ;;
-                           *-*-bsdi[3-5].*)
-                               ifconfig lo0 add 10.53.$i.$ns \
-                                       netmask 255.255.255.0
-                               ;;
-                           *-dec-osf[4-5].*)
-                               ifconfig lo0 alias 10.53.$i.$ns
-                               ;;
-                           *-sgi-irix6.*)
-                               ifconfig lo0 alias 10.53.$i.$ns
-                               ;;
-                           *-*-sysv5uw7*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
-                               ifconfig lo0 10.53.$i.$ns alias \
-                                       netmask 0xffffffff
-                               ;;
-                           *-ibm-aix4.*|*-ibm-aix5.*)
-                               ifconfig lo0 alias 10.53.$i.$ns
-                               [ "$ipv6" ] && ifconfig lo0 inet6 alias -dad \
-                                       fd92:7065:b8e:${ipv6}ff::$ns/64
-                               ;;
-                           hpux)
-                               ifconfig lo0:$int 10.53.$i.$ns \
-                                       netmask 255.255.255.0 up
-                               [ "$ipv6" ] && ifconfig lo0:$int inet6 \
-                                       fd92:7065:b8e:${ipv6}ff::$ns up
-                               ;;
-                           *-sco3.2v*)
-                               ifconfig lo0 alias 10.53.$i.$ns
-                               ;;
-                           *-darwin*)
-                               ifconfig lo0 alias 10.53.$i.$ns
-                               [ "$ipv6" ] && ifconfig lo0 inet6 \
-                                       fd92:7065:b8e:${ipv6}ff::$ns alias
-                               ;;
-                           *-cygwin*)
-                               echo "Please run ifconfig.bat as Administrator."
-                               exit 1
-                               ;;
-                           *)
-                               echo "Don't know how to set up interface.  Giving up."
-                               exit 1
+                       int=$((i * max + ns))
+                       a=10.53.$i.$ns
+                       aaaa=fd92:7065:b8e:${ipv6}ff::$ns
+                       case "$1" in
+                           start|up) up;;
+                           stop|down) down;;
                        esac
                done
        done
        ;;
-
-    stop|down)
-       for i in 0 1 2
-       do
-               case $i in
-                 0) ipv6="ff" ;;
-                 1) ipv6="99" ;;
-                 2) ipv6="00" ;;
-                 *) ipv6="" ;;
-               esac
-               for ns in 11 10 9 8 7 6 5 4 3 2 1
-               do
-                       [ $i -gt 0 -a $ns -gt 2 ] && continue
-                       int=`expr $i \* 10 + $ns - 1`
-                       case "$sys" in
-                           *-pc-solaris2.5.1)
-                               ifconfig lo0:$int 0.0.0.0 down
-                               ;;
-                           *-sun-solaris2.[6-7])
-                               ifconfig lo0:$int 10.53.$i.$ns down
-                               ;;
-                           *-*-solaris2.[8-9]|*-*-solaris2.1[0-9])
-                               ifconfig lo0:$int 10.53.$i.$ns down
-                               ifconfig lo0:$int 10.53.$i.$ns unplumb
-                               ifconfig lo0:$int inet6 down
-                               ifconfig lo0:$int inet6 unplumb
-                               ;;
-                           *-*-linux*)
-                                if [ $use_ip ]; then
-                                        ip address del 10.53.$i.$ns/24 \
-                                            dev lo:$int
-                                        [ "$ipv6" ] && ip address del \
-                                            fd92:7065:b8e:${ipv6}ff::$ns/64 \
-                                            dev lo
-                                else
-                                        ifconfig lo:$int 10.53.$i.$ns down
-                                        [ "$ipv6" ] && ifconfig lo inet6 \
-                                            del fd92:7065:b8e:${ipv6}ff::$ns/64
-                                fi
-                               ;;
-                           *-unknown-freebsd*)
-                               ifconfig lo0 10.53.$i.$ns delete
-                               [ "$ipv6" ] && ifconfig lo0 inet6 \
-                                       fd92:7065:b8e:${ipv6}ff::$ns delete
-                               ;;
-                           *-unknown-netbsd*)
-                               ifconfig lo0 10.53.$i.$ns delete
-                               [ "$ipv6" ] && ifconfig lo0 inet6 \
-                                       fd92:7065:b8e:${ipv6}ff::$ns delete
-                               ;;
-                           *-unknown-openbsd*)
-                               ifconfig lo0 10.53.$i.$ns delete
-                               [ "$ipv6" ] && ifconfig lo0 inet6 \
-                                       fd92:7065:b8e:${ipv6}ff::$ns delete
-                               ;;
-                           *-*-bsdi[3-5].*)
-                               ifconfig lo0 remove 10.53.$i.$ns
-                               ;;
-                           *-dec-osf[4-5].*)
-                               ifconfig lo0 -alias 10.53.$i.$ns
-                               ;;
-                           *-sgi-irix6.*)
-                               ifconfig lo0 -alias 10.53.$i.$ns
-                               ;;
-                           *-*-sysv5uw7*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*)
-                               ifconfig lo0 -alias 10.53.$i.$ns
-                               ;;
-                           *-ibm-aix4.*|*-ibm-aix5.*)
-                               ifconfig lo0 delete 10.53.$i.$ns
-                               [ "$ipv6" ] && ifconfig lo0 delete inet6 \
-                                       fd92:7065:b8e:${ipv6}ff::$ns/64
-                               ;;
-                           hpux)
-                               ifconfig lo0:$int 0.0.0.0
-                               ifconfig lo0:$int inet6 ::
-                               ;;
-                           *-sco3.2v*)
-                               ifconfig lo0 -alias 10.53.$i.$ns
-                               ;;
-                           *darwin*)
-                               ifconfig lo0 -alias 10.53.$i.$ns
-                               [ "$ipv6" ] && ifconfig lo0 inet6 \
-                                       fd92:7065:b8e:${ipv6}ff::$ns delete
-                               ;;
-                           *-cygwin*)
-                               echo "Please run ifconfig.bat as Administrator."
-                               exit 1
-                               ;;
-                           *)
-                               echo "Don't know how to destroy interface.  Giving up."
-                               exit 1
-                       esac
-               done
-       done
+    *)
+       echo "Usage: $0 { up | down }"
+       exit 1
        ;;
-
-       *)
-               echo "Usage: $0 { up | down }"
-               exit 1
 esac