This would be the diff to swap priority of name/lladdr as some folks
wanted to see. I still don't recommend having both as you can still
have surprising outcomes with more complex configurations.
The install.sub includes an "if_name_to_lladdr" function from the
diff to support creating a hostname.lladdr during install. If we don't
decide to support that, I'd probably in-line that as is done in
netstart.
I did find that my iwm doesn't like being configured by lladdr at this
point of the upgrade because it doesn't have firmware loaded when it's
looking to see if it's a valid hostname.lladdr, but the iwm's lladdr is
all zeros still.
Index: etc/netstart
===================================================================
RCS file: /cvs/src/etc/netstart,v
retrieving revision 1.230
diff -u -p -r1.230 netstart
--- etc/netstart 5 Dec 2022 20:12:00 -0000 1.230
+++ etc/netstart 11 Dec 2022 20:44:34 -0000
@@ -144,11 +144,14 @@ ifstart() {
[[ -z $_line ]] && return
_if=$_line
_line=
-
- if [[ -e /etc/hostname.$_if ]]; then
- print -u2 "${0##*/}: $_hn: /etc/hostname.$_if overrides"
+ else
+ _line=$(ifconfig $_if | sed -n
's/^[[:space:]]*lladdr[[:space:]]//p')
+ if [[ -n $_line && -n $(ifconfig -M $_line) \
+ && -e /etc/hostname.$_line ]]; then
+ print -u2 "${0##*/}: $_hn: /etc/hostname.$_line:
overrides"
return
fi
+ _line=
fi
# Interface names must be alphanumeric only. We check to avoid
Index: distrib/miniroot/install.sub
===================================================================
RCS file: /cvs/src/distrib/miniroot/install.sub,v
retrieving revision 1.1215
diff -u -p -r1.1215 install.sub
--- distrib/miniroot/install.sub 5 Dec 2022 20:12:00 -0000 1.1215
+++ distrib/miniroot/install.sub 11 Dec 2022 20:44:34 -0000
@@ -356,6 +356,15 @@ get_ifs() {
done
}
+# Maps an interface name to lladdr,
+# filtered by whether it's valid for use by ifconfig -M
+if_name_to_lladdr() {
+ local _lladdr
+ _lladdr=$(ifconfig $1 2>/dev/null |
+ sed -n 's/^[[:space:]]*lladdr[[:space:]]//p')
+ [[ -n $_lladdr && -n $(ifconfig -M $_lladdr) ]] && echo $_lladdr
+}
+
# Return the device name of the disk device $1, which may be a disklabel UID.
get_dkdev_name() {
local _dev=${1#/dev/} _d
@@ -2434,7 +2443,10 @@ ifstart() {
if [[ $_if == ??:??:??:??:??:?? ]]; then
_if=$(ifconfig -M $_if)
[[ -z $_if ]] && return # invalid interface
- [[ -e /mnt/etc/hostname.$_if ]] && return # duplicate config
+ else
+ _line=$(if_name_to_lladdr $_if)
+ [[ -n $_line && -e /mnt/etc/hostname.$_line ]] && continue
+ _line=
fi
# Create interface if it does not yet exist.
Index: share/man/man5/hostname.if.5
===================================================================
RCS file: /cvs/src/share/man/man5/hostname.if.5,v
retrieving revision 1.80
diff -u -p -r1.80 hostname.if.5
--- share/man/man5/hostname.if.5 5 Dec 2022 20:12:00 -0000 1.80
+++ share/man/man5/hostname.if.5 11 Dec 2022 20:44:34 -0000
@@ -46,7 +46,7 @@ The interface can be referenced by name
or
.Pa hostname.bridge0 .
One file should exist for each interface that is to be configured,
-with priority given to configuration by interface name over lladdr.
+with priority given to configuration by interface lladdr over name.
A configuration file is not needed for lo0.
.Pp
The configuration information is expressed in a line-by-line packed format