On Wed, Aug 18, 2021 at 04:28:13PM +0200, Alexander Bluhm wrote:
> 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.
Debugging code has been added seperately. The following condition
allows me to create enc1 in routing domain 1.
ok?
bluhm
Index: etc/netstart
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/etc/netstart,v
retrieving revision 1.215
diff -u -p -r1.215 netstart
--- etc/netstart 30 Aug 2021 16:58:52 -0000 1.215
+++ etc/netstart 1 Sep 2021 15:52:56 -0000
@@ -103,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