Index | Thread | Search

From:
Klemens Nanni <kn@openbsd.org>
Subject:
installer: default to IPv6 autoconf if IPv4 is not configured
To:
OpenBSD tech <tech@openbsd.org>
Date:
Fri, 14 Nov 2025 16:14:06 +0000

Download raw body.

Thread
When you opt out of IPv4, the only sane default for IPv6 becomes 'autoconf'
as we cannot magically guess an address and 'none' means no network at all,
which is equivalent to not configuring the interface in the first place:

	 Available network interfaces are: vio0 vlan0.
	 Network interface to configure? (name, lladdr, '?', or 'done') [vio0] 
	 IPv4 address for vio0? (or 'autoconf' or 'none') [autoconf] none
	-IPv6 address for vio0? (or 'autoconf' or 'none') [none] 
	+IPv6 address for vio0? (or 'autoconf' or 'none') [autoconf] 

The diff is trivial and the result is typing convenience for installs
(upgrades don't run these questions) in IPv6-mostly or -only networks.

Feedback? OK?

Index: install.sub
===================================================================
RCS file: /cvs/src/distrib/miniroot/install.sub,v
diff -u -p -U9 -r1.1280 install.sub
--- install.sub	1 Nov 2025 12:54:17 -0000	1.1280
+++ install.sub	14 Nov 2025 15:34:26 -0000
@@ -1101,36 +1101,38 @@ v4_config() {
 	while :; do
 		ask_until "IPv4 address for $_if? (or 'autoconf' or 'none')" \
 			  "${_addr:-autoconf}"
 		case $resp in
 		none)	return
 			;;
 		a|autoconf|dhcp)
 			dhcp_request $_if
 			echo "inet autoconf" >>$_hn
+			USES_IPV4=true
 			return
 			;;
 		esac
 
 		_newaddr=$resp
 
 		# Ask for the netmask if the user did not use CIDR notation.
 		if [[ $_newaddr == */* ]]; then
 			ifconfig $_if $_newaddr up
 		else
 			ask_until "Netmask for $_if?" "${_mask:-255.255.255.0}"
 			ifconfig $_if $_newaddr netmask $resp
 		fi
 
 		set -- $(v4_info $_if)
 		if [[ -n $2 ]]; then
 			echo "inet $2 $3" >>$_hn
 			add_hostent "$2" "$_name"
+			USES_IPV4=true
 			return
 		fi
 
 		$AI && exit 1
 	done
 }
 
 # Obtain and output the inet6 information related to interface $1.
 # <flags>\n<addr> <prefixlen> <rest of inet6 line>[\n<more inet6 lines>]
@@ -1215,19 +1217,19 @@ v6_defroute() {
 # unless he chooses 'autoconf'.
 v6_config() {
 	local _if=$1 _name=$2 _hn=$3 _addr _newaddr _prefixlen
 
 	ifconfig lo0 inet6 >/dev/null 2>&1 || return
 
 	# Preset the default answers by preserving possibly existing
 	# configuration from previous runs.
 	set -- $(v6_info $_if)
-	if [[ $1 == *AUTOCONF6* ]]; then
+	if [[ $1 == *AUTOCONF6* ]] || ! $USES_IPV4; then
 		_addr=autoconf
 	elif [[ -n $2 ]]; then
 		_addr=$2
 		_prefixlen=$3
 	fi
 
 	# Nuke existing inet6 configuration.
 	ifconfig $_if -inet6
 
@@ -3657,18 +3659,19 @@ HTTP_LIST=/tmp/i/httplist
 HTTP_SEC=/tmp/i/httpsec
 INSTALL_METHOD=
 NIFS=0
 export PS1="$MODE# "
 PUB_KEY=/etc/signify/openbsd-${VERSION}-base.pub
 ROOTDEV=
 ROOTDISK=
 SETDIR="$VNAME/$ARCH"
 UPGRADE_BSDRD=false
+USES_IPV4=false
 V4_AUTOCONF=false
 V6_AUTOCONF=false
 WLANLIST=/tmp/i/wlanlist
 
 # Are we in a real release, or a snapshot?  If this is a snapshot
 # install media, default us to a snapshot directory.
 HTTP_SETDIR=$SETDIR
 set -- $(scan_dmesg "/^OpenBSD $VNAME\([^ ]*\).*$/s//\1/p")
 [[ $1 == -!(stable) ]] && HTTP_SETDIR=snapshots/$ARCH