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.