From abfb5b11739d64bf798516f305390cb369a69241 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Thu, 9 Jun 2022 18:13:35 +1000 Subject: [PATCH 1/2] update ifconfig.sh * 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 --- bin/tests/system/ifconfig.sh.in | 397 +++++++++++++++++--------------- 1 file changed, 207 insertions(+), 190 deletions(-) diff --git a/bin/tests/system/ifconfig.sh.in b/bin/tests/system/ifconfig.sh.in index bfae42a385..76233d6184 100755 --- a/bin/tests/system/ifconfig.sh.in +++ b/bin/tests/system/ifconfig.sh.in @@ -43,10 +43,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 +} - start|up) - for i in 0 1 2 +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; + }' +) + +# +# '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" ;; @@ -54,198 +248,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 From e0708c895030b67b64735398ae2d203f39c08274 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 6 Jul 2022 12:55:41 +1000 Subject: [PATCH 2/2] Add CHANGES note for [GL #3061] --- CHANGES | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES b/CHANGES index e3912d5958..49a222655a 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +5917. [bug] Update ifconfig.sh script as is miscomputed interface + identifiers when destroying interfaces. [GL #3061] + 5916. [bug] When resolving a name, don't give up immediately if an authoritative server returns FORMERR; try the other servers first. [GL #3152]