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

Reply via email to