On Wed, Aug 18, 2021 at 08:35:16AM -0600, Theo de Raadt wrote: > If you change the evaluation order in netstart, something similar > may be needed in the install script emulation of netstart.
If I understand install.sub correctly, this is not necessary. /etc/netstart creates all pseudo interfaces up front in vifscreate(). For each interface it creates it again in ifstart(). install.sub creates the interface in ifstart(). My change skips lo1, ... in up front creation. This up front creation does not exist in the installer. bluhm > Alexander Bluhm <alexander.bl...@gmx.net> wrote: > > > Hi, > > > > I want to create an enc1 interface for routing domain 1 and set > > additional addresses on lo1. So my net config looks like this. > > > > ==> /etc/hostname.enc1 <== > > rdomain 1 > > > > ==> /etc/hostname.lo1 <== > > rdomain 1 > > inet alias 10.188.10.74 255.255.255.255 > > ... > > > > /etc/netstart creates enc1 in routing domain 0, but does not place > > it into rdomain 1 due to this error: > > starting network > > ifconfig: SIOCSIFRDOMAIN: Invalid argument > > > > With some additional debug output netstart does this: > > { ifconfig enc1 || ifconfig enc1 create; } > > { ifconfig lo0 || ifconfig lo0 create; } > > { ifconfig lo1 || ifconfig lo1 create; } > > { ifconfig enc1 || ifconfig enc1 create; } > > ifconfig enc1 rdomain 1 > > ... > > { ifconfig lo1 || ifconfig lo1 create; } > > ifconfig lo1 rdomain 1 > > ifconfig lo1 inet alias 10.188.10.74 netmask 255.255.255.255 > > > > ifconfig enc1 rdomain 1 fails as lo1 exists, but is still in routing > > domain 0. > > > > To fix this, I think lo1, lo2, ... should not be created upfront. > > Also more debug output for /etc/netstart -n is necessary to understand > > what is going on. > > > > ok? > > > > bluhm > > > > Index: netstart > > =================================================================== > > RCS file: /data/mirror/openbsd/cvs/src/etc/netstart,v > > retrieving revision 1.214 > > diff -u -p -r1.214 netstart > > --- netstart 6 Aug 2021 07:06:35 -0000 1.214 > > +++ netstart 18 Aug 2021 14:13:01 -0000 > > @@ -86,7 +86,11 @@ parse_hn_line() { > > ifcreate() { > > local _if=$1 > > > > - { ifconfig $_if || ifconfig $_if create; } >/dev/null 2>&1 > > + if $PRINT_ONLY; then > > + print -r -- "{ ifconfig $_if || ifconfig $_if create; }" > > + else > > + { ifconfig $_if || ifconfig $_if create; } >/dev/null 2>&1 > > + fi > > } > > > > # Create interfaces for network pseudo-devices referred to by hostname.if > > files. > > @@ -99,6 +103,9 @@ vifscreate() { > > [[ -f $_hn ]] || continue > > _if=${_hn#/etc/hostname.} > > > > + # loopback for routing domain is created by kernel > > + [[ -n "${_if##lo[1-9]*}" ]] || continue > > + > > if ! ifcreate $_if; then > > print -u2 "${0##*/}: create for '$_if' failed." > > fi > > @@ -130,9 +137,7 @@ ifstart() { > > fi > > > > # Check for ifconfig'able interface, except if -n option is specified. > > - if ! $PRINT_ONLY; then > > - ifcreate $_if || return > > - fi > > + ifcreate $_if || return > > > > # Parse the hostname.if(5) file and fill _cmds array with interface > > # configuration commands. > > @@ -232,9 +237,6 @@ while getopts ":n" opt; do > > esac > > done > > shift $((OPTIND-1)) > > - > > -# Option -n is only supported if interface names are specified as > > parameters. > > -$PRINT_ONLY && (($# == 0)) && usage > > > > # Load key material for the generation of IPv6 Semantically Opaque > > Interface > > # Identifiers (SOII) used for link local and SLAAC addresses. > >