On Mon, Nov 15, 2021 at 02:31:42PM +0000, Klemens Nanni wrote:
> On Mon, Nov 15, 2021 at 01:37:49PM +0000, Stuart Henderson wrote:
> > On 2021/11/15 12:27, Klemens Nanni wrote:
> > > On Sun, Nov 14, 2021 at 07:04:42PM -0700, Theo de Raadt wrote:
> > > > I think physical interfaces should come up when something is configured
> > > > on them, but virtual interfaces shouldn't -- mostly because the order of
> > > > configuration is often muddled.
> > > 
> > > So "inet6 2001:db8::1" in hostname.em0 will do the trick but
> > > hostname.vport0 would need another "up" for the same behaviour:  that's
> > > rather confusing me as a user.
> > 
> > hostname.* files are orthogonal to this; netstart can process all the lines,
> > then if it has seen a line doing address configuration and has not seen an
> > explicit "down", it can bring the interface up automatically at the end.
> > (if this changed, it would be a nightmare for users to do anything else).
> 
> Yes, netstart can and should deal with this correctly, just like you
> describe.
> 
> > Users would need to make sure they have a netstart which does that if
> > updating a kernel, but that's just a case of matching kernel+userland and is
> > nothing new for OpenBSD.
> > 
> > The different behaviour would be apparent with separate runs of ifconfig.
> > some scripts may need adapting and users might need to run "ifconfig XX up"
> > themselves but I don't think that would be a problem.
> 
> Agreed.
> 
> Having the implicit-up logic entirely contained in netstart would make
> lifer much easier, both for network stack hackers and users, imho.

this was my attempt at just that.

the installer has its own netstart though, right?

Index: etc/netstart
===================================================================
RCS file: /cvs/src/etc/netstart,v
retrieving revision 1.216
diff -u -p -r1.216 netstart
--- etc/netstart        2 Sep 2021 19:38:20 -0000       1.216
+++ etc/netstart        15 Nov 2021 23:20:00 -0000
@@ -71,6 +71,9 @@ parse_hn_line() {
        dhcp)   _cmds[${#_cmds[*]}]="ifconfig $_if inet autoconf"
                V4_AUTOCONF=true
                ;;
+       down)   _c[0]=
+               _ifup=down
+               ;;
        '!'*)   _cmd=$(print -- "${_c[@]}" | sed 's/\$if/'$_if'/g')
                _cmds[${#_cmds[*]}]="${_cmd#!}"
                ;;
@@ -118,6 +121,7 @@ vifscreate() {
 ifstart() {
        local _if=$1 _hn=/etc/hostname.$1 _cmds _i=0 _line _stat
        set -A _cmds
+       _ifup=up
 
        # Interface names must be alphanumeric only.  We check to avoid
        # configuring backup or temp files, and to catch the "*" case.
@@ -145,6 +149,8 @@ ifstart() {
        while IFS= read -- _line; do
                parse_hn_line $_line
        done <$_hn
+
+       _cmds[${#_cmds[*]}]="ifconfig $_if $_ifup"
 
        # Apply the interface configuration commands stored in _cmds array.
        while ((_i < ${#_cmds[*]})); do
Index: share/man/man5/hostname.if.5
===================================================================
RCS file: /cvs/src/share/man/man5/hostname.if.5,v
retrieving revision 1.77
diff -u -p -r1.77 hostname.if.5
--- share/man/man5/hostname.if.5        17 Jul 2021 15:28:31 -0000      1.77
+++ share/man/man5/hostname.if.5        15 Nov 2021 23:20:01 -0000
@@ -57,6 +57,9 @@ the administrator should not expect magi
 and the
 per-driver manual pages to see what arguments are permitted.
 .Pp
+Interfaces are implicitly configured to be brought up and running.
+This behaviour can be disabled by adding a line containing down to the file.
+.Pp
 Arguments containing either whitespace or single quote
 characters must be double quoted.
 For example:

Reply via email to